drm: rcar-du: dw-hdmi: Reject modes with a too high clock frequency
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Fri, 23 Nov 2018 14:30:20 +0000 (16:30 +0200)
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Mon, 14 Jan 2019 01:51:23 +0000 (03:51 +0200)
Implement a .mode_valid() handler in the R-Car glue layer to reject
modes with an unsupported clock frequency.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
drivers/gpu/drm/rcar-du/rcar_dw_hdmi.c

index 75490a3e0a2ab096b63e6b269b67c26bfe25cf23..603bb340e8cfa3bc65c153cc760ce49d22d7adde 100644 (file)
@@ -35,6 +35,20 @@ static const struct rcar_hdmi_phy_params rcar_hdmi_phy_params[] = {
        { ~0UL,      0x0000, 0x0000, 0x0000 },
 };
 
+static enum drm_mode_status
+rcar_hdmi_mode_valid(struct drm_connector *connector,
+                    const struct drm_display_mode *mode)
+{
+       /*
+        * The maximum supported clock frequency is 297 MHz, as shown in the PHY
+        * parameters table.
+        */
+       if (mode->clock > 297000)
+               return MODE_CLOCK_HIGH;
+
+       return MODE_OK;
+}
+
 static int rcar_hdmi_phy_configure(struct dw_hdmi *hdmi,
                                   const struct dw_hdmi_plat_data *pdata,
                                   unsigned long mpixelclock)
@@ -59,6 +73,7 @@ static int rcar_hdmi_phy_configure(struct dw_hdmi *hdmi,
 }
 
 static const struct dw_hdmi_plat_data rcar_dw_hdmi_plat_data = {
+       .mode_valid = rcar_hdmi_mode_valid,
        .configure_phy  = rcar_hdmi_phy_configure,
 };