OMAPDSS: HDMI: Decouple wrapper enable/disable and audio start/stop
Decouple the enable/disable operation of the HDMI audio wrapper from audio start/stop. Otherwise, an audio FIFO underflow may occur. The audio wrapper enablement must be done after configuration and before audio playback is started. Signed-off-by: Axel Castaneda Gonzalez <x0055901@ti.com> Signed-off-by: Ricardo Neri <ricardo.neri@ti.com>
This commit is contained in:
parent
7c92af1678
commit
3df9fb5c51
|
@ -577,6 +577,8 @@ static const struct ti_hdmi_ip_ops omap4_hdmi_functions = {
|
|||
defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI_MODULE)
|
||||
.audio_enable = ti_hdmi_4xxx_wp_audio_enable,
|
||||
.audio_disable = ti_hdmi_4xxx_wp_audio_disable,
|
||||
.audio_start = ti_hdmi_4xxx_audio_start,
|
||||
.audio_stop = ti_hdmi_4xxx_audio_stop,
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
@ -113,6 +113,10 @@ struct ti_hdmi_ip_ops {
|
|||
int (*audio_enable)(struct hdmi_ip_data *ip_data);
|
||||
|
||||
void (*audio_disable)(struct hdmi_ip_data *ip_data);
|
||||
|
||||
int (*audio_start)(struct hdmi_ip_data *ip_data);
|
||||
|
||||
void (*audio_stop)(struct hdmi_ip_data *ip_data);
|
||||
#endif
|
||||
|
||||
};
|
||||
|
@ -190,5 +194,7 @@ void ti_hdmi_4xxx_phy_dump(struct hdmi_ip_data *ip_data, struct seq_file *s);
|
|||
defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI_MODULE)
|
||||
int ti_hdmi_4xxx_wp_audio_enable(struct hdmi_ip_data *ip_data);
|
||||
void ti_hdmi_4xxx_wp_audio_disable(struct hdmi_ip_data *ip_data);
|
||||
int ti_hdmi_4xxx_audio_start(struct hdmi_ip_data *ip_data);
|
||||
void ti_hdmi_4xxx_audio_stop(struct hdmi_ip_data *ip_data);
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -1254,21 +1254,30 @@ int hdmi_config_audio_acr(struct hdmi_ip_data *ip_data,
|
|||
|
||||
int ti_hdmi_4xxx_wp_audio_enable(struct hdmi_ip_data *ip_data)
|
||||
{
|
||||
REG_FLD_MOD(hdmi_av_base(ip_data),
|
||||
HDMI_CORE_AV_AUD_MODE, true, 0, 0);
|
||||
REG_FLD_MOD(hdmi_wp_base(ip_data),
|
||||
HDMI_WP_AUDIO_CTRL, true, 31, 31);
|
||||
REG_FLD_MOD(hdmi_wp_base(ip_data),
|
||||
HDMI_WP_AUDIO_CTRL, true, 30, 30);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ti_hdmi_4xxx_wp_audio_disable(struct hdmi_ip_data *ip_data)
|
||||
{
|
||||
REG_FLD_MOD(hdmi_av_base(ip_data),
|
||||
HDMI_CORE_AV_AUD_MODE, false, 0, 0);
|
||||
REG_FLD_MOD(hdmi_wp_base(ip_data),
|
||||
HDMI_WP_AUDIO_CTRL, false, 31, 31);
|
||||
}
|
||||
|
||||
int ti_hdmi_4xxx_audio_start(struct hdmi_ip_data *ip_data)
|
||||
{
|
||||
REG_FLD_MOD(hdmi_av_base(ip_data),
|
||||
HDMI_CORE_AV_AUD_MODE, true, 0, 0);
|
||||
REG_FLD_MOD(hdmi_wp_base(ip_data),
|
||||
HDMI_WP_AUDIO_CTRL, true, 30, 30);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ti_hdmi_4xxx_audio_stop(struct hdmi_ip_data *ip_data)
|
||||
{
|
||||
REG_FLD_MOD(hdmi_av_base(ip_data),
|
||||
HDMI_CORE_AV_AUD_MODE, false, 0, 0);
|
||||
REG_FLD_MOD(hdmi_wp_base(ip_data),
|
||||
HDMI_WP_AUDIO_CTRL, false, 30, 30);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue