Merge branch 'CR_1210_evb_drm_rgb2hdmi_shengyang.chen' into 'jh7110-5.15.y-devel'
authorandy.hu <andy.hu@starfivetech.com>
Fri, 17 Jun 2022 10:43:09 +0000 (10:43 +0000)
committerandy.hu <andy.hu@starfivetech.com>
Fri, 17 Jun 2022 10:43:09 +0000 (10:43 +0000)
riscv:linux:driver:drm:rgb2hdmi

See merge request sdk/linux!112

arch/riscv/boot/dts/starfive/jh7110-common.dtsi
arch/riscv/boot/dts/starfive/jh7110_pinctrl.dtsi
drivers/gpu/drm/verisilicon/README
drivers/gpu/drm/verisilicon/inno_hdmi.c
drivers/gpu/drm/verisilicon/vs_dc.c
drivers/gpu/drm/verisilicon/vs_drv.c

index b08b333..cd24d62 100644 (file)
 
 &hdmi_output {
        status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&rgb_pad_pins>;
 
        ports {
                #address-cells = <1>;
 };
 
 &mipi_dsi {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mipitx_pins>;
+       //pinctrl-names = "default";
+       //pinctrl-0 = <&mipitx_pins>;
        status = "disabled";
 };
 
index 956cd79..af0b352 100644 (file)
 
        i2c3_pins: i2c3-pins {
                i2c3-pins-scl {
-                       sf,pins = <PAD_GPIO38>;
-                       sf,pinmux = <PAD_GPIO38_FUNC_SEL 0>;
+                       sf,pins = <PAD_GPIO27>;
+                       sf,pinmux = <PAD_GPIO27_FUNC_SEL 0>;
                        sf,pin-ioconfig = <IO(GPIO_IE(1)|(GPIO_PU(1)))>;
                        sf,pin-gpio-dout = <GPO_LOW>;
                        sf,pin-gpio-doen = <OEN_I2C3_IC_CLK_OE>;
                };
 
                i2c3-pins-sda {
-                       sf,pins = <PAD_GPIO39>;
-                       sf,pinmux = <PAD_GPIO39_FUNC_SEL 0>;
+                       sf,pins = <PAD_GPIO26>;
+                       sf,pinmux = <PAD_GPIO26_FUNC_SEL 0>;
                        sf,pin-ioconfig = <IO(GPIO_IE(1)|(GPIO_PU(1)))>;
                        sf,pin-gpio-dout = <GPO_LOW>;
                        sf,pin-gpio-doen = <OEN_I2C3_IC_DATA_OE>;
                rgb-0-pins {
                        sf,pins = <PAD_GPIO36>;
                        sf,pinmux = <PAD_GPIO36_FUNC_SEL 1>;
-                       sf,pin-ioconfig = <IO(GPIO_IE(0))>;
+                       sf,pin-ioconfig = <IO(GPIO_IE(0)|GPIO_SLEW(1)|GPIO_DS(3))>;
                };
                rgb-1-pins {
                        sf,pins = <PAD_GPIO37>;
index b8225f4..c8b1778 100644 (file)
@@ -1,22 +1,25 @@
-build drm need to config\r
+build drm need to config:\r
 # CONFIG_DRM_I2C_ADV7511_CEC is not set\r
 CONFIG_DRM_VERISILICON=y\r
-CONFIG_DRM_I2C_ADV7513=y\r
+#CONFIG_DRM_I2C_ADV7513 is not set\r
+CONFIG_STARFIVE_INNO_HDMI=y\r
 CONFIG_DRM_LEGACY=y\r
 # CONFIG_DRM_VGEM is not set\r
 # CONFIG_DRM_VKMS is not set\r
 \r
 \r
 notes:\r
-1、DC8200 rgbpad GPIO 和其他模块存在大规模冲突需要等evb板子做进一步确认\r
+1、DC8200 rgbpad GPIO 和其他模块存在大规模冲突需要等evb板子做进一步确认\r
 \r
 2、evb板子当前与hdmi冲突的gpio有\r
-i2c0 i2c1 i2c2 i2c3 sdio1 tdm\r
+i2c1 sdio1 tdm\r
 调试hdmi的时候建议在jh7100-common.dtsi文件\r
 将这些模块的pin的结点进行注释或者将node disabled\r
 \r
 \r
 \r
+===============================================================================================\r
+\r
 build drm mipi-dsi need to config:\r
 # CONFIG_DRM_I2C_ADV7511_CEC is not set\r
 CONFIG_DRM_VERISILICON=y\r
@@ -25,12 +28,13 @@ CONFIG_DRM_LEGACY=y
 CONFIG_STARFIVE_DSI=y\r
 CONFIG_PHY_M31_DPHY_RX0=y\r
 #STARFIVE_INNO_HDMI is not set\r
+#CONFIG_DRM_I2C_NXP_TDA998X is not set\r
 # CONFIG_DRM_VGEM is not set\r
 # CONFIG_DRM_VKMS is not set\r
 \r
 notes:\r
 1.\r
-测试mipi-dsi时,在编译前需要打开的dts节点有:\r
+测试mipi-dsi时,在编译前需要打开的dts节点有:\r
 jh7110.dtsi: \r
 dc8200, encoder: display-encoder, mipi_dphy, mipi_dsi, mipi_panel\r
 \r
@@ -40,7 +44,75 @@ jh7100-common.dtsi:
 \r
 2.\r
 evb板子当前与mipi-dsi冲突的gpio有:\r
-i2c0, i2c3, hdmi(inno), hdmi_output(rgb), sdio1(mmc1)\r
+sdio1(mmc1)\r
 \r
 调试mipi-dsi的时候建议在jh7100-common.dtsi文件\r
-将这些模块的pin的结点进行注释或者将node disabled
\ No newline at end of file
+将这些模块的pin的结点进行注释或者将node disabled\r
+\r
+3.\r
+mipi-dsi通路目前和rgb2hdmi通路是互斥的,\r
+不能同时打开。使用某一个时需要关闭另一个\r
+如:\r
+使用mipi-dsi需要关闭\r
+CONFIG_DRM_I2C_NXP_TDA998X\r
+\r
+\r
+===============================================================================================\r
+\r
+\r
+build rgb2hdmi channel need to config:\r
+\r
+CONFIG_DRM=y\r
+CONFIG_DRM_I2C_NXP_TDA998X=y\r
+CONFIG_DRM_VERISILICON=y\r
+CONFIG_STARFIVE_INNO_HDMI=y\r
+# CONFIG_DRM_IMG_NULLDISP is not set\r
+CONFIG_DRM_LEGACY=y\r
+# CONFIG_STARFIVE_DSI is not set\r
+\r
+\r
+notes:\r
+1.\r
+evb板子当前与tda998x-rgb2hdmi通路存在gpio冲突的模块有\r
+pdm0, i2srx_3ch, pwmdac, spi0~spi6, inno_hdmi, tdm, i2c0, can1, ptc, vin_sysctl, pcie0\r
+调试tda998x-rgb2hdmi通路的时候建议在jh7110-common.dtsi文件\r
+将这些模块的pin的结点进行注释或者将node disabled(&hdmi节点比较特殊,详见3)\r
+\r
+2.\r
+mipi-dsi通路目前和rgb2hdmi通路是互斥的\r
+不能同时打开。使用某一个时需要关闭另一个\r
+如:\r
+使用rgb2hdmi需要关闭\r
+CONFIG_STARFIVE_DSI\r
+\r
+3.\r
+关于&hdmi节点\r
+在使用rgb2hdmi时需要将其打开(status = "okay";)\r
+并将其引用的pin(pinctrl-0 = <&inno_hdmi_pins>;) 注释掉\r
+如:\r
+&hdmi {\r
+       status = "okay";//okay                          //rgb need this, connector/encoder problem\r
+       //pinctrl-names = "default";            //if rgb, comment them\r
+       //pinctrl-0 = <&inno_hdmi_pins>;        //if rgb, comment them\r
+\r
+       hdmi_in: port {\r
+               #address-cells = <1>;\r
+               #size-cells = <0>;\r
+               hdmi_in_lcdc: endpoint@0 {\r
+                       reg = <0>;\r
+                       remote-endpoint = <&dc_out_dpi1>;\r
+               };\r
+       };\r
+};\r
+\r
+4.\r
+测试rgb2hdmi需要打开的dts节点有:\r
+jh7110.dtsi:\r
+hdmi_output, hdmi, dc8200\r
+\r
+jh7110-common.dtsi:\r
+&hdmi_output, &hdmi(详见3), &dc8200, &i2c2\r
+\r
+关闭节点:\r
+jh7100-common.dtsi:\r
+&encoder
\ No newline at end of file
index f15ce1a..40fe808 100644 (file)
@@ -1153,7 +1153,9 @@ static int inno_hdmi_bind(struct device *dev, struct device *master,
                goto err_disable_clk;
        }
        //inno_hdmi_set_pinmux();//20220601 disable for testing dts pinctrl setting
-       //inno_hdmi_init(hdmi);
+#ifdef CONFIG_DRM_I2C_NXP_TDA998X
+       inno_hdmi_init(hdmi);
+#endif
        //inno_hdmi_get_edid(hdmi,51200000, data);//20220525
        inno_hdmi_reset(hdmi);
 
index 13291f9..3e26baa 100644 (file)
@@ -805,6 +805,11 @@ static int dc_vout_clk_rst_init(struct device *dev, struct vs_dc *dc)
 
 int sys_vout_mux_config(void)
 {
+       #ifdef CONFIG_DRM_I2C_NXP_TDA998X//tda998x-rgb2hdmi
+               SET_U0_LCD_DATA_MAPPING_DPI_DP_SEL(0);//DC8200_INTERFACE_DPI
+               SET_U0_LCD_DATA_MAPPING_DP_RGB_FMT(0);//0-RGB888
+               SET_U0_DISPLAY_PANEL_MUX_PANEL_SEL(0);//panel 0
+       #else
     if(1){
                SET_U0_HDMI_DATA_MAPPING_DPI_DP_SEL(0);
                SET_U0_HDMI_DATA_MAPPING_DPI_BIT_DEPTH(0);
@@ -813,13 +818,20 @@ int sys_vout_mux_config(void)
                SET_U2_DISPLAY_PANEL_MUX_PANEL_SEL(0);
 
     }
+       #endif
     return 0;
 }
 
 int sys_dispctrl_clk(void)
 {
-       _SWITCH_CLOCK_CLK_U0_DC8200_CLK_PIX0_SOURCE_CLK_HDMITX0_PIXELCLK_;
-       //_SWITCH_CLOCK_CLK_U0_DC8200_CLK_PIX0_SOURCE_CLK_DC8200_PIX0_;
+       #ifdef CONFIG_DRM_I2C_NXP_TDA998X//tda998x-rgb2hdmi
+               _SWITCH_CLOCK_CLK_U0_DC8200_CLK_PIX1_SOURCE_CLK_HDMITX0_PIXELCLK_;
+               _SWITCH_CLOCK_CLK_U0_DC8200_CLK_PIX0_SOURCE_CLK_HDMITX0_PIXELCLK_;
+               //_ENABLE_CLOCK_CLK_DOM_VOUT_TOP_LCD_CLK_;//disabled standard
+       #else
+               _SWITCH_CLOCK_CLK_U0_DC8200_CLK_PIX0_SOURCE_CLK_HDMITX0_PIXELCLK_;
+               //_SWITCH_CLOCK_CLK_U0_DC8200_CLK_PIX0_SOURCE_CLK_DC8200_PIX0_;
+       #endif
 
     return 0;
 }
@@ -891,6 +903,7 @@ static int dc_init(struct device *dev)
                return ret;
        }
        #ifdef CONFIG_STARFIVE_DSI
+       dev_info(dev, "dc mipi channel\n");
        dc->vout_src = devm_clk_get(dev, "vout_src");
        if (IS_ERR(dc->vout_src)){
                dev_err(dev,"failed to get dc->vout_src\n");
@@ -907,6 +920,23 @@ static int dc_init(struct device *dev)
                return ret;
        }
        #endif
+
+       #ifdef CONFIG_DRM_I2C_NXP_TDA998X
+       _ENABLE_CLOCK_CLK_DOM_VOUT_TOP_LCD_CLK_;
+       /*
+       dev_info(dev, "dc rgb2hdmi channel\n");
+       dc->vout_top_lcd = devm_clk_get(dev, "vout_top_lcd");
+       if (IS_ERR(dc->vout_top_lcd)){
+               dev_err(dev,"failed to get dc->vout_top_lcd\n");
+               return PTR_ERR(dc->vout_top_lcd);
+       }
+       ret = clk_prepare_enable(dc->vout_top_lcd);
+       if (ret) {
+               dev_err(dev, "failed to prepare/enable vout_top_lcd\n");
+               return ret;
+       }
+       */
+       #endif
        printk("====> %s, %d.\n", __func__, __LINE__);
 
        ret = dc_hw_init(&dc->hw);
index 3529586..0508da6 100644 (file)
@@ -314,6 +314,9 @@ static struct platform_driver *drm_sub_drivers[] = {
        /* encoder */
        //&simple_encoder_driver,
        //&starfive_encoder_driver,
+#ifdef CONFIG_DRM_I2C_NXP_TDA998X
+       &simple_encoder_driver,
+#endif
 
 #ifdef CONFIG_VERISILICON_VIRTUAL_DISPLAY
        &virtual_display_platform_driver,