mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 13:41:48 -04:00
drm/msm/dsi: fix hdisplay calculation when programming dsi registers
Recently, the hdisplay calculation is working for 3:1 compressed ratio
only. If we have a video panel with DSC BPP = 8, and BPC = 10, we still
use the default bits_per_pclk = 24, then we get the wrong hdisplay. We
can draw the conclusion by cross-comparing the calculation with the
calculation in dsi_adjust_pclk_for_compression().
Since CMD mode does not use this, we can remove
!(msm_host->mode_flags & MIPI_DSI_MODE_VIDEO) safely.
Fixes: efcbd6f9cd ("drm/msm/dsi: Enable widebus for DSI")
Signed-off-by: Pengyu Luo <mitltlatltl@gmail.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Patchwork: https://patchwork.freedesktop.org/patch/704822/
Link: https://lore.kernel.org/r/20260214105145.105308-1-mitltlatltl@gmail.com
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
This commit is contained in:
committed by
Dmitry Baryshkov
parent
5886cc8f89
commit
ac47870fd7
@@ -993,7 +993,7 @@ static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_bonded_dsi)
|
||||
|
||||
if (msm_host->dsc) {
|
||||
struct drm_dsc_config *dsc = msm_host->dsc;
|
||||
u32 bytes_per_pclk;
|
||||
u32 bits_per_pclk;
|
||||
|
||||
/* update dsc params with timing params */
|
||||
if (!dsc || !mode->hdisplay || !mode->vdisplay) {
|
||||
@@ -1015,7 +1015,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, bus width is extended to 6 bytes.
|
||||
* 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.
|
||||
*
|
||||
* Calculate the number of pclks needed to transmit one line of
|
||||
* the compressed data.
|
||||
@@ -1027,12 +1029,12 @@ static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_bonded_dsi)
|
||||
* unused anyway.
|
||||
*/
|
||||
h_total -= hdisplay;
|
||||
if (wide_bus_enabled && !(msm_host->mode_flags & MIPI_DSI_MODE_VIDEO))
|
||||
bytes_per_pclk = 6;
|
||||
if (wide_bus_enabled)
|
||||
bits_per_pclk = mipi_dsi_pixel_format_to_bpp(msm_host->format);
|
||||
else
|
||||
bytes_per_pclk = 3;
|
||||
bits_per_pclk = 24;
|
||||
|
||||
hdisplay = DIV_ROUND_UP(msm_dsc_get_bytes_per_line(msm_host->dsc), bytes_per_pclk);
|
||||
hdisplay = DIV_ROUND_UP(msm_dsc_get_bytes_per_line(msm_host->dsc) * 8, bits_per_pclk);
|
||||
|
||||
h_total += hdisplay;
|
||||
ha_end = ha_start + hdisplay;
|
||||
|
||||
Reference in New Issue
Block a user