video: dw_hdmi: Select HDMI mode only if monitor supports it
Some DVI monitors don't work in HDMI mode. Set it only if edid data explicitly states that it is supported. Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
43c6bdd020
commit
4f4e1b6365
@ -414,13 +414,9 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi,
|
||||
HDMI_FC_INVIDCONF_DE_IN_POLARITY_ACTIVE_HIGH :
|
||||
HDMI_FC_INVIDCONF_DE_IN_POLARITY_ACTIVE_LOW);
|
||||
|
||||
/*
|
||||
* TODO(sjg@chromium.org>: Need to check for HDMI / DVI
|
||||
* inv_val |= (edid->hdmi_monitor_detected ?
|
||||
* HDMI_FC_INVIDCONF_DVI_MODEZ_HDMI_MODE :
|
||||
* HDMI_FC_INVIDCONF_DVI_MODEZ_DVI_MODE);
|
||||
*/
|
||||
inv_val |= HDMI_FC_INVIDCONF_DVI_MODEZ_HDMI_MODE;
|
||||
inv_val |= (edid->hdmi_monitor ?
|
||||
HDMI_FC_INVIDCONF_DVI_MODEZ_HDMI_MODE :
|
||||
HDMI_FC_INVIDCONF_DVI_MODEZ_DVI_MODE);
|
||||
|
||||
inv_val |= HDMI_FC_INVIDCONF_R_V_BLANK_IN_OSC_ACTIVE_LOW;
|
||||
|
||||
@ -459,7 +455,7 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi,
|
||||
}
|
||||
|
||||
/* hdmi initialization step b.4 */
|
||||
static void hdmi_enable_video_path(struct dw_hdmi *hdmi)
|
||||
static void hdmi_enable_video_path(struct dw_hdmi *hdmi, bool audio)
|
||||
{
|
||||
uint clkdis;
|
||||
|
||||
@ -484,8 +480,10 @@ static void hdmi_enable_video_path(struct dw_hdmi *hdmi)
|
||||
clkdis &= ~HDMI_MC_CLKDIS_TMDSCLK_DISABLE;
|
||||
hdmi_write(hdmi, clkdis, HDMI_MC_CLKDIS);
|
||||
|
||||
clkdis &= ~HDMI_MC_CLKDIS_AUDCLK_DISABLE;
|
||||
hdmi_write(hdmi, clkdis, HDMI_MC_CLKDIS);
|
||||
if (audio) {
|
||||
clkdis &= ~HDMI_MC_CLKDIS_AUDCLK_DISABLE;
|
||||
hdmi_write(hdmi, clkdis, HDMI_MC_CLKDIS);
|
||||
}
|
||||
}
|
||||
|
||||
/* workaround to clear the overflow condition */
|
||||
@ -716,7 +714,8 @@ int dw_hdmi_enable(struct dw_hdmi *hdmi, const struct display_timing *edid)
|
||||
{
|
||||
int ret;
|
||||
|
||||
debug("hdmi, mode info : clock %d hdis %d vdis %d\n",
|
||||
debug("%s, mode info : clock %d hdis %d vdis %d\n",
|
||||
edid->hdmi_monitor ? "hdmi" : "dvi",
|
||||
edid->pixelclock.typ, edid->hactive.typ, edid->vactive.typ);
|
||||
|
||||
hdmi_av_composer(hdmi, edid);
|
||||
@ -725,11 +724,13 @@ int dw_hdmi_enable(struct dw_hdmi *hdmi, const struct display_timing *edid)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
hdmi_enable_video_path(hdmi);
|
||||
hdmi_enable_video_path(hdmi, edid->hdmi_monitor);
|
||||
|
||||
hdmi_audio_fifo_reset(hdmi);
|
||||
hdmi_audio_set_format(hdmi);
|
||||
hdmi_audio_set_samplerate(hdmi, edid->pixelclock.typ);
|
||||
if (edid->hdmi_monitor) {
|
||||
hdmi_audio_fifo_reset(hdmi);
|
||||
hdmi_audio_set_format(hdmi);
|
||||
hdmi_audio_set_samplerate(hdmi, edid->pixelclock.typ);
|
||||
}
|
||||
|
||||
hdmi_video_packetize(hdmi);
|
||||
hdmi_video_sample(hdmi);
|
||||
|
Loading…
Reference in New Issue
Block a user