From ba6ca57a7c19ee000136efd02637d4473565e429 Mon Sep 17 00:00:00 2001 From: Ujwal Patel Date: Mon, 14 Sep 2015 10:14:06 -0700 Subject: 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 Signed-off-by: Ujwal Patel --- drivers/video/fbdev/msm/mdss_dsi_host.c | 35 ++++++++++++++++++++++----------- 1 file 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) -- cgit v1.2.3