Revert "Revert "panel: ea8182: do not adjust voltage in AoD""

This reverts commit f8a1ec2249b40e98cffc82e3bfda64f64c2d0532.

Bug: 281607159
Change-Id: I0b1594e03a1daa77bcfa22ae4c2a881389ef8740
Signed-off-by: Pindar Yang <[email protected]>
diff --git a/display/panel-samsung-ea8182-f10.c b/display/panel-samsung-ea8182-f10.c
index e0baba7..15ed10e 100644
--- a/display/panel-samsung-ea8182-f10.c
+++ b/display/panel-samsung-ea8182-f10.c
@@ -79,11 +79,10 @@
 static const u8 pixel_off[] = { 0x22 };
 static const u8 normal_on[] = { 0x13 };
 
-static const struct exynos_dsi_cmd ea8182_f10_off_cmds[] = {
-	EXYNOS_DSI_CMD(display_off, 20),
+static const struct exynos_dsi_cmd ea8182_f10_sleep_in_cmds[] = {
 	EXYNOS_DSI_CMD(sleep_in, 130),
 };
-static DEFINE_EXYNOS_CMD_SET(ea8182_f10_off);
+static DEFINE_EXYNOS_CMD_SET(ea8182_f10_sleep_in);
 
 static const struct exynos_dsi_cmd ea8182_f10_lp_cmds[] = {
 	EXYNOS_DSI_CMD(display_off, 0),
@@ -321,9 +320,16 @@
 static int ea8182_f10_disable(struct drm_panel *panel)
 {
 	struct exynos_panel *ctx = container_of(panel, struct exynos_panel, panel);
+	const struct exynos_panel_mode *pmode = ctx->current_mode;
 
 	dev_dbg(ctx->dev, "%s\n", __func__);
 
+	/* exit lp mode via 0x53 cmd to avoid green flicker when adjusting voltage  */
+	if (pmode && pmode->exynos_mode.is_lp_mode)
+		EXYNOS_DCS_WRITE_SEQ(ctx, MIPI_DCS_WRITE_CONTROL_DISPLAY,
+				EA8182_F10_WRCTRLD_BCTRL_BIT);
+
+	EXYNOS_DCS_WRITE_TABLE_DELAY(ctx, 20, display_off);
 	ea8182_f10_set_default_voltage(ctx, false);
 	exynos_panel_disable(panel);
 
@@ -799,7 +805,7 @@
 	.min_luminance = 5,
 	.modes = ea8182_f10_modes,
 	.num_modes = ARRAY_SIZE(ea8182_f10_modes),
-	.off_cmd_set = &ea8182_f10_off_cmd_set,
+	.off_cmd_set = &ea8182_f10_sleep_in_cmd_set,
 	.lp_mode = &ea8182_f10_lp_mode,
 	.lp_cmd_set = &ea8182_f10_lp_cmd_set,
 	.binned_lp = ea8182_f10_binned_lp,