From 04406cbc201958b0fb0bb299a9803cd850a0e078 Mon Sep 17 00:00:00 2001 From: Chen Shunqing Date: Fri, 19 Jan 2024 06:10:31 +0000 Subject: [PATCH] media: i2c: rk628: fix CTS HF2-86 test fail If sample_flat field is set to 1, there can't be any sound. Type: Function Redmine ID: N/A Associated modifications: N/A Test: CTS test HF2-86 Change-Id: I8f2ddfa3c5a7578a28c062817c10de2ea43ad164 Signed-off-by: Chen Shunqing --- drivers/media/i2c/rk628/rk628.c | 2 +- drivers/media/i2c/rk628/rk628_hdmirx.c | 10 +++++++++- drivers/media/i2c/rk628/rk628_hdmirx.h | 2 ++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/media/i2c/rk628/rk628.c b/drivers/media/i2c/rk628/rk628.c index a6fd12f00c19..b3aaa731faa5 100644 --- a/drivers/media/i2c/rk628/rk628.c +++ b/drivers/media/i2c/rk628/rk628.c @@ -65,7 +65,7 @@ static const struct regmap_range rk628_hdmirx_readable_ranges[] = { regmap_reg_range(HDMI_RX_AUD_PLL_CTRL, HDMI_RX_AUD_PLL_CTRL), regmap_reg_range(HDMI_RX_AUD_CLK_CTRL, HDMI_RX_AUD_CLK_CTRL), regmap_reg_range(HDMI_RX_AUD_FIFO_CTRL, HDMI_RX_AUD_FIFO_TH), - regmap_reg_range(HDMI_RX_AUD_CHEXTR_CTRL, HDMI_RX_AUD_PAO_CTRL), + regmap_reg_range(HDMI_RX_AUD_CHEXTR_CTRL, HDMI_RX_AUD_SPARE), regmap_reg_range(HDMI_RX_AUD_FIFO_STS, HDMI_RX_AUD_FIFO_STS), regmap_reg_range(HDMI_RX_AUDPLL_GEN_CTS, HDMI_RX_AUDPLL_GEN_N), regmap_reg_range(HDMI_RX_I2CM_PHYG3_DATAI, HDMI_RX_I2CM_PHYG3_DATAI), diff --git a/drivers/media/i2c/rk628/rk628_hdmirx.c b/drivers/media/i2c/rk628/rk628_hdmirx.c index 4f0f9d2ac58b..996f504fcf4f 100644 --- a/drivers/media/i2c/rk628/rk628_hdmirx.c +++ b/drivers/media/i2c/rk628/rk628_hdmirx.c @@ -368,7 +368,7 @@ static void rk628_csi_delayed_work_audio_v2(struct work_struct *work) delayed_work_audio); struct rk628_audiostate *audio_state = &aif->audio_state; struct rk628 *rk628 = aif->rk628; - u32 fs_audio; + u32 fs_audio, sample_flat; int init_state, pre_state, fifo_status, fifo_ints; unsigned long delay = 500; @@ -423,6 +423,14 @@ static void rk628_csi_delayed_work_audio_v2(struct work_struct *work) } } audio_state->pre_state = fifo_status; + + rk628_i2c_read(rk628, HDMI_RX_AUD_SPARE, &sample_flat); + sample_flat = sample_flat & AUDS_MAS_SAMPLE_FLAT; + if (!sample_flat) + rk628_i2c_update_bits(rk628, GRF_SYSTEM_CON0, SW_I2S_DATA_OEN_MASK, SW_I2S_DATA_OEN(0)); + else + rk628_i2c_update_bits(rk628, GRF_SYSTEM_CON0, SW_I2S_DATA_OEN_MASK, SW_I2S_DATA_OEN(1)); + exit: schedule_delayed_work(&aif->delayed_work_audio, msecs_to_jiffies(delay)); } diff --git a/drivers/media/i2c/rk628/rk628_hdmirx.h b/drivers/media/i2c/rk628/rk628_hdmirx.h index 501ea054317c..3aed4642da39 100644 --- a/drivers/media/i2c/rk628/rk628_hdmirx.h +++ b/drivers/media/i2c/rk628/rk628_hdmirx.h @@ -190,6 +190,8 @@ #define I2S_32_16(x) UPDATE(x, 0, 0) #define HDMI_RX_AUD_PAO_CTRL (HDMI_RX_BASE + 0x0264) #define PAO_RATE(x) UPDATE(x, 17, 16) +#define HDMI_RX_AUD_SPARE (HDMI_RX_BASE + 0x0268) +#define AUDS_MAS_SAMPLE_FLAT GENMASK(7, 4) #define HDMI_RX_AUD_FIFO_STS (HDMI_RX_BASE + 0x027c) #define HDMI_RX_AUDPLL_GEN_CTS (HDMI_RX_BASE + 0x0280) #define HDMI_RX_AUDPLL_GEN_N (HDMI_RX_BASE + 0x0284)