diff --git a/arch/arm/boot/dts/amlogic/mesong12a_skt-panel.dtsi b/arch/arm/boot/dts/amlogic/mesong12a_skt-panel.dtsi index cc0032d635de..26da06be6c8a 100644 --- a/arch/arm/boot/dts/amlogic/mesong12a_skt-panel.dtsi +++ b/arch/arm/boot/dts/amlogic/mesong12a_skt-panel.dtsi @@ -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) diff --git a/arch/arm/boot/dts/amlogic/mesong12b_skt-panel.dtsi b/arch/arm/boot/dts/amlogic/mesong12b_skt-panel.dtsi index ed70f19c6108..45dab507c5a4 100644 --- a/arch/arm/boot/dts/amlogic/mesong12b_skt-panel.dtsi +++ b/arch/arm/boot/dts/amlogic/mesong12b_skt-panel.dtsi @@ -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) diff --git a/arch/arm/boot/dts/amlogic/mesonsm1_skt-panel.dtsi b/arch/arm/boot/dts/amlogic/mesonsm1_skt-panel.dtsi index c3a1a75f8f94..1c667429342d 100644 --- a/arch/arm/boot/dts/amlogic/mesonsm1_skt-panel.dtsi +++ b/arch/arm/boot/dts/amlogic/mesonsm1_skt-panel.dtsi @@ -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) diff --git a/arch/arm64/boot/dts/amlogic/mesong12a_skt-panel.dtsi b/arch/arm64/boot/dts/amlogic/mesong12a_skt-panel.dtsi index 9256525a00e8..cb166d75f503 100644 --- a/arch/arm64/boot/dts/amlogic/mesong12a_skt-panel.dtsi +++ b/arch/arm64/boot/dts/amlogic/mesong12a_skt-panel.dtsi @@ -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) diff --git a/arch/arm64/boot/dts/amlogic/mesong12b_skt-panel.dtsi b/arch/arm64/boot/dts/amlogic/mesong12b_skt-panel.dtsi index a47d73c3f1d1..6ca4f9e09170 100644 --- a/arch/arm64/boot/dts/amlogic/mesong12b_skt-panel.dtsi +++ b/arch/arm64/boot/dts/amlogic/mesong12b_skt-panel.dtsi @@ -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) diff --git a/arch/arm64/boot/dts/amlogic/mesonsm1_skt-panel.dtsi b/arch/arm64/boot/dts/amlogic/mesonsm1_skt-panel.dtsi index 8b54f4294b1b..4bce871aacfd 100644 --- a/arch/arm64/boot/dts/amlogic/mesonsm1_skt-panel.dtsi +++ b/arch/arm64/boot/dts/amlogic/mesonsm1_skt-panel.dtsi @@ -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) diff --git a/drivers/amlogic/media/vout/lcd/lcd_common.h b/drivers/amlogic/media/vout/lcd/lcd_common.h index a42b2853d4bf..3f6244410f4d 100644 --- a/drivers/amlogic/media/vout/lcd/lcd_common.h +++ b/drivers/amlogic/media/vout/lcd/lcd_common.h @@ -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) diff --git a/drivers/amlogic/media/vout/lcd/lcd_debug.c b/drivers/amlogic/media/vout/lcd/lcd_debug.c index 425d586a125d..1b26441ff39c 100644 --- a/drivers/amlogic/media/vout/lcd/lcd_debug.c +++ b/drivers/amlogic/media/vout/lcd/lcd_debug.c @@ -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, diff --git a/drivers/amlogic/media/vout/lcd/lcd_vout.c b/drivers/amlogic/media/vout/lcd/lcd_vout.c index 3f2477553a87..a2efb3e67e82 100644 --- a/drivers/amlogic/media/vout/lcd/lcd_vout.c +++ b/drivers/amlogic/media/vout/lcd/lcd_vout.c @@ -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;