From cbf5bf98f40b60e85d660f603cf1e0d63a41379c Mon Sep 17 00:00:00 2001 From: Chandan Uddaraju Date: Fri, 28 Sep 2012 18:48:15 -0700 Subject: msm_fb: mdss: Fix dsi controller reset sequence during dsi initialization Move the dsi_sw_reset from panel ON sequence to controller initialization function. Enable clock lanes and disable controller before doing reset. Change-Id: I570615a931214021360070cd1cfea4ed3b6812d5 Signed-off-by: Chandan Uddaraju --- drivers/video/fbdev/msm/mdss_dsi.c | 1 + drivers/video/fbdev/msm/mdss_dsi_host.c | 11 +++++++++++ drivers/video/fbdev/msm/mdss_dsi_panel.c | 2 -- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/video/fbdev/msm/mdss_dsi.c b/drivers/video/fbdev/msm/mdss_dsi.c index 93d40c09a266..09c810b52ca2 100644 --- a/drivers/video/fbdev/msm/mdss_dsi.c +++ b/drivers/video/fbdev/msm/mdss_dsi.c @@ -303,6 +303,7 @@ static int mdss_dsi_on(struct mdss_panel_data *pdata) MIPI_OUTP((ctrl_pdata->ctrl_base) + 0x5C, data); } + mdss_dsi_sw_reset(pdata); mdss_dsi_host_init(mipi, pdata); if (mipi->force_clk_lane_hs) { diff --git a/drivers/video/fbdev/msm/mdss_dsi_host.c b/drivers/video/fbdev/msm/mdss_dsi_host.c index 8d88bd9e6416..84dbffadbad1 100644 --- a/drivers/video/fbdev/msm/mdss_dsi_host.c +++ b/drivers/video/fbdev/msm/mdss_dsi_host.c @@ -813,6 +813,7 @@ void mipi_set_tx_power_mode(int mode, struct mdss_panel_data *pdata) void mdss_dsi_sw_reset(struct mdss_panel_data *pdata) { struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL; + u32 dsi_ctrl; ctrl_pdata = container_of(pdata, struct mdss_dsi_ctrl_pdata, panel_data); @@ -821,6 +822,16 @@ void mdss_dsi_sw_reset(struct mdss_panel_data *pdata) return; } + dsi_ctrl = MIPI_INP((ctrl_pdata->ctrl_base) + 0x0004); + dsi_ctrl &= ~0x01; + MIPI_OUTP((ctrl_pdata->ctrl_base) + 0x0004, dsi_ctrl); + wmb(); + + /* turn esc, byte, dsi, pclk, sclk, hclk on */ + MIPI_OUTP((ctrl_pdata->ctrl_base) + 0x11c, + 0x23f); /* DSI_CLK_CTRL */ + wmb(); + MIPI_OUTP((ctrl_pdata->ctrl_base) + 0x118, 0x01); wmb(); MIPI_OUTP((ctrl_pdata->ctrl_base) + 0x118, 0x00); diff --git a/drivers/video/fbdev/msm/mdss_dsi_panel.c b/drivers/video/fbdev/msm/mdss_dsi_panel.c index 0e18e0fe0c42..4c813e7b8cbf 100644 --- a/drivers/video/fbdev/msm/mdss_dsi_panel.c +++ b/drivers/video/fbdev/msm/mdss_dsi_panel.c @@ -106,8 +106,6 @@ static int mdss_dsi_panel_on(struct mdss_panel_data *pdata) pr_debug("%s:%d, debug info (mode) : %d\n", __func__, __LINE__, mipi->mode); - mdss_dsi_sw_reset(pdata); - if (mipi->mode == DSI_VIDEO_MODE) { mdss_dsi_cmds_tx(pdata, &dsi_panel_tx_buf, dsi_panel_on_cmds, num_of_on_cmds); -- cgit v1.2.3