[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