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)