MLK-14252-1 video: mipi_dsi_northwest: reset dsi domains when shutdown.
authorFancy Fang <chen.fang@nxp.com>
Thu, 23 Feb 2017 06:17:45 +0000 (14:17 +0800)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 20:10:46 +0000 (15:10 -0500)
Put the three dsi domains into reset state before dsi is
shutdown to avoid dsi being a unstable state.

Signed-off-by: Fancy Fang <chen.fang@nxp.com>
drivers/video/fbdev/mxc/mipi_dsi_northwest.c

index 3c0e8f3..021de46 100644 (file)
@@ -428,6 +428,20 @@ static int mipi_display_exit_sleep(struct mxc_dispdrv_handle *disp)
        return err;
 }
 
+static void reset_dsi_domains(struct mipi_dsi_info *mipi_dsi, bool reset)
+{
+       /* escape domain */
+       regmap_update_bits(mipi_dsi->regmap, SIM_SOPT1CFG,
+                       DSI_RST_ESC_N, (reset ? 0 : DSI_RST_ESC_N));
+       /* byte domain */
+       regmap_update_bits(mipi_dsi->regmap, SIM_SOPT1CFG,
+                       DSI_RST_BYTE_N, (reset ? 0 : DSI_RST_BYTE_N));
+
+       /* dpi domain */
+       regmap_update_bits(mipi_dsi->regmap, SIM_SOPT1CFG,
+                       DSI_RST_DPI_N, (reset ? 0 : DSI_RST_DPI_N));
+}
+
 static int mipi_dsi_enable(struct mxc_dispdrv_handle *disp,
                           struct fb_info *fbi)
 {
@@ -460,16 +474,7 @@ static int mipi_dsi_enable(struct mxc_dispdrv_handle *disp,
 
                mipi_dsi_dpi_init(mipi_dsi);
 
-               /* escape domain */
-               regmap_update_bits(mipi_dsi->regmap, SIM_SOPT1CFG,
-                               DSI_RST_ESC_N, DSI_RST_ESC_N);
-               /* byte domain */
-               regmap_update_bits(mipi_dsi->regmap, SIM_SOPT1CFG,
-                               DSI_RST_BYTE_N, DSI_RST_BYTE_N);
-
-               /* dpi domain */
-               regmap_update_bits(mipi_dsi->regmap, SIM_SOPT1CFG,
-                               DSI_RST_DPI_N, DSI_RST_DPI_N);
+               reset_dsi_domains(mipi_dsi, 0);
 
                /* display_en */
                regmap_update_bits(mipi_dsi->regmap, SIM_SOPT1CFG,
@@ -881,6 +886,10 @@ static void mipi_dsi_shutdown(struct platform_device *pdev)
 
                mipi_dsi->lcd_inited = 0;
        }
+
+       reset_dsi_domains(mipi_dsi, 1);
+       regmap_update_bits(mipi_dsi->regmap, SIM_SOPT1CFG,
+                          DSI_PLL_EN, 0x0);
 }
 
 static const struct of_device_id imx_mipi_dsi_dt_ids[] = {