drm/imx: hdmi: fix HDMI setup to allow modes larger than FullHD
authorLucas Stach <l.stach@pengutronix.de>
Thu, 15 Oct 2015 13:42:17 +0000 (15:42 +0200)
committerPhilipp Zabel <p.zabel@pengutronix.de>
Fri, 30 Oct 2015 16:13:54 +0000 (17:13 +0100)
This worked before the dw-hdmi bridge code was changed to validate
the setup data more strictly. Add back support for modes with a
pixel clock up to 216MHz. Even higher clocks should work, but we
are missing the required setup data for now.

Also change the mode validate callbacks to disallow modes with
higher pixelclocks, so we don't end up failing the modeset later
on.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
drivers/gpu/drm/imx/dw_hdmi-imx.c

index 644edf65dbe0bdb5c6de6ab6af349a76cf130a00..98605ea2ad9d812cc916cf3f96f04595fb93ee44 100644 (file)
@@ -48,11 +48,17 @@ static const struct dw_hdmi_mpll_config imx_mpll_cfg[] = {
                        { 0x40a2, 0x000a },
                },
        }, {
-               ~0UL, {
+               216000000, {
                        { 0x00a0, 0x000a },
                        { 0x2001, 0x000f },
                        { 0x4002, 0x000f },
                },
+       }, {
+               ~0UL, {
+                       { 0x0000, 0x0000 },
+                       { 0x0000, 0x0000 },
+                       { 0x0000, 0x0000 },
+               },
        }
 };
 
@@ -82,7 +88,7 @@ static const struct dw_hdmi_curr_ctrl imx_cur_ctr[] = {
  */
 static const struct dw_hdmi_phy_config imx_phy_config[] = {
        /*pixelclk   symbol   term   vlev */
-       { 148500000, 0x800d, 0x0005, 0x01ad},
+       { 216000000, 0x800d, 0x0005, 0x01ad},
        { ~0UL,      0x0000, 0x0000, 0x0000}
 };
 
@@ -148,7 +154,8 @@ static enum drm_mode_status imx6q_hdmi_mode_valid(struct drm_connector *con,
 {
        if (mode->clock < 13500)
                return MODE_CLOCK_LOW;
-       if (mode->clock > 266000)
+       /* FIXME: Hardware is capable of 266MHz, but setup data is missing. */
+       if (mode->clock > 216000)
                return MODE_CLOCK_HIGH;
 
        return MODE_OK;
@@ -159,7 +166,8 @@ static enum drm_mode_status imx6dl_hdmi_mode_valid(struct drm_connector *con,
 {
        if (mode->clock < 13500)
                return MODE_CLOCK_LOW;
-       if (mode->clock > 270000)
+       /* FIXME: Hardware is capable of 270MHz, but setup data is missing. */
+       if (mode->clock > 216000)
                return MODE_CLOCK_HIGH;
 
        return MODE_OK;