Browse Source

drm/bridge: cdns-mhdp: fix h/v sync polarities

CDNS_DP_FRAMER_SP address was wrong, and things worked by luck. Fixing
the register offset caused sync polarities to go wrong.

Drop the mode_fixup altogether, as we don't need to use hardcoded sync
polarities. It makes the code simpler if the input and output syncs are
the same.

Fix the code to write correct polarities to CDNS_HSYNC2VSYNC_POL_CTRL.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Reported-by: Subhajit Paul <subhajit_paul@ti.com>
Tomi Valkeinen 6 years ago
parent
commit
49465af9ed
2 changed files with 6 additions and 21 deletions
  1. 5 20
      drivers/gpu/drm/bridge/cdns-mhdp.c
  2. 1 1
      drivers/gpu/drm/bridge/cdns-mhdp.h

+ 5 - 20
drivers/gpu/drm/bridge/cdns-mhdp.c

@@ -997,13 +997,11 @@ void cdns_mhdp_configure_video(struct drm_bridge *bridge)
 	cdns_mhdp_reg_write(mhdp, CDNS_BND_HSYNC2VSYNC(stream_id),
 			    bnd_hsync2vsync);
 
-	if (mode->flags & DRM_MODE_FLAG_INTERLACE &&
-	    mode->flags & DRM_MODE_FLAG_PHSYNC)
-		hsync2vsync_pol_ctrl = CDNS_H2V_HSYNC_POL_ACTIVE_LOW |
-				       CDNS_H2V_VSYNC_POL_ACTIVE_LOW;
-	else
-		hsync2vsync_pol_ctrl = 0;
-
+	hsync2vsync_pol_ctrl = 0;
+	if (mode->flags & DRM_MODE_FLAG_NHSYNC)
+		hsync2vsync_pol_ctrl |= CDNS_H2V_HSYNC_POL_ACTIVE_LOW;
+	if (mode->flags & DRM_MODE_FLAG_NVSYNC)
+		hsync2vsync_pol_ctrl |= CDNS_H2V_VSYNC_POL_ACTIVE_LOW;
 	cdns_mhdp_reg_write(mhdp, CDNS_HSYNC2VSYNC_POL_CTRL(stream_id),
 			    hsync2vsync_pol_ctrl);
 
@@ -1114,24 +1112,11 @@ static void cdns_mhdp_detach(struct drm_bridge *bridge)
 	writel(~0, mhdp->regs + CDNS_MB_INT_MASK);
 }
 
-static bool cdns_mhdp_mode_fixup(struct drm_bridge *bridge,
-				 const struct drm_display_mode *mode,
-				 struct drm_display_mode *adj)
-{
-	/* Fixup sync polarities, both hsync and vsync are active high */
-	adj->flags = mode->flags;
-	adj->flags |= (DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC);
-	adj->flags &= ~(DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC);
-
-	return true;
-}
-
 static const struct drm_bridge_funcs cdns_mhdp_bridge_funcs = {
 	.enable = cdns_mhdp_enable,
 	.disable = cdns_mhdp_disable,
 	.attach = cdns_mhdp_attach,
 	.detach = cdns_mhdp_detach,
-	.mode_fixup = cdns_mhdp_mode_fixup,
 };
 
 static int load_firmware(struct cdns_mhdp_device *mhdp, const char *name,

+ 1 - 1
drivers/gpu/drm/bridge/cdns-mhdp.h

@@ -135,7 +135,7 @@
 #define CDNS_DP_FRAMER_YCBCR420			BIT(3)
 #define CDNS_DP_FRAMER_Y_ONLY			BIT(4)
 
-#define CDNS_DP_FRAMER_SP(s)			(CDNS_DPTX_STREAM(s) + 0x10)
+#define CDNS_DP_FRAMER_SP(s)			(CDNS_DPTX_STREAM(s) + 0x50)
 #define CDNS_DP_FRAMER_VSYNC_POL_LOW		BIT(0)
 #define CDNS_DP_FRAMER_HSYNC_POL_LOW		BIT(1)
 #define CDNS_DP_FRAMER_INTERLACE		BIT(2)