riscv:linux:vout:hdmi gst
authorkeith.zhao <keith.zhao@starfivetech.com>
Fri, 9 Sep 2022 09:38:09 +0000 (17:38 +0800)
committerkeith.zhao <keith.zhao@starfivetech.com>
Fri, 9 Sep 2022 09:38:09 +0000 (17:38 +0800)
1、fix CR 2124 gst play 4K video issue
2、remove unused code caused by pll switches 1188

Signed-off-by: keith <keith.zhao@starfivetech.com>
drivers/gpu/drm/verisilicon/inno_hdmi.c
mipi_1228.txt [new file with mode: 0755]

index 741c8d6..fb8d7cb 100755 (executable)
@@ -151,35 +151,6 @@ static inline void hdmi_modb(struct inno_hdmi *hdmi, u16 offset,
        hdmi_writeb(hdmi, offset, temp);
 }
 
-static void inno_hdmi_power_up(struct inno_hdmi *hdmi)
-{
-       u8 val;
-
-       val = readl_relaxed(hdmi->regs + (0x1b0) * 0x04);
-       val |= 0x4;
-       writel_relaxed(val, hdmi->regs + (0x1b0) * 0x04);
-       writel_relaxed(0xf, hdmi->regs + (0x1cc) * 0x04);
-
-       /*turn on pre-PLL*/
-       val = readl_relaxed(hdmi->regs + (0x1a0) * 0x04);
-       val &= ~(0x1);
-       writel_relaxed(val, hdmi->regs + (0x1a0) * 0x04);
-       /*turn on post-PLL*/
-       val = readl_relaxed(hdmi->regs + (0x1aa) * 0x04);
-       val &= ~(0x1);
-       writel_relaxed(val, hdmi->regs + (0x1aa) * 0x04);
-
-       while (!(readl_relaxed(hdmi->regs + (0x1a9) * 0x04) & 0x1))
-       ;
-       while (!(readl_relaxed(hdmi->regs + (0x1af) * 0x04) & 0x1))
-       ;
-
-       /*turn on LDO*/
-       writel_relaxed(0x7, hdmi->regs + (0x1b4) * 0x04);
-       /*turn on serializer*/
-       writel_relaxed(0x70, hdmi->regs + (0x1be) * 0x04);
-}
-
 static void inno_hdmi_tx_phy_power_down(struct inno_hdmi *hdmi)
 {      
        hdmi_writeb(hdmi, 0x00, 0x63);
@@ -221,45 +192,12 @@ static void inno_hdmi_config_pll(struct inno_hdmi *hdmi)
        return;
 }
 
-static void inno_hdmi_config_1920x1080p60(struct inno_hdmi *hdmi)
-{
-
-       const reg_value_t cfg_pll_data[] = {
-               /* config pll: 1080p, 60hz*/
-               {0x1a0, 0x01},
-               {0x1aa, 0x0f},
-               {0x1a1, 0x01},
-               {0x1a2, 0xf0},
-               {0x1a3, 0x63},
-               {0x1a4, 0x15},
-               {0x1a5, 0x41},
-               {0x1a6, 0x42},
-               {0x1ab, 0x01},
-               {0x1ac, 0x0a},
-               {0x1ad, 0x00},
-               {0x1aa, 0x0e},
-               {0x1a0, 0x00},
-       };
-
-       int i;
-       for (i = 0; i < sizeof(cfg_pll_data) / sizeof(reg_value_t); i++)
-               writel_relaxed(cfg_pll_data[i].value, hdmi->regs + (cfg_pll_data[i].reg) * 0x04);
-
-       return;
-}
-
 static void inno_hdmi_tx_ctrl(struct inno_hdmi *hdmi)
 {
        hdmi_writeb(hdmi, 0x9f, 0x06);
        hdmi_writeb(hdmi, 0xa7, hdmi->hdmi_data.vic);
 }
 
-static void inno_hdmi_tx_phy_param_config(struct inno_hdmi *hdmi)
-{
-       inno_hdmi_config_1920x1080p60(hdmi);
-       inno_hdmi_tx_ctrl(hdmi);
-}
-
 static void inno_hdmi_tx_phy_power_on(struct inno_hdmi *hdmi)
 {
        const reg_value_t pwon_data[] = {
@@ -267,7 +205,6 @@ static void inno_hdmi_tx_phy_power_on(struct inno_hdmi *hdmi)
        };
        int i;
        for (i = 0; i < sizeof(pwon_data)/sizeof(reg_value_t); i++) {
-               //writel_relaxed(pwon_data[i].value, hdmi->regs + (pwon_data[i].reg) * 0x04);
                hdmi_writeb(hdmi, pwon_data[i].reg, pwon_data[i].value);
        }
        return;
@@ -275,7 +212,6 @@ static void inno_hdmi_tx_phy_power_on(struct inno_hdmi *hdmi)
 
 void inno_hdmi_tmds_driver_on(struct inno_hdmi *hdmi)
 {
-       //writel_relaxed(0x8f, hdmi->regs + (0x1b2) * 0x04);
        hdmi_writeb(hdmi, 0x1b2, 0x8f);
 }
 
@@ -318,38 +254,6 @@ static void inno_hdmi_set_pwr_mode(struct inno_hdmi *hdmi, int mode)
        }
 }
 
-static void inno_hdmi_init(struct inno_hdmi *hdmi)
-{
-       inno_hdmi_power_up(hdmi);
-       inno_hdmi_tx_phy_power_down(hdmi);
-       inno_hdmi_tx_phy_param_config(hdmi);
-
-       inno_hdmi_tx_phy_power_on(hdmi);
-       inno_hdmi_tmds_driver_on(hdmi);
-
-       writel_relaxed(0x0, hdmi->regs + (0xce) * 0x04);
-       writel_relaxed(0x1, hdmi->regs + (0xce) * 0x04);
-
-}
-
-static void inno_hdmi_reset(struct inno_hdmi *hdmi)
-{
-       u32 val;
-       u32 msk;
-
-       msk = m_INT_POL;
-       val = v_INT_POL_HIGH;
-       hdmi_modb(hdmi, HDMI_SYS_CTRL, msk, val);
-
-       hdmi_modb(hdmi, HDMI_SYS_CTRL, m_RST_DIGITAL, v_NOT_RST_DIGITAL);
-       udelay(100);
-
-       hdmi_modb(hdmi, HDMI_SYS_CTRL, m_RST_ANALOG, v_NOT_RST_ANALOG);
-       udelay(100);
-
-       inno_hdmi_set_pwr_mode(hdmi, NORMAL);
-}
-
  static const
  struct pre_pll_config *inno_hdmi_phy_get_pre_pll_cfg(struct inno_hdmi *hdmi,
                                                          unsigned long rate)
@@ -548,8 +452,18 @@ static int inno_hdmi_setup(struct inno_hdmi *hdmi,
 
        /*turn on LDO*/ 
        hdmi_writeb(hdmi, 0x1b4, 0x7);
-       /*turn on serializer*/  
-       hdmi_writeb(hdmi, 0x1be, 0x70);
+       /*turn on serializer*/
+       if(hdmi->hdmi_data.vic ==95)
+       {
+               hdmi_writeb(hdmi, 0x100, 0x00);
+               hdmi_writeb(hdmi, 0x1bb, 0x40);
+               hdmi_writeb(hdmi, 0x1bc, 0x40);
+               hdmi_writeb(hdmi, 0x1bd, 0x40);
+               hdmi_writeb(hdmi, 0x1bf, 0x02);
+               hdmi_writeb(hdmi, 0x1c0, 0x22);
+               hdmi_writeb(hdmi, 0x1be, 0x71);
+       }else
+               hdmi_writeb(hdmi, 0x1be, 0x70);
        inno_hdmi_tx_phy_power_down(hdmi);
 
        inno_hdmi_tx_ctrl(hdmi);
@@ -754,6 +668,8 @@ inno_hdmi_connector_mode_valid(struct drm_connector *connector,
 #endif
        u32 vic = drm_match_cea_mode(mode);
 
+       if (mode->clock > 297000)
+               return MODE_BAD;
        if (vic >= 1)
                return MODE_OK;
        else
@@ -1104,11 +1020,6 @@ static int inno_hdmi_bind(struct device *dev, struct device *master,
                ret = irq;
                goto err_disable_clk;
        }
-#ifdef CONFIG_DRM_I2C_NXP_TDA998X
-       hdmi->hdmi_data.vic = 0x10;
-       inno_hdmi_init(hdmi);
-#endif
-       inno_hdmi_reset(hdmi);
 
        hdmi->ddc = inno_hdmi_i2c_adapter(hdmi);
        if (IS_ERR(hdmi->ddc)) {
diff --git a/mipi_1228.txt b/mipi_1228.txt
new file mode 100755 (executable)
index 0000000..6f8e395
--- /dev/null
@@ -0,0 +1,11 @@
+commit b1057a51f41e2ba72465843d9b35c53e0f2280ed (HEAD -> jh7110-5.15.y-devel, tag: JH7110_MM_v2.0.0-rc6, tag: JH7110_MM_v2.0.0-rc5, tag: JH7110_515_SDK_v2.0.0-rc5, origin/jh7110-5.15.y-devel)\r
+Merge: ebdc2f14f6e5 c7562b256ace\r
+Author: andy.hu <andy.hu@starfivetech.com>\r
+Date:   Wed Aug 31 08:36:27 2022 +0000\r
+\r
+    Merge branch 'CR_2014_v4l2_515_changhuang.liang' into 'jh7110-5.15.y-devel'\r
+\r
+    CR_2014_v4l2_515_changhuang.liang v4l2: modify reset cause failed\r
+\r
+    See merge request sdk/linux!438\r
+\r