/*
 * include/amlogic/aml_lcd.h
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the named License,
 * or any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 */

#ifndef INC_AML_LCD_H
#define INC_AML_LCD_H

#include <common.h>
#include <linux/list.h>
#include <amlogic/aml_lcd_vout.h>
#ifdef CONFIG_AML_LCD_EXTERN
#include <amlogic/aml_lcd_extern.h>
#endif
#ifdef CONFIG_AML_BL_EXTERN
#include <amlogic/aml_bl_extern.h>
#endif

#ifdef CONFIG_SYS_I2C_AML
#define LCD_EXT_I2C_BUS_0     1  //A
#define LCD_EXT_I2C_BUS_1     2  //B
#define LCD_EXT_I2C_BUS_2     3  //C
#define LCD_EXT_I2C_BUS_3     4  //D
#define LCD_EXT_I2C_BUS_4     0  //AO
#define LCD_EXT_I2C_BUS_MAX   0xff

#else
#define LCD_EXT_I2C_BUS_0     0  //A
#define LCD_EXT_I2C_BUS_1     1  //B
#define LCD_EXT_I2C_BUS_2     2  //C
#define LCD_EXT_I2C_BUS_3     3  //D
#define LCD_EXT_I2C_BUS_4     4  //AO
#define LCD_EXT_I2C_BUS_MAX   0xff

#endif

#define LCD_EXT_I2C_BUS_INVALID       0xff
#define LCD_EXT_I2C_ADDR_INVALID      0xff
#define LCD_EXT_GPIO_INVALID          0xff

#define LCD_EXT_SPI_CLK_FREQ_DFT      10 /* unit: KHz */


#define LCD_EXT_CMD_TYPE_CMD_DELAY    0x00
#define LCD_EXT_CMD_TYPE_CMD2_DELAY   0x01  /* for i2c device 2nd addr */
#define LCD_EXT_CMD_TYPE_NONE         0x10
#define LCD_EXT_CMD_TYPE_CMD          0xc0
#define LCD_EXT_CMD_TYPE_CMD2         0xc1  /* for i2c device 2nd addr */
#define LCD_EXT_CMD_TYPE_GPIO         0xf0
#define LCD_EXT_CMD_TYPE_CHECK        0xfc
#define LCD_EXT_CMD_TYPE_DELAY        0xfd
#define LCD_EXT_CMD_TYPE_END          0xff

#define LCD_EXT_CMD_SIZE_DYNAMIC      0xff
#define LCD_EXT_DYNAMIC_SIZE_INDEX    1


#define Rsv_val 0xffffffff
struct ext_lcd_config_s {
	const char panel_type[15];
	unsigned int lcd_type; // LCD_TTL /LCD_LVDS/LCD_VBYONE
	unsigned char lcd_bits;

	unsigned short h_active;
	unsigned short v_active;
	unsigned short h_period;
	unsigned short v_period;
	unsigned short hsync_width;
	unsigned short hsync_bp;
	unsigned short hsync_pol;
	unsigned short vsync_width;
	unsigned short vsync_bp;
	unsigned short vsync_pol;

	unsigned int customer_val_0; //fr_adjust_type
	unsigned int customer_val_1; //ss_level
	unsigned int customer_val_2; //clk_auto_generate
	unsigned int customer_val_3; //pixel clock(unit in Hz)
	unsigned int customer_val_4;
	unsigned int customer_val_5;
	unsigned int customer_val_6;
	unsigned int customer_val_7;
	unsigned int customer_val_8;
	unsigned int customer_val_9;

	unsigned int lcd_spc_val0;
	unsigned int lcd_spc_val1;
	unsigned int lcd_spc_val2;
	unsigned int lcd_spc_val3;
	unsigned int lcd_spc_val4;
	unsigned int lcd_spc_val5;
	unsigned int lcd_spc_val6;
	unsigned int lcd_spc_val7;
	unsigned int lcd_spc_val8;
	unsigned int lcd_spc_val9;

	struct lcd_power_step_s *power_on_step;
	struct lcd_power_step_s *power_off_step;

	/* backlight */
	unsigned int level_default;
	unsigned int level_max;
	unsigned int level_min;
	unsigned int level_mid;
	unsigned int level_mid_mapping;

	unsigned int bl_method;
	unsigned int bl_en_gpio;
	unsigned short bl_en_gpio_on;
	unsigned short bl_en_gpio_off;
	unsigned short bl_power_on_delay;
	unsigned short bl_power_off_delay;

	unsigned int pwm_method;
	unsigned int pwm_port;
	unsigned int pwm_freq;
	unsigned int pwm_duty_max;
	unsigned int pwm_duty_min;
	unsigned int pwm_gpio;
	unsigned int pwm_gpio_off;

	unsigned int pwm2_method;
	unsigned int pwm2_port;
	unsigned int pwm2_freq;
	unsigned int pwm2_duty_max;
	unsigned int pwm2_duty_min;
	unsigned int pwm2_gpio;
	unsigned int pwm2_gpio_off;

	unsigned int pwm_level_max;
	unsigned int pwm_level_min;
	unsigned int pwm2_level_max;
	unsigned int pwm2_level_min;

	unsigned int pwm_on_delay;
	unsigned int pwm_off_delay;

	/* backlight extern */
	unsigned int bl_ext_index;
};

#define LCD_NUM_MAX         20
#define LCD_PRBS_MODE_LVDS    (1 << 0)
#define LCD_PRBS_MODE_VX1     (1 << 1)
#define LCD_PRBS_MODE_MAX     2

extern struct ext_lcd_config_s ext_lcd_config[LCD_NUM_MAX];

#endif /* INC_AML_LCD_H */
