|
@@ -544,6 +544,12 @@ void dw_hdmi_set_sample_rate(struct dw_hdmi *hdmi, unsigned int rate)
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(dw_hdmi_set_sample_rate);
|
|
EXPORT_SYMBOL_GPL(dw_hdmi_set_sample_rate);
|
|
|
|
|
|
|
|
+static void hdmi_enable_audio_clk(struct dw_hdmi *hdmi, bool enable)
|
|
|
|
+{
|
|
|
|
+ hdmi_modb(hdmi, enable ? 0 : HDMI_MC_CLKDIS_AUDCLK_DISABLE,
|
|
|
|
+ HDMI_MC_CLKDIS_AUDCLK_DISABLE, HDMI_MC_CLKDIS);
|
|
|
|
+}
|
|
|
|
+
|
|
static void dw_hdmi_ahb_audio_enable(struct dw_hdmi *hdmi)
|
|
static void dw_hdmi_ahb_audio_enable(struct dw_hdmi *hdmi)
|
|
{
|
|
{
|
|
hdmi_set_cts_n(hdmi, hdmi->audio_cts, hdmi->audio_n);
|
|
hdmi_set_cts_n(hdmi, hdmi->audio_cts, hdmi->audio_n);
|
|
@@ -557,6 +563,12 @@ static void dw_hdmi_ahb_audio_disable(struct dw_hdmi *hdmi)
|
|
static void dw_hdmi_i2s_audio_enable(struct dw_hdmi *hdmi)
|
|
static void dw_hdmi_i2s_audio_enable(struct dw_hdmi *hdmi)
|
|
{
|
|
{
|
|
hdmi_set_cts_n(hdmi, hdmi->audio_cts, hdmi->audio_n);
|
|
hdmi_set_cts_n(hdmi, hdmi->audio_cts, hdmi->audio_n);
|
|
|
|
+ hdmi_enable_audio_clk(hdmi, true);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void dw_hdmi_i2s_audio_disable(struct dw_hdmi *hdmi)
|
|
|
|
+{
|
|
|
|
+ hdmi_enable_audio_clk(hdmi, false);
|
|
}
|
|
}
|
|
|
|
|
|
void dw_hdmi_audio_enable(struct dw_hdmi *hdmi)
|
|
void dw_hdmi_audio_enable(struct dw_hdmi *hdmi)
|
|
@@ -1592,11 +1604,6 @@ static void dw_hdmi_enable_video_path(struct dw_hdmi *hdmi)
|
|
HDMI_MC_FLOWCTRL);
|
|
HDMI_MC_FLOWCTRL);
|
|
}
|
|
}
|
|
|
|
|
|
-static void hdmi_enable_audio_clk(struct dw_hdmi *hdmi)
|
|
|
|
-{
|
|
|
|
- hdmi_modb(hdmi, 0, HDMI_MC_CLKDIS_AUDCLK_DISABLE, HDMI_MC_CLKDIS);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/* Workaround to clear the overflow condition */
|
|
/* Workaround to clear the overflow condition */
|
|
static void dw_hdmi_clear_overflow(struct dw_hdmi *hdmi)
|
|
static void dw_hdmi_clear_overflow(struct dw_hdmi *hdmi)
|
|
{
|
|
{
|
|
@@ -1710,7 +1717,7 @@ static int dw_hdmi_setup(struct dw_hdmi *hdmi, struct drm_display_mode *mode)
|
|
|
|
|
|
/* HDMI Initialization Step E - Configure audio */
|
|
/* HDMI Initialization Step E - Configure audio */
|
|
hdmi_clk_regenerator_update_pixel_clock(hdmi);
|
|
hdmi_clk_regenerator_update_pixel_clock(hdmi);
|
|
- hdmi_enable_audio_clk(hdmi);
|
|
|
|
|
|
+ hdmi_enable_audio_clk(hdmi, true);
|
|
}
|
|
}
|
|
|
|
|
|
/* not for DVI mode */
|
|
/* not for DVI mode */
|
|
@@ -2422,6 +2429,7 @@ __dw_hdmi_probe(struct platform_device *pdev,
|
|
audio.write = hdmi_writeb;
|
|
audio.write = hdmi_writeb;
|
|
audio.read = hdmi_readb;
|
|
audio.read = hdmi_readb;
|
|
hdmi->enable_audio = dw_hdmi_i2s_audio_enable;
|
|
hdmi->enable_audio = dw_hdmi_i2s_audio_enable;
|
|
|
|
+ hdmi->disable_audio = dw_hdmi_i2s_audio_disable;
|
|
|
|
|
|
pdevinfo.name = "dw-hdmi-i2s-audio";
|
|
pdevinfo.name = "dw-hdmi-i2s-audio";
|
|
pdevinfo.data = &audio;
|
|
pdevinfo.data = &audio;
|