#include "util.h"
#include "i2c_driver.h"
#include "i2c_led_driver.h"

extern int lgpl_printf(const char *format, ...);
extern int diag_i2c_led_lp5018_detect_driver(int master_id, unsigned char slave_addr);
extern int diag_i2c_led_lp5018_init(int master_id, unsigned char slave_addr);
extern int diag_i2c_led_lp5018_set_frame(int master_id, unsigned char slave_addr,
			   unsigned char *frame, size_t size);

extern int diag_i2c_led_aw210xx_detect_driver(int master_id, unsigned char slave_addr);
extern int diag_i2c_led_aw210xx_init(int master_id, unsigned char slave_addr);
extern int diag_i2c_led_aw210xx_set_frame(int master_id, unsigned char slave_addr,
			   unsigned char *frame, size_t size);

int diag_i2c_led_detect_driver(int master_id, unsigned char slave_addr, int led_driver_type)
{
	int ret = -1;

	if (led_driver_type == LED_DRIVER_TYPE_LP5018) {
		ret = diag_i2c_led_lp5018_detect_driver(master_id, slave_addr);
	} else if (led_driver_type == LED_DRIVER_TYPE_AW210XX) {
		ret = diag_i2c_led_aw210xx_detect_driver(master_id, slave_addr);
	}

	return ret;
}

int diag_i2c_led_init(int master_id, unsigned char slave_addr, int led_driver_type) {
	int ret = -1;

	if (led_driver_type == LED_DRIVER_TYPE_LP5018)
		ret = diag_i2c_led_lp5018_init(master_id, slave_addr);
	else if (led_driver_type == LED_DRIVER_TYPE_AW210XX)
		ret = diag_i2c_led_aw210xx_init(master_id, slave_addr);

	return ret;
}

int diag_i2c_led_set_frame(int master_id, unsigned char slave_addr, int led_driver_type,
                           unsigned char *frame, size_t size) {
	int ret = -1;

	if (led_driver_type == LED_DRIVER_TYPE_LP5018)
		ret = diag_i2c_led_lp5018_set_frame(master_id, slave_addr, frame, size);
	else if (led_driver_type == LED_DRIVER_TYPE_AW210XX)
		ret = diag_i2c_led_aw210xx_set_frame(master_id, slave_addr, frame, size);

	return ret;
}
