This allows video drivers to obtain display timings from the video bridge. Reviewed-by: Svyatoslav Ryhel <clamo...@gmail.com> Signed-off-by: Dang Huynh <danc...@riseup.net> --- drivers/video/rockchip/dw_mipi_dsi_rockchip.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/drivers/video/rockchip/dw_mipi_dsi_rockchip.c b/drivers/video/rockchip/dw_mipi_dsi_rockchip.c index 95e825eb3d6de7ef2836fa029927034394486e9c..d21ea7953a6003fa49da3e22220d3312109f600c 100644 --- a/drivers/video/rockchip/dw_mipi_dsi_rockchip.c +++ b/drivers/video/rockchip/dw_mipi_dsi_rockchip.c @@ -224,6 +224,7 @@ struct dw_rockchip_dsi_priv { struct mipi_dsi_device device; void __iomem *base; struct udevice *panel; + struct display_timing timings; void __iomem *grf; /* Optional external dphy */ @@ -709,7 +710,7 @@ static int dw_mipi_dsi_rockchip_attach(struct udevice *dev) struct dw_rockchip_dsi_priv *priv = dev_get_priv(dev); struct mipi_dsi_device *device = &priv->device; struct mipi_dsi_panel_plat *mplat; - struct display_timing timings; + struct display_timing *timings = &priv->timings; int ret; ret = uclass_first_device_err(UCLASS_PANEL, &priv->panel); @@ -724,10 +725,10 @@ static int dw_mipi_dsi_rockchip_attach(struct udevice *dev) device->format = mplat->format; device->mode_flags = mplat->mode_flags; - ret = panel_get_display_timing(priv->panel, &timings); + ret = panel_get_display_timing(priv->panel, timings); if (ret) { ret = ofnode_decode_display_timing(dev_ofnode(priv->panel), - 0, &timings); + 0, timings); if (ret) { dev_err(dev, "decode display timing error %d\n", ret); return ret; @@ -740,7 +741,7 @@ static int dw_mipi_dsi_rockchip_attach(struct udevice *dev) return ret; } - ret = dsi_host_init(priv->dsi_host, device, &timings, 4, + ret = dsi_host_init(priv->dsi_host, device, timings, 4, &dsi_rockchip_phy_ops); if (ret) { dev_err(dev, "failed to initialize mipi dsi host\n"); @@ -902,9 +903,19 @@ static int dw_mipi_dsi_rockchip_probe(struct udevice *dev) return 0; } +static int dw_mipi_dsi_rockchip_get_dt(struct udevice *dev, + struct display_timing *timings) +{ + struct dw_rockchip_dsi_priv *priv = dev_get_priv(dev); + + memcpy(timings, &priv->timings, sizeof(*timings)); + return 0; +} + struct video_bridge_ops dw_mipi_dsi_rockchip_ops = { .attach = dw_mipi_dsi_rockchip_attach, .set_backlight = dw_mipi_dsi_rockchip_set_bl, + .get_display_timing = dw_mipi_dsi_rockchip_get_dt, }; static const struct rockchip_dw_dsi_chip_data rk3399_chip_data[] = { -- 2.49.0