diff options
Diffstat (limited to 'drivers/gpu/drm/msm/dsi/dsi_host.c')
-rw-r--r-- | drivers/gpu/drm/msm/dsi/dsi_host.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c index 7a03a9489708..8baba30d6c65 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_host.c +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c | |||
@@ -173,6 +173,7 @@ struct msm_dsi_host { | |||
173 | 173 | ||
174 | bool registered; | 174 | bool registered; |
175 | bool power_on; | 175 | bool power_on; |
176 | bool enabled; | ||
176 | int irq; | 177 | int irq; |
177 | }; | 178 | }; |
178 | 179 | ||
@@ -775,7 +776,7 @@ static inline enum dsi_cmd_dst_format dsi_get_cmd_fmt( | |||
775 | switch (mipi_fmt) { | 776 | switch (mipi_fmt) { |
776 | case MIPI_DSI_FMT_RGB888: return CMD_DST_FORMAT_RGB888; | 777 | case MIPI_DSI_FMT_RGB888: return CMD_DST_FORMAT_RGB888; |
777 | case MIPI_DSI_FMT_RGB666_PACKED: | 778 | case MIPI_DSI_FMT_RGB666_PACKED: |
778 | case MIPI_DSI_FMT_RGB666: return VID_DST_FORMAT_RGB666; | 779 | case MIPI_DSI_FMT_RGB666: return CMD_DST_FORMAT_RGB666; |
779 | case MIPI_DSI_FMT_RGB565: return CMD_DST_FORMAT_RGB565; | 780 | case MIPI_DSI_FMT_RGB565: return CMD_DST_FORMAT_RGB565; |
780 | default: return CMD_DST_FORMAT_RGB888; | 781 | default: return CMD_DST_FORMAT_RGB888; |
781 | } | 782 | } |
@@ -986,13 +987,19 @@ static void dsi_set_tx_power_mode(int mode, struct msm_dsi_host *msm_host) | |||
986 | 987 | ||
987 | static void dsi_wait4video_done(struct msm_dsi_host *msm_host) | 988 | static void dsi_wait4video_done(struct msm_dsi_host *msm_host) |
988 | { | 989 | { |
990 | u32 ret = 0; | ||
991 | struct device *dev = &msm_host->pdev->dev; | ||
992 | |||
989 | dsi_intr_ctrl(msm_host, DSI_IRQ_MASK_VIDEO_DONE, 1); | 993 | dsi_intr_ctrl(msm_host, DSI_IRQ_MASK_VIDEO_DONE, 1); |
990 | 994 | ||
991 | reinit_completion(&msm_host->video_comp); | 995 | reinit_completion(&msm_host->video_comp); |
992 | 996 | ||
993 | wait_for_completion_timeout(&msm_host->video_comp, | 997 | ret = wait_for_completion_timeout(&msm_host->video_comp, |
994 | msecs_to_jiffies(70)); | 998 | msecs_to_jiffies(70)); |
995 | 999 | ||
1000 | if (ret <= 0) | ||
1001 | dev_err(dev, "wait for video done timed out\n"); | ||
1002 | |||
996 | dsi_intr_ctrl(msm_host, DSI_IRQ_MASK_VIDEO_DONE, 0); | 1003 | dsi_intr_ctrl(msm_host, DSI_IRQ_MASK_VIDEO_DONE, 0); |
997 | } | 1004 | } |
998 | 1005 | ||
@@ -1001,7 +1008,7 @@ static void dsi_wait4video_eng_busy(struct msm_dsi_host *msm_host) | |||
1001 | if (!(msm_host->mode_flags & MIPI_DSI_MODE_VIDEO)) | 1008 | if (!(msm_host->mode_flags & MIPI_DSI_MODE_VIDEO)) |
1002 | return; | 1009 | return; |
1003 | 1010 | ||
1004 | if (msm_host->power_on) { | 1011 | if (msm_host->power_on && msm_host->enabled) { |
1005 | dsi_wait4video_done(msm_host); | 1012 | dsi_wait4video_done(msm_host); |
1006 | /* delay 4 ms to skip BLLP */ | 1013 | /* delay 4 ms to skip BLLP */ |
1007 | usleep_range(2000, 4000); | 1014 | usleep_range(2000, 4000); |
@@ -2203,7 +2210,7 @@ int msm_dsi_host_enable(struct mipi_dsi_host *host) | |||
2203 | * pm_runtime_put_autosuspend(&msm_host->pdev->dev); | 2210 | * pm_runtime_put_autosuspend(&msm_host->pdev->dev); |
2204 | * } | 2211 | * } |
2205 | */ | 2212 | */ |
2206 | 2213 | msm_host->enabled = true; | |
2207 | return 0; | 2214 | return 0; |
2208 | } | 2215 | } |
2209 | 2216 | ||
@@ -2211,6 +2218,7 @@ int msm_dsi_host_disable(struct mipi_dsi_host *host) | |||
2211 | { | 2218 | { |
2212 | struct msm_dsi_host *msm_host = to_msm_dsi_host(host); | 2219 | struct msm_dsi_host *msm_host = to_msm_dsi_host(host); |
2213 | 2220 | ||
2221 | msm_host->enabled = false; | ||
2214 | dsi_op_mode_config(msm_host, | 2222 | dsi_op_mode_config(msm_host, |
2215 | !!(msm_host->mode_flags & MIPI_DSI_MODE_VIDEO), false); | 2223 | !!(msm_host->mode_flags & MIPI_DSI_MODE_VIDEO), false); |
2216 | 2224 | ||