From bdb9a42a7ec7353d0a5e8dff096b6c1490566ce8 Mon Sep 17 00:00:00 2001 From: Fancy Fang Date: Mon, 15 Jun 2015 16:52:55 +0800 Subject: 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 --- drivers/video/mxc/mipi_dsi_samsung.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) (limited to 'drivers/video') 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, -- cgit v1.2.3