summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorUjwal Patel <ujwalp@codeaurora.org>2015-09-14 10:14:06 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:47:22 -0700
commitba6ca57a7c19ee000136efd02637d4473565e429 (patch)
treef5d5077024d7d235f67eeec8cca4892aef367b91 /drivers
parenta7bb6fa7cb02ef985331297c2d31ee6efdec888f (diff)
msm: mdss: configure DSC pkt_per_line correctly
DSC pkt_per_line is not mapping to register directly. value 0 is for 1 pkt, value 1 for 2 pkt and value 2 is for 4 pkt. 3 pkt per line is not support. Change-Id: I43ff34018668feb7a52eaa8f4b2de632fc9ab59b Signed-off-by: Kuogee Hsieh <khsieh@codeaurora.org> Signed-off-by: Ujwal Patel <ujwalp@codeaurora.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/fbdev/msm/mdss_dsi_host.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/drivers/video/fbdev/msm/mdss_dsi_host.c b/drivers/video/fbdev/msm/mdss_dsi_host.c
index 777828ef0b55..852d232d00ca 100644
--- a/drivers/video/fbdev/msm/mdss_dsi_host.c
+++ b/drivers/video/fbdev/msm/mdss_dsi_host.c
@@ -1092,18 +1092,20 @@ int mdss_dsi_reg_status_check(struct mdss_dsi_ctrl_pdata *ctrl_pdata)
static void mdss_dsi_dsc_config(struct mdss_dsi_ctrl_pdata *ctrl,
struct dsc_desc *dsc)
{
- u32 data;
+ u32 data, offset;
+
+ if (dsc->pkt_per_line <= 0) {
+ pr_err("%s: Error: pkt_per_line cannot be negative or 0\n",
+ __func__);
+ return;
+ }
if (ctrl->panel_mode == DSI_VIDEO_MODE) {
MIPI_OUTP((ctrl->ctrl_base) +
MDSS_DSI_VIDEO_COMPRESSION_MODE_CTRL2, 0);
data = dsc->bytes_per_pkt << 16;
data |= (0x0b << 8); /* dtype of compressed image */
- data |= (dsc->pkt_per_line - 1) << 6;
- data |= dsc->eol_byte_num << 4;
- data |= 1; /* enable */
- MIPI_OUTP((ctrl->ctrl_base) +
- MDSS_DSI_VIDEO_COMPRESSION_MODE_CTRL, data);
+ offset = MDSS_DSI_VIDEO_COMPRESSION_MODE_CTRL;
} else {
/* strem 0 */
MIPI_OUTP((ctrl->ctrl_base) +
@@ -1114,12 +1116,23 @@ static void mdss_dsi_dsc_config(struct mdss_dsi_ctrl_pdata *ctrl,
dsc->bytes_in_slice);
data = DTYPE_DCS_LWRITE << 8;
- data |= (dsc->pkt_per_line - 1) << 6;
- data |= dsc->eol_byte_num << 4;
- data |= 1; /* enable */
- MIPI_OUTP((ctrl->ctrl_base) +
- MDSS_DSI_COMMAND_COMPRESSION_MODE_CTRL, data);
+ offset = MDSS_DSI_COMMAND_COMPRESSION_MODE_CTRL;
}
+
+ /*
+ * pkt_per_line:
+ * 0 == 1 pkt
+ * 1 == 2 pkt
+ * 2 == 4 pkt
+ * 3 pkt is not support
+ */
+ if (dsc->pkt_per_line == 4)
+ data |= (dsc->pkt_per_line - 2) << 6;
+ else
+ data |= (dsc->pkt_per_line - 1) << 6;
+ data |= dsc->eol_byte_num << 4;
+ data |= 1; /* enable */
+ MIPI_OUTP((ctrl->ctrl_base) + offset, data);
}
static void mdss_dsi_mode_setup(struct mdss_panel_data *pdata)