video/drm: dsi: add rk3568 support
Signed-off-by: Guochun Huang <hero.huang@rock-chips.com> Change-Id: I8cef8db74dcc9e05f4c0b2511c728838a0d92cb7
This commit is contained in:
parent
d040854345
commit
e9b1001b3c
|
|
@ -205,6 +205,7 @@ enum grf_reg_fields {
|
|||
VOPSEL,
|
||||
TURNREQUEST,
|
||||
TURNDISABLE,
|
||||
SKEWCALHS,
|
||||
FORCETXSTOPMODE,
|
||||
FORCERXMODE,
|
||||
ENABLE_N,
|
||||
|
|
@ -1091,7 +1092,10 @@ static int dw_mipi_dsi_connector_init(struct display_state *state)
|
|||
conn_state->output_mode = ROCKCHIP_OUT_MODE_P888;
|
||||
conn_state->color_space = V4L2_COLORSPACE_DEFAULT;
|
||||
conn_state->type = DRM_MODE_CONNECTOR_DSI;
|
||||
conn_state->output_if |=
|
||||
dsi->id ? VOP_OUTPUT_IF_MIPI1 : VOP_OUTPUT_IF_MIPI0;
|
||||
|
||||
#ifndef CONFIG_ROCKCHIP_RK3568
|
||||
if (dsi->id) {
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
|
|
@ -1107,6 +1111,7 @@ static int dw_mipi_dsi_connector_init(struct display_state *state)
|
|||
|
||||
conn_state->output_type = ROCKCHIP_OUTPUT_DSI_DUAL_LINK;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (dsi->lanes > 4) {
|
||||
struct udevice *dev;
|
||||
|
|
@ -1115,8 +1120,10 @@ static int dw_mipi_dsi_connector_init(struct display_state *state)
|
|||
ret = uclass_get_device_by_name(UCLASS_DISPLAY,
|
||||
#if defined(CONFIG_ROCKCHIP_RK3288)
|
||||
"dsi@ff964000",
|
||||
#else
|
||||
#elif defined(CONFIG_ROCKCHIP_RK3399)
|
||||
"dsi@ff968000",
|
||||
#else
|
||||
"dsi@fe070000",
|
||||
#endif
|
||||
&dev);
|
||||
if (ret)
|
||||
|
|
@ -1132,6 +1139,26 @@ static int dw_mipi_dsi_connector_init(struct display_state *state)
|
|||
dsi->slave->mode_flags = dsi->mode_flags;
|
||||
dsi->slave->channel = dsi->channel;
|
||||
conn_state->output_type = ROCKCHIP_OUTPUT_DSI_DUAL_CHANNEL;
|
||||
conn_state->output_if |= VOP_OUTPUT_IF_MIPI1;
|
||||
|
||||
#if defined(CONFIG_ROCKCHIP_RK3568)
|
||||
struct rockchip_phy *phy = NULL;
|
||||
struct udevice *phy_dev;
|
||||
|
||||
ret = uclass_get_device_by_phandle(UCLASS_PHY, dev,
|
||||
"phys", &phy_dev);
|
||||
if (ret)
|
||||
return -ENODEV;
|
||||
|
||||
phy = (struct rockchip_phy *)dev_get_driver_data(phy_dev);
|
||||
if (!phy)
|
||||
return -ENODEV;
|
||||
|
||||
dsi->slave->dphy.phy = phy;
|
||||
if (phy->funcs && phy->funcs->init)
|
||||
return phy->funcs->init(phy);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -1242,6 +1269,9 @@ static int dw_mipi_dsi_connector_prepare(struct display_state *state)
|
|||
else
|
||||
dw_mipi_dsi_set_pll(dsi, lane_rate);
|
||||
|
||||
if (dsi->slave && dsi->slave->dphy.phy)
|
||||
dw_mipi_dsi_set_hs_clk(dsi->slave, lane_rate);
|
||||
|
||||
printf("final DSI-Link bandwidth: %u Mbps x %d\n",
|
||||
dsi->lane_mbps, dsi->slave ? dsi->lanes * 2 : dsi->lanes);
|
||||
|
||||
|
|
@ -1481,6 +1511,36 @@ static const struct rockchip_connector rk3399_mipi_dsi_driver_data = {
|
|||
.data = &rk3399_mipi_dsi_plat_data,
|
||||
};
|
||||
|
||||
static const u32 rk3568_dsi0_grf_reg_fields[MAX_FIELDS] = {
|
||||
[DPIUPDATECFG] = GRF_REG_FIELD(0x0360, 2, 2),
|
||||
[DPICOLORM] = GRF_REG_FIELD(0x0360, 1, 1),
|
||||
[DPISHUTDN] = GRF_REG_FIELD(0x0360, 0, 0),
|
||||
[SKEWCALHS] = GRF_REG_FIELD(0x0368, 11, 15),
|
||||
[FORCETXSTOPMODE] = GRF_REG_FIELD(0x0368, 4, 7),
|
||||
[TURNDISABLE] = GRF_REG_FIELD(0x0368, 2, 2),
|
||||
[FORCERXMODE] = GRF_REG_FIELD(0x0368, 0, 0),
|
||||
};
|
||||
|
||||
static const u32 rk3568_dsi1_grf_reg_fields[MAX_FIELDS] = {
|
||||
[DPIUPDATECFG] = GRF_REG_FIELD(0x0360, 10, 10),
|
||||
[DPICOLORM] = GRF_REG_FIELD(0x0360, 9, 9),
|
||||
[DPISHUTDN] = GRF_REG_FIELD(0x0360, 8, 8),
|
||||
[SKEWCALHS] = GRF_REG_FIELD(0x036c, 11, 15),
|
||||
[FORCETXSTOPMODE] = GRF_REG_FIELD(0x036c, 4, 7),
|
||||
[TURNDISABLE] = GRF_REG_FIELD(0x036c, 2, 2),
|
||||
[FORCERXMODE] = GRF_REG_FIELD(0x036c, 0, 0),
|
||||
};
|
||||
|
||||
static const struct dw_mipi_dsi_plat_data rk3568_mipi_dsi_plat_data = {
|
||||
.dsi0_grf_reg_fields = rk3568_dsi0_grf_reg_fields,
|
||||
.dsi1_grf_reg_fields = rk3568_dsi1_grf_reg_fields,
|
||||
.max_bit_rate_per_lane = 1000000000UL,
|
||||
};
|
||||
static const struct rockchip_connector rk3568_mipi_dsi_driver_data = {
|
||||
.funcs = &dw_mipi_dsi_connector_funcs,
|
||||
.data = &rk3568_mipi_dsi_plat_data,
|
||||
};
|
||||
|
||||
static const u32 rv1108_dsi_grf_reg_fields[MAX_FIELDS] = {
|
||||
[DPICOLORM] = GRF_REG_FIELD(0x0410, 7, 7),
|
||||
[DPISHUTDN] = GRF_REG_FIELD(0x0410, 6, 6),
|
||||
|
|
@ -1548,6 +1608,10 @@ static const struct udevice_id dw_mipi_dsi_ids[] = {
|
|||
.compatible = "rockchip,rk3399-mipi-dsi",
|
||||
.data = (ulong)&rk3399_mipi_dsi_driver_data,
|
||||
},
|
||||
{
|
||||
.compatible = "rockchip,rk3568-mipi-dsi",
|
||||
.data = (ulong)&rk3568_mipi_dsi_driver_data,
|
||||
},
|
||||
{
|
||||
.compatible = "rockchip,rv1108-mipi-dsi",
|
||||
.data = (ulong)&rv1108_mipi_dsi_driver_data,
|
||||
|
|
|
|||
Loading…
Reference in New Issue