[PATCH v2 04/11] video: rockchip: dw-mipi-dsi: Add get_display_timing support

Svyatoslav Ryhel clamor95 at gmail.com
Sun Feb 23 13:48:42 CET 2025


нд, 23 лют. 2025 р. о 14:14 Dang Huynh <danct12 at riseup.net> пише:
>
> This allows video drivers to obtain display timings from the video
> bridge.
>
> Signed-off-by: Dang Huynh <danct12 at 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.48.1
>

Reviewed-by: Svyatoslav Ryhel <clamor95 at gmail.com>


More information about the U-Boot mailing list