]> Gentwo Git Trees - linux/.git/commitdiff
drm/tegra: dsi: Make SOL delay calculation mode independent
authorSvyatoslav Ryhel <clamor95@gmail.com>
Tue, 9 Sep 2025 07:33:34 +0000 (10:33 +0300)
committerThierry Reding <treding@nvidia.com>
Fri, 14 Nov 2025 17:50:39 +0000 (18:50 +0100)
Move SOL delay calculation outside of video mode conditions.

Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
Link: https://patch.msgid.link/20250909073335.91531-2-clamor95@gmail.com
drivers/gpu/drm/tegra/dsi.c

index ae7aeb8e90efe30958c3a42421f9265e39b5c7e1..368a3be59c6c8f74224374cbb719d561c4b3056f 100644 (file)
@@ -561,11 +561,6 @@ static void tegra_dsi_configure(struct tegra_dsi *dsi, unsigned int pipe,
                tegra_dsi_writel(dsi, hact << 16 | hbp, DSI_PKT_LEN_2_3);
                tegra_dsi_writel(dsi, hfp, DSI_PKT_LEN_4_5);
                tegra_dsi_writel(dsi, 0x0f0f << 16, DSI_PKT_LEN_6_7);
-
-               /* set SOL delay (for non-burst mode only) */
-               tegra_dsi_writel(dsi, 8 * mul / div, DSI_SOL_DELAY);
-
-               /* TODO: implement ganged mode */
        } else {
                u16 bytes;
 
@@ -587,29 +582,28 @@ static void tegra_dsi_configure(struct tegra_dsi *dsi, unsigned int pipe,
                value = MIPI_DCS_WRITE_MEMORY_START << 8 |
                        MIPI_DCS_WRITE_MEMORY_CONTINUE;
                tegra_dsi_writel(dsi, value, DSI_DCS_CMDS);
+       }
 
-               /* set SOL delay */
-               if (dsi->master || dsi->slave) {
-                       unsigned long delay, bclk, bclk_ganged;
-                       unsigned int lanes = state->lanes;
-
-                       /* SOL to valid, valid to FIFO and FIFO write delay */
-                       delay = 4 + 4 + 2;
-                       delay = DIV_ROUND_UP(delay * mul, div * lanes);
-                       /* FIFO read delay */
-                       delay = delay + 6;
-
-                       bclk = DIV_ROUND_UP(mode->htotal * mul, div * lanes);
-                       bclk_ganged = DIV_ROUND_UP(bclk * lanes / 2, lanes);
-                       value = bclk - bclk_ganged + delay + 20;
-               } else {
-                       /* TODO: revisit for non-ganged mode */
-                       value = 8 * mul / div;
-               }
+       /* set SOL delay */
+       if (dsi->master || dsi->slave) {
+               unsigned long delay, bclk, bclk_ganged;
+               unsigned int lanes = state->lanes;
+
+               /* SOL to valid, valid to FIFO and FIFO write delay */
+               delay = 4 + 4 + 2;
+               delay = DIV_ROUND_UP(delay * mul, div * lanes);
+               /* FIFO read delay */
+               delay = delay + 6;
 
-               tegra_dsi_writel(dsi, value, DSI_SOL_DELAY);
+               bclk = DIV_ROUND_UP(mode->htotal * mul, div * lanes);
+               bclk_ganged = DIV_ROUND_UP(bclk * lanes / 2, lanes);
+               value = bclk - bclk_ganged + delay + 20;
+       } else {
+               value = 8 * mul / div;
        }
 
+       tegra_dsi_writel(dsi, value, DSI_SOL_DELAY);
+
        if (dsi->slave) {
                tegra_dsi_configure(dsi->slave, pipe, mode);