Skip to content

Commit

Permalink
Merge branch 'CR_1210_evb_drm_rgb2hdmi_shengyang.chen' into 'jh7110-5…
Browse files Browse the repository at this point in the history
….15.y-devel'

riscv:linux:driver:drm:rgb2hdmi

See merge request sdk/linux!112
  • Loading branch information
andyhu-stf committed Jun 17, 2022
2 parents c83b79a + 8327864 commit 70a6a66
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 17 deletions.
6 changes: 4 additions & 2 deletions arch/riscv/boot/dts/starfive/jh7110-common.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -666,6 +666,8 @@

&hdmi_output {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&rgb_pad_pins>;

ports {
#address-cells = <1>;
Expand Down Expand Up @@ -712,8 +714,8 @@
};

&mipi_dsi {
pinctrl-names = "default";
pinctrl-0 = <&mipitx_pins>;
//pinctrl-names = "default";
//pinctrl-0 = <&mipitx_pins>;
status = "disabled";
};

Expand Down
10 changes: 5 additions & 5 deletions arch/riscv/boot/dts/starfive/jh7110_pinctrl.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -258,17 +258,17 @@

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>;
sf,pin-gpio-din = <GPI_I2C3_IC_CLK_IN_A>;
};

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>;
Expand Down Expand Up @@ -930,7 +930,7 @@
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>;
Expand Down
86 changes: 79 additions & 7 deletions drivers/gpu/drm/verisilicon/README
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
build drm need to config
build drm need to config:
# CONFIG_DRM_I2C_ADV7511_CEC is not set
CONFIG_DRM_VERISILICON=y
CONFIG_DRM_I2C_ADV7513=y
#CONFIG_DRM_I2C_ADV7513 is not set
CONFIG_STARFIVE_INNO_HDMI=y
CONFIG_DRM_LEGACY=y
# CONFIG_DRM_VGEM is not set
# CONFIG_DRM_VKMS is not set


notes:
1、DC8200 rgbpad GPIO 和其他模块存在大规模冲突需要等evb板子做进一步确认
1、DC8200 rgbpad GPIO 和其他模块存在大规模冲突, 需要等evb板子做进一步确认

2、evb板子当前与hdmi冲突的gpio有
i2c0 i2c1 i2c2 i2c3 sdio1 tdm
i2c1 sdio1 tdm
调试hdmi的时候建议在jh7100-common.dtsi文件
将这些模块的pin的结点进行注释或者将node disabled



===============================================================================================

build drm mipi-dsi need to config:
# CONFIG_DRM_I2C_ADV7511_CEC is not set
CONFIG_DRM_VERISILICON=y
Expand All @@ -25,12 +28,13 @@ CONFIG_DRM_LEGACY=y
CONFIG_STARFIVE_DSI=y
CONFIG_PHY_M31_DPHY_RX0=y
#STARFIVE_INNO_HDMI is not set
#CONFIG_DRM_I2C_NXP_TDA998X is not set
# CONFIG_DRM_VGEM is not set
# CONFIG_DRM_VKMS is not set

notes:
1.
测试mipi-dsi时在编译前需要打开的dts节点有
测试mipi-dsi时,在编译前需要打开的dts节点有:
jh7110.dtsi:
dc8200, encoder: display-encoder, mipi_dphy, mipi_dsi, mipi_panel

Expand All @@ -40,7 +44,75 @@ jh7100-common.dtsi:

2.
evb板子当前与mipi-dsi冲突的gpio有:
i2c0, i2c3, hdmi(inno), hdmi_output(rgb), sdio1(mmc1)
sdio1(mmc1)

调试mipi-dsi的时候建议在jh7100-common.dtsi文件
将这些模块的pin的结点进行注释或者将node disabled
将这些模块的pin的结点进行注释或者将node disabled

3.
mipi-dsi通路目前和rgb2hdmi通路是互斥的,
不能同时打开。使用某一个时需要关闭另一个
如:
使用mipi-dsi需要关闭
CONFIG_DRM_I2C_NXP_TDA998X


===============================================================================================


build rgb2hdmi channel need to config:

CONFIG_DRM=y
CONFIG_DRM_I2C_NXP_TDA998X=y
CONFIG_DRM_VERISILICON=y
CONFIG_STARFIVE_INNO_HDMI=y
# CONFIG_DRM_IMG_NULLDISP is not set
CONFIG_DRM_LEGACY=y
# CONFIG_STARFIVE_DSI is not set


notes:
1.
evb板子当前与tda998x-rgb2hdmi通路存在gpio冲突的模块有
pdm0, i2srx_3ch, pwmdac, spi0~spi6, inno_hdmi, tdm, i2c0, can1, ptc, vin_sysctl, pcie0
调试tda998x-rgb2hdmi通路的时候建议在jh7110-common.dtsi文件
将这些模块的pin的结点进行注释或者将node disabled(&hdmi节点比较特殊,详见3)

2.
mipi-dsi通路目前和rgb2hdmi通路是互斥的
不能同时打开。使用某一个时需要关闭另一个
如:
使用rgb2hdmi需要关闭
CONFIG_STARFIVE_DSI

3.
关于&hdmi节点
在使用rgb2hdmi时需要将其打开(status = "okay";)
并将其引用的pin(pinctrl-0 = <&inno_hdmi_pins>;) 注释掉
如:
&hdmi {
status = "okay";//okay //rgb need this, connector/encoder problem
//pinctrl-names = "default"; //if rgb, comment them
//pinctrl-0 = <&inno_hdmi_pins>; //if rgb, comment them

hdmi_in: port {
#address-cells = <1>;
#size-cells = <0>;
hdmi_in_lcdc: endpoint@0 {
reg = <0>;
remote-endpoint = <&dc_out_dpi1>;
};
};
};

4.
测试rgb2hdmi需要打开的dts节点有:
jh7110.dtsi:
hdmi_output, hdmi, dc8200

jh7110-common.dtsi:
&hdmi_output, &hdmi(详见3), &dc8200, &i2c2

关闭节点:
jh7100-common.dtsi:
&encoder
4 changes: 3 additions & 1 deletion drivers/gpu/drm/verisilicon/inno_hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
34 changes: 32 additions & 2 deletions drivers/gpu/drm/verisilicon/vs_dc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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;
}
Expand Down Expand Up @@ -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");
Expand All @@ -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);
Expand Down
3 changes: 3 additions & 0 deletions drivers/gpu/drm/verisilicon/vs_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit 70a6a66

Please sign in to comment.