drm/bridge: tc358768: Default to positive h/v syncs
authorTomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Wed, 6 Sep 2023 06:50:50 +0000 (09:50 +0300)
committerRobert Foss <rfoss@kernel.org>
Wed, 20 Sep 2023 11:48:36 +0000 (13:48 +0200)
As the TC358768 is a DPI to DSI bridge, the DSI side does not need to
define h/v sync polarities. This means that sometimes we have a mode
without defined sync polarities, which does not work on the DPI side.

Add a mode_fixup hook to default to positive sync polarities.

Reviewed-by: Peter Ujfalusi <peter.ujfalusi@gmail.com>
Tested-by: Maxim Schwalm <maxim.schwalm@gmail.com> # Asus TF700T
Tested-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Robert Foss <rfoss@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20230906-tc358768-v4-3-31725f008a50@ideasonboard.com
drivers/gpu/drm/bridge/tc358768.c

index bc97a83..963ac55 100644 (file)
@@ -963,9 +963,27 @@ tc358768_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
        return input_fmts;
 }
 
+static bool tc358768_mode_fixup(struct drm_bridge *bridge,
+                               const struct drm_display_mode *mode,
+                               struct drm_display_mode *adjusted_mode)
+{
+       /* Default to positive sync */
+
+       if (!(adjusted_mode->flags &
+             (DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NHSYNC)))
+               adjusted_mode->flags |= DRM_MODE_FLAG_PHSYNC;
+
+       if (!(adjusted_mode->flags &
+             (DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_NVSYNC)))
+               adjusted_mode->flags |= DRM_MODE_FLAG_PVSYNC;
+
+       return true;
+}
+
 static const struct drm_bridge_funcs tc358768_bridge_funcs = {
        .attach = tc358768_bridge_attach,
        .mode_valid = tc358768_bridge_mode_valid,
+       .mode_fixup = tc358768_mode_fixup,
        .pre_enable = tc358768_bridge_pre_enable,
        .enable = tc358768_bridge_enable,
        .disable = tc358768_bridge_disable,