Thread (8 messages) 8 messages, 4 authors, 2021-08-30

Re: [PATCH 2/3] usb: renesas_usbhs: Enable support for more than two clks

From: Geert Uytterhoeven <geert@linux-m68k.org>
Date: 2021-07-01 09:07:39
Also in: linux-renesas-soc, linux-usb, lkml

Hi Adam,

Thanks for your patch!

On Wed, Jun 30, 2021 at 7:30 PM Adam Ford [off-list ref] wrote:
The RZ/G2 boards expect there to be an external clock reference for
USBHS controller, but this could be set by a programmable clock.
For those devices using a programmable clock, there need to be two
additional clocks beyond the internal reference clocks:

rcar-usb2-clock-sel to specify we using an external clock, and
the external reference clock itself.
Something is missing in the above sentence?
quoted hunk ↗ jump to hunk
Make this driver dynamically enable all the clocks assigned to it
instead of only enabling the first one or two clocks.

Signed-off-by: Adam Ford <redacted>
diff --git a/drivers/usb/renesas_usbhs/common.c b/drivers/usb/renesas_usbhs/common.c
index 3af91b2b8f76..255e4bd68ed3 100644
--- a/drivers/usb/renesas_usbhs/common.c
+++ b/drivers/usb/renesas_usbhs/common.c
@@ -297,6 +297,8 @@ static bool usbhsc_is_multi_clks(struct usbhs_priv *priv)

 static int usbhsc_clk_get(struct device *dev, struct usbhs_priv *priv)
 {
+       unsigned int i;
+
        if (!usbhsc_is_multi_clks(priv))
                return 0;
@@ -309,11 +311,13 @@ static int usbhsc_clk_get(struct device *dev, struct usbhs_priv *priv)
         * To backward compatibility with old DT, this driver checks the return
         * value if it's -ENOENT or not.
         */
-       priv->clks[1] = of_clk_get(dev_of_node(dev), 1);
-       if (PTR_ERR(priv->clks[1]) == -ENOENT)
-               priv->clks[1] = NULL;
-       else if (IS_ERR(priv->clks[1]))
-               return PTR_ERR(priv->clks[1]);
+       for (i = 1; i < ARRAY_SIZE(priv->clks); i++) {
+               priv->clks[1] = of_clk_get(dev->of_node, i);
+               if (PTR_ERR(priv->clks[i]) == -ENOENT)
+                       priv->clks[i] = NULL;
+               else if (IS_ERR(priv->clks[i]))
+                       return PTR_ERR(priv->clks[i]);
+       }
This is identical to the current code, as ARRAY_SIZE(priv->clks) == 2.
Probably you wanted to increase usbhs_priv.clks[], too?

Does it make sense to start using the clk_bulk*() API?
        return 0;
 }
Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help