On Fri, 2020-04-24 at 17:33 +0200, Maxime Ripard wrote:
> The current firmware clock driver for the RaspberryPi can only be probed by
> manually registering an associated platform_device.
> 
> While this works fine for cpufreq where the device gets attached a clkdev
> lookup, it would be tedious to maintain a table of all the devices using
> one of the clocks exposed by the firmware.
> 
> Since the DT on the other hand is the perfect place to store those
> associations, make the firmware clocks driver probe-able through the device
> tree so that we can represent it as a node.
> 
> Cc: Michael Turquette <mturque...@baylibre.com>
> Cc: Stephen Boyd <sb...@kernel.org>
> Cc: linux-...@vger.kernel.org
> Signed-off-by: Maxime Ripard <max...@cerno.tech>
> ---
>  drivers/clk/bcm/clk-raspberrypi.c | 20 +++++++++++++++++---
>  1 file changed, 17 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/clk/bcm/clk-raspberrypi.c b/drivers/clk/bcm/clk-
> raspberrypi.c
> index 1654fd0eedc9..aedeaaf2f66b 100644
> --- a/drivers/clk/bcm/clk-raspberrypi.c
> +++ b/drivers/clk/bcm/clk-raspberrypi.c
> @@ -255,15 +255,22 @@ static int raspberrypi_clk_probe(struct platform_device
> *pdev)
>       struct raspberrypi_clk *rpi;
>       int ret;
>  
> -     firmware_node = of_find_compatible_node(NULL, NULL,
> -                                     "raspberrypi,bcm2835-firmware");
> +     /*
> +      * We can be probed either through the an old-fashioned
> +      * platform device registration or through a DT node that is a
> +      * child of the firmware node. Handle both cases.
> +      */
> +     if (dev->of_node)
> +             firmware_node = of_get_parent(dev->of_node);
> +     else
> +             firmware_node = of_find_compatible_node(NULL, NULL,
> +                                                     "raspberrypi,bcm2835-
> firmware");
>       if (!firmware_node) {
>               dev_err(dev, "Missing firmware node\n");
>               return -ENOENT;
>       }
>  
>       firmware = rpi_firmware_get(firmware_node);
> -     of_node_put(firmware_node);

Why remove this? I think it's still needed after your changes.

Regards,
Nicolas

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to