summaryrefslogtreecommitdiff
authorHang Cheng <hang.cheng@amlogic.com>2019-09-05 07:57:11 (GMT)
committer Tao Zeng <tao.zeng@amlogic.com>2019-09-06 08:22:27 (GMT)
commit407f7e4170e8ac7ac115d49f8dba3401eefd4f59 (patch)
treea9bd70bcaf3ba7e0852d5041395231e9598baaa5
parent69cb9e0bb04a333bdd34b35ad9e55b8d7c3ea1eb (diff)
downloadcommon-407f7e4170e8ac7ac115d49f8dba3401eefd4f59.zip
common-407f7e4170e8ac7ac115d49f8dba3401eefd4f59.tar.gz
common-407f7e4170e8ac7ac115d49f8dba3401eefd4f59.tar.bz2
hdmirx: add option for scdc enable [1/1]
PD#SWPL-13667 Problem: some devices may forcely send signal above 3.4G even if TV announce hdmi1.4 edid, such as apple TV box, Samsung UBD-K8500 dvd; and for QD6508 box of TCL, it will not send signal out if scdc NAK Solution: add a scdc force enable option to cover this issue. by default, scdc is enabled or not accroding to current edid version Verify: X301 Change-Id: Ibdacbd3bb1edbdcb99637252530d19510fbcfb1d Signed-off-by: Hang Cheng <hang.cheng@amlogic.com>
Diffstat
-rw-r--r--arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g.dts2
-rw-r--r--arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g_drm.dts2
-rw-r--r--arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_1g.dts2
-rw-r--r--arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_1g_drm.dts2
-rw-r--r--drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.c9
-rw-r--r--drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.h2
-rw-r--r--drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.c5
-rw-r--r--drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.h1
-rw-r--r--drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_wrapper.c3
9 files changed, 26 insertions, 2 deletions
diff --git a/arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g.dts b/arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g.dts
index 4e3cfe7..08626d6 100644
--- a/arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g.dts
+++ b/arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g.dts
@@ -911,6 +911,8 @@
hpd_low_cec_off = <1>;
/* bit4: enable feature, bit3~0: port number */
disable_port = <0x0>;
+ /* 1: enable, 0: disable */
+ scdc_force_en = <0>;
/* MAP_ADDR_MODULE_CBUS */
/* MAP_ADDR_MODULE_HIU */
/* MAP_ADDR_MODULE_HDMIRX_CAPB3 */
diff --git a/arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g_drm.dts b/arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g_drm.dts
index 15f16ac..bd4b205 100644
--- a/arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g_drm.dts
+++ b/arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g_drm.dts
@@ -905,6 +905,8 @@
hpd_low_cec_off = <1>;
/* bit4: enable feature, bit3~0: port number */
disable_port = <0x0>;
+ /* 1: enable, 0: disable */
+ scdc_force_en = <0>;
/* MAP_ADDR_MODULE_CBUS */
/* MAP_ADDR_MODULE_HIU */
/* MAP_ADDR_MODULE_HDMIRX_CAPB3 */
diff --git a/arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_1g.dts b/arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_1g.dts
index f12baa3..40bd862 100644
--- a/arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_1g.dts
+++ b/arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_1g.dts
@@ -908,6 +908,8 @@
hpd_low_cec_off = <1>;
/* bit4: enable feature, bit3~0: port number */
disable_port = <0x0>;
+ /* 1: enable, 0: disable */
+ scdc_force_en = <0>;
/* MAP_ADDR_MODULE_CBUS */
/* MAP_ADDR_MODULE_HIU */
/* MAP_ADDR_MODULE_HDMIRX_CAPB3 */
diff --git a/arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_1g_drm.dts b/arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_1g_drm.dts
index 67f3c70..3f4b4e7d 100644
--- a/arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_1g_drm.dts
+++ b/arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_1g_drm.dts
@@ -901,6 +901,8 @@
hpd_low_cec_off = <1>;
/* bit4: enable feature, bit3~0: port number */
disable_port = <0x0>;
+ /* 1: enable, 0: disable */
+ scdc_force_en = <0>;
/* MAP_ADDR_MODULE_CBUS */
/* MAP_ADDR_MODULE_HIU */
/* MAP_ADDR_MODULE_HDMIRX_CAPB3 */
diff --git a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.c b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.c
index 060a998..e5e82ef 100644
--- a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.c
+++ b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.c
@@ -2439,6 +2439,15 @@ static int hdmirx_probe(struct platform_device *pdev)
rx.arc_port = 0x1;
rx_pr("not find arc_port, portB by default\n");
}
+ ret = of_property_read_u32(pdev->dev.of_node,
+ "scdc_force_en",
+ &scdc_force_en);
+ if (ret) {
+ /* enable scdc accroding to edid version */
+ scdc_force_en = 0;
+ rx_pr("not find scdc_force_en, disable by default\n");
+ }
+
ret = of_reserved_mem_device_init(&(pdev->dev));
if (ret != 0)
rx_pr("warning: no rev cmd mem\n");
diff --git a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.h b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.h
index 7c137e7..21c2068 100644
--- a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.h
+++ b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.h
@@ -47,7 +47,7 @@
*
*
*/
-#define RX_VER2 "ver.2019/08/22"
+#define RX_VER2 "ver.2019/09/05"
/*print type*/
#define LOG_EN 0x01
diff --git a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.c b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.c
index 600df2f..d6ab837 100644
--- a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.c
+++ b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.c
@@ -101,6 +101,8 @@ int pll_rst_max = 5;
/* cdr lock threshold */
int cdr_lock_level;
int clock_lock_th = 2;
+int scdc_force_en;
+
/*------------------------variable define end------------------------------*/
static int check_regmap_flag(unsigned int addr)
@@ -1942,7 +1944,8 @@ void clk_init(void)
void hdmirx_20_init(void)
{
unsigned long data32;
- unsigned long scdc_en = rx.edid_ver;
+ unsigned long scdc_en =
+ scdc_force_en ? 1 : rx.edid_ver;
data32 = 0;
data32 |= 1 << 12; /* [12] vid_data_checken */
diff --git a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.h b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.h
index ebc34d2..4c0dafc 100644
--- a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.h
+++ b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.h
@@ -1117,6 +1117,7 @@ extern int cdr_lock_level;
extern int top_intr_maskn_value;
extern int hbr_force_8ch;
extern int clock_lock_th;
+extern int scdc_force_en;
extern void rx_get_best_eq_setting(void);
extern void wr_reg_hhi(unsigned int offset, unsigned int val);
extern void wr_reg_hhi_bits(unsigned int offset, unsigned int mask,
diff --git a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_wrapper.c b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_wrapper.c
index 5ffad2f..2dde4f0 100644
--- a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_wrapper.c
+++ b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_wrapper.c
@@ -1732,6 +1732,8 @@ int rx_set_global_variable(const char *buf, int size)
return pr_var(en_take_dtd_space, index);
if (set_pr_var(tmpbuf, earc_cap_ds_update_hpd_en, value, &index, ret))
return pr_var(earc_cap_ds_update_hpd_en, index);
+ if (set_pr_var(tmpbuf, scdc_force_en, value, &index, ret))
+ return pr_var(scdc_force_en, index);
return 0;
}
@@ -1844,6 +1846,7 @@ void rx_get_global_variable(const char *buf)
pr_var(clock_lock_th, i++);
pr_var(en_take_dtd_space, i++);
pr_var(earc_cap_ds_update_hpd_en, i++);
+ pr_var(scdc_force_en, i++);
}
void skip_frame(unsigned int cnt)