Hi Maxime.

On Fri, 10 Jun 2022 at 10:30, Maxime Ripard <max...@cerno.tech> wrote:
>
> Adding a device-managed action will make the error path easier, so let's
> create one to disable our clock.

The DPI block has two clocks (core and pixel), and this is only
affecting one of them (the core clock).
(I'm actually puzzling over what it's wanting to do with the core
clock here as it's only enabling it rather than setting a rate. I
think it may be redundant).

With that text amended:
Reviewed-by: Dave Stevenson <dave.steven...@raspberrypi.com>

  Dave

> Signed-off-by: Maxime Ripard <max...@cerno.tech>
> ---
>  drivers/gpu/drm/vc4/vc4_dpi.c | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_dpi.c b/drivers/gpu/drm/vc4/vc4_dpi.c
> index 5a6cdea7bf7b..4e24dbad77f2 100644
> --- a/drivers/gpu/drm/vc4/vc4_dpi.c
> +++ b/drivers/gpu/drm/vc4/vc4_dpi.c
> @@ -237,6 +237,13 @@ static int vc4_dpi_init_bridge(struct vc4_dpi *dpi)
>         return drm_bridge_attach(&dpi->encoder.base, bridge, NULL, 0);
>  }
>
> +static void vc4_dpi_disable_clock(void *ptr)
> +{
> +       struct vc4_dpi *dpi = ptr;
> +
> +       clk_disable_unprepare(dpi->core_clock);
> +}
> +
>  static int vc4_dpi_bind(struct device *dev, struct device *master, void 
> *data)
>  {
>         struct platform_device *pdev = to_platform_device(dev);
> @@ -285,6 +292,10 @@ static int vc4_dpi_bind(struct device *dev, struct 
> device *master, void *data)
>                 return ret;
>         }
>
> +       ret = devm_add_action_or_reset(dev, vc4_dpi_disable_clock, dpi);
> +       if (ret)
> +               return ret;
> +
>         drm_simple_encoder_init(drm, &dpi->encoder.base, 
> DRM_MODE_ENCODER_DPI);
>         drm_encoder_helper_add(&dpi->encoder.base, 
> &vc4_dpi_encoder_helper_funcs);
>
> @@ -300,7 +311,6 @@ static int vc4_dpi_bind(struct device *dev, struct device 
> *master, void *data)
>
>  err_destroy_encoder:
>         drm_encoder_cleanup(&dpi->encoder.base);
> -       clk_disable_unprepare(dpi->core_clock);
>         return ret;
>  }
>
> @@ -310,8 +320,6 @@ static void vc4_dpi_unbind(struct device *dev, struct 
> device *master,
>         struct vc4_dpi *dpi = dev_get_drvdata(dev);
>
>         drm_encoder_cleanup(&dpi->encoder.base);
> -
> -       clk_disable_unprepare(dpi->core_clock);
>  }
>
>  static const struct component_ops vc4_dpi_ops = {
> --
> 2.36.1
>

Reply via email to