summaryrefslogtreecommitdiff
path: root/drivers/video
diff options
context:
space:
mode:
authorFancy Fang <chen.fang@freescale.com>2015-06-15 16:52:55 +0800
committerNitin Garg <nitin.garg@freescale.com>2015-09-17 09:23:42 -0500
commitbdb9a42a7ec7353d0a5e8dff096b6c1490566ce8 (patch)
treefbd0cc67b9005694167626939f8b5ad78d409e04 /drivers/video
parent7ca28f8bde7d5bc0616ec7816622114e2621e59e (diff)
MLK-11113 video: mipi_dsi_samsung: add fastmix support when suspend
In 7D platform, the fastmix will power down MIPI DSI when system doing suspend. So when system resume, the MIPI DSI will be in the 'reset' state and all the registers should be configured again. Signed-off-by: Fancy Fang <chen.fang@freescale.com>
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/mxc/mipi_dsi_samsung.c34
1 files changed, 31 insertions, 3 deletions
diff --git a/drivers/video/mxc/mipi_dsi_samsung.c b/drivers/video/mxc/mipi_dsi_samsung.c
index 7e0fc9c2c578..edd578fcf015 100644
--- a/drivers/video/mxc/mipi_dsi_samsung.c
+++ b/drivers/video/mxc/mipi_dsi_samsung.c
@@ -365,9 +365,6 @@ static int mipi_dsi_master_init(struct mipi_dsi_info *mipi_dsi,
struct fb_videomode *mode = mipi_dsi->mode;
struct device *dev = &mipi_dsi->pdev->dev;
- /* power on dphy */
- mipi_dsi_dphy_power_on(mipi_dsi->pdev);
-
/* configure DPHY PLL clock */
writel(MIPI_DSI_TX_REQUEST_HSCLK(0) |
MIPI_DSI_DPHY_SEL(0) |
@@ -533,6 +530,28 @@ static int mipi_dsi_enable(struct mxc_dispdrv_handle *disp,
int ret;
struct mipi_dsi_info *mipi_dsi = mxc_dispdrv_getdata(disp);
+ if (fbi->state == FBINFO_STATE_SUSPENDED) {
+ if (mipi_dsi->disp_power_on) {
+ ret = regulator_enable(mipi_dsi->disp_power_on);
+ if (ret) {
+ dev_err(&mipi_dsi->pdev->dev, "failed to enable display "
+ "power regulator, err = %d\n", ret);
+ return ret;
+ }
+ }
+
+ ret = device_reset(&mipi_dsi->pdev->dev);
+ if (ret) {
+ dev_err(&mipi_dsi->pdev->dev,
+ "failed to reset device: %d\n", ret);
+ return -EINVAL;
+ }
+ msleep(120);
+ }
+
+ /* power on dphy */
+ mipi_dsi_dphy_power_on(mipi_dsi->pdev);
+
ret = clk_prepare_enable(mipi_dsi->dphy_clk);
ret |= clk_prepare_enable(mipi_dsi->cfg_clk);
if (ret) {
@@ -581,6 +600,15 @@ static void mipi_dsi_disable(struct mxc_dispdrv_handle *disp,
struct mipi_dsi_info *mipi_dsi = mxc_dispdrv_getdata(disp);
mipi_dsi_power_off(mipi_dsi->disp_mipi);
+
+ if (fbi->state == FBINFO_STATE_SUSPENDED) {
+ mipi_dsi_dphy_power_down();
+
+ if (mipi_dsi->disp_power_on)
+ regulator_disable(mipi_dsi->disp_power_on);
+
+ mipi_dsi->lcd_inited = 0;
+ }
}
static int mipi_dsi_setup(struct mxc_dispdrv_handle *disp,