Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3df9fb5c authored by Axel Castaneda Gonzalez's avatar Axel Castaneda Gonzalez Committed by Tomi Valkeinen
Browse files

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: default avatarAxel Castaneda Gonzalez <x0055901@ti.com>
Signed-off-by: default avatarRicardo Neri <ricardo.neri@ti.com>
parent 7c92af16
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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

};
+6 −0
Original line number Diff line number Diff line
@@ -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
+14 −5
Original line number Diff line number Diff line
@@ -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);
	return 0;
}

void ti_hdmi_4xxx_wp_audio_disable(struct hdmi_ip_data *ip_data)
{
	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_wp_audio_disable(struct hdmi_ip_data *ip_data)
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, 31, 31);
	REG_FLD_MOD(hdmi_wp_base(ip_data),
		    HDMI_WP_AUDIO_CTRL, false, 30, 30);
}