mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
backlight: update ldim setting for tl1 [1/1]
PD#SWPL-2762 Problem: ldim is changed for tl1 Solution: update ldim setting for tl1 Verify: x301 Change-Id: I21b10f27f4d1776db664c62fa7358b38801c7f53 Signed-off-by: Evoke Zhang <evoke.zhang@amlogic.com>
This commit is contained in:
@@ -14730,6 +14730,7 @@ F: arch/arm64/boot/dts/amlogic/partition_mbox_ab_P_32.dtsi
|
||||
AMLOGIC BACKLIGHT LDIM DRIVER
|
||||
M: Evoke Zhang <evoke.zhang@amlogic.com>
|
||||
F: drivers/amlogic/media/vout/backlight/aml_ldim/ldim_spi.c
|
||||
F: drivers/amlogic/media/vout/backlight/aml_ldim/ldim_hw.c
|
||||
|
||||
AMLOGIC MESON TL1 DTS
|
||||
M: Xingyu Chen <xingyu.chen@amlogic.com>
|
||||
|
||||
@@ -879,6 +879,47 @@
|
||||
2 0 /*pwm1 gpio_index, gpio_off*/
|
||||
10 10>; /*pwm_on_delay(ms), pwm_off_delay(ms)*/
|
||||
};
|
||||
backlight_3{
|
||||
index = <3>;
|
||||
bl_name = "pwm_combo_ldim_test";
|
||||
bl_level_default_uboot_kernel = <31 100>;
|
||||
bl_level_attr = <255 10 /*max, min*/
|
||||
128 128>; /*mid, mid_mapping*/
|
||||
bl_ctrl_method = <2>; /*1=pwm,2=pwm_combo,3=ldim*/
|
||||
bl_power_attr = <0 /*en_gpio_index*/
|
||||
1 0 /*on_value, off_value*/
|
||||
410 110>; /*on_delay(ms), off_delay(ms)*/
|
||||
bl_pwm_combo_level_mapping = <255 10 /*pwm_0 range*/
|
||||
0 0>; /*pwm_1 range*/
|
||||
bl_pwm_combo_port = "PWM_C","PWM_D";
|
||||
bl_pwm_combo_attr = <1 /*pwm0 method*/
|
||||
180 /*pwm0 freq(pwm:Hz, pwm_vs:multiple of vs)*/
|
||||
100 25 /*pwm0 duty_max(%), duty_min(%)*/
|
||||
1 /*pwm1 method*/
|
||||
18000 /*pwm1 freq(pwm:Hz, pwm_vs:multi of vs)*/
|
||||
80 80>; /*pwm1 duty_max(%), duty_min(%)*/
|
||||
bl_pwm_combo_power = <1 0 /*pwm0 gpio_index, gpio_off*/
|
||||
2 0 /*pwm1 gpio_index, gpio_off*/
|
||||
10 10>; /*pwm_on_delay(ms), pwm_off_delay(ms)*/
|
||||
bl_ldim_region_row_col = <2 10>;
|
||||
};
|
||||
backlight_4{
|
||||
index = <4>;
|
||||
bl_name = "ldim_global";
|
||||
bl_level_default_uboot_kernel = <100 100>;
|
||||
bl_level_attr = <255 10 /*max, min*/
|
||||
128 128>; /*mid, mid_mapping*/
|
||||
bl_ctrl_method = <3>; /*1=pwm,2=pwm_combo,3=ldim*/
|
||||
bl_power_attr = <0 /*en_gpio_index*/
|
||||
1 0 /*on_value, off_value*/
|
||||
200 200>; /*on_delay(ms), off_delay(ms)*/
|
||||
bl_ldim_region_row_col = <1 1>;
|
||||
bl_ldim_mode = <1>; /*0=left/right side
|
||||
*1=top/bottom side
|
||||
*2=direct
|
||||
*/
|
||||
ldim_dev_index = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
bl_pwm_conf:bl_pwm_conf{
|
||||
@@ -892,4 +933,50 @@
|
||||
};
|
||||
};
|
||||
|
||||
local_dimming_device {
|
||||
compatible = "amlogic, ldim_dev";
|
||||
status = "okay";
|
||||
pinctrl-names = "ldim_pwm",
|
||||
"ldim_pwm_vs",
|
||||
"ldim_pwm_off";
|
||||
pinctrl-0 = <&pwm_c_pins3>;
|
||||
pinctrl-1 = <&bl_pwm_vs_on_pins>;
|
||||
pinctrl-2 = <&bl_pwm_off_pins>;
|
||||
pinctrl_version = <1>; /* for uboot */
|
||||
ldim_pwm_config = <&bl_pwm_conf>;
|
||||
|
||||
/* pwm port: PWM_A, PWM_B, PWM_C, PWM_D, PWM_E, PWM_F, PWM_VS*/
|
||||
ldim_dev-gpios = <&gpio_ao GPIOAO_11 GPIO_ACTIVE_HIGH
|
||||
&gpio GPIOZ_5 GPIO_ACTIVE_HIGH
|
||||
&gpio GPIOZ_6 GPIO_ACTIVE_HIGH>;
|
||||
ldim_dev_gpio_names = "GPIOAO_11","GPIOZ_5","GPIOZ_6";
|
||||
|
||||
ldim_dev_0 {
|
||||
index = <0>;
|
||||
type = <0>; /*0=normal, 1=spi, 2=i2c*/
|
||||
ldim_dev_name = "ob3350";
|
||||
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)*/
|
||||
50>;/*duty(%)*/
|
||||
dim_max_min = <100 20>; /*dim_max, dim_min*/
|
||||
en_gpio_on_off = <0 /*ldim_dev-gpios index*/
|
||||
1 0>; /*on_level, off_level*/
|
||||
};
|
||||
ldim_dev_1 {
|
||||
index = <1>;
|
||||
type = <0>; /*0=normal, 1=spi, 2=i2c*/
|
||||
ldim_dev_name = "global";
|
||||
ldim_pwm_pinmux_sel = "ldim_pwm";
|
||||
ldim_pwm_port = "PWM_C";
|
||||
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*/
|
||||
};
|
||||
};
|
||||
|
||||
}; /* end of / */
|
||||
|
||||
@@ -882,6 +882,47 @@
|
||||
2 0 /*pwm1 gpio_index, gpio_off*/
|
||||
10 10>; /*pwm_on_delay(ms), pwm_off_delay(ms)*/
|
||||
};
|
||||
backlight_3{
|
||||
index = <3>;
|
||||
bl_name = "pwm_combo_ldim_test";
|
||||
bl_level_default_uboot_kernel = <31 100>;
|
||||
bl_level_attr = <255 10 /*max, min*/
|
||||
128 128>; /*mid, mid_mapping*/
|
||||
bl_ctrl_method = <2>; /*1=pwm,2=pwm_combo,3=ldim*/
|
||||
bl_power_attr = <0 /*en_gpio_index*/
|
||||
1 0 /*on_value, off_value*/
|
||||
410 110>; /*on_delay(ms), off_delay(ms)*/
|
||||
bl_pwm_combo_level_mapping = <255 10 /*pwm_0 range*/
|
||||
0 0>; /*pwm_1 range*/
|
||||
bl_pwm_combo_port = "PWM_C","PWM_D";
|
||||
bl_pwm_combo_attr = <1 /*pwm0 method*/
|
||||
180 /*pwm0 freq(pwm:Hz, pwm_vs:multiple of vs)*/
|
||||
100 25 /*pwm0 duty_max(%), duty_min(%)*/
|
||||
1 /*pwm1 method*/
|
||||
18000 /*pwm1 freq(pwm:Hz, pwm_vs:multi of vs)*/
|
||||
80 80>; /*pwm1 duty_max(%), duty_min(%)*/
|
||||
bl_pwm_combo_power = <1 0 /*pwm0 gpio_index, gpio_off*/
|
||||
2 0 /*pwm1 gpio_index, gpio_off*/
|
||||
10 10>; /*pwm_on_delay(ms), pwm_off_delay(ms)*/
|
||||
bl_ldim_region_row_col = <2 10>;
|
||||
};
|
||||
backlight_4{
|
||||
index = <4>;
|
||||
bl_name = "ldim_global";
|
||||
bl_level_default_uboot_kernel = <100 100>;
|
||||
bl_level_attr = <255 10 /*max, min*/
|
||||
128 128>; /*mid, mid_mapping*/
|
||||
bl_ctrl_method = <3>; /*1=pwm,2=pwm_combo,3=ldim*/
|
||||
bl_power_attr = <0 /*en_gpio_index*/
|
||||
1 0 /*on_value, off_value*/
|
||||
200 200>; /*on_delay(ms), off_delay(ms)*/
|
||||
bl_ldim_region_row_col = <1 1>;
|
||||
bl_ldim_mode = <1>; /*0=left/right side
|
||||
*1=top/bottom side
|
||||
*2=direct
|
||||
*/
|
||||
ldim_dev_index = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
bl_pwm_conf:bl_pwm_conf{
|
||||
@@ -895,4 +936,49 @@
|
||||
};
|
||||
};
|
||||
|
||||
local_dimming_device {
|
||||
compatible = "amlogic, ldim_dev";
|
||||
status = "okay";
|
||||
pinctrl-names = "ldim_pwm",
|
||||
"ldim_pwm_vs",
|
||||
"ldim_pwm_off";
|
||||
pinctrl-0 = <&pwm_c_pins3>;
|
||||
pinctrl-1 = <&bl_pwm_vs_on_pins>;
|
||||
pinctrl-2 = <&bl_pwm_off_pins>;
|
||||
pinctrl_version = <1>; /* for uboot */
|
||||
ldim_pwm_config = <&bl_pwm_conf>;
|
||||
|
||||
/* pwm port: PWM_A, PWM_B, PWM_C, PWM_D, PWM_E, PWM_F, PWM_VS*/
|
||||
ldim_dev-gpios = <&gpio_ao GPIOAO_11 GPIO_ACTIVE_HIGH
|
||||
&gpio GPIOZ_5 GPIO_ACTIVE_HIGH
|
||||
&gpio GPIOZ_6 GPIO_ACTIVE_HIGH>;
|
||||
ldim_dev_gpio_names = "GPIOAO_11","GPIOZ_5","GPIOZ_6";
|
||||
|
||||
ldim_dev_0 {
|
||||
index = <0>;
|
||||
type = <0>; /*0=normal, 1=spi, 2=i2c*/
|
||||
ldim_dev_name = "ob3350";
|
||||
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)*/
|
||||
50>;/*duty(%)*/
|
||||
dim_max_min = <100 20>; /*dim_max, dim_min*/
|
||||
en_gpio_on_off = <0 /*ldim_dev-gpios index*/
|
||||
1 0>; /*on_level, off_level*/
|
||||
};
|
||||
ldim_dev_1 {
|
||||
index = <1>;
|
||||
type = <0>; /*0=normal, 1=spi, 2=i2c*/
|
||||
ldim_dev_name = "global";
|
||||
ldim_pwm_pinmux_sel = "ldim_pwm";
|
||||
ldim_pwm_port = "PWM_C";
|
||||
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*/
|
||||
};
|
||||
};
|
||||
}; /* end of / */
|
||||
|
||||
@@ -879,6 +879,47 @@
|
||||
2 0 /*pwm1 gpio_index, gpio_off*/
|
||||
10 10>; /*pwm_on_delay(ms), pwm_off_delay(ms)*/
|
||||
};
|
||||
backlight_3{
|
||||
index = <3>;
|
||||
bl_name = "pwm_combo_ldim_test";
|
||||
bl_level_default_uboot_kernel = <31 100>;
|
||||
bl_level_attr = <255 10 /*max, min*/
|
||||
128 128>; /*mid, mid_mapping*/
|
||||
bl_ctrl_method = <2>; /*1=pwm,2=pwm_combo,3=ldim*/
|
||||
bl_power_attr = <0 /*en_gpio_index*/
|
||||
1 0 /*on_value, off_value*/
|
||||
410 110>; /*on_delay(ms), off_delay(ms)*/
|
||||
bl_pwm_combo_level_mapping = <255 10 /*pwm_0 range*/
|
||||
0 0>; /*pwm_1 range*/
|
||||
bl_pwm_combo_port = "PWM_C","PWM_D";
|
||||
bl_pwm_combo_attr = <1 /*pwm0 method*/
|
||||
180 /*pwm0 freq(pwm:Hz, pwm_vs:multiple of vs)*/
|
||||
100 25 /*pwm0 duty_max(%), duty_min(%)*/
|
||||
1 /*pwm1 method*/
|
||||
18000 /*pwm1 freq(pwm:Hz, pwm_vs:multi of vs)*/
|
||||
80 80>; /*pwm1 duty_max(%), duty_min(%)*/
|
||||
bl_pwm_combo_power = <1 0 /*pwm0 gpio_index, gpio_off*/
|
||||
2 0 /*pwm1 gpio_index, gpio_off*/
|
||||
10 10>; /*pwm_on_delay(ms), pwm_off_delay(ms)*/
|
||||
bl_ldim_region_row_col = <2 10>;
|
||||
};
|
||||
backlight_4{
|
||||
index = <4>;
|
||||
bl_name = "ldim_global";
|
||||
bl_level_default_uboot_kernel = <100 100>;
|
||||
bl_level_attr = <255 10 /*max, min*/
|
||||
128 128>; /*mid, mid_mapping*/
|
||||
bl_ctrl_method = <3>; /*1=pwm,2=pwm_combo,3=ldim*/
|
||||
bl_power_attr = <0 /*en_gpio_index*/
|
||||
1 0 /*on_value, off_value*/
|
||||
200 200>; /*on_delay(ms), off_delay(ms)*/
|
||||
bl_ldim_region_row_col = <1 1>;
|
||||
bl_ldim_mode = <1>; /*0=left/right side
|
||||
*1=top/bottom side
|
||||
*2=direct
|
||||
*/
|
||||
ldim_dev_index = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
bl_pwm_conf:bl_pwm_conf{
|
||||
@@ -892,4 +933,50 @@
|
||||
};
|
||||
};
|
||||
|
||||
local_dimming_device {
|
||||
compatible = "amlogic, ldim_dev";
|
||||
status = "okay";
|
||||
pinctrl-names = "ldim_pwm",
|
||||
"ldim_pwm_vs",
|
||||
"ldim_pwm_off";
|
||||
pinctrl-0 = <&pwm_c_pins3>;
|
||||
pinctrl-1 = <&bl_pwm_vs_on_pins>;
|
||||
pinctrl-2 = <&bl_pwm_off_pins>;
|
||||
pinctrl_version = <1>; /* for uboot */
|
||||
ldim_pwm_config = <&bl_pwm_conf>;
|
||||
|
||||
/* pwm port: PWM_A, PWM_B, PWM_C, PWM_D, PWM_E, PWM_F, PWM_VS*/
|
||||
ldim_dev-gpios = <&gpio_ao GPIOAO_11 GPIO_ACTIVE_HIGH
|
||||
&gpio GPIOZ_5 GPIO_ACTIVE_HIGH
|
||||
&gpio GPIOZ_6 GPIO_ACTIVE_HIGH>;
|
||||
ldim_dev_gpio_names = "GPIOAO_11","GPIOZ_5","GPIOZ_6";
|
||||
|
||||
ldim_dev_0 {
|
||||
index = <0>;
|
||||
type = <0>; /*0=normal, 1=spi, 2=i2c*/
|
||||
ldim_dev_name = "ob3350";
|
||||
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)*/
|
||||
50>;/*duty(%)*/
|
||||
dim_max_min = <100 20>; /*dim_max, dim_min*/
|
||||
en_gpio_on_off = <0 /*ldim_dev-gpios index*/
|
||||
1 0>; /*on_level, off_level*/
|
||||
};
|
||||
ldim_dev_1 {
|
||||
index = <1>;
|
||||
type = <0>; /*0=normal, 1=spi, 2=i2c*/
|
||||
ldim_dev_name = "global";
|
||||
ldim_pwm_pinmux_sel = "ldim_pwm";
|
||||
ldim_pwm_port = "PWM_C";
|
||||
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*/
|
||||
};
|
||||
};
|
||||
|
||||
}; /* end of / */
|
||||
|
||||
@@ -882,6 +882,47 @@
|
||||
2 0 /*pwm1 gpio_index, gpio_off*/
|
||||
10 10>; /*pwm_on_delay(ms), pwm_off_delay(ms)*/
|
||||
};
|
||||
backlight_3{
|
||||
index = <3>;
|
||||
bl_name = "pwm_combo_ldim_test";
|
||||
bl_level_default_uboot_kernel = <31 100>;
|
||||
bl_level_attr = <255 10 /*max, min*/
|
||||
128 128>; /*mid, mid_mapping*/
|
||||
bl_ctrl_method = <2>; /*1=pwm,2=pwm_combo,3=ldim*/
|
||||
bl_power_attr = <0 /*en_gpio_index*/
|
||||
1 0 /*on_value, off_value*/
|
||||
410 110>; /*on_delay(ms), off_delay(ms)*/
|
||||
bl_pwm_combo_level_mapping = <255 10 /*pwm_0 range*/
|
||||
0 0>; /*pwm_1 range*/
|
||||
bl_pwm_combo_port = "PWM_C","PWM_D";
|
||||
bl_pwm_combo_attr = <1 /*pwm0 method*/
|
||||
180 /*pwm0 freq(pwm:Hz, pwm_vs:multiple of vs)*/
|
||||
100 25 /*pwm0 duty_max(%), duty_min(%)*/
|
||||
1 /*pwm1 method*/
|
||||
18000 /*pwm1 freq(pwm:Hz, pwm_vs:multi of vs)*/
|
||||
80 80>; /*pwm1 duty_max(%), duty_min(%)*/
|
||||
bl_pwm_combo_power = <1 0 /*pwm0 gpio_index, gpio_off*/
|
||||
2 0 /*pwm1 gpio_index, gpio_off*/
|
||||
10 10>; /*pwm_on_delay(ms), pwm_off_delay(ms)*/
|
||||
bl_ldim_region_row_col = <2 10>;
|
||||
};
|
||||
backlight_4{
|
||||
index = <4>;
|
||||
bl_name = "ldim_global";
|
||||
bl_level_default_uboot_kernel = <100 100>;
|
||||
bl_level_attr = <255 10 /*max, min*/
|
||||
128 128>; /*mid, mid_mapping*/
|
||||
bl_ctrl_method = <3>; /*1=pwm,2=pwm_combo,3=ldim*/
|
||||
bl_power_attr = <0 /*en_gpio_index*/
|
||||
1 0 /*on_value, off_value*/
|
||||
200 200>; /*on_delay(ms), off_delay(ms)*/
|
||||
bl_ldim_region_row_col = <1 1>;
|
||||
bl_ldim_mode = <1>; /*0=left/right side
|
||||
*1=top/bottom side
|
||||
*2=direct
|
||||
*/
|
||||
ldim_dev_index = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
bl_pwm_conf:bl_pwm_conf{
|
||||
@@ -895,4 +936,49 @@
|
||||
};
|
||||
};
|
||||
|
||||
local_dimming_device {
|
||||
compatible = "amlogic, ldim_dev";
|
||||
status = "okay";
|
||||
pinctrl-names = "ldim_pwm",
|
||||
"ldim_pwm_vs",
|
||||
"ldim_pwm_off";
|
||||
pinctrl-0 = <&pwm_c_pins3>;
|
||||
pinctrl-1 = <&bl_pwm_vs_on_pins>;
|
||||
pinctrl-2 = <&bl_pwm_off_pins>;
|
||||
pinctrl_version = <1>; /* for uboot */
|
||||
ldim_pwm_config = <&bl_pwm_conf>;
|
||||
|
||||
/* pwm port: PWM_A, PWM_B, PWM_C, PWM_D, PWM_E, PWM_F, PWM_VS*/
|
||||
ldim_dev-gpios = <&gpio_ao GPIOAO_11 GPIO_ACTIVE_HIGH
|
||||
&gpio GPIOZ_5 GPIO_ACTIVE_HIGH
|
||||
&gpio GPIOZ_6 GPIO_ACTIVE_HIGH>;
|
||||
ldim_dev_gpio_names = "GPIOAO_11","GPIOZ_5","GPIOZ_6";
|
||||
|
||||
ldim_dev_0 {
|
||||
index = <0>;
|
||||
type = <0>; /*0=normal, 1=spi, 2=i2c*/
|
||||
ldim_dev_name = "ob3350";
|
||||
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)*/
|
||||
50>;/*duty(%)*/
|
||||
dim_max_min = <100 20>; /*dim_max, dim_min*/
|
||||
en_gpio_on_off = <0 /*ldim_dev-gpios index*/
|
||||
1 0>; /*on_level, off_level*/
|
||||
};
|
||||
ldim_dev_1 {
|
||||
index = <1>;
|
||||
type = <0>; /*0=normal, 1=spi, 2=i2c*/
|
||||
ldim_dev_name = "global";
|
||||
ldim_pwm_pinmux_sel = "ldim_pwm";
|
||||
ldim_pwm_port = "PWM_C";
|
||||
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*/
|
||||
};
|
||||
};
|
||||
}; /* end of / */
|
||||
|
||||
@@ -1535,7 +1535,8 @@ static int aml_bl_config_load_from_dts(struct bl_config_s *bconf,
|
||||
bconf->power_on_delay = bl_para[3];
|
||||
bconf->power_off_delay = bl_para[4];
|
||||
}
|
||||
ret = of_property_read_u32(child, "bl_ldim_mode", &bl_para[0]);
|
||||
ret = of_property_read_u32(child, "bl_ldim_region_row_col",
|
||||
&bl_para[0]);
|
||||
if (ret == 0)
|
||||
bconf->ldim_flag = 1;
|
||||
|
||||
@@ -1603,10 +1604,11 @@ static int aml_bl_config_load_from_dts(struct bl_config_s *bconf,
|
||||
ret = of_property_read_u32(child,
|
||||
"bl_pwm_en_sequence_reverse", &val);
|
||||
if (ret) {
|
||||
BLPR("don't find bl_pwm_en_sequence_reverse\n");
|
||||
bconf->en_sequence_reverse = 0;
|
||||
} else
|
||||
} else {
|
||||
bconf->en_sequence_reverse = val;
|
||||
BLPR("find bl_pwm_en_sequence_reverse: %d\n", val);
|
||||
}
|
||||
|
||||
bl_pwm->pwm_duty = bl_pwm->pwm_duty_min;
|
||||
/* init pwm config */
|
||||
@@ -2047,6 +2049,9 @@ static int aml_bl_pwm_channel_register(struct bl_config_s *bconf,
|
||||
struct device_node *child;
|
||||
struct bl_pwm_config_s *bl_pwm = NULL;
|
||||
|
||||
if (bl_debug_print_flag)
|
||||
BLPR("%s\n", __func__);
|
||||
|
||||
ret = of_property_read_u32(blnode, "bl_pwm_config", &pwm_phandle);
|
||||
if (ret) {
|
||||
BLERR("not match bl_pwm_config node\n");
|
||||
@@ -2110,8 +2115,6 @@ static int aml_bl_pwm_channel_register(struct bl_config_s *bconf,
|
||||
bl_pwm->pwm_data.port_index, bl_pwm->pwm_data.pwm);
|
||||
}
|
||||
|
||||
BLPR("%s ok\n", __func__);
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
#
|
||||
obj-$(CONFIG_AMLOGIC_LOCAL_DIMMING) = aml_ldim.o ldim_dev_drv.o ldim_spi.o \
|
||||
ob3350_bl.o global_bl.o iw7027_bl.o
|
||||
aml_ldim-objs := ldim_drv.o ldim_func.o
|
||||
aml_ldim-objs := ldim_drv.o ldim_func.o ldim_hw.o
|
||||
|
||||
|
||||
|
||||
@@ -636,6 +636,9 @@ static int ldim_dev_pwm_channel_register(struct bl_pwm_config_s *bl_pwm,
|
||||
struct device_node *child;
|
||||
struct aml_ldim_driver_s *ldim_drv = aml_ldim_get_driver();
|
||||
|
||||
if (ldim_debug_print)
|
||||
LDIMPR("%s ok\n", __func__);
|
||||
|
||||
ret = of_property_read_u32(blnode, "ldim_pwm_config", &pwm_phandle);
|
||||
if (ret) {
|
||||
LDIMERR("not match ldim_pwm_config node\n");
|
||||
@@ -683,8 +686,6 @@ static int ldim_dev_pwm_channel_register(struct bl_pwm_config_s *bl_pwm,
|
||||
bl_pwm->pwm_data.port_index, bl_pwm->pwm_data.pwm);
|
||||
}
|
||||
|
||||
LDIMPR("%s ok\n", __func__);
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
@@ -1255,11 +1256,12 @@ static int ldim_dev_probe(struct platform_device *pdev)
|
||||
ldim_drv->dev_index);
|
||||
|
||||
ldim_dev_add_driver(ldim_drv);
|
||||
|
||||
/* init ldim function */
|
||||
if (ldim_drv->valid_flag)
|
||||
ldim_drv->init();
|
||||
LDIMPR("%s OK\n", __func__);
|
||||
}
|
||||
/* init ldim function */
|
||||
if (ldim_drv->valid_flag)
|
||||
ldim_drv->init();
|
||||
LDIMPR("%s OK\n", __func__);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1268,10 +1270,11 @@ static int __exit ldim_dev_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct aml_ldim_driver_s *ldim_drv = aml_ldim_get_driver();
|
||||
|
||||
if (ldim_drv->dev_index != 0xff)
|
||||
if (ldim_drv->dev_index != 0xff) {
|
||||
ldim_dev_remove_driver(ldim_drv);
|
||||
LDIMPR("%s OK\n", __func__);
|
||||
}
|
||||
|
||||
LDIMPR("%s OK\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -309,258 +309,22 @@ static void ldim_db_load_update(struct LDReg_s *mLDReg,
|
||||
ldim_db_para_print(mLDReg);
|
||||
}
|
||||
|
||||
static void ldim_stts_initial_txlx(unsigned int resolution)
|
||||
{
|
||||
Wr_reg(LDIM_STTS_CTRL0, 7 << 2);
|
||||
ldim_set_matrix_ycbcr2rgb();
|
||||
ldim_stts_en(resolution, 0, 0, 1, 1, 1, 0);
|
||||
}
|
||||
|
||||
static void ldim_stts_initial(unsigned int pic_h, unsigned int pic_v,
|
||||
unsigned int BLK_Vnum, unsigned int BLK_Hnum)
|
||||
{
|
||||
unsigned int resolution, resolution_region, blk_height, blk_width;
|
||||
unsigned int row_start, col_start;
|
||||
|
||||
BLK_Vnum = (BLK_Vnum == 0) ? 1 : BLK_Vnum;
|
||||
BLK_Hnum = (BLK_Hnum == 0) ? 1 : BLK_Hnum;
|
||||
LDIMPR("%s: %d %d %d %d\n", __func__, pic_h, pic_v, BLK_Vnum, BLK_Hnum);
|
||||
|
||||
ldim_fw_para.hist_col = BLK_Vnum;
|
||||
ldim_fw_para.hist_row = BLK_Hnum;
|
||||
|
||||
resolution = (((pic_h - 1) & 0xffff) << 16) | ((pic_v - 1) & 0xffff);
|
||||
/*Wr_reg(VDIN0_HIST_CTRL, 0x10d);*/
|
||||
|
||||
if (ldim_dev.ldim_op_func == NULL) {
|
||||
LDIMERR("%s: invalid ldim_op_func\n", __func__);
|
||||
return;
|
||||
}
|
||||
if (ldim_dev.ldim_op_func->stts_init)
|
||||
ldim_dev.ldim_op_func->stts_init(resolution);
|
||||
|
||||
resolution_region = 0;
|
||||
|
||||
blk_height = (pic_v - 8) / BLK_Vnum;
|
||||
blk_width = (pic_h - 8) / BLK_Hnum;
|
||||
row_start = (pic_v - (blk_height * BLK_Vnum)) >> 1;
|
||||
col_start = (pic_h - (blk_width * BLK_Hnum)) >> 1;
|
||||
ldim_set_region(0, blk_height, blk_width,
|
||||
row_start, col_start, BLK_Hnum);
|
||||
}
|
||||
|
||||
static int LDIM_Update_Matrix(int NewBlMatrix[], int BlMatrixNum)
|
||||
{
|
||||
int data;
|
||||
|
||||
data = LDIM_RD_32Bits(REG_LD_MISC_CTRL0);
|
||||
if (data & (1 << 12)) { /*bl_ram_mode=1;*/
|
||||
if (LDIM_RD_32Bits(REG_LD_BLMAT_RAM_MISC) & 0x10000)
|
||||
/*Previous Matrix is not used*/
|
||||
goto Previous_Matrix;
|
||||
else {
|
||||
LDIM_WR_BASE_LUT_DRT(REG_LD_MATRIX_BASE,
|
||||
NewBlMatrix, BlMatrixNum);
|
||||
LDIM_WR_32Bits(REG_LD_BLMAT_RAM_MISC,
|
||||
(BlMatrixNum & 0x1ff) | (1 << 16));
|
||||
/*set Matrix update ready*/
|
||||
|
||||
return 0;
|
||||
}
|
||||
} else { /*bl_ram_mode=0*/
|
||||
/*set ram_clk_sel=0, ram_bus_sel = 0*/
|
||||
data = data & (~(3 << 9));
|
||||
LDIM_WR_32Bits(REG_LD_MISC_CTRL0, data);
|
||||
LDIM_WR_BASE_LUT_DRT(REG_LD_MATRIX_BASE,
|
||||
NewBlMatrix, BlMatrixNum);
|
||||
data = data | (3 << 9); /*set ram_clk_sel=1, ram_bus_sel = 1*/
|
||||
LDIM_WR_32Bits(REG_LD_MISC_CTRL0, data);
|
||||
|
||||
return 0;
|
||||
if (ldim_dev.ldim_op_func->stts_init) {
|
||||
ldim_dev.ldim_op_func->stts_init(pic_h, pic_v,
|
||||
BLK_Vnum, BLK_Hnum);
|
||||
}
|
||||
|
||||
Previous_Matrix:
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void ldim_initial_txlx(unsigned int ldim_bl_en,
|
||||
unsigned int ldim_hvcnt_bypass)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int data;
|
||||
unsigned int *arrayTmp;
|
||||
|
||||
arrayTmp = kcalloc(1536, sizeof(unsigned int), GFP_KERNEL);
|
||||
if (arrayTmp == NULL) {
|
||||
LDIMERR("%s malloc error\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
/* LD_FRM_SIZE */
|
||||
data = ((nPRM.reg_LD_pic_RowMax & 0xfff)<<16) |
|
||||
(nPRM.reg_LD_pic_ColMax & 0xfff);
|
||||
LDIM_WR_32Bits(REG_LD_FRM_SIZE, data);
|
||||
|
||||
/* LD_RGB_MOD */
|
||||
data = ((0 & 0xfff) << 20) |
|
||||
((nPRM.reg_LD_RGBmapping_demo & 0x1) << 19) |
|
||||
((nPRM.reg_LD_X_LUT_interp_mode[2] & 0x1) << 18) |
|
||||
((nPRM.reg_LD_X_LUT_interp_mode[1] & 0x1) << 17) |
|
||||
((nPRM.reg_LD_X_LUT_interp_mode[0] & 0x1) << 16) |
|
||||
((0 & 0x1) << 15) |
|
||||
((nPRM.reg_LD_BkLit_LPFmod & 0x7) << 12) |
|
||||
((nPRM.reg_LD_Litshft & 0x7) << 8) |
|
||||
((nPRM.reg_LD_BackLit_Xtlk & 0x1) << 7) |
|
||||
((nPRM.reg_LD_BkLit_Intmod & 0x1) << 6) |
|
||||
((nPRM.reg_LD_BkLUT_Intmod & 0x1) << 5) |
|
||||
((nPRM.reg_LD_BkLit_curmod & 0x1) << 4) |
|
||||
((nPRM.reg_LD_BackLit_mode & 0x3));
|
||||
LDIM_WR_32Bits(REG_LD_RGB_MOD, data);
|
||||
|
||||
/* LD_BLK_HVNUM */
|
||||
data = ((nPRM.reg_LD_Reflect_Vnum & 0x7) << 20) |
|
||||
((nPRM.reg_LD_Reflect_Hnum & 0x7) << 16) |
|
||||
((nPRM.reg_LD_BLK_Vnum & 0x3f) << 8) |
|
||||
((nPRM.reg_LD_BLK_Hnum & 0x3f));
|
||||
LDIM_WR_32Bits(REG_LD_BLK_HVNUM, data);
|
||||
|
||||
/* LD_HVGAIN */
|
||||
data = ((nPRM.reg_LD_Vgain & 0xfff) << 16) |
|
||||
(nPRM.reg_LD_Hgain & 0xfff);
|
||||
LDIM_WR_32Bits(REG_LD_HVGAIN, data);
|
||||
|
||||
/* LD_BKLIT_VLD */
|
||||
data = 0;
|
||||
for (i = 0; i < 32; i++)
|
||||
if (nPRM.reg_LD_BkLit_valid[i])
|
||||
data = data | (1 << i);
|
||||
LDIM_WR_32Bits(REG_LD_BKLIT_VLD, data);
|
||||
|
||||
/* LD_BKLIT_PARAM */
|
||||
data = ((nPRM.reg_LD_BkLit_Celnum & 0xff) << 16) |
|
||||
(nPRM.reg_BL_matrix_AVG & 0xfff);
|
||||
LDIM_WR_32Bits(REG_LD_BKLIT_PARAM, data);
|
||||
|
||||
/* LD_LIT_GAIN_COMP */
|
||||
data = ((nPRM.reg_LD_Litgain & 0xfff) << 16) |
|
||||
(nPRM.reg_BL_matrix_Compensate & 0xfff);
|
||||
LDIM_WR_32Bits(REG_LD_LIT_GAIN_COMP, data);
|
||||
|
||||
/* LD_FRM_RST_POS */
|
||||
data = (1 << 16) | (5); /* h=1,v=5 :ldim_param_frm_rst_pos */
|
||||
LDIM_WR_32Bits(REG_LD_FRM_RST_POS, data);
|
||||
|
||||
/* LD_FRM_BL_START_POS */
|
||||
data = (1 << 16) | (6); /* ldim_param_frm_bl_start_pos; */
|
||||
LDIM_WR_32Bits(REG_LD_FRM_BL_START_POS, data);
|
||||
|
||||
/* REG_LD_FRM_HBLAN_VHOLS */
|
||||
data = ((nPRM.reg_LD_LUT_VHo_LS & 0x7) << 16) |
|
||||
((6 & 0x1fff)) ; /*frm_hblank_num */
|
||||
LDIM_WR_32Bits(REG_LD_FRM_HBLAN_VHOLS, data);
|
||||
|
||||
/* REG_LD_XLUT_DEMO_ROI_XPOS */
|
||||
data = ((nPRM.reg_LD_xlut_demo_roi_xend & 0x1fff) << 16) |
|
||||
(nPRM.reg_LD_xlut_demo_roi_xstart & 0x1fff);
|
||||
LDIM_WR_32Bits(REG_LD_XLUT_DEMO_ROI_XPOS, data);
|
||||
|
||||
/* REG_LD_XLUT_DEMO_ROI_YPOS */
|
||||
data = ((nPRM.reg_LD_xlut_demo_roi_yend & 0x1fff) << 16) |
|
||||
(nPRM.reg_LD_xlut_demo_roi_ystart & 0x1fff);
|
||||
LDIM_WR_32Bits(REG_LD_XLUT_DEMO_ROI_YPOS, data);
|
||||
|
||||
/* REG_LD_XLUT_DEMO_ROI_CTRL */
|
||||
data = ((nPRM.reg_LD_xlut_oroi_enable & 0x1) << 1) |
|
||||
(nPRM.reg_LD_xlut_iroi_enable & 0x1);
|
||||
LDIM_WR_32Bits(REG_LD_XLUT_DEMO_ROI_CTRL, data);
|
||||
|
||||
/*LD_BLMAT_RAM_MISC*/
|
||||
LDIM_WR_32Bits(REG_LD_BLMAT_RAM_MISC, 384 & 0x1ff);
|
||||
|
||||
/* X_idx: 12*16 */
|
||||
LDIM_WR_BASE_LUT(REG_LD_RGB_IDX_BASE, nPRM.X_idx[0], 16, 16);
|
||||
|
||||
/* X_nrm[16]: 4 * 16 */
|
||||
LDIM_WR_BASE_LUT(REG_LD_RGB_NRMW_BASE_TXLX, nPRM.X_nrm[0], 4, 16);
|
||||
|
||||
/*reg_LD_BLK_Hidx[33]: 14*33 */
|
||||
LDIM_WR_BASE_LUT(REG_LD_BLK_HIDX_BASE_TXLX,
|
||||
nPRM.reg_LD_BLK_Hidx, 16, 33);
|
||||
|
||||
/* reg_LD_BLK_Vidx[25]: 14*25 */
|
||||
LDIM_WR_BASE_LUT(REG_LD_BLK_VIDX_BASE_TXLX,
|
||||
nPRM.reg_LD_BLK_Vidx, 16, 25);
|
||||
|
||||
/* reg_LD_LUT_VHk_pos[32]/reg_LD_LUT_VHk_neg[32]: u8 */
|
||||
for (i = 0; i < 32; i++)
|
||||
arrayTmp[i] = nPRM.reg_LD_LUT_VHk_pos[i];
|
||||
for (i = 0; i < 32; i++)
|
||||
arrayTmp[32+i] = nPRM.reg_LD_LUT_VHk_neg[i];
|
||||
LDIM_WR_BASE_LUT(REG_LD_LUT_VHK_NEGPOS_BASE_TXLX, arrayTmp, 8, 64);
|
||||
|
||||
/* reg_LD_LUT_VHo_pos[32]/reg_LD_LUT_VHo_neg[32]: s8 */
|
||||
for (i = 0; i < 32; i++)
|
||||
arrayTmp[i] = nPRM.reg_LD_LUT_VHo_pos[i];
|
||||
for (i = 0; i < 32; i++)
|
||||
arrayTmp[32+i] = nPRM.reg_LD_LUT_VHo_neg[i];
|
||||
LDIM_WR_BASE_LUT(REG_LD_LUT_VHO_NEGPOS_BASE_TXLX, arrayTmp, 8, 64);
|
||||
|
||||
/* reg_LD_LUT_HHk[32]:u8 */
|
||||
LDIM_WR_BASE_LUT(REG_LD_LUT_HHK_BASE_TXLX, nPRM.reg_LD_LUT_HHk, 8, 32);
|
||||
|
||||
/*reg_LD_Reflect_Hdgr[20],reg_LD_Reflect_Vdgr[20],
|
||||
* reg_LD_Reflect_Xdgr[4]
|
||||
*/
|
||||
for (i = 0; i < 20; i++)
|
||||
arrayTmp[i] = nPRM.reg_LD_Reflect_Hdgr[i];
|
||||
for (i = 0; i < 20; i++)
|
||||
arrayTmp[20+i] = nPRM.reg_LD_Reflect_Vdgr[i];
|
||||
for (i = 0; i < 4; i++)
|
||||
arrayTmp[40+i] = nPRM.reg_LD_Reflect_Xdgr[i];
|
||||
LDIM_WR_BASE_LUT(REG_LD_REFLECT_DGR_BASE_TXLX, arrayTmp, 8, 44);
|
||||
|
||||
/*reg_LD_LUT_Hdg_LEXT[8]/reg_LD_LUT_Vdg_LEXT[8]/reg_LD_LUT_VHk_LEXT[8]*/
|
||||
for (i = 0; i < 8; i++)
|
||||
arrayTmp[i] = (nPRM.reg_LD_LUT_Hdg_LEXT_TXLX[i] & 0x3ff) |
|
||||
((nPRM.reg_LD_LUT_VHk_LEXT_TXLX[i] & 0x3ff) << 10) |
|
||||
((nPRM.reg_LD_LUT_Vdg_LEXT_TXLX[i] & 0x3ff) << 20);
|
||||
LDIM_WR_BASE_LUT_DRT(REG_LD_LUT_LEXT_BASE_TXLX, arrayTmp, 8);
|
||||
|
||||
/*reg_LD_LUT_Hdg[8][32]: u10*8*32*/
|
||||
LDIM_WR_BASE_LUT(REG_LD_LUT_HDG_BASE_TXLX,
|
||||
nPRM.reg_LD_LUT_Hdg_TXLX[0], 16, 8*32);
|
||||
|
||||
/*reg_LD_LUT_Vdg[8][32]: u10*8*32*/
|
||||
LDIM_WR_BASE_LUT(REG_LD_LUT_VDG_BASE_TXLX,
|
||||
nPRM.reg_LD_LUT_Vdg_TXLX[0], 16, 8*32);
|
||||
|
||||
/*reg_LD_LUT_VHk[8][32]: u10*8*32*/
|
||||
LDIM_WR_BASE_LUT(REG_LD_LUT_VHK_BASE_TXLX,
|
||||
nPRM.reg_LD_LUT_VHk_TXLX[0], 16, 8*32);
|
||||
|
||||
/*reg_LD_LUT_Id[16][24]: u3*16*24=u3*384 */
|
||||
LDIM_WR_BASE_LUT(REG_LD_LUT_ID_BASE_TXLX, nPRM.reg_LD_LUT_Id, 4, 384);
|
||||
|
||||
/*enable the CBUS configure the RAM*/
|
||||
/*LD_MISC_CTRL0 {reg_blmat_ram_mode,
|
||||
*1'h0,ram_bus_sel,ram_clk_sel,ram_clk_gate_en,
|
||||
*2'h0,reg_hvcnt_bypass,reg_demo_synmode,reg_ldbl_synmode,
|
||||
*reg_ldim_bl_en,soft_bl_start,reg_soft_rst)
|
||||
*/
|
||||
data = LDIM_RD_32Bits(REG_LD_MISC_CTRL0);
|
||||
data = (data & (~(3 << 9))) | (1 << 8);
|
||||
LDIM_WR_32Bits(REG_LD_MISC_CTRL0, data);
|
||||
|
||||
/*X_lut[3][16][16]*/
|
||||
LDIM_WR_BASE_LUT_DRT(REG_LD_RGB_LUT_BASE, nPRM.X_lut2[0][0], 3*16*16);
|
||||
data = 0 | (0 << 1) | ((ldim_bl_en & 0x1) << 2) |
|
||||
(ldim_hvcnt_bypass << 5) | (1 << 8) |
|
||||
(3 << 9) | (1 << 12);
|
||||
LDIM_WR_32Bits(REG_LD_MISC_CTRL0, data);
|
||||
|
||||
LDIM_Update_Matrix(nPRM.BL_matrix, 16 * 24);
|
||||
|
||||
kfree(arrayTmp);
|
||||
}
|
||||
|
||||
static void LDIM_Initial(unsigned int pic_h, unsigned int pic_v,
|
||||
@@ -591,105 +355,23 @@ static void LDIM_Initial(unsigned int pic_h, unsigned int pic_v,
|
||||
LDIMERR("%s: invalid ldim_op_func\n", __func__);
|
||||
return;
|
||||
}
|
||||
if (ldim_dev.ldim_op_func->ldim_init)
|
||||
ldim_dev.ldim_op_func->ldim_init(ldim_bl_en, ldim_hvcnt_bypass);
|
||||
}
|
||||
|
||||
static void ldim_update_matrix(unsigned int mode)
|
||||
{
|
||||
unsigned int data;
|
||||
int bl_matrix[8] = {0};
|
||||
unsigned int reg_BL_matrix_Compensate = 0x0;
|
||||
int bl_matrix_1[8] = {0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
|
||||
0xfff, 0xfff};
|
||||
unsigned int reg_BL_matrix_Compensate_1 = 0xfff;
|
||||
int bl_matrix_2[8] = {0xfff, 0xfff, 0xfff, 0x000, 0x000, 0xfff,
|
||||
0xfff, 0xfff};
|
||||
unsigned int reg_BL_matrix_Compensate_2 = 0xbff;
|
||||
int bl_matrix_3[8] = {0, 0, 0, 0xfff, 0, 0, 0, 0};
|
||||
unsigned int reg_BL_matrix_Compensate_3 = 0x1ff;
|
||||
int bl_matrix_4[8] = {0xfff, 0xfff, 0xfff, 0, 0xfff, 0xfff,
|
||||
0xfff, 0xfff};
|
||||
unsigned int reg_BL_matrix_Compensate_4 = 0xdff;
|
||||
|
||||
data = LDIM_RD_32Bits(REG_LD_MISC_CTRL0);
|
||||
data = data & (~(3<<4));
|
||||
LDIM_WR_32Bits(REG_LD_MISC_CTRL0, data);
|
||||
|
||||
/* gMatrix_LUT: s12*100 ==> max to 8*8 enum ##r/w ram method*/
|
||||
if (mode == 0) {
|
||||
LDIM_WR_BASE_LUT_DRT(REG_LD_MATRIX_BASE,
|
||||
&bl_matrix[0], 8);
|
||||
/* compensate */
|
||||
data = LDIM_RD_32Bits(REG_LD_LIT_GAIN_COMP);
|
||||
data = data|(reg_BL_matrix_Compensate&0xfff);
|
||||
LDIM_WR_32Bits(REG_LD_LIT_GAIN_COMP, data);
|
||||
} else if (mode == 1) {
|
||||
LDIM_WR_BASE_LUT_DRT(REG_LD_MATRIX_BASE,
|
||||
&bl_matrix_1[0], 8);
|
||||
/* compensate */
|
||||
data = LDIM_RD_32Bits(REG_LD_LIT_GAIN_COMP);
|
||||
data = data | (reg_BL_matrix_Compensate_1 & 0xfff);
|
||||
LDIM_WR_32Bits(REG_LD_LIT_GAIN_COMP, data);
|
||||
} else if (mode == 2) {
|
||||
LDIM_WR_BASE_LUT_DRT(REG_LD_MATRIX_BASE,
|
||||
&bl_matrix_2[0], 8);
|
||||
/* compensate */
|
||||
data = LDIM_RD_32Bits(REG_LD_LIT_GAIN_COMP);
|
||||
data = data|(reg_BL_matrix_Compensate_2 & 0xfff);
|
||||
LDIM_WR_32Bits(REG_LD_LIT_GAIN_COMP, data);
|
||||
} else if (mode == 3) {
|
||||
LDIM_WR_BASE_LUT_DRT(REG_LD_MATRIX_BASE,
|
||||
&bl_matrix_3[0], 8);
|
||||
/* compensate */
|
||||
data = LDIM_RD_32Bits(REG_LD_LIT_GAIN_COMP);
|
||||
data = data | (reg_BL_matrix_Compensate_3 & 0xfff);
|
||||
LDIM_WR_32Bits(REG_LD_LIT_GAIN_COMP, data);
|
||||
} else if (mode == 4) {
|
||||
LDIM_WR_BASE_LUT_DRT(REG_LD_MATRIX_BASE,
|
||||
&bl_matrix_4[0], 8);
|
||||
/* compensate */
|
||||
data = LDIM_RD_32Bits(REG_LD_LIT_GAIN_COMP);
|
||||
data = data | (reg_BL_matrix_Compensate_4 & 0xfff);
|
||||
LDIM_WR_32Bits(REG_LD_LIT_GAIN_COMP, data);
|
||||
if (ldim_dev.ldim_op_func->ldim_init) {
|
||||
ldim_dev.ldim_op_func->ldim_init(&nPRM,
|
||||
ldim_bl_en, ldim_hvcnt_bypass);
|
||||
}
|
||||
/* disable the CBUS configure the RAM */
|
||||
data = LDIM_RD_32Bits(REG_LD_MISC_CTRL0);
|
||||
data = data | (3<<4);
|
||||
LDIM_WR_32Bits(REG_LD_MISC_CTRL0, data);
|
||||
}
|
||||
|
||||
static void ldim_update_txlx(void)
|
||||
{
|
||||
unsigned int data;
|
||||
|
||||
if (ldim_avg_update_en) {
|
||||
/* LD_BKLIT_PARAM */
|
||||
data = LDIM_RD_32Bits(REG_LD_BKLIT_PARAM);
|
||||
data = (data&(~0xfff)) | (nPRM.reg_BL_matrix_AVG&0xfff);
|
||||
LDIM_WR_32Bits(REG_LD_BKLIT_PARAM, data);
|
||||
|
||||
/* compensate */
|
||||
data = LDIM_RD_32Bits(REG_LD_LIT_GAIN_COMP);
|
||||
data = (data&(~0xfff)) |
|
||||
(nPRM.reg_BL_matrix_Compensate & 0xfff);
|
||||
LDIM_WR_32Bits(REG_LD_LIT_GAIN_COMP, data);
|
||||
}
|
||||
|
||||
if (ldim_matrix_update_en)
|
||||
LDIM_Update_Matrix(nPRM.BL_matrix, ldim_blk_row*ldim_blk_col);
|
||||
|
||||
}
|
||||
|
||||
static void ldim_update_setting(void)
|
||||
static void ldim_remap_update(void)
|
||||
{
|
||||
if (ldim_dev.ldim_op_func == NULL) {
|
||||
if (brightness_vs_cnt == 0)
|
||||
LDIMERR("%s: invalid ldim_op_func\n", __func__);
|
||||
return;
|
||||
}
|
||||
if (ldim_dev.ldim_op_func->update_setting)
|
||||
ldim_dev.ldim_op_func->update_setting();
|
||||
if (ldim_dev.ldim_op_func->remap_update) {
|
||||
ldim_dev.ldim_op_func->remap_update(&nPRM,
|
||||
ldim_avg_update_en, ldim_matrix_update_en);
|
||||
}
|
||||
}
|
||||
|
||||
static irqreturn_t ldim_vsync_isr(int irq, void *dev_id)
|
||||
@@ -706,7 +388,7 @@ static irqreturn_t ldim_vsync_isr(int irq, void *dev_id)
|
||||
|
||||
if (ldim_func_en) {
|
||||
if (ldim_avg_update_en)
|
||||
ldim_update_setting();
|
||||
ldim_remap_update();
|
||||
|
||||
if (ldim_hist_en) {
|
||||
/*schedule_work(&ldim_on_vs_work);*/
|
||||
@@ -1293,7 +975,7 @@ static void ldim_get_matrix_info(void)
|
||||
}
|
||||
|
||||
pr_info("current black_frm: %d\n", ldim_fw_para.black_frm);
|
||||
pr_info("spi transfer_matrix:\n");
|
||||
pr_info("ldim_dev brightness transfer_matrix:\n");
|
||||
for (i = 0; i < ldim_blk_row; i++) {
|
||||
len = 0;
|
||||
for (j = 0; j < ldim_blk_col; j++) {
|
||||
@@ -1662,7 +1344,8 @@ static int ldim_on_init(void)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
LDIMPR("%s\n", __func__);
|
||||
if (ldim_debug_print)
|
||||
LDIMPR("%s\n", __func__);
|
||||
|
||||
/* init ldim */
|
||||
ldim_stts_initial(ldim_config.hsize, ldim_config.vsize,
|
||||
@@ -1775,6 +1458,45 @@ struct aml_ldim_driver_s *aml_ldim_get_driver(void)
|
||||
return &ldim_driver;
|
||||
}
|
||||
|
||||
/* ******************************************************
|
||||
* local dimming dummy function for virtual ldim dev
|
||||
* ******************************************************
|
||||
*/
|
||||
static int ldim_virtual_smr(unsigned short *buf, unsigned char len)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ldim_virtual_power_on(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ldim_virtual_power_off(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ldim_virtual_driver_update(struct aml_ldim_driver_s *ldim_drv)
|
||||
{
|
||||
ldim_drv->device_power_on = ldim_virtual_power_on;
|
||||
ldim_drv->device_power_off = ldim_virtual_power_off;
|
||||
ldim_drv->device_bri_update = ldim_virtual_smr;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ldim_dev_add_virtual_driver(struct aml_ldim_driver_s *ldim_drv)
|
||||
{
|
||||
LDIMPR("%s\n", __func__);
|
||||
|
||||
ldim_virtual_driver_update(ldim_drv);
|
||||
ldim_drv->init();
|
||||
|
||||
return 0;
|
||||
}
|
||||
/* ****************************************************** */
|
||||
|
||||
static int ldim_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct ldim_dev_s *devp;
|
||||
@@ -2356,16 +2078,6 @@ static ssize_t ldim_attr_store(struct class *cla,
|
||||
pr_info("reg_addr: 0x%x=0x%x, readback: 0x%x\n",
|
||||
reg_addr, reg_val, LDIM_RD_32Bits(reg_addr));
|
||||
}
|
||||
} else if (!strcmp(parm[0], "update_matrix")) {
|
||||
unsigned int mode = 0;
|
||||
|
||||
if (parm[1] != NULL) {
|
||||
if (kstrtouint(parm[1], 10, &mode) < 0)
|
||||
goto ldim_attr_store_err;
|
||||
|
||||
ldim_update_matrix(mode);
|
||||
pr_info("mode: %d\n", mode);
|
||||
}
|
||||
} else if (!strcmp(parm[0], "bl_remap_curve")) {
|
||||
if (parm[1] != NULL) {
|
||||
if (!strcmp(parm[1], "r")) {
|
||||
@@ -2855,7 +2567,8 @@ static ssize_t ldim_attr_store(struct class *cla,
|
||||
ldim_fw_para.Dbprint_lv);
|
||||
} else if (!strcmp(parm[0], "info")) {
|
||||
pr_info("ldim_drv_ver: %s\n", LDIM_DRV_VER);
|
||||
ldim_driver.config_print();
|
||||
if (ldim_driver.config_print)
|
||||
ldim_driver.config_print();
|
||||
pr_info("\nldim_blk_row = %d\n"
|
||||
"ldim_blk_col = %d\n"
|
||||
"ldim_hist_row = %d\n"
|
||||
@@ -2944,10 +2657,32 @@ static ssize_t ldim_func_en_store(struct class *class,
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t ldim_para_show(struct class *class,
|
||||
struct class_attribute *attr, char *buf)
|
||||
{
|
||||
int len = 0;
|
||||
|
||||
len = sprintf(buf, "boost_gain=%d\n", ldim_fw_para.boost_gain);
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
static ssize_t ldim_dump_show(struct class *class,
|
||||
struct class_attribute *attr, char *buf)
|
||||
{
|
||||
int len = 0;
|
||||
|
||||
len = ldim_hw_reg_dump(buf);
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
static struct class_attribute aml_ldim_class_attrs[] = {
|
||||
__ATTR(attr, 0644, ldim_attr_show, ldim_attr_store),
|
||||
__ATTR(func_en, 0644,
|
||||
ldim_func_en_show, ldim_func_en_store),
|
||||
__ATTR(para, 0644, ldim_para_show, NULL),
|
||||
__ATTR(dump, 0644, ldim_dump_show, NULL),
|
||||
__ATTR_NULL,
|
||||
};
|
||||
|
||||
@@ -3000,7 +2735,8 @@ int aml_ldim_get_config_dts(struct device_node *child)
|
||||
LDIMERR("failed to get ldim_dev_index\n");
|
||||
else
|
||||
ldim_driver.dev_index = (unsigned char)para[0];
|
||||
LDIMPR("get ldim_dev_index = %d\n", ldim_driver.dev_index);
|
||||
if (ldim_driver.dev_index < 0xff)
|
||||
LDIMPR("get ldim_dev_index = %d\n", ldim_driver.dev_index);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -3032,7 +2768,8 @@ int aml_ldim_get_config_unifykey(unsigned char *buf)
|
||||
|
||||
/* get ldim_dev_index 1byte*/
|
||||
ldim_driver.dev_index = *(p + LCD_UKEY_BL_LDIM_DEV_INDEX);
|
||||
LDIMPR("get dev_index = %d\n", ldim_driver.dev_index);
|
||||
if (ldim_driver.dev_index < 0xff)
|
||||
LDIMPR("get dev_index = %d\n", ldim_driver.dev_index);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -3192,17 +2929,52 @@ ldim_malloc_err0:
|
||||
}
|
||||
|
||||
static struct ldim_operate_func_s ldim_op_func_txlx = {
|
||||
.update_setting = ldim_update_txlx,
|
||||
.h_region_max = 24,
|
||||
.v_region_max = 16,
|
||||
.total_region_max = 384,
|
||||
.remap_update = ldim_remap_update_txlx,
|
||||
.stts_init = ldim_stts_initial_txlx,
|
||||
.ldim_init = ldim_initial_txlx,
|
||||
};
|
||||
|
||||
static struct ldim_operate_func_s ldim_op_func_tl1 = {
|
||||
.update_setting = NULL,
|
||||
.stts_init = NULL,
|
||||
.h_region_max = 31,
|
||||
.v_region_max = 16,
|
||||
.total_region_max = 128,
|
||||
.remap_update = NULL,
|
||||
.stts_init = ldim_stts_initial_tl1,
|
||||
.ldim_init = NULL,
|
||||
};
|
||||
|
||||
static int ldim_region_num_check(struct ldim_operate_func_s *ldim_func)
|
||||
{
|
||||
unsigned short temp;
|
||||
|
||||
if (ldim_func == NULL) {
|
||||
LDIMERR("%s: ldim_func is NULL\n", __func__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ldim_config.row > ldim_func->v_region_max) {
|
||||
LDIMERR("%s: blk row (%d) is out of support (%d)\n",
|
||||
__func__, ldim_config.row, ldim_func->v_region_max);
|
||||
return -1;
|
||||
}
|
||||
if (ldim_config.col > ldim_func->h_region_max) {
|
||||
LDIMERR("%s: blk col (%d) is out of support (%d)\n",
|
||||
__func__, ldim_config.col, ldim_func->h_region_max);
|
||||
return -1;
|
||||
}
|
||||
temp = ldim_config.row * ldim_config.col;
|
||||
if (temp > ldim_func->total_region_max) {
|
||||
LDIMERR("%s: blk total region (%d) is out of support (%d)\n",
|
||||
__func__, temp, ldim_func->total_region_max);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int aml_ldim_probe(struct platform_device *pdev)
|
||||
{
|
||||
int ret = 0;
|
||||
@@ -3250,6 +3022,9 @@ int aml_ldim_probe(struct platform_device *pdev)
|
||||
devp->ldim_op_func = NULL;
|
||||
break;
|
||||
}
|
||||
ret = ldim_region_num_check(devp->ldim_op_func);
|
||||
if (ret)
|
||||
return -1;
|
||||
|
||||
ret = aml_ldim_malloc(ldim_blk_row, ldim_blk_col);
|
||||
if (ret) {
|
||||
@@ -3320,12 +3095,18 @@ int aml_ldim_probe(struct platform_device *pdev)
|
||||
goto err;
|
||||
}
|
||||
ldim_vsync_irq = bl_drv->res_ldim_vsync_irq->start;
|
||||
LDIMPR("ldim_vsync_irq: %d\n", ldim_vsync_irq);
|
||||
if (ldim_debug_print)
|
||||
LDIMPR("ldim_vsync_irq: %d\n", ldim_vsync_irq);
|
||||
if (request_irq(ldim_vsync_irq, ldim_vsync_isr, IRQF_SHARED,
|
||||
"ldim_vsync", (void *)"ldim_vsync"))
|
||||
"ldim_vsync", (void *)"ldim_vsync")) {
|
||||
LDIMERR("can't request ldim_vsync_irq\n");
|
||||
else
|
||||
LDIMPR("request ldim_vsync_irq successful\n");
|
||||
} else {
|
||||
if (ldim_debug_print)
|
||||
LDIMPR("request ldim_vsync_irq successful\n");
|
||||
}
|
||||
|
||||
if (bl_drv->bconf->method != BL_CTRL_LOCAL_DIMMING)
|
||||
ldim_dev_add_virtual_driver(&ldim_driver);
|
||||
|
||||
ldim_driver.valid_flag = 1;
|
||||
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
/*20180820: pq tooling support, espically optimize some alg parameters */
|
||||
/*20181101: fix ldim_op_func null mistake, add new spi api support */
|
||||
/*20181203: add 50/60hz change & iw7027 error handle support */
|
||||
#define LDIM_DRV_VER "20181203"
|
||||
/*20181220: add tl1 support*/
|
||||
#define LDIM_DRV_VER "20181220"
|
||||
|
||||
extern unsigned char ldim_debug_print;
|
||||
|
||||
@@ -39,25 +40,36 @@ extern int LD_remap_lut[16][32];
|
||||
/*========================================*/
|
||||
|
||||
struct ldim_operate_func_s {
|
||||
void (*update_setting)(void);
|
||||
void (*stts_init)(unsigned int resolution);
|
||||
void (*ldim_init)(unsigned int bl_en, unsigned int hvcnt_bypass);
|
||||
unsigned short h_region_max;
|
||||
unsigned short v_region_max;
|
||||
unsigned short total_region_max;
|
||||
void (*remap_update)(struct LDReg_s *nPRM,
|
||||
unsigned int avg_update_en, unsigned int matrix_update_en);
|
||||
void (*stts_init)(unsigned int pic_h, unsigned int pic_v,
|
||||
unsigned int blk_vnum, unsigned int blk_hnum);
|
||||
void (*ldim_init)(struct LDReg_s *nPRM,
|
||||
unsigned int bl_en, unsigned int hvcnt_bypass);
|
||||
};
|
||||
|
||||
/*========================================*/
|
||||
|
||||
extern int ldim_round(int ix, int ib);
|
||||
extern void ldim_stts_en(unsigned int resolution, unsigned int pix_drop_mode,
|
||||
unsigned int eol_en, unsigned int hist_mode, unsigned int lpf_en,
|
||||
unsigned int rd_idx_auto_inc_mode, unsigned int one_ram_en);
|
||||
extern void ldim_set_region(unsigned int resolution, unsigned int blk_height,
|
||||
unsigned int blk_width, unsigned int row_start, unsigned int col_start,
|
||||
unsigned int blk_hnum);
|
||||
extern void LD_ConLDReg(struct LDReg_s *Reg);
|
||||
extern void ld_fw_cfg_once(struct LDReg_s *nPRM);
|
||||
extern void ldim_stts_read_region(unsigned int nrow, unsigned int ncol);
|
||||
|
||||
/* ldim hw */
|
||||
extern int ldim_hw_reg_dump(char *buf);
|
||||
extern void ldim_stts_read_region(unsigned int nrow, unsigned int ncol);
|
||||
extern void ldim_set_matrix_ycbcr2rgb(void);
|
||||
extern void ldim_set_matrix_rgb2ycbcr(int mode);
|
||||
|
||||
extern void ldim_initial_txlx(struct LDReg_s *nPRM,
|
||||
unsigned int ldim_bl_en, unsigned int ldim_hvcnt_bypass);
|
||||
extern void ldim_stts_initial_txlx(unsigned int pic_h, unsigned int pic_v,
|
||||
unsigned int blk_vnum, unsigned int blk_hnum);
|
||||
extern void ldim_stts_initial_tl1(unsigned int pic_h, unsigned int pic_v,
|
||||
unsigned int blk_vnum, unsigned int blk_hnum);
|
||||
extern void ldim_remap_update_txlx(struct LDReg_s *nPRM,
|
||||
unsigned int avg_update_en, unsigned int matrix_update_en);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -38,9 +38,6 @@
|
||||
#define MIN(a, b) ((a < b) ? a:b)
|
||||
#endif
|
||||
|
||||
#define Wr(reg, val) Wr_reg(reg, val)
|
||||
#define Rd(reg) Rd_reg(reg)
|
||||
|
||||
static int LD_BLK_Hidx[33] = {
|
||||
/* S14* 33 */
|
||||
-1920, -1440, -960, -480, 0, 480,
|
||||
@@ -246,385 +243,6 @@ int ldim_round(int ix, int ib)
|
||||
return ld_rst;
|
||||
}
|
||||
|
||||
/***** local dimming stts functions begin *****/
|
||||
/*hist mode: 0: comp0 hist only, 1: Max(comp0,1,2) for hist,
|
||||
*2: the hist of all comp0,1,2 are calculated
|
||||
*/
|
||||
/*lpf_en 1: 1,2,1 filter on before finding max& hist*/
|
||||
/*rd_idx_auto_inc_mode 0: no self increase, 1: read index increase after
|
||||
*read a 25/48 block, 2: increases every read and lock sub-idx
|
||||
*/
|
||||
/*one_ram_en 1: one ram mode; 0:double ram mode*/
|
||||
void ldim_stts_en(unsigned int resolution, unsigned int pix_drop_mode,
|
||||
unsigned int eol_en, unsigned int hist_mode, unsigned int lpf_en,
|
||||
unsigned int rd_idx_auto_inc_mode, unsigned int one_ram_en)
|
||||
{
|
||||
int data32;
|
||||
|
||||
Wr(LDIM_STTS_GCLK_CTRL0, 0x0);
|
||||
Wr(LDIM_STTS_WIDTHM1_HEIGHTM1, resolution);
|
||||
|
||||
data32 = 0x80000000 | ((pix_drop_mode & 0x3) << 29);
|
||||
data32 = data32 | ((eol_en & 0x1) << 28);
|
||||
data32 = data32 | ((one_ram_en & 0x1) << 27);
|
||||
data32 = data32 | ((hist_mode & 0x3) << 22);
|
||||
data32 = data32 | ((lpf_en & 0x1) << 21);
|
||||
data32 = data32 | ((rd_idx_auto_inc_mode & 0xff) << 14);
|
||||
Wr(LDIM_STTS_HIST_REGION_IDX, data32);
|
||||
}
|
||||
|
||||
void ldim_set_region(unsigned int resolution, unsigned int blk_height,
|
||||
unsigned int blk_width, unsigned int row_start, unsigned int col_start,
|
||||
unsigned int blk_hnum)
|
||||
{
|
||||
unsigned int hend0, hend1, hend2, hend3, hend4, hend5,
|
||||
hend6, hend7, hend8, hend9, hend10, hend11, hend12,
|
||||
hend13, hend14, hend15, hend16, hend17, hend18,
|
||||
hend19, hend20, hend21, hend22, hend23;
|
||||
unsigned int vend0, vend1, vend2, vend3, vend4, vend5,
|
||||
vend6, vend7, vend8, vend9, vend10, vend11,
|
||||
vend12, vend13, vend14, vend15;
|
||||
unsigned int data32, k, h_index[24], v_index[16];
|
||||
|
||||
if (resolution == 0) {
|
||||
h_index[0] = col_start + blk_width - 1;
|
||||
for (k = 1; k < 24; k++) {
|
||||
h_index[k] = h_index[k-1] + blk_width;
|
||||
if (h_index[k] > 4095)
|
||||
h_index[k] = 4095; /* clip U12 */
|
||||
}
|
||||
v_index[0] = row_start + blk_height - 1;
|
||||
for (k = 1; k < 16; k++) {
|
||||
v_index[k] = v_index[k-1] + blk_height;
|
||||
if (v_index[k] > 4095)
|
||||
v_index[k] = 4095; /* clip U12 */
|
||||
}
|
||||
hend0 = h_index[0];/*col_start + blk_width - 1;*/
|
||||
hend1 = h_index[1];/*hend0 + blk_width;*/
|
||||
hend2 = h_index[2];/*hend1 + blk_width;*/
|
||||
hend3 = h_index[3];/*hend2 + blk_width;*/
|
||||
hend4 = h_index[4];/*hend3 + blk_width;*/
|
||||
hend5 = h_index[5];/*hend4 + blk_width;*/
|
||||
hend6 = h_index[6];/*hend5 + blk_width;*/
|
||||
hend7 = h_index[7];/*hend6 + blk_width;*/
|
||||
hend8 = h_index[8];/*hend7 + blk_width;*/
|
||||
hend9 = h_index[9];/*hend8 + blk_width;*/
|
||||
hend10 = h_index[10];/*hend9 + blk_width ;*/
|
||||
hend11 = h_index[11];/*hend10 + blk_width;*/
|
||||
hend12 = h_index[12];/*hend11 + blk_width;*/
|
||||
hend13 = h_index[13];/*hend12 + blk_width;*/
|
||||
hend14 = h_index[14];/*hend13 + blk_width;*/
|
||||
hend15 = h_index[15];/*hend14 + blk_width;*/
|
||||
hend16 = h_index[16];/*hend15 + blk_width;*/
|
||||
hend17 = h_index[17];/*hend16 + blk_width;*/
|
||||
hend18 = h_index[18];/*hend17 + blk_width;*/
|
||||
hend19 = h_index[19];/*hend18 + blk_width;*/
|
||||
hend20 = h_index[20];/*hend19 + blk_width ;*/
|
||||
hend21 = h_index[21];/*hend20 + blk_width;*/
|
||||
hend22 = h_index[22];/*hend21 + blk_width;*/
|
||||
hend23 = h_index[23];/*hend22 + blk_width;*/
|
||||
vend0 = v_index[0];/*row_start + blk_height - 1;*/
|
||||
vend1 = v_index[1];/*vend0 + blk_height;*/
|
||||
vend2 = v_index[2];/*vend1 + blk_height;*/
|
||||
vend3 = v_index[3];/*vend2 + blk_height;*/
|
||||
vend4 = v_index[4];/*vend3 + blk_height;*/
|
||||
vend5 = v_index[5];/*vend4 + blk_height;*/
|
||||
vend6 = v_index[6];/*vend5 + blk_height;*/
|
||||
vend7 = v_index[7];/*vend6 + blk_height;*/
|
||||
vend8 = v_index[8];/*vend7 + blk_height;*/
|
||||
vend9 = v_index[9];/*vend8 + blk_height;*/
|
||||
vend10 = v_index[10];/*vend9 + blk_height;*/
|
||||
vend11 = v_index[11];/*vend10 + blk_height;*/
|
||||
vend12 = v_index[12];/*vend11 + blk_height;*/
|
||||
vend13 = v_index[13];/*vend12 + blk_height;*/
|
||||
vend14 = v_index[14];/*vend13 + blk_height;*/
|
||||
vend15 = v_index[15];/*vend14 + blk_height;*/
|
||||
|
||||
data32 = Rd(LDIM_STTS_HIST_REGION_IDX);
|
||||
Wr(LDIM_STTS_HIST_REGION_IDX, 0xffe0ffff & data32);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, ((((row_start & 0x1fff) << 16)
|
||||
& 0xffff0000) | (col_start & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((hend1 & 0x1fff) << 16)
|
||||
| (hend0 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((vend1 & 0x1fff) << 16)
|
||||
| (vend0 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((hend3 & 0x1fff) << 16)
|
||||
| (hend2 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((vend3 & 0x1fff) << 16)
|
||||
| (vend2 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((hend5 & 0x1fff) << 16)
|
||||
| (hend4 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((vend5 & 0x1fff) << 16)
|
||||
| (vend4 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((hend7 & 0x1fff) << 16)
|
||||
| (hend6 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((vend7 & 0x1fff) << 16)
|
||||
| (vend6 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((hend9 & 0x1fff) << 16)
|
||||
| (hend8 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((vend9 & 0x1fff) << 16)
|
||||
| (vend8 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((hend11 & 0x1fff) << 16)
|
||||
| (hend10 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((vend11 & 0x1fff) << 16)
|
||||
| (vend10 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((hend13 & 0x1fff) << 16)
|
||||
| (hend12 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((vend13 & 0x1fff) << 16)
|
||||
| (vend12 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((hend15 & 0x1fff) << 16)
|
||||
| (hend14 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((vend15 & 0x1fff) << 16)
|
||||
| (vend14 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((hend17 & 0x1fff) << 16)
|
||||
| (hend16 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((hend19 & 0x1fff) << 16)
|
||||
| (hend18 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((hend21 & 0x1fff) << 16)
|
||||
| (hend20 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, (((hend23 & 0x1fff) << 16)
|
||||
| (hend22 & 0x1fff)));
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, blk_hnum); /*h region number*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0); /*line_n_int_num*/
|
||||
} else if (resolution == 1) {
|
||||
data32 = Rd(LDIM_STTS_HIST_REGION_IDX);
|
||||
Wr(LDIM_STTS_HIST_REGION_IDX, 0xfff0ffff & data32);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x0010010);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x1000080);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x0800040);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x2000180);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x10000c0);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x3000280);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x1800140);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4000380);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x20001c0);
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x4ff0480);*/
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x2cf0260);*/
|
||||
} else if (resolution == 2) {
|
||||
data32 = Rd(LDIM_STTS_HIST_REGION_IDX);
|
||||
Wr(LDIM_STTS_HIST_REGION_IDX, 0xfff0ffff & data32);
|
||||
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x0000000);/*hv00*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x17f00bf);/*h01*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x0d7006b);/*v01*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x2ff023f);/*h23*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x1af0143);/*v23*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x47f03bf);/*h45*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x287021b);/*v45*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x5ff053f);/*h67*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x35f02f3);/*v67*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0xffe0ffe);/*h89*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0xffe0ffe);/*v89*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0xffe0ffe);/*h1011*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0xffe0ffe);/*v1011*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0xffe0ffe);/*h1213*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0xffe0ffe);/*v1213*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0xffe0ffe);/*h1415*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0xffe0ffe);/*v1415*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0xffe0ffe);/*h1617*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0xffe0ffe);/*h1819*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0xffe0ffe);/*h2021*/
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0xffe0ffe);/*h2223*/
|
||||
} else if (resolution == 3) {
|
||||
data32 = Rd(LDIM_STTS_HIST_REGION_IDX);
|
||||
Wr(LDIM_STTS_HIST_REGION_IDX, 0xfff0ffff & data32);
|
||||
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x0000000);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x1df00ef);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x10d0086);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x3bf02cf);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x21b0194);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x59f04af);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x32902a2);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x77f068f);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x43703b0);
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);*/
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);*/
|
||||
} else if (resolution == 4) { /* 5x6 */
|
||||
data32 = Rd(LDIM_STTS_HIST_REGION_IDX);
|
||||
Wr(LDIM_STTS_HIST_REGION_IDX, 0xfff0ffff & data32);
|
||||
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x0040001);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x27f0136);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x1af00d7);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4ff03bf);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x35f0287);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x77f063f);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4380437);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);*/
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);*/
|
||||
} else if (resolution == 5) { /* 8x2 */
|
||||
data32 = Rd(LDIM_STTS_HIST_REGION_IDX);
|
||||
Wr(LDIM_STTS_HIST_REGION_IDX, 0xfff0ffff & data32);
|
||||
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x0030002);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x31f02bb);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x0940031);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x233012b);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x30b0243);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x42d03d3);
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);*/
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);*/
|
||||
} else if (resolution == 6) { /* 2x1 */
|
||||
data32 = Rd(LDIM_STTS_HIST_REGION_IDX);
|
||||
Wr(LDIM_STTS_HIST_REGION_IDX, 0xfff0ffff & data32);
|
||||
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x0030002);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x78002bb);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x0940031);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);*/
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);*/
|
||||
} else if (resolution == 7) { /* 2x2 */
|
||||
data32 = Rd(LDIM_STTS_HIST_REGION_IDX);
|
||||
Wr(LDIM_STTS_HIST_REGION_IDX, 0xfff0ffff & data32);
|
||||
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x0000000);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x77f03bf);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x437021b);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);*/
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);*/
|
||||
} else if (resolution == 8) { /* 3x5 */
|
||||
data32 = Rd(LDIM_STTS_HIST_REGION_IDX);
|
||||
Wr(LDIM_STTS_HIST_REGION_IDX, 0xfff0ffff & data32);
|
||||
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x0000000);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x2ff017f);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x2cf0167);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x5ff047f);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4380437);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x780077f);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);*/
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);*/
|
||||
} else if (resolution == 9) { /* 4x3 */
|
||||
data32 = Rd(LDIM_STTS_HIST_REGION_IDX);
|
||||
Wr(LDIM_STTS_HIST_REGION_IDX, 0xfff0ffff & data32);
|
||||
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x0010001);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4560333);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x2220180);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x7800666);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4000338);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);*/
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);*/
|
||||
} else if (resolution == 10) { /* 6x8 */
|
||||
data32 = Rd(LDIM_STTS_HIST_REGION_IDX);
|
||||
Wr(LDIM_STTS_HIST_REGION_IDX, 0xfff0ffff & data32);
|
||||
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x0010001);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x2430167);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x2220180);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4000350);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4000338);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x6000510);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4370410);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x77f0700);
|
||||
Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x7800780);*/
|
||||
/*Wr(LDIM_STTS_HIST_SET_REGION, 0x4380438);*/
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned int invalid_val_cnt;
|
||||
void ldim_stts_read_region(unsigned int nrow, unsigned int ncol)
|
||||
{
|
||||
unsigned int i, j, k;
|
||||
unsigned int data32;
|
||||
struct aml_ldim_driver_s *ldim_drv = aml_ldim_get_driver();
|
||||
|
||||
if (invalid_val_cnt > 0xfffffff)
|
||||
invalid_val_cnt = 0;
|
||||
|
||||
Wr(LDIM_STTS_HIST_REGION_IDX, Rd(LDIM_STTS_HIST_REGION_IDX)
|
||||
& 0xffffc000);
|
||||
data32 = Rd(LDIM_STTS_HIST_START_RD_REGION);
|
||||
|
||||
for (i = 0; i < nrow; i++) {
|
||||
for (j = 0; j < ncol; j++) {
|
||||
data32 = Rd(LDIM_STTS_HIST_START_RD_REGION);
|
||||
for (k = 0; k < 17; k++) {
|
||||
if (k == 16) {
|
||||
data32 = Rd(LDIM_STTS_HIST_READ_REGION);
|
||||
ldim_drv->max_rgb[i * ncol + j]
|
||||
= data32;
|
||||
} else {
|
||||
data32 = Rd(LDIM_STTS_HIST_READ_REGION);
|
||||
ldim_drv->hist_matrix[i * ncol * 16 +
|
||||
j * 16 + k] = data32;
|
||||
}
|
||||
if (!(data32 & 0x40000000))
|
||||
invalid_val_cnt++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* VDIN_MATRIX_YUV601_RGB */
|
||||
/* -16 1.164 0 1.596 0 */
|
||||
/* -128 1.164 -0.391 -0.813 0 */
|
||||
/* -128 1.164 2.018 0 0 */
|
||||
/*{0x07c00600, 0x00000600, 0x04a80000, 0x066204a8, 0x1e701cbf, 0x04a80812,
|
||||
* 0x00000000, 0x00000000, 0x00000000,},
|
||||
*/
|
||||
void ldim_set_matrix_ycbcr2rgb(void)
|
||||
{
|
||||
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);
|
||||
Wr(LDIM_STTS_MATRIX_COEF00_01, 0x04a80000);
|
||||
Wr(LDIM_STTS_MATRIX_COEF02_10, 0x066204a8);
|
||||
Wr(LDIM_STTS_MATRIX_COEF11_12, 0x1e701cbf);
|
||||
Wr(LDIM_STTS_MATRIX_COEF20_21, 0x04a80812);
|
||||
Wr(LDIM_STTS_MATRIX_COEF22, 0x00000000);
|
||||
Wr(LDIM_STTS_MATRIX_OFFSET0_1, 0x00000000);
|
||||
Wr(LDIM_STTS_MATRIX_OFFSET2, 0x00000000);
|
||||
}
|
||||
|
||||
void ldim_set_matrix_rgb2ycbcr(int mode)
|
||||
{
|
||||
Wr_reg_bits(LDIM_STTS_CTRL0, 1, 2, 1);
|
||||
if (mode == 0) {/*ycbcr not full range, 601 conversion*/
|
||||
Wr(LDIM_STTS_MATRIX_PRE_OFFSET0_1, 0x0);
|
||||
Wr(LDIM_STTS_MATRIX_PRE_OFFSET2, 0x0);
|
||||
/* 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_COEF22, 0x1fb7);
|
||||
|
||||
Wr(LDIM_STTS_MATRIX_OFFSET2, 0x0200);
|
||||
} else if (mode == 1) {/*ycbcr full range, 601 conversion*/
|
||||
/* todo */
|
||||
}
|
||||
}
|
||||
|
||||
int Round(int iX, int iB)
|
||||
{
|
||||
int Rst = 0;
|
||||
|
||||
1021
drivers/amlogic/media/vout/backlight/aml_ldim/ldim_hw.c
Normal file
1021
drivers/amlogic/media/vout/backlight/aml_ldim/ldim_hw.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -23,8 +23,8 @@
|
||||
#define ASSIST_SPARE8_REG1 0x1f58
|
||||
|
||||
/*gxtvbb new add*/
|
||||
#define LDIM_STTS_CTRL0 0x1ac1
|
||||
#define LDIM_STTS_GCLK_CTRL0 0x1ac0
|
||||
#define LDIM_STTS_CTRL0 0x1ac1
|
||||
#define LDIM_STTS_WIDTHM1_HEIGHTM1 0x1ac2
|
||||
#define LDIM_STTS_MATRIX_COEF00_01 0x1ac3
|
||||
#define LDIM_STTS_MATRIX_COEF02_10 0x1ac4
|
||||
|
||||
Reference in New Issue
Block a user