drm/msm/dsi: fix hdisplay calculation for CMD mode panel

Commit ac47870fd7 ("drm/msm/dsi: fix hdisplay calculation when
programming dsi registers") incorrecly broke hdisplay calculation for
CMD mode by specifying incorrect number of bytes per transfer, fix it.

Fixes: ac47870fd7 ("drm/msm/dsi: fix hdisplay calculation when programming dsi registers")
Signed-off-by: Pengyu Luo <mitltlatltl@gmail.com>
Patchwork: https://patchwork.freedesktop.org/patch/709917/
Link: https://lore.kernel.org/r/20260307111250.105772-2-mitltlatltl@gmail.com
[DB: fixed commit message]
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
This commit is contained in:
Pengyu Luo
2026-03-07 19:12:49 +08:00
committed by Dmitry Baryshkov
parent 2d51cfb77d
commit 82159db437

View File

@@ -1034,8 +1034,9 @@ static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_bonded_dsi)
/*
* DPU sends 3 bytes per pclk cycle to DSI. If widebus is
* enabled, MDP always sends out 48-bit compressed data per
* pclk and on average, DSI consumes an amount of compressed
* data equivalent to the uncompressed pixel depth per pclk.
* pclk and on average, for video mode, DSI consumes only an
* amount of compressed data equivalent to the uncompressed
* pixel depth per pclk.
*
* Calculate the number of pclks needed to transmit one line of
* the compressed data.
@@ -1047,10 +1048,14 @@ static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_bonded_dsi)
* unused anyway.
*/
h_total -= hdisplay;
if (wide_bus_enabled)
bits_per_pclk = dsc->bits_per_component * 3;
else
if (wide_bus_enabled) {
if (msm_host->mode_flags & MIPI_DSI_MODE_VIDEO)
bits_per_pclk = dsc->bits_per_component * 3;
else
bits_per_pclk = 48;
} else {
bits_per_pclk = 24;
}
hdisplay = DIV_ROUND_UP(msm_dsc_get_bytes_per_line(msm_host->dsc) * 8, bits_per_pclk);