lcd: support resume_type to avoid dual display interfere each other [1/1]

PD#SWPL-19365

Problem:
panel can't display when first resume by dual display mode,
without kernel printk log print.
lcd workqueue resume will effect each other for dual display.

Solution:
change lcd driver to directly resume for dual display

Verify:
ac200

Change-Id: I4638a9b526625693ed97070a0967b37328617ae6
Signed-off-by: Evoke Zhang <evoke.zhang@amlogic.com>
This commit is contained in:
Evoke Zhang
2020-01-02 10:16:04 +08:00
committed by Chris
parent e24d27e49f
commit 272d40b6ea
9 changed files with 37 additions and 7 deletions

View File

@@ -39,6 +39,9 @@
0 56 1>;
interrupt-names = "vsync","vsync2";
pinctrl_version = <2>; /* for uboot */
resume_type = <0>; /* 0:directly resume(dual display preferred),
* 1:workqueue resume(default)
*/
/* power type:
* (0=cpu_gpio, 1=pmu_gpio, 2=signal,3=extern, 0xff=ending)

View File

@@ -40,6 +40,9 @@
interrupt-names = "vsync","vsync2";
pinctrl_version = <2>; /* for uboot */
clk_path = <1>; /* default gp0 pll */
resume_type = <0>; /* 0:directly resume(dual display preferred),
* 1:workqueue resume(default)
*/
/* power type:
* (0=cpu_gpio, 1=pmu_gpio, 2=signal,3=extern, 0xff=ending)

View File

@@ -40,6 +40,9 @@
0 56 1>;
interrupt-names = "vsync","vsync2";
pinctrl_version = <2>; /* for uboot */
resume_type = <0>; /* 0:directly resume(dual display preferred),
* 1:workqueue resume(default)
*/
/* power type:
* (0=cpu_gpio, 1=pmu_gpio, 2=signal,3=extern, 0xff=ending)

View File

@@ -39,6 +39,9 @@
0 56 1>;
interrupt-names = "vsync","vsync2";
pinctrl_version = <2>; /* for uboot */
resume_type = <0>; /* 0:directly resume(dual display preferred),
* 1:workqueue resume(default)
*/
/* power type:
* (0=cpu_gpio, 1=pmu_gpio, 2=signal,3=extern, 0xff=ending)

View File

@@ -40,6 +40,9 @@
interrupt-names = "vsync","vsync2";
pinctrl_version = <2>; /* for uboot */
clk_path = <1>; /* default gp0 pll */
resume_type = <0>; /* 0:directly resume(dual display preferred),
* 1:workqueue resume(default)
*/
/* power type:
* (0=cpu_gpio, 1=pmu_gpio, 2=signal,3=extern, 0xff=ending)

View File

@@ -39,6 +39,9 @@
0 56 1>;
interrupt-names = "vsync","vsync2";
pinctrl_version = <2>; /* for uboot */
resume_type = <0>; /* 0:directly resume(dual display preferred),
* 1:workqueue resume(default)
*/
/* power type:
* (0=cpu_gpio, 1=pmu_gpio, 2=signal,3=extern, 0xff=ending)

View File

@@ -43,7 +43,9 @@
/* 20190911: add lcd_init_level for tl1 */
/* 20191025: tcon chpi phy setting update */
/* 20191115: tcon add demura and vac function for tl1*/
#define LCD_DRV_VERSION "20191115"
/* 20191227: vbyone hw filter disable support*/
/* 20200102: support resume type to avoid dual display interfere each other*/
#define LCD_DRV_VERSION "20200102"
#define VPP_OUT_SATURATE (1 << 0)

View File

@@ -521,15 +521,15 @@ static int lcd_info_print(char *buf, int offset)
n = lcd_debug_info_len(len + offset);
len += snprintf((buf+len), n,
"driver version: %s\n"
"panel_type: %s, chip: %d, mode: %s, status: %d, viu_sel: %d\n"
"key_valid: %d, config_load: %d\n"
"fr_auto_policy: %d\n",
"panel_type: %s, chip: %d, mode: %s, status: %d\n"
"viu_sel: %d, resume_type: %d, fr_auto_policy: %d\n"
"key_valid: %d, config_load: %d\n",
lcd_drv->version,
pconf->lcd_propname, lcd_drv->data->chip_type,
lcd_mode_mode_to_str(lcd_drv->lcd_mode),
lcd_drv->lcd_status, lcd_drv->viu_sel,
lcd_drv->lcd_key_valid, lcd_drv->lcd_config_load,
lcd_drv->fr_auto_policy);
lcd_drv->lcd_resume_type, lcd_drv->fr_auto_policy,
lcd_drv->lcd_key_valid, lcd_drv->lcd_config_load);
n = lcd_debug_info_len(len + offset);
len += snprintf((buf+len), n,

View File

@@ -1343,6 +1343,17 @@ static int lcd_config_probe(struct platform_device *pdev)
LCDPR("detect lcd_auto_test: %d\n", lcd_driver->lcd_auto_test);
}
ret = of_property_read_u32(lcd_driver->dev->of_node,
"resume_type", &val);
if (ret) {
if (lcd_debug_print_flag)
LCDPR("failed to get resume_type\n");
lcd_driver->lcd_resume_type = 1; /* default workqueue */
} else {
lcd_driver->lcd_resume_type = (unsigned char)val;
LCDPR("detect resume_type: %d\n", lcd_driver->lcd_resume_type);
}
lcd_driver->res_vsync_irq = platform_get_resource_byname(pdev,
IORESOURCE_IRQ, "vsync");
lcd_driver->res_vsync2_irq = platform_get_resource_byname(pdev,
@@ -1358,7 +1369,6 @@ static int lcd_config_probe(struct platform_device *pdev)
lcd_driver->lcd_test_flag = 0;
lcd_driver->lcd_mute_state = 0;
lcd_driver->lcd_mute_flag = 0;
lcd_driver->lcd_resume_type = 1; /* default workqueue */
lcd_driver->fr_mode = 0;
lcd_driver->viu_sel = LCD_VIU_SEL_NONE;
lcd_driver->vsync_none_timer_flag = 0;