* [PATCH master 1/2] video: mode-helpers: preserve sync polarity in fb_videomode conversion
@ 2026-02-13 9:28 Ahmad Fatoum
2026-02-13 9:28 ` [PATCH master 2/2] video: dw_mipi_dsi: remove VPG workaround for panel initialization Ahmad Fatoum
2026-02-23 10:53 ` [PATCH master 1/2] video: mode-helpers: preserve sync polarity in fb_videomode conversion Sascha Hauer
0 siblings, 2 replies; 3+ messages in thread
From: Ahmad Fatoum @ 2026-02-13 9:28 UTC (permalink / raw)
To: barebox; +Cc: Claude Opus 4.6, Ahmad Fatoum
The FB_SYNC_*_HIGH_ACT flags indicate that the respective sync signal is
active high when set and active low when unset.
The DISPLAY_FLAGS_*SYNC_* flags on the other hands have separate
non-zero _HIGH and _LOW flags, which fb_videomode_to_videomode() failed
to account for.
This causes a DPI sync polarity mismatch for MIPI-DSI panels with
negative sync polarity, which was hackily worked around by enabling the
video pattern generator intermittently.
Fix by explicitly setting the LOW polarity flags, which restores
DRM_MODE_FLAG_NHSYNC/NVSYNC after the fb_videomode round-trip.
Reported-by: Claude Opus 4.6 <noreply@anthropic.com>
Fixes: 7fc6f7b5daa0 ("video: add videomode helpers")
Signed-off-by: Ahmad Fatoum <a.fatoum@barebox.org>
---
drivers/video/mode-helpers.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/video/mode-helpers.c b/drivers/video/mode-helpers.c
index 4a1d31813e79..89abd8342bf4 100644
--- a/drivers/video/mode-helpers.c
+++ b/drivers/video/mode-helpers.c
@@ -143,8 +143,12 @@ void fb_videomode_to_videomode(const struct fb_videomode *fbmode,
if (fbmode->sync & FB_SYNC_HOR_HIGH_ACT)
vm->flags |= DISPLAY_FLAGS_HSYNC_HIGH;
+ else
+ vm->flags |= DISPLAY_FLAGS_HSYNC_LOW;
if (fbmode->sync & FB_SYNC_VERT_HIGH_ACT)
vm->flags |= DISPLAY_FLAGS_VSYNC_HIGH;
+ else
+ vm->flags |= DISPLAY_FLAGS_VSYNC_LOW;
if (fbmode->vmode & FB_VMODE_INTERLACED)
vm->flags |= DISPLAY_FLAGS_INTERLACED;
if (fbmode->vmode & FB_VMODE_DOUBLE)
--
2.47.3
^ permalink raw reply [flat|nested] 3+ messages in thread* [PATCH master 2/2] video: dw_mipi_dsi: remove VPG workaround for panel initialization 2026-02-13 9:28 [PATCH master 1/2] video: mode-helpers: preserve sync polarity in fb_videomode conversion Ahmad Fatoum @ 2026-02-13 9:28 ` Ahmad Fatoum 2026-02-23 10:53 ` [PATCH master 1/2] video: mode-helpers: preserve sync polarity in fb_videomode conversion Sascha Hauer 1 sibling, 0 replies; 3+ messages in thread From: Ahmad Fatoum @ 2026-02-13 9:28 UTC (permalink / raw) To: barebox; +Cc: Ahmad Fatoum The Video Pattern Generator was being temporarily enabled during VPL_ENABLE to work around panel initialization timeouts on the Sitronix ST7703 of the Powkiddy RGB30. The root cause was a sync polarity that has been fixed in the previous commit, so this hack can now go away. This fixes a regression for the STM32MP157C-DK2: Enabling the VPG at the point we did, caused the panel to synchronize to a wrong start offset and led to a funny effect with the barebox logo that's shown by default: On subsequent reboots, the display output would start at different locations and so the logo would wander around and because the color format is RGB888, the hexagon inside the barebox logo b would keep switching between red, green and blue. Fixes: 5115bff30153 ("video: dw_mipi_dsi: activate pattern generator during enable as a hack") Signed-off-by: Ahmad Fatoum <a.fatoum@barebox.org> --- drivers/video/dw_mipi_dsi.c | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/drivers/video/dw_mipi_dsi.c b/drivers/video/dw_mipi_dsi.c index 681d939e17ea..bf95b1b9f6ff 100644 --- a/drivers/video/dw_mipi_dsi.c +++ b/drivers/video/dw_mipi_dsi.c @@ -906,20 +906,9 @@ static int dw_mipi_dsi_ioctl(struct vpl *vpl, unsigned int port, { struct dw_mipi_dsi *dsi = container_of(vpl, struct dw_mipi_dsi, vpl); struct drm_display_mode mode = {}; - bool vpg_enable_hack; - int ret; - - /* - * HACK: If Video Pattern Generator is not running here, the panel - * initialization on the Sitronix ST7703 (RGB30-Panel) times out... - * FIXME: figure out why Linux doesn't suffer from this - */ - vpg_enable_hack = true; switch (cmd) { case VPL_ENABLE: - if (vpg_enable_hack) - dsi->vpg_mode = VPG_COLORS_V; /* Switch to video mode for panel-bridge enable & panel enable */ dw_mipi_dsi_set_mode(dsi, MIPI_DSI_MODE_VIDEO); break; @@ -945,14 +934,7 @@ static int dw_mipi_dsi_ioctl(struct vpl *vpl, unsigned int port, /* Probes should have occured by now */ WARN_ON(!dsi->panel_bridge); - ret = vpl_bridge_ioctl(dsi->panel_bridge, cmd, data); - - if (cmd == VPL_ENABLE && vpg_enable_hack) { - dsi->vpg_mode = VPG_DISABLED; - vpg_param_set(NULL, dsi); - } - - return ret; + return vpl_bridge_ioctl(dsi->panel_bridge, cmd, data); } static const char *vpg_modes[] = { -- 2.47.3 ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH master 1/2] video: mode-helpers: preserve sync polarity in fb_videomode conversion 2026-02-13 9:28 [PATCH master 1/2] video: mode-helpers: preserve sync polarity in fb_videomode conversion Ahmad Fatoum 2026-02-13 9:28 ` [PATCH master 2/2] video: dw_mipi_dsi: remove VPG workaround for panel initialization Ahmad Fatoum @ 2026-02-23 10:53 ` Sascha Hauer 1 sibling, 0 replies; 3+ messages in thread From: Sascha Hauer @ 2026-02-23 10:53 UTC (permalink / raw) To: barebox, Ahmad Fatoum; +Cc: Claude Opus 4.6 On Fri, 13 Feb 2026 10:28:08 +0100, Ahmad Fatoum wrote: > The FB_SYNC_*_HIGH_ACT flags indicate that the respective sync signal is > active high when set and active low when unset. > > The DISPLAY_FLAGS_*SYNC_* flags on the other hands have separate > non-zero _HIGH and _LOW flags, which fb_videomode_to_videomode() failed > to account for. > > [...] Applied, thanks! [1/2] video: mode-helpers: preserve sync polarity in fb_videomode conversion https://git.pengutronix.de/cgit/barebox/commit/?id=f66af1ff3a20 (link may not be stable) [2/2] video: dw_mipi_dsi: remove VPG workaround for panel initialization https://git.pengutronix.de/cgit/barebox/commit/?id=fde027dd650e (link may not be stable) Best regards, -- Sascha Hauer <s.hauer@pengutronix.de> ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-02-23 10:54 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2026-02-13 9:28 [PATCH master 1/2] video: mode-helpers: preserve sync polarity in fb_videomode conversion Ahmad Fatoum 2026-02-13 9:28 ` [PATCH master 2/2] video: dw_mipi_dsi: remove VPG workaround for panel initialization Ahmad Fatoum 2026-02-23 10:53 ` [PATCH master 1/2] video: mode-helpers: preserve sync polarity in fb_videomode conversion Sascha Hauer
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox