179179#define RK3399_TXRX_SRC_SEL_ISP0 BIT(4)
180180#define RK3399_TXRX_TURNREQUEST GENMASK(3, 0)
181181
182+ #define RK3568_GRF_VO_CON2 0x0368
183+ #define RK3568_DSI0_SKEWCALHS (0x1f << 11)
184+ #define RK3568_DSI0_FORCETXSTOPMODE (0xf << 4)
185+ #define RK3568_DSI0_TURNDISABLE BIT(2)
186+ #define RK3568_DSI0_FORCERXMODE BIT(0)
187+
188+ /*
189+ * Note these registers do not appear in the datasheet, they are
190+ * however present in the BSP driver which is where these values
191+ * come from. Name GRF_VO_CON3 is assumed.
192+ */
193+ #define RK3568_GRF_VO_CON3 0x36c
194+ #define RK3568_DSI1_SKEWCALHS (0x1f << 11)
195+ #define RK3568_DSI1_FORCETXSTOPMODE (0xf << 4)
196+ #define RK3568_DSI1_TURNDISABLE BIT(2)
197+ #define RK3568_DSI1_FORCERXMODE BIT(0)
198+
182199#define HIWORD_UPDATE (val , mask ) (val | (mask) << 16)
183200
184201enum {
@@ -735,8 +752,9 @@ static void dw_mipi_dsi_rockchip_config(struct dw_mipi_dsi_rockchip *dsi)
735752static void dw_mipi_dsi_rockchip_set_lcdsel (struct dw_mipi_dsi_rockchip * dsi ,
736753 int mux )
737754{
738- regmap_write (dsi -> grf_regmap , dsi -> cdata -> lcdsel_grf_reg ,
739- mux ? dsi -> cdata -> lcdsel_lit : dsi -> cdata -> lcdsel_big );
755+ if (dsi -> cdata -> lcdsel_grf_reg < 0 )
756+ regmap_write (dsi -> grf_regmap , dsi -> cdata -> lcdsel_grf_reg ,
757+ mux ? dsi -> cdata -> lcdsel_lit : dsi -> cdata -> lcdsel_big );
740758}
741759
742760static int
@@ -963,6 +981,8 @@ static int dw_mipi_dsi_rockchip_bind(struct device *dev,
963981 DRM_DEV_ERROR (dev , "Failed to create drm encoder\n" );
964982 goto out_pll_clk ;
965983 }
984+ rockchip_drm_encoder_set_crtc_endpoint_id (& dsi -> encoder ,
985+ dev -> of_node , 0 , 0 );
966986
967987 ret = dw_mipi_dsi_bind (dsi -> dmd , & dsi -> encoder .encoder );
968988 if (ret ) {
@@ -1612,6 +1632,30 @@ static const struct rockchip_dw_dsi_chip_data rk3399_chip_data[] = {
16121632 { /* sentinel */ }
16131633};
16141634
1635+ static const struct rockchip_dw_dsi_chip_data rk3568_chip_data [] = {
1636+ {
1637+ .reg = 0xfe060000 ,
1638+ .lcdsel_grf_reg = -1 ,
1639+ .lanecfg1_grf_reg = RK3568_GRF_VO_CON2 ,
1640+ .lanecfg1 = HIWORD_UPDATE (0 , RK3568_DSI0_SKEWCALHS |
1641+ RK3568_DSI0_FORCETXSTOPMODE |
1642+ RK3568_DSI0_TURNDISABLE |
1643+ RK3568_DSI0_FORCERXMODE ),
1644+ .max_data_lanes = 4 ,
1645+ },
1646+ {
1647+ .reg = 0xfe070000 ,
1648+ .lcdsel_grf_reg = -1 ,
1649+ .lanecfg1_grf_reg = RK3568_GRF_VO_CON3 ,
1650+ .lanecfg1 = HIWORD_UPDATE (0 , RK3568_DSI1_SKEWCALHS |
1651+ RK3568_DSI1_FORCETXSTOPMODE |
1652+ RK3568_DSI1_TURNDISABLE |
1653+ RK3568_DSI1_FORCERXMODE ),
1654+ .max_data_lanes = 4 ,
1655+ },
1656+ { /* sentinel */ }
1657+ };
1658+
16151659static const struct of_device_id dw_mipi_dsi_rockchip_dt_ids [] = {
16161660 {
16171661 .compatible = "rockchip,px30-mipi-dsi" ,
@@ -1622,6 +1666,9 @@ static const struct of_device_id dw_mipi_dsi_rockchip_dt_ids[] = {
16221666 }, {
16231667 .compatible = "rockchip,rk3399-mipi-dsi" ,
16241668 .data = & rk3399_chip_data ,
1669+ }, {
1670+ .compatible = "rockchip,rk3568-mipi-dsi" ,
1671+ .data = & rk3568_chip_data ,
16251672 },
16261673 { /* sentinel */ }
16271674};
0 commit comments