cec: add device match for tl1 [1/1]
authorYong Qin <yong.qin@amlogic.com>
Mon, 12 Nov 2018 03:38:33 +0000 (11:38 +0800)
committerJianxin Pan <jianxin.pan@amlogic.com>
Tue, 27 Nov 2018 07:53:19 +0000 (23:53 -0800)
PD#172587

Problem:
add device match for tl1

Solution:
1.add cecb ver
2.add ceca status reg flag

Verify:
1.run TPM
2.run chip

Change-Id: I304abfd1d6f1f216f9f0c56ca19a8bdb2ccfeabb
Signed-off-by: Yong Qin <yong.qin@amlogic.com>
drivers/amlogic/cec/hdmi_ao_cec.c
drivers/amlogic/cec/hdmi_ao_cec.h

index ea38c2f426799d4918dbf49bd72756df0a294be4..e0cac095fe660d831284ffcd66ccbefa3f0c67ea 100644 (file)
@@ -76,12 +76,15 @@ static struct early_suspend aocec_suspend_handler;
 #define MAX_INT    0x7ffffff
 
 struct cec_platform_data_s {
-       unsigned int chip_id;
+       /*unsigned int chip_id;*/
        unsigned char line_reg;/*cec gpio_i reg:0  ao;1 periph*/
        unsigned int line_bit;/*cec gpio position in reg*/
        bool ee_to_ao;/*ee cec hw module mv to ao;ao cec delete*/
+       bool ceca_sts_reg;/*add new internal status register*/
+       enum cecbver cecb_ver;/* detail discription ref enum cecbver */
 };
 
+
 struct cec_wakeup_t {
        unsigned int wk_logic_addr:8;
        unsigned int wk_phy_addr:16;
@@ -583,7 +586,7 @@ static void ao_cecb_init(void)
                /* Release SW reset */
                cec_set_reg_bits(AO_CECB_GEN_CNTL, 0, 0, 1);
 
-               if (cec_dev->plat_data->chip_id >= CEC_CHIP_ID_TL1) {
+               if (cec_dev->plat_data->cecb_ver >= CECB_VER_2) {
                        reg = 0;
                        reg |= (0 << 6);/*curb_err_init*/
                        reg |= (0 << 5);/*en_chk_sbitlow*/
@@ -696,7 +699,7 @@ static int dump_cecrx_reg(char *b)
 
        s += sprintf(b + s, "CEC MODULE REGS:\n");
        s += sprintf(b + s, "CEC_CTRL     = 0x%02x\n", hdmirx_cec_read(0x1f00));
-       if (cec_dev->plat_data->chip_id >= CEC_CHIP_ID_TL1)
+       if (cec_dev->plat_data->cecb_ver >= CECB_VER_2)
                s += sprintf(b + s, "CEC_CTRL2    = 0x%02x\n",
                        hdmirx_cec_read(0x1f04));
        s += sprintf(b + s, "CEC_MASK     = 0x%02x\n", hdmirx_cec_read(0x1f08));
@@ -704,7 +707,7 @@ static int dump_cecrx_reg(char *b)
        s += sprintf(b + s, "CEC_ADDR_H   = 0x%02x\n", hdmirx_cec_read(0x1f18));
        s += sprintf(b + s, "CEC_TX_CNT   = 0x%02x\n", hdmirx_cec_read(0x1f1c));
        s += sprintf(b + s, "CEC_RX_CNT   = 0x%02x\n", hdmirx_cec_read(0x1f20));
-       if (cec_dev->plat_data->chip_id >= CEC_CHIP_ID_TL1)
+       if (cec_dev->plat_data->cecb_ver >= CECB_VER_2)
                s += sprintf(b + s, "CEC_STAT0   = 0x%02x\n",
                        hdmirx_cec_read(0x1f24));
        s += sprintf(b + s, "CEC_LOCK     = 0x%02x\n", hdmirx_cec_read(0x1fc0));
@@ -985,7 +988,7 @@ void cec_enable_arc_pin(bool enable)
 {
        unsigned int data;
 
-       if (cec_dev->plat_data->chip_id >= CEC_CHIP_ID_TL1) {
+       if (cec_dev->plat_data->cecb_ver >= CECB_VER_2) {
                data = rd_reg_hhi(HHI_HDMIRX_ARC_CNTL);
                /* enable bit 1:1 bit 0: 0*/
                if (enable)
@@ -2077,7 +2080,7 @@ static ssize_t dump_reg_show(struct class *cla,
                             cec_reg_name2[i], aocec_rd_reg(i + 0x90));
        }
 
-       if (cec_dev->plat_data->chip_id >= CEC_CHIP_ID_TL1) {
+       if (cec_dev->plat_data->ceca_sts_reg) {
                for (i = 0; i < ARRAY_SIZE(ceca_reg_name3); i++) {
                        s += sprintf(b + s, "%s:%2x\n",
                         ceca_reg_name3[i], aocec_rd_reg(i + 0xA0));
@@ -2947,38 +2950,43 @@ static void aocec_late_resume(struct early_suspend *h)
 
 #ifdef CONFIG_OF
 static const struct cec_platform_data_s cec_gxl_data = {
-       .chip_id = CEC_CHIP_ID_GXTVBB,
        .line_reg = 0,
        .line_bit = 8,
        .ee_to_ao = 0,
+       .ceca_sts_reg = 0,
+       .cecb_ver = CECB_VER_0,
 };
 
 static const struct cec_platform_data_s cec_txlx_data = {
-       .chip_id = CEC_CHIP_ID_TXLX,
        .line_reg = 0,
        .line_bit = 7,
        .ee_to_ao = 1,
+       .ceca_sts_reg = 0,
+       .cecb_ver = CECB_VER_1,
 };
 
 static const struct cec_platform_data_s cec_g12a_data = {
-       .chip_id = CEC_CHIP_ID_G12A,
        .line_reg = 1,
        .line_bit = 3,
        .ee_to_ao = 1,
+       .ceca_sts_reg = 0,
+       .cecb_ver = CECB_VER_1,
 };
 
 static const struct cec_platform_data_s cec_txl_data = {
-       .chip_id = CEC_CHIP_ID_TXL,
        .line_reg = 0,
        .line_bit = 7,
        .ee_to_ao = 0,
+       .ceca_sts_reg = 0,
+       .cecb_ver = CECB_VER_0,
 };
 
 static const struct cec_platform_data_s cec_tl1_data = {
-       .chip_id = CEC_CHIP_ID_TL1,
        .line_reg = 0,
        .line_bit = 7,
        .ee_to_ao = 1,
+       .ceca_sts_reg = 1,
+       .cecb_ver = CECB_VER_2,
 };
 
 
index bd4b8a3291e4bdff6792929723eee092c9c54429..14a9fd4d4b3a60db2e9824130f68bb4745f36363 100644 (file)
@@ -18,7 +18,8 @@
 #ifndef __AO_CEC_H__
 #define __AO_CEC_H__
 
-#define CEC_DRIVER_VERSION     "Ver 2018/10/23\n"
+
+#define CEC_DRIVER_VERSION     "Ver 2018/10/31\n"
 
 #define CEC_FRAME_DELAY                msecs_to_jiffies(400)
 #define CEC_DEV_NAME           "cec"
 
 #define HR_DELAY(n)            (ktime_set(0, n * 1000 * 1000))
 
-enum cec_chip_ver {
-       CEC_CHIP_ID_GXTVBB = 0,
-       CEC_CHIP_ID_TXL,
-       CEC_CHIP_ID_TXLX,
-       CEC_CHIP_ID_G12A,
-       CEC_CHIP_ID_TXHD,
-       CEC_CHIP_ID_TL1,
+enum cecbver {
+       /*first version*/
+       CECB_VER_0 = 0,
+       /*ee to ao */
+       CECB_VER_1 = 1,
+       /*
+        * 1.fix bug: cts 7-1
+        * 2.fix bug: Do not signal initiator error, when it's
+        *   myself who pulled down the line when functioning as a follower
+        * 3.fix bug: Receive messages are ignored and not acknowledge
+        * 4.add status reg
+        */
+       CECB_VER_2 = 2,
 };
 
+
 #define L_1            1
 #define L_2            2
 #define L_3            3