hdmitx: bringup for g12a
authorYi Zhou <yi.zhou@amlogic.com>
Sun, 4 Feb 2018 17:29:47 +0000 (01:29 +0800)
committerYixun Lan <yixun.lan@amlogic.com>
Mon, 5 Mar 2018 07:34:26 +0000 (15:34 +0800)
PD#156734: bringup for g12a

1.use ioremap
2.enalbe hpd for the first time

Change-Id: I5375c8b7732f4dd552e7c7207b90d411aeacafbd
Signed-off-by: Yi Zhou <yi.zhou@amlogic.com>
drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/common.h
drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c
drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hw_g12a.c
drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/mach_reg.h
drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/reg_ops.c

index 1ae9f74..477ec4d 100644 (file)
@@ -76,6 +76,7 @@ void set_hpll_od2_g12a(unsigned int div);
 void set_hpll_od3_g12a(unsigned int div);
 
 int hdmitx_hpd_hw_op_txlx(enum hpd_op cmd);
+int hdmitx_hpd_hw_op_g12a(enum hpd_op cmd);
 int read_hpd_gpio_txlx(void);
 int hdmitx_ddc_hw_op_txlx(enum ddc_op cmd);
 extern unsigned int hdmitx_get_format_txlx(void);
index 53bc108..dd7e8f9 100644 (file)
@@ -113,8 +113,9 @@ static int hdmitx_hpd_hw_op(enum hpd_op cmd)
        case MESON_CPU_ID_GXM:
                return hdmitx_hpd_hw_op_gxl(cmd);
        case MESON_CPU_ID_TXLX:
-       case MESON_CPU_ID_G12A:
                return hdmitx_hpd_hw_op_txlx(cmd);
+       case MESON_CPU_ID_G12A:
+               return hdmitx_hpd_hw_op_g12a(cmd);
        default:
                break;
        }
@@ -1677,6 +1678,7 @@ static void set_phy_by_mode(unsigned int mode)
                default:
                        hd_write_reg(P_HHI_HDMI_PHY_CNTL0, 0x37eb8282);
                        hd_write_reg(P_HHI_HDMI_PHY_CNTL3, 0x28b0ff3b);
+                       hd_write_reg(P_HHI_HDMI_PHY_CNTL5, 0);
                        break;
                }
                break;
index 935d412..d47761c 100644 (file)
@@ -147,7 +147,6 @@ void set_hpll_od1_g12a(unsigned int div)
                hd_set_reg_bits(P_HHI_HDMI_PLL_CNTL, 2, 16, 2);
                break;
        default:
-               pr_info("Err %s[%d]\n", __func__, __LINE__);
                break;
        }
 }
@@ -165,7 +164,6 @@ void set_hpll_od2_g12a(unsigned int div)
                hd_set_reg_bits(P_HHI_HDMI_PLL_CNTL, 2, 18, 2);
                break;
        default:
-               pr_info("Err %s[%d]\n", __func__, __LINE__);
                break;
        }
 }
@@ -187,3 +185,36 @@ void set_hpll_od3_g12a(unsigned int div)
                break;
        }
 }
+
+int hdmitx_hpd_hw_op_g12a(enum hpd_op cmd)
+{
+       int ret = 0;
+
+       switch (cmd) {
+       case HPD_INIT_DISABLE_PULLUP:
+               hd_set_reg_bits(P_PAD_PULL_UP_REG1, 0, 25, 1);
+               break;
+       case HPD_INIT_SET_FILTER:
+               hdmitx_wr_reg(HDMITX_TOP_HPD_FILTER,
+                       ((0xa << 12) | (0xa0 << 0)));
+               break;
+       case HPD_IS_HPD_MUXED:
+               ret = !!(hd_read_reg(P_PERIPHS_PIN_MUX_6) & (1 << 31));
+               break;
+       case HPD_MUX_HPD:
+               hd_set_reg_bits(P_PERIPHS_PIN_MUX_B, 1, 8, 4);
+               hd_set_reg_bits(P_PREG_PAD_GPIO4_O, 1, 8, 1);
+               break;
+       case HPD_UNMUX_HPD:
+               hd_set_reg_bits(P_PERIPHS_PIN_MUX_B, 0, 8, 4);
+               hd_set_reg_bits(P_PREG_PAD_GPIO4_O, 0, 8, 1);
+               break;
+       case HPD_READ_HPD_GPIO:
+               ret = hdmitx_rd_reg(HDMITX_DWC_PHY_STAT0) & (1 << 1);
+               break;
+       default:
+               break;
+       }
+       return ret;
+}
+
index 2e6f347..fc673b1 100644 (file)
@@ -130,6 +130,8 @@ void init_reg_map(unsigned int type);
 #define P_PERIPHS_PIN_MUX_11 PERIPHS_REG_ADDR(PERIPHS_PIN_MUX_11)
 #define PERIPHS_PIN_MUX_12 0x38        /* register.h:431 */
 #define P_PERIPHS_PIN_MUX_12 PERIPHS_REG_ADDR(PERIPHS_PIN_MUX_12)
+#define PERIPHS_PIN_MUX_B 0xbb /* register.h:431 */
+#define P_PERIPHS_PIN_MUX_B PERIPHS_REG_ADDR(PERIPHS_PIN_MUX_B)
 
 #define PAD_PULL_UP_REG0 0x3a
 #define P_PAD_PULL_UP_REG0 PERIPHS_REG_ADDR(PAD_PULL_UP_REG0)
@@ -152,6 +154,7 @@ void init_reg_map(unsigned int type);
 #define PAD_PULL_UP_EN_REG4 0x4c
 #define P_PAD_PULL_UP_EN_REG4 PERIPHS_REG_ADDR(PAD_PULL_UP_EN_REG4)
 
+
 #define HHI_MEM_PD_REG0 0x40
 #define P_HHI_MEM_PD_REG0 HHI_REG_ADDR(HHI_MEM_PD_REG0)
 #define HHI_VPU_MEM_PD_REG0 0x41
index dd46986..cc26522 100644 (file)
@@ -164,7 +164,7 @@ void init_reg_map(unsigned int type)
        switch (type) {
        case MESON_CPU_ID_G12A:
                map = reg_maps_g12a;
-               for (i = HDMITX_REG_IDX; i <= HDMITX_SEC_REG_IDX; i++) {
+               for (i = 0; i <= REG_IDX_END; i++) {
                        map[i].p = ioremap(map[i].phy_addr, map[i].size);
                        if (!map[i].p) {
                                pr_info("hdmitx20: failed Mapped PHY: 0x%x\n",
@@ -220,7 +220,6 @@ unsigned int hd_read_reg(unsigned int addr)
 
        switch (hdev->chip_type) {
        case MESON_CPU_ID_TXLX:
-       case MESON_CPU_ID_G12A:
                switch (index) {
                case CBUS_REG_IDX:
                case RESET_CBUS_REG_IDX:
@@ -249,6 +248,7 @@ unsigned int hd_read_reg(unsigned int addr)
                break;
        case MESON_CPU_ID_GXL:
        case MESON_CPU_ID_GXM:
+       case MESON_CPU_ID_G12A:
        default:
                val = readl(TO_PMAP_ADDR(addr));
                break;
@@ -267,7 +267,6 @@ void hd_write_reg(unsigned int addr, unsigned int val)
 
        switch (hdev->chip_type) {
        case MESON_CPU_ID_TXLX:
-       case MESON_CPU_ID_G12A:
                switch (index) {
                case CBUS_REG_IDX:
                case RESET_CBUS_REG_IDX:
@@ -296,6 +295,7 @@ void hd_write_reg(unsigned int addr, unsigned int val)
                break;
        case MESON_CPU_ID_GXL:
        case MESON_CPU_ID_GXM:
+       case MESON_CPU_ID_G12A:
        default:
                writel(val, TO_PMAP_ADDR(addr));
                break;