|
@@ -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);
|