Commit a5f4185c authored by Lucas Stach's avatar Lucas Stach Committed by Philipp Zabel

drm/imx: hdmi: fix HDMI setup to allow modes larger than FullHD

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: default avatarLucas Stach <l.stach@pengutronix.de>
Signed-off-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
parent 9b6d0d33
...@@ -48,11 +48,17 @@ static const struct dw_hdmi_mpll_config imx_mpll_cfg[] = { ...@@ -48,11 +48,17 @@ static const struct dw_hdmi_mpll_config imx_mpll_cfg[] = {
{ 0x40a2, 0x000a }, { 0x40a2, 0x000a },
}, },
}, { }, {
~0UL, { 216000000, {
{ 0x00a0, 0x000a }, { 0x00a0, 0x000a },
{ 0x2001, 0x000f }, { 0x2001, 0x000f },
{ 0x4002, 0x000f }, { 0x4002, 0x000f },
}, },
}, {
~0UL, {
{ 0x0000, 0x0000 },
{ 0x0000, 0x0000 },
{ 0x0000, 0x0000 },
},
} }
}; };
...@@ -82,7 +88,7 @@ static const struct dw_hdmi_curr_ctrl imx_cur_ctr[] = { ...@@ -82,7 +88,7 @@ static const struct dw_hdmi_curr_ctrl imx_cur_ctr[] = {
*/ */
static const struct dw_hdmi_phy_config imx_phy_config[] = { static const struct dw_hdmi_phy_config imx_phy_config[] = {
/*pixelclk symbol term vlev */ /*pixelclk symbol term vlev */
{ 148500000, 0x800d, 0x0005, 0x01ad}, { 216000000, 0x800d, 0x0005, 0x01ad},
{ ~0UL, 0x0000, 0x0000, 0x0000} { ~0UL, 0x0000, 0x0000, 0x0000}
}; };
...@@ -148,7 +154,8 @@ static enum drm_mode_status imx6q_hdmi_mode_valid(struct drm_connector *con, ...@@ -148,7 +154,8 @@ static enum drm_mode_status imx6q_hdmi_mode_valid(struct drm_connector *con,
{ {
if (mode->clock < 13500) if (mode->clock < 13500)
return MODE_CLOCK_LOW; 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_CLOCK_HIGH;
return MODE_OK; return MODE_OK;
...@@ -159,7 +166,8 @@ static enum drm_mode_status imx6dl_hdmi_mode_valid(struct drm_connector *con, ...@@ -159,7 +166,8 @@ static enum drm_mode_status imx6dl_hdmi_mode_valid(struct drm_connector *con,
{ {
if (mode->clock < 13500) if (mode->clock < 13500)
return MODE_CLOCK_LOW; 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_CLOCK_HIGH;
return MODE_OK; return MODE_OK;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment