backlight: ldim: optimize get config flow [2/3]

PD#166898: backlight: ldim: optimize get config flow
also correct local dimming spelling mistake

Change-Id: Iea2c7802e9fa55ad2e587126e1281ec9b34113e2
Signed-off-by: Evoke Zhang <evoke.zhang@amlogic.com>
This commit is contained in:
Evoke Zhang
2018-05-23 12:26:41 +08:00
committed by Yixun Lan
parent 7633ab0e3b
commit 7ed9aace4a
12 changed files with 939 additions and 591 deletions

View File

@@ -629,7 +629,7 @@
};
backlight_4{
index = <4>;
bl_name = "backlight_4";
bl_name = "ldim_iw7027";
bl_level_default_uboot_kernel = <100 100>;
bl_level_attr = <255 10 /*max, min*/
128 128>; /*mid, mid_mapping*/
@@ -642,12 +642,11 @@
* (top, bottom, left or right),
*2=uniform(top/bottom, left/right)
*/
bl_ldim_mapping = <0 1 2 3 4 5 6 7 8 9>;
ldim_dev_index = <2>;
};
backlight_5{
index = <5>;
bl_name = "backlight_5";
bl_name = "ldim_global";
bl_level_default_uboot_kernel = <100 100>;
bl_level_attr = <255 10 /*max, min*/
128 128>; /*mid, mid_mapping*/
@@ -675,7 +674,7 @@
};
};
local_diming_device {
local_dimming_device {
compatible = "amlogic, ldim_dev";
dev_name = "ldim_dev";
status = "okay";
@@ -685,9 +684,9 @@
pinctrl_version = <1>; /* for uboot */
/* pwm port: PWM_A, PWM_B, PWM_C, PWM_D, PWM_E, PWM_F, PWM_VS*/
ldim_dev-gpios = <&gpio GPIOZ_12 1
&gpio GPIOZ_6 1
&gpio GPIOZ_7 1>;
ldim_dev-gpios = <&gpio GPIOZ_12 GPIO_ACTIVE_HIGH
&gpio GPIOZ_6 GPIO_ACTIVE_HIGH
&gpio GPIOZ_7 GPIO_ACTIVE_HIGH>;
ldim_dev_gpio_names = "GPIOZ_12","GPIOZ_6","GPIOZ_7";
ldim_dev_0 {
@@ -709,15 +708,15 @@
ldim_dev_name = "global";
ldim_pwm_pinmux_sel = "ldim_pwm";
ldim_pwm_port = "PWM_B";
ldim_pwm_attr = <0 /* pol */
200 /*freq(pwm:Hz, pwm_vs:multiple of vs)*/
ldim_pwm_attr = <1 /* pol */
180 /*freq(pwm:Hz, pwm_vs:multiple of vs)*/
50>;/*duty(%)*/
dim_max_min = <100 20>; /*dim_max, dim_min*/
en_gpio_on_off = <2 /*ldim_dev-gpios index*/
1 0>; /*on_level, off_level*/
};
ldim_dev_2 {
index = <1>;
index = <2>;
type = <1>; /* 0=normal,1=spi,2=i2c */
ldim_dev_name = "iw7027";
ldim_pwm_pinmux_sel = "ldim_pwm_vs";
@@ -737,7 +736,10 @@
lamp_err_gpio = <0xff>;
/* ldim_dev-gpios index, 0xff=invalid */
spi_write_check = <0>; /* 0=disable, 1=enable */
dim_max_min = <0xfff 0x7f>; /* dim_max, dim_min */
ldim_region_mapping = <0 1 2 3 4 5 6 7 8 9>;
cmd_size = <4>;
/* init: (type, data..., delay),
* must match cmd_size for every group
@@ -753,7 +755,7 @@
0x00 0x27 0x60 0x00
0x00 0x29 0x00 0x00
0x00 0x2a 0x00 0x00
/*0x00 0x2b 0x7f 0x00*/
0x00 0x2b 0x00 0x00
0x00 0x2c 0x73 0x00
0x00 0x2d 0x37 0x00
0x00 0x31 0x93 0x00

View File

@@ -121,12 +121,12 @@ struct bl_method_match_s {
};
static struct bl_method_match_s bl_method_match_table[] = {
{"gpio", BL_CTRL_GPIO},
{"pwm", BL_CTRL_PWM},
{"pwm_combo", BL_CTRL_PWM_COMBO},
{"local_diming", BL_CTRL_LOCAL_DIMING},
{"extern", BL_CTRL_EXTERN},
{"invalid", BL_CTRL_MAX},
{"gpio", BL_CTRL_GPIO},
{"pwm", BL_CTRL_PWM},
{"pwm_combo", BL_CTRL_PWM_COMBO},
{"local_dimming", BL_CTRL_LOCAL_DIMMING},
{"extern", BL_CTRL_EXTERN},
{"invalid", BL_CTRL_MAX},
};
static char *bl_method_type_to_str(int type)
@@ -661,7 +661,7 @@ static void bl_power_on(void)
bl_power_en_ctrl(bconf, 1);
break;
case BL_CTRL_PWM:
if (bconf->pwm_en_sequence_reverse) {
if (bconf->en_sequence_reverse) {
/* step 1: power on enable */
bl_power_en_ctrl(bconf, 1);
if (bconf->pwm_on_delay > 0)
@@ -678,7 +678,7 @@ static void bl_power_on(void)
}
break;
case BL_CTRL_PWM_COMBO:
if (bconf->pwm_en_sequence_reverse) {
if (bconf->en_sequence_reverse) {
/* step 1: power on enable */
bl_power_en_ctrl(bconf, 1);
if (bconf->pwm_on_delay > 0)
@@ -697,44 +697,66 @@ static void bl_power_on(void)
}
break;
#ifdef CONFIG_AMLOGIC_LOCAL_DIMMING
case BL_CTRL_LOCAL_DIMING:
/* step 1: power on enable */
bl_power_en_ctrl(bconf, 1);
/* step 2: power on ldim */
case BL_CTRL_LOCAL_DIMMING:
ldim_drv = aml_ldim_get_driver();
if (ldim_drv == NULL) {
BLERR("no ldim driver\n");
} else {
goto exit_power_on_bl;
}
if (bconf->en_sequence_reverse) {
/* step 1: power on enable */
bl_power_en_ctrl(bconf, 1);
/* step 2: power on ldim */
if (ldim_drv->power_on) {
ret = ldim_drv->power_on();
if (ret) {
if (ret)
BLERR("ldim: power on error\n");
goto exit_power_on_bl;
}
} else {
BLPR("ldim: power on is null\n");
}
} else {
/* step 1: power on ldim */
if (ldim_drv->power_on) {
ret = ldim_drv->power_on();
if (ret)
BLERR("ldim: power on error\n");
} else {
BLPR("ldim: power on is null\n");
}
/* step 2: power on enable */
bl_power_en_ctrl(bconf, 1);
}
break;
#endif
#ifdef CONFIG_AMLOGIC_BL_EXTERN
case BL_CTRL_EXTERN:
/* step 1: power on enable */
bl_power_en_ctrl(bconf, 1);
/* step 2: power on bl_extern */
bl_ext = aml_bl_extern_get_driver();
if (bl_ext == NULL) {
BLERR("no bl_extern driver\n");
} else {
goto exit_power_on_bl;
}
if (bconf->en_sequence_reverse) {
/* step 1: power on enable */
bl_power_en_ctrl(bconf, 1);
/* step 2: power on bl_extern */
if (bl_ext->power_on) {
ret = bl_ext->power_on();
if (ret) {
if (ret)
BLERR("bl_extern: power on error\n");
goto exit_power_on_bl;
}
} else {
BLERR("bl_extern: power on is null\n");
}
} else {
/* step 1: power on bl_extern */
if (bl_ext->power_on) {
ret = bl_ext->power_on();
if (ret)
BLERR("bl_extern: power on error\n");
} else {
BLERR("bl_extern: power on is null\n");
}
/* step 2: power on enable */
bl_power_en_ctrl(bconf, 1);
}
break;
#endif
@@ -775,7 +797,7 @@ static void bl_power_off(void)
bl_power_en_ctrl(bconf, 0);
break;
case BL_CTRL_PWM:
if (bconf->pwm_en_sequence_reverse) {
if (bconf->en_sequence_reverse) {
/* step 1: power off pwm */
bl_pwm_ctrl(bconf->bl_pwm, 0);
if (bconf->pwm_off_delay > 0)
@@ -792,7 +814,7 @@ static void bl_power_off(void)
}
break;
case BL_CTRL_PWM_COMBO:
if (bconf->pwm_en_sequence_reverse) {
if (bconf->en_sequence_reverse) {
/* step 1: power off pwm_combo */
bl_pwm_ctrl(bconf->bl_pwm_combo0, 0);
bl_pwm_ctrl(bconf->bl_pwm_combo1, 0);
@@ -811,12 +833,27 @@ static void bl_power_off(void)
}
break;
#ifdef CONFIG_AMLOGIC_LOCAL_DIMMING
case BL_CTRL_LOCAL_DIMING:
/* step 1: power off ldim */
case BL_CTRL_LOCAL_DIMMING:
ldim_drv = aml_ldim_get_driver();
if (ldim_drv == NULL) {
BLERR("no ldim driver\n");
goto exit_power_off_bl;
}
if (bconf->en_sequence_reverse) {
/* step 1: power off ldim */
if (ldim_drv->power_off) {
ret = ldim_drv->power_off();
if (ret)
BLERR("ldim: power off error\n");
} else {
BLERR("ldim: power off is null\n");
}
/* step 2: power off enable */
bl_power_en_ctrl(bconf, 0);
} else {
/* step 1: power off enable */
bl_power_en_ctrl(bconf, 0);
/* step 2: power off ldim */
if (ldim_drv->power_off) {
ret = ldim_drv->power_off();
if (ret)
@@ -825,17 +862,30 @@ static void bl_power_off(void)
BLERR("ldim: power off is null\n");
}
}
/* step 2: power off enable */
bl_power_en_ctrl(bconf, 0);
break;
#endif
#ifdef CONFIG_AMLOGIC_BL_EXTERN
case BL_CTRL_EXTERN:
/* step 1: power off bl_extern */
bl_ext = aml_bl_extern_get_driver();
if (bl_ext == NULL) {
BLERR("no bl_extern driver\n");
goto exit_power_off_bl;
}
if (bconf->en_sequence_reverse) {
/* step 1: power off bl_extern */
if (bl_ext->power_off) {
ret = bl_ext->power_off();
if (ret)
BLERR("bl_extern: power off error\n");
} else {
BLERR("bl_extern: power off is null\n");
}
/* step 2: power off enable */
bl_power_en_ctrl(bconf, 0);
} else {
/* step 1: power off enable */
bl_power_en_ctrl(bconf, 0);
/* step 2: power off bl_extern */
if (bl_ext->power_off) {
ret = bl_ext->power_off();
if (ret)
@@ -844,8 +894,6 @@ static void bl_power_off(void)
BLERR("bl_extern: power off is null\n");
}
}
/* step 2: power off enable */
bl_power_en_ctrl(bconf, 0);
break;
#endif
default:
@@ -857,6 +905,8 @@ static void bl_power_off(void)
bl_drv->state &= ~BL_STATE_BL_ON;
BLPR("backlight power off\n");
exit_power_off_bl:
mutex_unlock(&bl_power_mutex);
}
@@ -1048,7 +1098,7 @@ static void aml_bl_set_level(unsigned int level)
}
break;
#ifdef CONFIG_AMLOGIC_LOCAL_DIMMING
case BL_CTRL_LOCAL_DIMING:
case BL_CTRL_LOCAL_DIMMING:
bl_set_level_ldim(level);
break;
#endif
@@ -1204,8 +1254,8 @@ static void aml_bl_config_print(struct bl_config_s *bconf)
case BL_CTRL_PWM:
BLPR("pwm_on_delay = %dms\n", bconf->pwm_on_delay);
BLPR("pwm_off_delay = %dms\n", bconf->pwm_off_delay);
BLPR("pwm_en_sequence_reverse = %d\n",
bconf->pwm_en_sequence_reverse);
BLPR("en_sequence_reverse = %d\n",
bconf->en_sequence_reverse);
if (bconf->bl_pwm) {
bl_pwm = bconf->bl_pwm;
BLPR("pwm_index = %d\n", bl_pwm->index);
@@ -1233,8 +1283,8 @@ static void aml_bl_config_print(struct bl_config_s *bconf)
case BL_CTRL_PWM_COMBO:
BLPR("pwm_on_delay = %dms\n", bconf->pwm_on_delay);
BLPR("pwm_off_delay = %dms\n", bconf->pwm_off_delay);
BLPR("pwm_en_sequence_reverse = %d\n",
bconf->pwm_en_sequence_reverse);
BLPR("en_sequence_reverse = %d\n",
bconf->en_sequence_reverse);
/* pwm_combo_0 */
if (bconf->bl_pwm_combo0) {
bl_pwm = bconf->bl_pwm_combo0;
@@ -1464,9 +1514,9 @@ static int aml_bl_config_load_from_dts(struct bl_config_s *bconf,
"bl_pwm_en_sequence_reverse", &val);
if (ret) {
BLPR("don't find bl_pwm_en_sequence_reverse\n");
bconf->pwm_en_sequence_reverse = 0;
bconf->en_sequence_reverse = 0;
} else
bconf->pwm_en_sequence_reverse = val;
bconf->en_sequence_reverse = val;
bl_pwm->pwm_duty = bl_pwm->pwm_duty_min;
/* init pwm config */
@@ -1591,9 +1641,9 @@ static int aml_bl_config_load_from_dts(struct bl_config_s *bconf,
"bl_pwm_en_sequence_reverse", &val);
if (ret) {
BLPR("don't find bl_pwm_en_sequence_reverse\n");
bconf->pwm_en_sequence_reverse = 0;
bconf->en_sequence_reverse = 0;
} else
bconf->pwm_en_sequence_reverse = val;
bconf->en_sequence_reverse = val;
pwm_combo0->pwm_duty = pwm_combo0->pwm_duty_min;
pwm_combo1->pwm_duty = pwm_combo1->pwm_duty_min;
@@ -1602,19 +1652,21 @@ static int aml_bl_config_load_from_dts(struct bl_config_s *bconf,
bl_pwm_config_init(pwm_combo1);
break;
#ifdef CONFIG_AMLOGIC_LOCAL_DIMMING
case BL_CTRL_LOCAL_DIMING:
case BL_CTRL_LOCAL_DIMMING:
bconf->ldim_flag = 1;
break;
#endif
#ifdef CONFIG_AMLOGIC_BL_EXTERN
case BL_CTRL_EXTERN:
/* get bl_extern_index from dts */
ret = of_property_read_u32(child, "bl_extern_index", &bl_para[0]);
if (ret)
BLERR("failed to get bl_extern_index\n");
else {
bconf->bl_extern_index = bl_para[0];
BLPR("get bl_extern_index = %d\n", bconf->bl_extern_index);
/* get bl_extern_index from dts */
ret = of_property_read_u32(child, "bl_extern_index",
&bl_para[0]);
if (ret) {
BLERR("failed to get bl_extern_index\n");
} else {
bconf->bl_extern_index = bl_para[0];
BLPR("get bl_extern_index = %d\n",
bconf->bl_extern_index);
}
break;
#endif
@@ -1622,6 +1674,14 @@ static int aml_bl_config_load_from_dts(struct bl_config_s *bconf,
break;
}
#ifdef CONFIG_AMLOGIC_LOCAL_DIMMING
if (bconf->ldim_flag) {
ret = aml_ldim_get_config_dts(child);
if (ret < 0)
return -1;
}
#endif
return 0;
}
#endif
@@ -1770,11 +1830,11 @@ static int aml_bl_config_load_from_unifykey(struct bl_config_s *bconf)
bl_pwm->pwm_duty_min = *(p + LCD_UKEY_BL_PWM_DUTY_MIN);
if (bl_header.version == 2)
bconf->pwm_en_sequence_reverse =
bconf->en_sequence_reverse =
(*(p + LCD_UKEY_BL_CUST_VAL_0) |
((*(p + LCD_UKEY_BL_CUST_VAL_0 + 1)) << 8));
else
bconf->pwm_en_sequence_reverse = 0;
bconf->en_sequence_reverse = 0;
bl_pwm->pwm_duty = bl_pwm->pwm_duty_min;
bl_pwm_config_init(bl_pwm);
@@ -1852,11 +1912,11 @@ static int aml_bl_config_load_from_unifykey(struct bl_config_s *bconf)
((*(p + LCD_UKEY_BL_PWM2_LEVEL_MIN + 1)) << 8));
if (bl_header.version == 2)
bconf->pwm_en_sequence_reverse = (*(p +
bconf->en_sequence_reverse = (*(p +
LCD_UKEY_BL_CUST_VAL_0) |
((*(p + LCD_UKEY_BL_CUST_VAL_0 + 1)) << 8));
else
bconf->pwm_en_sequence_reverse = 0;
bconf->en_sequence_reverse = 0;
pwm_combo0->pwm_duty = pwm_combo0->pwm_duty_min;
pwm_combo1->pwm_duty = pwm_combo1->pwm_duty_min;
@@ -1864,7 +1924,7 @@ static int aml_bl_config_load_from_unifykey(struct bl_config_s *bconf)
bl_pwm_config_init(pwm_combo1);
break;
#ifdef CONFIG_AMLOGIC_LOCAL_DIMMING
case BL_CTRL_LOCAL_DIMING:
case BL_CTRL_LOCAL_DIMMING:
bconf->ldim_flag = 1;
break;
#endif
@@ -1872,6 +1932,16 @@ static int aml_bl_config_load_from_unifykey(struct bl_config_s *bconf)
break;
}
#ifdef CONFIG_AMLOGIC_LOCAL_DIMMING
if (bconf->ldim_flag) {
ret = aml_ldim_get_config_unifykey(para);
if (ret < 0) {
kfree(para);
return -1;
}
}
#endif
kfree(para);
return 0;
}
@@ -2003,7 +2073,7 @@ static int aml_bl_config_load(struct bl_config_s *bconf,
#ifdef CONFIG_AMLOGIC_LOCAL_DIMMING
if (bconf->ldim_flag)
aml_ldim_probe(pdev, load_id);
aml_ldim_probe(pdev);
#endif
switch (bconf->method) {
@@ -2157,7 +2227,7 @@ static int aml_bl_lcd_update_notifier(struct notifier_block *nb,
}
break;
#ifdef CONFIG_AMLOGIC_LOCAL_DIMMING
case BL_CTRL_LOCAL_DIMING:
case BL_CTRL_LOCAL_DIMMING:
if (ldim_drv->pwm_vs_update)
ldim_drv->pwm_vs_update();
break;
@@ -2194,7 +2264,7 @@ static int aml_bl_lcd_test_notifier(struct notifier_block *nb,
flag = (int *)data;
switch (bl_drv->bconf->method) {
#ifdef CONFIG_AMLOGIC_LOCAL_DIMMING
case BL_CTRL_LOCAL_DIMING:
case BL_CTRL_LOCAL_DIMMING:
if (ldim_drv->test_ctrl)
ldim_drv->test_ctrl(*flag);
break;
@@ -2295,11 +2365,11 @@ static ssize_t bl_status_read(struct class *class,
"pwm_duty_min: %d\n"
"pwm_on_delay: %d\n"
"pwm_off_delay: %d\n"
"pwm_en_sequence_reverse: %d\n\n",
"en_sequence_reverse: %d\n\n",
bl_pwm->pwm_method, bl_pwm->pwm_port, bl_pwm->pwm_freq,
bl_pwm->pwm_duty_max, bl_pwm->pwm_duty_min,
bconf->pwm_on_delay, bconf->pwm_off_delay,
bconf->pwm_en_sequence_reverse);
bconf->en_sequence_reverse);
break;
case BL_CTRL_PWM_COMBO:
pwm_combo0 = bconf->bl_pwm_combo0;
@@ -2321,7 +2391,7 @@ static ssize_t bl_status_read(struct class *class,
"pwm_1_duty_min: %d\n"
"pwm_on_delay: %d\n"
"pwm_off_delay: %d\n"
"pwm_en_sequence_reverse: %d\n\n",
"en_sequence_reverse: %d\n\n",
pwm_combo0->level_max, pwm_combo0->level_min,
pwm_combo0->pwm_method, pwm_combo0->pwm_port,
pwm_combo0->pwm_freq,
@@ -2331,10 +2401,10 @@ static ssize_t bl_status_read(struct class *class,
pwm_combo1->pwm_freq,
pwm_combo1->pwm_duty_max, pwm_combo1->pwm_duty_min,
bconf->pwm_on_delay, bconf->pwm_off_delay,
bconf->pwm_en_sequence_reverse);
bconf->en_sequence_reverse);
break;
#ifdef CONFIG_AMLOGIC_LOCAL_DIMMING
case BL_CTRL_LOCAL_DIMING:
case BL_CTRL_LOCAL_DIMMING:
if (ldim_drv->config_print)
ldim_drv->config_print();
break;
@@ -2397,12 +2467,11 @@ static ssize_t bl_debug_pwm_show(struct class *class,
}
pwm_get_state(bl_pwm->pwm_data.pwm, &pstate);
len += sprintf(buf+len,
"\n"
"pwm state:\n"
"period: %d\n"
"duty_cycle: %d\n"
"polarity: %d\n"
"enabled: %d\n",
" period: %d\n"
" duty_cycle: %d\n"
" polarity: %d\n"
" enabled: %d\n",
pstate.period, pstate.duty_cycle,
pstate.polarity, pstate.enabled);
value = bl_cbus_read(bl_drv->data->pwm_reg[
@@ -2461,12 +2530,11 @@ static ssize_t bl_debug_pwm_show(struct class *class,
}
pwm_get_state(bl_pwm->pwm_data.pwm, &pstate);
len += sprintf(buf+len,
"\n"
"pwm state:\n"
"period: %d\n"
"duty_cycle: %d\n"
"polarity: %d\n"
"enabled: %d\n",
" period: %d\n"
" duty_cycle: %d\n"
" polarity: %d\n"
" enabled: %d\n",
pstate.period, pstate.duty_cycle,
pstate.polarity, pstate.enabled);
value = bl_cbus_read(bl_drv->data->pwm_reg[
@@ -2493,6 +2561,7 @@ static ssize_t bl_debug_pwm_show(struct class *class,
if (bconf->bl_pwm_combo1) {
bl_pwm = bconf->bl_pwm_combo1;
len += sprintf(buf+len,
"\n"
"pwm_1_index: %d\n"
"pwm_1_method: %d\n"
"pwm_1_port: %d\n"
@@ -2519,12 +2588,11 @@ static ssize_t bl_debug_pwm_show(struct class *class,
}
pwm_get_state(bl_pwm->pwm_data.pwm, &pstate);
len += sprintf(buf+len,
"\n"
"pwm state:\n"
"period: %d\n"
"duty_cycle: %d\n"
"polarity: %d\n"
"enabled: %d\n",
" period: %d\n"
" duty_cycle: %d\n"
" polarity: %d\n"
" enabled: %d\n",
pstate.period, pstate.duty_cycle,
pstate.polarity, pstate.enabled);
value = bl_cbus_read(bl_drv->data->pwm_reg[

View File

@@ -44,11 +44,11 @@ static int global_hw_init_on(void)
{
struct aml_ldim_driver_s *ldim_drv = aml_ldim_get_driver();
ldim_gpio_set(ldim_drv->ldev_conf->en_gpio,
ldim_drv->ldev_conf->en_gpio_on);
mdelay(2);
ldim_set_duty_pwm(&(ldim_drv->ldev_conf->pwm_config));
ldim_drv->pinmux_ctrl(ldim_drv->ldev_conf->pinmux_name);
mdelay(2);
ldim_gpio_set(ldim_drv->ldev_conf->en_gpio,
ldim_drv->ldev_conf->en_gpio_on);
mdelay(20);
return 0;

View File

@@ -330,14 +330,10 @@ static int iw7027_spi_dump_dim(char *buf)
return len;
}
static unsigned int iw7027_get_value(unsigned int level)
static unsigned int dim_max, dim_min;
static inline unsigned int iw7027_get_value(unsigned int level)
{
struct aml_ldim_driver_s *ldim_drv = aml_ldim_get_driver();
unsigned int val;
unsigned int dim_max, dim_min;
dim_max = ldim_drv->ldev_conf->dim_max;
dim_min = ldim_drv->ldev_conf->dim_min;
val = dim_min + ((level * (dim_max - dim_min)) / LD_DATA_MAX);
@@ -349,6 +345,8 @@ static int iw7027_smr(unsigned short *buf, unsigned char len)
int i, j;
unsigned int value_flag = 0;
unsigned char val[20];
unsigned short *mapping;
struct aml_ldim_driver_s *ldim_drv = aml_ldim_get_driver();
if (iw7027_on_flag == 0) {
if (ldim_debug_print)
@@ -369,63 +367,65 @@ static int iw7027_smr(unsigned short *buf, unsigned char len)
iw7027_spi_op_flag = 1;
mapping = &ldim_drv->ldev_conf->bl_mapping[0];
dim_max = ldim_drv->ldev_conf->dim_max;
dim_min = ldim_drv->ldev_conf->dim_min;
for (i = 0; i < 10; i++)
value_flag = value_flag || buf[i];
if (value_flag) {
if (bl_iw7027->test_mode) {
val[0] = (test_brightness[0] & 0xf00) >> 8;
val[1] = test_brightness[0] & 0xff;
val[2] = (test_brightness[1] & 0xf00) >> 8;
val[3] = test_brightness[1] & 0xff;
val[4] = (test_brightness[2] & 0xf00) >> 8;
val[5] = test_brightness[2] & 0xff;
val[6] = (test_brightness[3] & 0xf00) >> 8;
val[7] = test_brightness[3] & 0xff;
val[8] = (test_brightness[4] & 0xf00) >> 8;
val[9] = test_brightness[4] & 0xff;
val[10] = (test_brightness[5] & 0xf00) >> 8;
val[11] = test_brightness[5] & 0xff;
val[12] = (test_brightness[6] & 0xf00) >> 8;
val[13] = test_brightness[6] & 0xff;
val[14] = (test_brightness[7] & 0xf00) >> 8;
val[15] = test_brightness[7] & 0xff;
val[16] = (test_brightness[8] & 0xf00) >> 8;
val[17] = test_brightness[8] & 0xff;
val[18] = (test_brightness[9] & 0xf00) >> 8;
val[19] = test_brightness[9] & 0xff;
iw7027_wregs(bl_iw7027->spi, 0x40, val, 20);
} else {
val[0] = ((iw7027_get_value(buf[0])) & 0xf00) >> 8;
val[1] = (iw7027_get_value(buf[0])) & 0xff;
val[2] = ((iw7027_get_value(buf[1])) & 0xf00) >> 8;
val[3] = (iw7027_get_value(buf[1])) & 0xff;
val[4] = ((iw7027_get_value(buf[2])) & 0xf00) >> 8;
val[5] = (iw7027_get_value(buf[2])) & 0xff;
val[6] = ((iw7027_get_value(buf[3])) & 0xf00) >> 8;
val[7] = (iw7027_get_value(buf[3])) & 0xff;
val[8] = ((iw7027_get_value(buf[4])) & 0xf00) >> 8;
val[9] = (iw7027_get_value(buf[4])) & 0xff;
val[10] = ((iw7027_get_value(buf[5])) & 0xf00) >> 8;
val[11] = (iw7027_get_value(buf[5])) & 0xff;
val[12] = ((iw7027_get_value(buf[6])) & 0xf00) >> 8;
val[13] = (iw7027_get_value(buf[6])) & 0xff;
val[14] = ((iw7027_get_value(buf[7])) & 0xf00) >> 8;
val[15] = (iw7027_get_value(buf[7])) & 0xff;
val[16] = ((iw7027_get_value(buf[8])) & 0xf00) >> 8;
val[17] = (iw7027_get_value(buf[8])) & 0xff;
val[18] = ((iw7027_get_value(buf[9])) & 0xf00) >> 8;
val[19] = (iw7027_get_value(buf[9])) & 0xff;
iw7027_wregs(bl_iw7027->spi, 0x40, val, 20);
}
} else {
if (value_flag == 0) {
for (j = 0; j < 20; j++)
val[j] = 0;
iw7027_wregs(bl_iw7027->spi, 0x40, val, 20);
goto iw7027_smr_end;
}
if (bl_iw7027->test_mode) {
val[0] = (test_brightness[0] & 0xf00) >> 8;
val[1] = test_brightness[0] & 0xff;
val[2] = (test_brightness[1] & 0xf00) >> 8;
val[3] = test_brightness[1] & 0xff;
val[4] = (test_brightness[2] & 0xf00) >> 8;
val[5] = test_brightness[2] & 0xff;
val[6] = (test_brightness[3] & 0xf00) >> 8;
val[7] = test_brightness[3] & 0xff;
val[8] = (test_brightness[4] & 0xf00) >> 8;
val[9] = test_brightness[4] & 0xff;
val[10] = (test_brightness[5] & 0xf00) >> 8;
val[11] = test_brightness[5] & 0xff;
val[12] = (test_brightness[6] & 0xf00) >> 8;
val[13] = test_brightness[6] & 0xff;
val[14] = (test_brightness[7] & 0xf00) >> 8;
val[15] = test_brightness[7] & 0xff;
val[16] = (test_brightness[8] & 0xf00) >> 8;
val[17] = test_brightness[8] & 0xff;
val[18] = (test_brightness[9] & 0xf00) >> 8;
val[19] = test_brightness[9] & 0xff;
} else {
val[0] = ((iw7027_get_value(buf[mapping[0]])) & 0xf00) >> 8;
val[1] = (iw7027_get_value(buf[mapping[0]])) & 0xff;
val[2] = ((iw7027_get_value(buf[mapping[1]])) & 0xf00) >> 8;
val[3] = (iw7027_get_value(buf[mapping[1]])) & 0xff;
val[4] = ((iw7027_get_value(buf[mapping[2]])) & 0xf00) >> 8;
val[5] = (iw7027_get_value(buf[mapping[2]])) & 0xff;
val[6] = ((iw7027_get_value(buf[mapping[3]])) & 0xf00) >> 8;
val[7] = (iw7027_get_value(buf[mapping[3]])) & 0xff;
val[8] = ((iw7027_get_value(buf[mapping[4]])) & 0xf00) >> 8;
val[9] = (iw7027_get_value(buf[mapping[4]])) & 0xff;
val[10] = ((iw7027_get_value(buf[mapping[5]])) & 0xf00) >> 8;
val[11] = (iw7027_get_value(buf[mapping[5]])) & 0xff;
val[12] = ((iw7027_get_value(buf[mapping[6]])) & 0xf00) >> 8;
val[13] = (iw7027_get_value(buf[mapping[6]])) & 0xff;
val[14] = ((iw7027_get_value(buf[mapping[7]])) & 0xf00) >> 8;
val[15] = (iw7027_get_value(buf[mapping[7]])) & 0xff;
val[16] = ((iw7027_get_value(buf[mapping[8]])) & 0xf00) >> 8;
val[17] = (iw7027_get_value(buf[mapping[8]])) & 0xff;
val[18] = ((iw7027_get_value(buf[mapping[9]])) & 0xf00) >> 8;
val[19] = (iw7027_get_value(buf[mapping[9]])) & 0xff;
}
iw7027_smr_end:
iw7027_wregs(bl_iw7027->spi, 0x40, val, 20);
iw7027_spi_op_flag = 0;
return 0;
}

View File

@@ -432,8 +432,11 @@ static void ldim_config_print(void)
{
struct aml_ldim_driver_s *ldim_drv = aml_ldim_get_driver();
struct bl_pwm_config_s *ld_pwm;
int i, n, len = 0;
char *str = NULL;
LDIMPR("%s:\n", __func__);
pr_info("valid_flag = %d\n"
"dev_index = %d\n",
ldim_drv->valid_flag,
@@ -446,7 +449,7 @@ static void ldim_config_print(void)
"en_gpio_on = %d\n"
"en_gpio_off = %d\n"
"dim_min = 0x%03x\n"
"dim_max = 0x%03x\n\n",
"dim_max = 0x%03x\n",
ldim_drv->ldev_conf->name,
ldim_drv->ldev_conf->type,
ldim_drv->ldev_conf->en_gpio,
@@ -454,6 +457,21 @@ static void ldim_config_print(void)
ldim_drv->ldev_conf->en_gpio_off,
ldim_drv->ldev_conf->dim_min,
ldim_drv->ldev_conf->dim_max);
n = ldim_drv->ldim_conf->row * ldim_drv->ldim_conf->col;
len = (n * 4) + 50;
str = kcalloc(len, sizeof(char), GFP_KERNEL);
if (str == NULL) {
pr_info("%s: buf malloc error\n", __func__);
} else {
len = sprintf(str, "region_mapping:\n ");
for (i = 0; i < n; i++) {
len += sprintf(str+len, "%d,",
ldim_dev_config.bl_mapping[i]);
}
pr_info("%s\n\n", str);
kfree(str);
}
switch (ldim_drv->ldev_conf->type) {
case LDIM_DEV_TYPE_SPI:
pr_info("spi_modalias = %s\n"
@@ -490,9 +508,11 @@ static void ldim_config_print(void)
pr_info("pwm_port = %d\n"
"pwm_pol = %d\n"
"pwm_freq = %d\n"
"pwm_duty = %d%%\n",
"pwm_duty = %d%%\n"
"pwm_pointer = %p\n",
ld_pwm->pwm_port, ld_pwm->pwm_method,
ld_pwm->pwm_freq, ld_pwm->pwm_duty);
ld_pwm->pwm_freq, ld_pwm->pwm_duty,
ld_pwm->pwm_data.pwm);
}
} else {
pr_info("device config is null\n");
@@ -504,11 +524,17 @@ static int ldim_dev_get_config_from_dts(struct device_node *np, int index)
char ld_propname[20];
struct device_node *child;
const char *str;
unsigned int temp[5], val;
unsigned int *temp, val;
int i, j;
int ret = 0;
struct aml_ldim_driver_s *ldim_drv = aml_ldim_get_driver();
temp = kcalloc(LD_BLKREGNUM, sizeof(unsigned int), GFP_KERNEL);
if (temp == NULL) {
LDIMERR("%s: buf malloc error\n", __func__);
return -1;
}
memset(ldim_dev_config.init_on, 0, LDIM_SPI_INIT_ON_SIZE);
memset(ldim_dev_config.init_off, 0, LDIM_SPI_INIT_OFF_SIZE);
ldim_dev_config.init_on[0] = 0xff;
@@ -520,7 +546,7 @@ static int ldim_dev_get_config_from_dts(struct device_node *np, int index)
child = of_get_child_by_name(np, ld_propname);
if (child == NULL) {
LDIMERR("failed to get %s\n", ld_propname);
return -1;
goto ldim_get_config_err;
}
ret = of_property_read_string(child, "ldim_dev_name", &str);
@@ -570,16 +596,6 @@ static int ldim_dev_get_config_from_dts(struct device_node *np, int index)
bl_pwm_config_init(&ldim_dev_config.pwm_config);
}
ret = of_property_read_u32_array(child, "dim_max_min", &temp[0], 2);
if (ret) {
LDIMERR("failed to get dim_max_min\n");
ldim_dev_config.dim_max = 0xfff;
ldim_dev_config.dim_min = 0x7f;
} else {
ldim_dev_config.dim_max = temp[0];
ldim_dev_config.dim_min = temp[1];
}
ret = of_property_read_u32_array(child, "en_gpio_on_off", temp, 3);
if (ret) {
LDIMERR("failed to get en_gpio_on_off\n");
@@ -597,17 +613,40 @@ static int ldim_dev_get_config_from_dts(struct device_node *np, int index)
ldim_dev_config.en_gpio_off = temp[2];
}
ret = of_property_read_u32_array(child, "dim_max_min", &temp[0], 2);
if (ret) {
LDIMERR("failed to get dim_max_min\n");
ldim_dev_config.dim_max = 0xfff;
ldim_dev_config.dim_min = 0x7f;
} else {
ldim_dev_config.dim_max = temp[0];
ldim_dev_config.dim_min = temp[1];
}
val = ldim_drv->ldim_conf->row * ldim_drv->ldim_conf->col;
ret = of_property_read_u32_array(child, "ldim_region_mapping",
&temp[0], val);
if (ret) {
LDIMERR("failed to get ldim_region_mapping\n");
for (i = 0; i < LD_BLKREGNUM; i++)
ldim_dev_config.bl_mapping[i] = (unsigned short)i;
} else {
for (i = 0; i < val; i++)
ldim_dev_config.bl_mapping[i] = (unsigned short)temp[i];
}
ret = of_property_read_u32(child, "type", &val);
if (ret) {
LDIMERR("failed to get type\n");
ldim_dev_config.type = LDIM_DEV_TYPE_NORMAL;
} else {
ldim_dev_config.type = val;
LDIMPR("type: %d\n", ldim_dev_config.type);
if (ldim_debug_print)
LDIMPR("type: %d\n", ldim_dev_config.type);
}
if (ldim_dev_config.type >= LDIM_DEV_TYPE_MAX) {
LDIMERR("type num is out of support\n");
return -1;
goto ldim_get_config_err;
}
switch (ldim_dev_config.type) {
@@ -620,7 +659,10 @@ static int ldim_dev_get_config_from_dts(struct device_node *np, int index)
LDIMERR("failed to get spi_bus_num\n");
} else {
ldim_spi_dev.bus_num = val;
LDIMPR("bus_num: %d\n", ldim_spi_dev.bus_num);
if (ldim_debug_print) {
LDIMPR("spi bus_num: %d\n",
ldim_spi_dev.bus_num);
}
}
ret = of_property_read_u32(child, "spi_chip_select", &val);
@@ -628,7 +670,10 @@ static int ldim_dev_get_config_from_dts(struct device_node *np, int index)
LDIMERR("failed to get spi_chip_select\n");
} else {
ldim_spi_dev.chip_select = val;
LDIMPR("chip_select: %d\n", ldim_spi_dev.chip_select);
if (ldim_debug_print) {
LDIMPR("spi chip_select: %d\n",
ldim_spi_dev.chip_select);
}
}
ret = of_property_read_u32(child, "spi_max_frequency", &val);
@@ -636,7 +681,10 @@ static int ldim_dev_get_config_from_dts(struct device_node *np, int index)
LDIMERR("failed to get spi_chip_select\n");
} else {
ldim_spi_dev.max_speed_hz = val;
LDIMPR("max_speed_hz: %d\n", ldim_spi_dev.max_speed_hz);
if (ldim_debug_print) {
LDIMPR("spi max_speed_hz: %d\n",
ldim_spi_dev.max_speed_hz);
}
}
ret = of_property_read_u32(child, "spi_mode", &val);
@@ -644,7 +692,8 @@ static int ldim_dev_get_config_from_dts(struct device_node *np, int index)
LDIMERR("failed to get spi_mode\n");
} else {
ldim_spi_dev.mode = val;
LDIMPR("mode: %d\n", ldim_spi_dev.mode);
if (ldim_debug_print)
LDIMPR("spi mode: %d\n", ldim_spi_dev.mode);
}
ret = of_property_read_u32_array(child, "spi_cs_delay",
@@ -756,7 +805,13 @@ ldim_get_config_end:
default:
break;
}
kfree(temp);
return 0;
ldim_get_config_err:
kfree(temp);
return -1;
}
static int ldim_dev_add_driver(struct ldim_dev_config_s *ldev_conf, int index)

File diff suppressed because it is too large Load Diff

View File

@@ -18,6 +18,7 @@
#ifndef _AML_LDIM_DRV_H_
#define _AML_LDIM_DRV_H_
#include <linux/cdev.h>
#include <linux/amlogic/media/vout/lcd/aml_ldim.h>
#define AML_LDIM_MODULE_NAME "aml_ldim"
#define AML_LDIM_DRIVER_NAME "aml_ldim"
@@ -29,7 +30,7 @@
/*#define LDIM_EXT_DEBUG_INFO*/
#define LDIMPR(fmt, args...) pr_info("ldim: "fmt"", ## args)
#define LDIMERR(fmt, args...) pr_info("ldim: error: "fmt"", ## args)
#define LDIMERR(fmt, args...) pr_err("ldim: error: "fmt"", ## args)
extern unsigned int ldim_debug_print;
@@ -106,18 +107,11 @@ extern unsigned int ldim_debug_print;
#define LD_LUT_LEN 32
#define LD_BLKHMAX 32
#define LD_BLKVMAX 32
#define LD_BLKREGNUM 384 /* maximum support 24*16*/
#define LD_DATA_DEPTH 12
#define LD_DATA_MAX 0xfff
struct ldim_config_s {
unsigned short hsize;
unsigned short vsize;
unsigned char bl_mode;
unsigned short bl_mapping[LD_BLKREGNUM];
};
struct LDReg {
int reg_LD_pic_RowMax; /*u13*/
int reg_LD_pic_ColMax; /*u13*/

View File

@@ -659,7 +659,7 @@ void ldim_read_region(unsigned int nrow, unsigned int ncol)
*/
void ldim_set_matrix_ycbcr2rgb(void)
{
Wr_reg_bits(LDIM_STTS_CTRL0, 0, 2, 1);
Wr_reg_bits(LDIM_STTS_CTRL0, 1, 2, 1); /* enable matrix */
Wr(LDIM_STTS_MATRIX_PRE_OFFSET0_1, 0x07c00600);
Wr(LDIM_STTS_MATRIX_PRE_OFFSET2, 0x00000600);
@@ -681,18 +681,15 @@ void ldim_set_matrix_rgb2ycbcr(int mode)
/* 0.257 0.504 0.098 */
/* -0.148 -0.291 0.439 */
/* 0.439 -0.368 -0.071 */
Wr(LDIM_STTS_MATRIX_COEF00_01, (0x107 << 16) |
0x204);
Wr(LDIM_STTS_MATRIX_COEF02_10, (0x64 << 16) |
0x1f68);
Wr(LDIM_STTS_MATRIX_COEF11_12, (0x1ed6 << 16) |
0x1c2);
Wr(LDIM_STTS_MATRIX_COEF20_21, (0x1c2 << 16) |
0x1e87);
Wr(LDIM_STTS_MATRIX_COEF00_01, (0x107 << 16) | 0x204);
Wr(LDIM_STTS_MATRIX_COEF02_10, (0x64 << 16) | 0x1f68);
Wr(LDIM_STTS_MATRIX_COEF11_12, (0x1ed6 << 16) | 0x1c2);
Wr(LDIM_STTS_MATRIX_COEF20_21, (0x1c2 << 16) | 0x1e87);
Wr(LDIM_STTS_MATRIX_COEF22, 0x1fb7);
Wr(LDIM_STTS_MATRIX_OFFSET2, 0x0200);
} else if (mode == 1) {/*ycbcr full range, 601 conversion*/
/* todo */
}
}
@@ -762,86 +759,102 @@ void LD_MtxInv(int *oDat, int *iDat, int nRow, int nCol)
}
static int Remap_lut[16][32] = {
{ 128, 258, 387, 517, 646, 776, 905, 1034,
1163, 1291, 1420, 1548, 1676, 1804, 1932, 2059,
2187, 2314, 2441, 2569, 2696, 2823, 2950, 3077,
3204, 3331, 3458, 3586, 3713, 3840, 3968, 4095,
},
{ 114, 230, 345, 461, 577, 693, 808, 923,
1038, 1153, 1267, 1382, 1496, 1610, 1724, 1844,
1987, 2130, 2272, 2415, 2557, 2700, 2842, 2985,
3127, 3270, 3412, 3555, 3697, 3840, 3981, 4095,
},
{ 114, 230, 345, 461, 577, 692, 808, 923,
1038, 1152, 1267, 1381, 1496, 1610, 1731, 1874,
2017, 2160, 2303, 2445, 2588, 2731, 2873, 3015,
3158, 3300, 3443, 3585, 3728, 3868, 3981, 4095,
},
{ 115, 230, 346, 462, 579, 694, 810, 926,
1041, 1155, 1270, 1384, 1499, 1637, 1781, 1923,
2066, 2209, 2351, 2494, 2636, 2778, 2921, 3063,
3205, 3347, 3490, 3632, 3754, 3868, 3982, 4095,
},
{ 119, 243, 367, 493, 620, 744, 867, 988,
1106, 1224, 1340, 1456, 1596, 1739, 1881, 2021,
2161, 2300, 2438, 2576, 2713, 2850, 2987, 3124,
3261, 3399, 3536, 3652, 3761, 3871, 3982, 4095,
},
{ 116, 240, 364, 490, 619, 742, 863, 982,
1096, 1208, 1319, 1469, 1620, 1769, 1917, 2063,
2208, 2352, 2494, 2636, 2777, 2918, 3059, 3200,
3341, 3482, 3589, 3687, 3786, 3887, 3990, 4095,
},
{ 114, 237, 361, 487, 615, 737, 857, 973,
1085, 1221, 1380, 1536, 1691, 1844, 1994, 2144,
2291, 2438, 2583, 2727, 2870, 3014, 3157, 3300,
3424, 3518, 3610, 3704, 3798, 3894, 3994, 4095,
},
{ 113, 238, 363, 490, 620, 744, 863, 978,
1091, 1256, 1419, 1579, 1737, 1893, 2046, 2198,
2348, 2496, 2642, 2788, 2933, 3077, 3222, 3366,
3459, 3547, 3633, 3722, 3811, 3903, 3997, 4095,
},
{ 120, 255, 390, 528, 669, 801, 928, 1050,
1194, 1356, 1515, 1671, 1825, 1975, 2123, 2268,
2412, 2553, 2693, 2832, 2970, 3107, 3244, 3361,
3448, 3536, 3623, 3713, 3804, 3897, 3994, 4095,
},
{ 134, 292, 449, 611, 775, 924, 1063, 1193,
1340, 1503, 1661, 1814, 1963, 2108, 2249, 2387,
2522, 2654, 2785, 2914, 3042, 3169, 3297, 3405,
3484, 3565, 3644, 3727, 3813, 3901, 3996, 4095,
},
{ 160, 358, 550, 746, 943, 1113, 1266, 1406,
1552, 1708, 1858, 2000, 2138, 2269, 2397, 2520,
2640, 2757, 2872, 2985, 3098, 3211, 3325, 3422,
3496, 3572, 3647, 3727, 3811, 3898, 3993, 4095,
},
{ 201, 456, 693, 929, 1162, 1354, 1520, 1671,
1822, 1963, 2095, 2220, 2339, 2451, 2559, 2662,
2762, 2859, 2955, 3049, 3143, 3239, 3335, 3407,
3479, 3556, 3630, 3712, 3797, 3887, 3987, 4095,
},
{ 243, 546, 815, 1079, 1334, 1536, 1707, 1857,
1996, 2125, 2245, 2357, 2462, 2561, 2655, 2746,
2833, 2917, 3000, 3083, 3166, 3250, 3336, 3405,
3476, 3551, 3624, 3706, 3791, 3882, 3984, 4095,
},
{ 280, 622, 914, 1195, 1465, 1672, 1844, 1993,
2122, 2240, 2349, 2450, 2545, 2634, 2718, 2798,
2875, 2950, 3023, 3097, 3171, 3247, 3325, 3393,
3464, 3540, 3614, 3697, 3784, 3876, 3981, 4095,
},
{ 308, 675, 979, 1268, 1544, 1752, 1922, 2067,
2191, 2304, 2408, 2505, 2595, 2679, 2758, 2834,
2907, 2978, 3048, 3118, 3189, 3262, 3338, 3404,
3473, 3546, 3618, 3700, 3785, 3877, 3981, 4095,
},
{ 342, 738, 1058, 1360, 1648, 1862, 2037, 2184,
2295, 2396, 2488, 2573, 2651, 2724, 2792, 2857,
2919, 2979, 3038, 3098, 3158, 3221, 3287, 3357,
3431, 3510, 3588, 3674, 3766, 3864, 3975, 4095,
},
{
128, 258, 387, 517, 646, 776, 905, 1034,
1163, 1291, 1420, 1548, 1676, 1804, 1932, 2059,
2187, 2314, 2441, 2569, 2696, 2823, 2950, 3077,
3204, 3331, 3458, 3586, 3713, 3840, 3968, 4095,
},
{
114, 230, 345, 461, 577, 693, 808, 923,
1038, 1153, 1267, 1382, 1496, 1610, 1724, 1844,
1987, 2130, 2272, 2415, 2557, 2700, 2842, 2985,
3127, 3270, 3412, 3555, 3697, 3840, 3981, 4095,
},
{
114, 230, 345, 461, 577, 692, 808, 923,
1038, 1152, 1267, 1381, 1496, 1610, 1731, 1874,
2017, 2160, 2303, 2445, 2588, 2731, 2873, 3015,
3158, 3300, 3443, 3585, 3728, 3868, 3981, 4095,
},
{
115, 230, 346, 462, 579, 694, 810, 926,
1041, 1155, 1270, 1384, 1499, 1637, 1781, 1923,
2066, 2209, 2351, 2494, 2636, 2778, 2921, 3063,
3205, 3347, 3490, 3632, 3754, 3868, 3982, 4095,
},
{
119, 243, 367, 493, 620, 744, 867, 988,
1106, 1224, 1340, 1456, 1596, 1739, 1881, 2021,
2161, 2300, 2438, 2576, 2713, 2850, 2987, 3124,
3261, 3399, 3536, 3652, 3761, 3871, 3982, 4095,
},
{
116, 240, 364, 490, 619, 742, 863, 982,
1096, 1208, 1319, 1469, 1620, 1769, 1917, 2063,
2208, 2352, 2494, 2636, 2777, 2918, 3059, 3200,
3341, 3482, 3589, 3687, 3786, 3887, 3990, 4095,
},
{
114, 237, 361, 487, 615, 737, 857, 973,
1085, 1221, 1380, 1536, 1691, 1844, 1994, 2144,
2291, 2438, 2583, 2727, 2870, 3014, 3157, 3300,
3424, 3518, 3610, 3704, 3798, 3894, 3994, 4095,
},
{
113, 238, 363, 490, 620, 744, 863, 978,
1091, 1256, 1419, 1579, 1737, 1893, 2046, 2198,
2348, 2496, 2642, 2788, 2933, 3077, 3222, 3366,
3459, 3547, 3633, 3722, 3811, 3903, 3997, 4095,
},
{
120, 255, 390, 528, 669, 801, 928, 1050,
1194, 1356, 1515, 1671, 1825, 1975, 2123, 2268,
2412, 2553, 2693, 2832, 2970, 3107, 3244, 3361,
3448, 3536, 3623, 3713, 3804, 3897, 3994, 4095,
},
{
134, 292, 449, 611, 775, 924, 1063, 1193,
1340, 1503, 1661, 1814, 1963, 2108, 2249, 2387,
2522, 2654, 2785, 2914, 3042, 3169, 3297, 3405,
3484, 3565, 3644, 3727, 3813, 3901, 3996, 4095,
},
{
160, 358, 550, 746, 943, 1113, 1266, 1406,
1552, 1708, 1858, 2000, 2138, 2269, 2397, 2520,
2640, 2757, 2872, 2985, 3098, 3211, 3325, 3422,
3496, 3572, 3647, 3727, 3811, 3898, 3993, 4095,
},
{
201, 456, 693, 929, 1162, 1354, 1520, 1671,
1822, 1963, 2095, 2220, 2339, 2451, 2559, 2662,
2762, 2859, 2955, 3049, 3143, 3239, 3335, 3407,
3479, 3556, 3630, 3712, 3797, 3887, 3987, 4095,
},
{
243, 546, 815, 1079, 1334, 1536, 1707, 1857,
1996, 2125, 2245, 2357, 2462, 2561, 2655, 2746,
2833, 2917, 3000, 3083, 3166, 3250, 3336, 3405,
3476, 3551, 3624, 3706, 3791, 3882, 3984, 4095,
},
{
280, 622, 914, 1195, 1465, 1672, 1844, 1993,
2122, 2240, 2349, 2450, 2545, 2634, 2718, 2798,
2875, 2950, 3023, 3097, 3171, 3247, 3325, 3393,
3464, 3540, 3614, 3697, 3784, 3876, 3981, 4095,
},
{
308, 675, 979, 1268, 1544, 1752, 1922, 2067,
2191, 2304, 2408, 2505, 2595, 2679, 2758, 2834,
2907, 2978, 3048, 3118, 3189, 3262, 3338, 3404,
3473, 3546, 3618, 3700, 3785, 3877, 3981, 4095,
},
{
342, 738, 1058, 1360, 1648, 1862, 2037, 2184,
2295, 2396, 2488, 2573, 2651, 2724, 2792, 2857,
2919, 2979, 3038, 3098, 3158, 3221, 3287, 3357,
3431, 3510, 3588, 3674, 3766, 3864, 3975, 4095,
},
};
static int Remap_lut2[16][16] = {};
@@ -867,8 +880,8 @@ void LD_LUTInit(struct LDReg *Reg)
Reg->X_lut2[0][k][t] = Remap_lut2[k][t];
Reg->X_lut2[1][k][t] = Remap_lut2[k][t];
Reg->X_lut2[2][k][t] = Remap_lut2[k][t];
}
}
}
break;
case BL_CHIP_GXTVBB:
/* Emulate the FW to set the LUTs */
@@ -881,8 +894,8 @@ void LD_LUTInit(struct LDReg *Reg)
Reg->X_lut[0][k][t] = Remap_lut[k][t];
Reg->X_lut[1][k][t] = Remap_lut[k][t];
Reg->X_lut[2][k][t] = Remap_lut[k][t];
}
}
}
break;
default:
break;

View File

@@ -979,7 +979,7 @@ static char *lcd_enc_tst_str[] = {
"8-Black", /* 8 */
};
static unsigned int lcd_enc_tst[][8] = {
static unsigned int lcd_enc_tst[][7] = {
/*tst_mode, Y, Cb, Cr, tst_en, vfifo_en rgbin*/
{0, 0x200, 0x200, 0x200, 0, 1, 3}, /* 0 */
{1, 0x200, 0x200, 0x200, 1, 0, 1}, /* 1 */

View File

@@ -62,7 +62,7 @@ enum bl_ctrl_method_e {
BL_CTRL_GPIO = 0,
BL_CTRL_PWM,
BL_CTRL_PWM_COMBO,
BL_CTRL_LOCAL_DIMING,
BL_CTRL_LOCAL_DIMMING,
BL_CTRL_EXTERN,
BL_CTRL_MAX,
};
@@ -148,13 +148,13 @@ struct bl_config_s {
unsigned int power_off_delay;
unsigned int dim_max;
unsigned int dim_min;
unsigned int en_sequence_reverse;
struct bl_pwm_config_s *bl_pwm;
struct bl_pwm_config_s *bl_pwm_combo0;
struct bl_pwm_config_s *bl_pwm_combo1;
unsigned int pwm_on_delay;
unsigned int pwm_off_delay;
unsigned int pwm_en_sequence_reverse;
struct bl_gpio_s bl_gpio[BL_GPIO_NUM_MAX];
struct pinctrl *pin;

View File

@@ -27,7 +27,7 @@
#define _VE_LDIM 'C'
/* VPP.ldim IOCTL command list */
#define LDIM_IOC_PARA _IOW(_VE_LDIM, 0x50, struct vpu_ldim_param_s)
#define LDIM_IOC_PARA _IOW(_VE_LDIM, 0x50, struct ldim_param_s)
enum ldim_dev_type_e {
LDIM_DEV_TYPE_NORMAL = 0,
@@ -36,6 +36,16 @@ enum ldim_dev_type_e {
LDIM_DEV_TYPE_MAX,
};
#define LD_BLKREGNUM 384 /* maximum support 24*16*/
struct ldim_config_s {
unsigned short hsize;
unsigned short vsize;
unsigned char row;
unsigned char col;
unsigned char bl_mode;
};
#define LDIM_SPI_INIT_ON_SIZE 300
#define LDIM_SPI_INIT_OFF_SIZE 20
struct ldim_dev_config_s {
@@ -58,6 +68,8 @@ struct ldim_dev_config_s {
unsigned char *init_off;
struct bl_pwm_config_s pwm_config;
unsigned short bl_mapping[LD_BLKREGNUM];
};
/*******global API******/
@@ -65,6 +77,8 @@ struct aml_ldim_driver_s {
int valid_flag;
int dev_index;
int static_pic_flag;
struct ldim_config_s *ldim_conf;
struct ldim_dev_config_s *ldev_conf;
unsigned short *ldim_matrix_buf;
unsigned int *hist_matrix;
@@ -89,7 +103,7 @@ struct aml_ldim_driver_s {
struct spi_board_info *spi_dev;
};
struct vpu_ldim_param_s {
struct ldim_param_s {
/* beam model */
int rgb_base;
int boost_gain;
@@ -117,7 +131,10 @@ struct vpu_ldim_param_s {
};
extern struct aml_ldim_driver_s *aml_ldim_get_driver(void);
extern int aml_ldim_probe(struct platform_device *pdev, int load_id);
extern int aml_ldim_get_config_dts(struct device_node *child);
extern int aml_ldim_get_config_unifykey(unsigned char *buf);
extern int aml_ldim_probe(struct platform_device *pdev);
extern int aml_ldim_remove(void);
#endif

View File

@@ -179,8 +179,8 @@ struct aml_lcd_unifykey_header_s {
* *********************************
*/
/* V1: 92 */
/* V2: 102 */
#define LCD_UKEY_BL_SIZE 102
/* V2: 118 */
#define LCD_UKEY_BL_SIZE 118
/* header (10Byte) */
/* LCD_UKEY_HEAD_SIZE */
@@ -221,12 +221,23 @@ struct aml_lcd_unifykey_header_s {
#define LCD_UKEY_BL_PWM_LEVEL_MIN (LCD_UKEY_BL_NAME + 76)
#define LCD_UKEY_BL_PWM2_LEVEL_MAX (LCD_UKEY_BL_NAME + 78)
#define LCD_UKEY_BL_PWM2_LEVEL_MIN (LCD_UKEY_BL_NAME + 80)
/* local dimming (16Byte) */ /* V2 */
#define LCD_UKEY_BL_LDIM_ROW (LCD_UKEY_BL_NAME + 82)
#define LCD_UKEY_BL_LDIM_COL (LCD_UKEY_BL_NAME + 83)
#define LCD_UKEY_BL_LDIM_MODE (LCD_UKEY_BL_NAME + 84)
#define LCD_UKEY_BL_LDIM_DEV_INDEX (LCD_UKEY_BL_NAME + 85)
#define LCD_UKEY_BL_LDIM_ATTR_4 (LCD_UKEY_BL_NAME + 86)
#define LCD_UKEY_BL_LDIM_ATTR_5 (LCD_UKEY_BL_NAME + 88)
#define LCD_UKEY_BL_LDIM_ATTR_6 (LCD_UKEY_BL_NAME + 90)
#define LCD_UKEY_BL_LDIM_ATTR_7 (LCD_UKEY_BL_NAME + 92)
#define LCD_UKEY_BL_LDIM_ATTR_8 (LCD_UKEY_BL_NAME + 94)
#define LCD_UKEY_BL_LDIM_ATTR_9 (LCD_UKEY_BL_NAME + 96)
/* customer(10Byte) */ /* V2 */
#define LCD_UKEY_BL_CUST_VAL_0 (LCD_UKEY_BL_NAME + 82)
#define LCD_UKEY_BL_CUST_VAL_1 (LCD_UKEY_BL_NAME + 84)
#define LCD_UKEY_BL_CUST_VAL_2 (LCD_UKEY_BL_NAME + 86)
#define LCD_UKEY_BL_CUST_VAL_3 (LCD_UKEY_BL_NAME + 88)
#define LCD_UKEY_BL_CUST_VAL_4 (LCD_UKEY_BL_NAME + 90)
#define LCD_UKEY_BL_CUST_VAL_0 (LCD_UKEY_BL_NAME + 98)
#define LCD_UKEY_BL_CUST_VAL_1 (LCD_UKEY_BL_NAME + 100)
#define LCD_UKEY_BL_CUST_VAL_2 (LCD_UKEY_BL_NAME + 102)
#define LCD_UKEY_BL_CUST_VAL_3 (LCD_UKEY_BL_NAME + 104)
#define LCD_UKEY_BL_CUST_VAL_4 (LCD_UKEY_BL_NAME + 106)
/* ********************************
* API