From 8826fbcc1d10f0359c6fa7d721f64c79f6b74b23 Mon Sep 17 00:00:00 2001 From: Chen Shunqing Date: Fri, 26 Jul 2024 10:01:55 +0800 Subject: [PATCH] media: i2c: rk628: fix no display because clear avmute is not received Signed-off-by: Chen Shunqing Change-Id: Iede1b6f196747eea5864b853c28b1cccaa7baa6c --- drivers/media/i2c/rk628/rk628_bt1120_v4l2.c | 5 +++++ drivers/media/i2c/rk628/rk628_csi_v4l2.c | 5 +++++ drivers/media/i2c/rk628/rk628_hdmirx.h | 4 ++++ 3 files changed, 14 insertions(+) diff --git a/drivers/media/i2c/rk628/rk628_bt1120_v4l2.c b/drivers/media/i2c/rk628/rk628_bt1120_v4l2.c index 4e24bc4f680b..601b726af330 100644 --- a/drivers/media/i2c/rk628/rk628_bt1120_v4l2.c +++ b/drivers/media/i2c/rk628/rk628_bt1120_v4l2.c @@ -617,6 +617,11 @@ static void enable_stream(struct v4l2_subdev *sd, bool en) } rk628_hdmirx_vid_enable(sd, true); enable_bt1120tx(sd); + + rk628_i2c_update_bits(bt1120->rk628, HDMI_RX_PDEC_CTRL, + GCPFORCE_CLRAVMUTE_MASK, GCPFORCE_CLRAVMUTE(1)); + rk628_i2c_update_bits(bt1120->rk628, HDMI_RX_PDEC_CTRL, + GCPFORCE_CLRAVMUTE_MASK, GCPFORCE_CLRAVMUTE(0)); } else { rk628_i2c_write(bt1120->rk628, GRF_SCALER_CON0, SCL_EN(0)); rk628_hdmirx_vid_enable(sd, false); diff --git a/drivers/media/i2c/rk628/rk628_csi_v4l2.c b/drivers/media/i2c/rk628/rk628_csi_v4l2.c index dcd060ee4106..fd7b38b6cd99 100644 --- a/drivers/media/i2c/rk628/rk628_csi_v4l2.c +++ b/drivers/media/i2c/rk628/rk628_csi_v4l2.c @@ -911,6 +911,11 @@ static void enable_stream(struct v4l2_subdev *sd, bool en) rk628_csi_enable_csi_interrupts(sd, true); } rk628_hdmirx_vid_enable(sd, true); + + rk628_i2c_update_bits(csi->rk628, HDMI_RX_PDEC_CTRL, + GCPFORCE_CLRAVMUTE_MASK, GCPFORCE_CLRAVMUTE(1)); + rk628_i2c_update_bits(csi->rk628, HDMI_RX_PDEC_CTRL, + GCPFORCE_CLRAVMUTE_MASK, GCPFORCE_CLRAVMUTE(0)); } else { if (csi->plat_data->tx_mode == CSI_MODE) { rk628_csi_enable_csi_interrupts(sd, false); diff --git a/drivers/media/i2c/rk628/rk628_hdmirx.h b/drivers/media/i2c/rk628/rk628_hdmirx.h index 015c3df0aa38..76a81380dff2 100644 --- a/drivers/media/i2c/rk628/rk628_hdmirx.h +++ b/drivers/media/i2c/rk628/rk628_hdmirx.h @@ -243,6 +243,8 @@ #define PFIFO_STORE_GCP(x) UPDATE(x, 17, 17) #define PFIFO_STORE_ACR_MASK BIT(16) #define PFIFO_STORE_ACR(x) UPDATE(x, 16, 16) +#define GCPFORCE_CLRAVMUTE_MASK BIT(14) +#define GCPFORCE_CLRAVMUTE(x) UPDATE(x, 14, 14) #define GCPFORCE_SETAVMUTE_MASK BIT(13) #define GCPFORCE_SETAVMUTE(x) UPDATE(x, 13, 13) #define PDEC_BCH_EN_MASK BIT(0) @@ -258,6 +260,8 @@ #define DVI_DET BIT(28) #define HDMI_RX_PDEC_GCP_AVMUTE (HDMI_RX_BASE + 0x0380) #define PKTDEC_GCP_CD_MASK GENMASK(7, 4) +#define PKTDEC_GCP_SETAVMUTE_MASK GENMASK(1, 1) +#define PKTDEC_GCP_CLRAVMUTE_MASK GENMASK(0, 0) #define HDMI_RX_PDEC_AVI_HB (HDMI_RX_BASE + 0x03a0) #define HDMI_RX_PDEC_AVI_PB (HDMI_RX_BASE + 0x03a4) #define VID_IDENT_CODE_VIC7 BIT(31)