/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
 * include/amlogic/aml_bl_extern.h
 *
 * Copyright (C) 2020 Amlogic, Inc. All rights reserved.
 *
 */

#ifndef _INC_AML_BL_EXTERN_H_
#define _INC_AML_BL_EXTERN_H_

enum bl_extern_type_e {
	BL_EXTERN_I2C = 0,
	BL_EXTERN_SPI,
	BL_EXTERN_MIPI,
	BL_EXTERN_MAX,
};

#define BL_EXTERN_I2C_BUS_A          0
#define BL_EXTERN_I2C_BUS_B          1
#define BL_EXTERN_I2C_BUS_C          2
#define BL_EXTERN_I2C_BUS_D          3
#define BL_EXTERN_I2C_BUS_AO         4

#define BL_EXTERN_I2C_BUS_0          BL_EXTERN_I2C_BUS_A
#define BL_EXTERN_I2C_BUS_1          BL_EXTERN_I2C_BUS_B
#define BL_EXTERN_I2C_BUS_2          BL_EXTERN_I2C_BUS_C
#define BL_EXTERN_I2C_BUS_3          BL_EXTERN_I2C_BUS_D
#define BL_EXTERN_I2C_BUS_4          BL_EXTERN_I2C_BUS_AO
#define BL_EXTERN_I2C_BUS_MAX        5

#define BL_EXTERN_INIT_ON_MAX       200
#define BL_EXTERN_INIT_OFF_MAX      50

#define BL_EXTERN_GPIO_NUM_MAX      6
#define BL_EXTERN_INDEX_INVALID     0xff
#define BL_EXTERN_NAME_LEN_MAX      30
struct bl_extern_config_s {
	unsigned char index;
	char name[BL_EXTERN_NAME_LEN_MAX];
	enum bl_extern_type_e type;
	unsigned char i2c_addr;
	unsigned char i2c_bus;
	unsigned int dim_min;
	unsigned int dim_max;

	unsigned char init_loaded;
	unsigned char cmd_size;
	unsigned char *init_on;
	unsigned char *init_off;
	unsigned int init_on_cnt;
	unsigned int init_off_cnt;
};

/* global API */
#define BL_EXT_DRIVER_MAX    10
struct aml_bl_extern_driver_s {
	int (*power_on)(void);
	int (*power_off)(void);
	int (*set_level)(unsigned int level);
	void (*config_print)(void);
	int (*device_power_on)(void);
	int (*device_power_off)(void);
	int (*device_bri_update)(unsigned int level);
	struct bl_extern_config_s *config;
};

extern struct aml_bl_extern_driver_s *aml_bl_extern_get_driver(void);
extern int aml_bl_extern_device_load(char *dtaddr, int index);
extern struct bl_extern_config_s bl_extern_config_dtf;
#ifdef CONFIG_AML_LCD_TABLET
extern int dsi_write_cmd(unsigned char *payload);
#endif

#endif

