when hdmi mute audio, need to reset the audio logic and fifo.
otherwise, this may lead no sound/noise sometimes.
this patch add power down hdmi audio logic when mute audio,
and then power up hdmi audio logic when unmute audio.
Change-Id: Ifb8beac9690764b4ec1c6d3e1dfdb4253a05df51
Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
return 0;
/* Disable video and audio output */
hdmi_msk_reg(hdmi_dev, AV_MUTE,
return 0;
/* Disable video and audio output */
hdmi_msk_reg(hdmi_dev, AV_MUTE,
- m_AUDIO_MUTE | m_VIDEO_BLACK,
- v_AUDIO_MUTE(1) | v_VIDEO_MUTE(1));
+ m_AUDIO_MUTE | m_AUDIO_PD | m_VIDEO_BLACK,
+ v_AUDIO_MUTE(1) | v_AUDIO_PD(1) | v_VIDEO_MUTE(1));
/* Input video mode is SDR RGB24bit,
Data enable signal from external */
/* Input video mode is SDR RGB24bit,
Data enable signal from external */
/* set_audio source I2S */
if (hdmi_dev->audiosrc == HDMI_AUDIO_SRC_IIS) {
/* set_audio source I2S */
if (hdmi_dev->audiosrc == HDMI_AUDIO_SRC_IIS) {
- hdmi_writel(hdmi_dev, AUDIO_CTRL1, 0x00);
+ hdmi_writel(hdmi_dev, AUDIO_CTRL1, 0x01);
hdmi_writel(hdmi_dev, AUDIO_SAMPLE_RATE, rate);
hdmi_writel(hdmi_dev, AUDIO_I2S_MODE,
v_I2S_MODE(I2S_STANDARD) |
hdmi_writel(hdmi_dev, AUDIO_SAMPLE_RATE, rate);
hdmi_writel(hdmi_dev, AUDIO_I2S_MODE,
v_I2S_MODE(I2S_STANDARD) |
if (mutestatus && (m_AUDIO_MUTE | m_VIDEO_BLACK)) {
hdmi_msk_reg(hdmi_dev, AV_MUTE,
if (mutestatus && (m_AUDIO_MUTE | m_VIDEO_BLACK)) {
hdmi_msk_reg(hdmi_dev, AV_MUTE,
- m_AUDIO_MUTE | m_VIDEO_BLACK,
- v_AUDIO_MUTE(0) | v_VIDEO_MUTE(0));
+ m_AUDIO_MUTE |
+ m_AUDIO_PD |
+ m_VIDEO_BLACK,
+ v_AUDIO_MUTE(0) |
+ v_AUDIO_PD(0) |
+ v_VIDEO_MUTE(0));
}
rockchip_hdmiv1_av_mute(hdmi_drv, 0);
} else {
}
rockchip_hdmiv1_av_mute(hdmi_drv, 0);
} else {
if (enable & HDMI_VIDEO_MUTE)
mutestatus |= v_VIDEO_MUTE(1);
if (enable & HDMI_AUDIO_MUTE)
if (enable & HDMI_VIDEO_MUTE)
mutestatus |= v_VIDEO_MUTE(1);
if (enable & HDMI_AUDIO_MUTE)
- mutestatus |= v_AUDIO_MUTE(1);
+ mutestatus |= (v_AUDIO_MUTE(1) | v_AUDIO_PD(1));
hdmi_msk_reg(hdmi_dev, AV_MUTE,
hdmi_msk_reg(hdmi_dev, AV_MUTE,
- m_AUDIO_MUTE | m_VIDEO_BLACK,
+ m_AUDIO_MUTE | m_AUDIO_PD | m_VIDEO_BLACK,
if (enable == (HDMI_VIDEO_MUTE | HDMI_AUDIO_MUTE)) {
rockchip_hdmiv1_av_mute(hdmi_drv, 1);
msleep(100);
if (enable == (HDMI_VIDEO_MUTE | HDMI_AUDIO_MUTE)) {
rockchip_hdmiv1_av_mute(hdmi_drv, 1);
msleep(100);
#define AV_MUTE 0x05
#define m_AVMUTE_CLEAR (1 << 7)
#define m_AVMUTE_ENABLE (1 << 6)
#define AV_MUTE 0x05
#define m_AVMUTE_CLEAR (1 << 7)
#define m_AVMUTE_ENABLE (1 << 6)
+#define m_AUDIO_PD (1 << 2)
#define m_AUDIO_MUTE (1 << 1)
#define m_VIDEO_BLACK (1 << 0)
#define v_AVMUTE_CLEAR(n) (n << 7)
#define v_AVMUTE_ENABLE(n) (n << 6)
#define m_AUDIO_MUTE (1 << 1)
#define m_VIDEO_BLACK (1 << 0)
#define v_AVMUTE_CLEAR(n) (n << 7)
#define v_AVMUTE_ENABLE(n) (n << 6)
+#define v_AUDIO_PD(n) (n << 2)
#define v_AUDIO_MUTE(n) (n << 1)
#define v_VIDEO_MUTE(n) (n << 0)
#define v_AUDIO_MUTE(n) (n << 1)
#define v_VIDEO_MUTE(n) (n << 0)