]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
MIPS: BCM63XX: add clkdev lookup support
authorJonas Gorski <jonas.gorski@gmail.com>
Wed, 20 Sep 2017 11:14:01 +0000 (13:14 +0200)
committerJames Hogan <jhogan@kernel.org>
Tue, 7 Nov 2017 18:33:17 +0000 (18:33 +0000)
Enable clkdev lookup support to allow us providing clocks under
different names to devices more easily, so we don't need to care
about clock name clashes anymore.

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Rob Herring <robh+dt@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Kevin Cernekee <cernekee@gmail.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: linux-mips@linux-mips.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-serial@vger.kernel.org
Cc: devicetree@vger.kernel.org
Cc: bcm-kernel-feedback-list@broadcom.com
Patchwork: https://patchwork.linux-mips.org/patch/17325/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: James Hogan <jhogan@kernel.org>
arch/mips/Kconfig
arch/mips/bcm63xx/clk.c

index b6af63fb85449d654790d01b3fde5691d69def87..c715b3acf052113626c2874cd81cbe2c3fbe77df 100644 (file)
@@ -275,6 +275,7 @@ config BCM63XX
        select GPIOLIB
        select HAVE_CLK
        select MIPS_L1_CACHE_SHIFT_4
+       select CLKDEV_LOOKUP
        help
         Support for BCM63XX based boards
 
index 19577f771c1f0ce4ecc5376c40c14f4d138520e7..f712c9558d579e2da51848c0b877c3fcded93e4c 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/mutex.h>
 #include <linux/err.h>
 #include <linux/clk.h>
+#include <linux/clkdev.h>
 #include <linux/delay.h>
 #include <bcm63xx_cpu.h>
 #include <bcm63xx_io.h>
@@ -359,44 +360,103 @@ long clk_round_rate(struct clk *clk, unsigned long rate)
 }
 EXPORT_SYMBOL_GPL(clk_round_rate);
 
-struct clk *clk_get(struct device *dev, const char *id)
-{
-       if (!strcmp(id, "enet0"))
-               return &clk_enet0;
-       if (!strcmp(id, "enet1"))
-               return &clk_enet1;
-       if (!strcmp(id, "enetsw"))
-               return &clk_enetsw;
-       if (!strcmp(id, "ephy"))
-               return &clk_ephy;
-       if (!strcmp(id, "usbh"))
-               return &clk_usbh;
-       if (!strcmp(id, "usbd"))
-               return &clk_usbd;
-       if (!strcmp(id, "spi"))
-               return &clk_spi;
-       if (!strcmp(id, "hsspi"))
-               return &clk_hsspi;
-       if (!strcmp(id, "xtm"))
-               return &clk_xtm;
-       if (!strcmp(id, "periph"))
-               return &clk_periph;
-       if ((BCMCPU_IS_3368() || BCMCPU_IS_6358()) && !strcmp(id, "pcm"))
-               return &clk_pcm;
-       if ((BCMCPU_IS_6362() || BCMCPU_IS_6368()) && !strcmp(id, "ipsec"))
-               return &clk_ipsec;
-       if ((BCMCPU_IS_6328() || BCMCPU_IS_6362()) && !strcmp(id, "pcie"))
-               return &clk_pcie;
-       return ERR_PTR(-ENOENT);
-}
+static struct clk_lookup bcm3368_clks[] = {
+       /* fixed rate clocks */
+       CLKDEV_INIT(NULL, "periph", &clk_periph),
+       /* gated clocks */
+       CLKDEV_INIT(NULL, "enet0", &clk_enet0),
+       CLKDEV_INIT(NULL, "enet1", &clk_enet1),
+       CLKDEV_INIT(NULL, "ephy", &clk_ephy),
+       CLKDEV_INIT(NULL, "usbh", &clk_usbh),
+       CLKDEV_INIT(NULL, "usbd", &clk_usbd),
+       CLKDEV_INIT(NULL, "spi", &clk_spi),
+       CLKDEV_INIT(NULL, "pcm", &clk_pcm),
+};
 
-EXPORT_SYMBOL(clk_get);
+static struct clk_lookup bcm6328_clks[] = {
+       /* fixed rate clocks */
+       CLKDEV_INIT(NULL, "periph", &clk_periph),
+       /* gated clocks */
+       CLKDEV_INIT(NULL, "enetsw", &clk_enetsw),
+       CLKDEV_INIT(NULL, "usbh", &clk_usbh),
+       CLKDEV_INIT(NULL, "usbd", &clk_usbd),
+       CLKDEV_INIT(NULL, "hsspi", &clk_hsspi),
+       CLKDEV_INIT(NULL, "pcie", &clk_pcie),
+};
 
-void clk_put(struct clk *clk)
-{
-}
+static struct clk_lookup bcm6338_clks[] = {
+       /* fixed rate clocks */
+       CLKDEV_INIT(NULL, "periph", &clk_periph),
+       /* gated clocks */
+       CLKDEV_INIT(NULL, "enet0", &clk_enet0),
+       CLKDEV_INIT(NULL, "enet1", &clk_enet1),
+       CLKDEV_INIT(NULL, "ephy", &clk_ephy),
+       CLKDEV_INIT(NULL, "usbh", &clk_usbh),
+       CLKDEV_INIT(NULL, "usbd", &clk_usbd),
+       CLKDEV_INIT(NULL, "spi", &clk_spi),
+};
+
+static struct clk_lookup bcm6345_clks[] = {
+       /* fixed rate clocks */
+       CLKDEV_INIT(NULL, "periph", &clk_periph),
+       /* gated clocks */
+       CLKDEV_INIT(NULL, "enet0", &clk_enet0),
+       CLKDEV_INIT(NULL, "enet1", &clk_enet1),
+       CLKDEV_INIT(NULL, "ephy", &clk_ephy),
+       CLKDEV_INIT(NULL, "usbh", &clk_usbh),
+       CLKDEV_INIT(NULL, "usbd", &clk_usbd),
+       CLKDEV_INIT(NULL, "spi", &clk_spi),
+};
+
+static struct clk_lookup bcm6348_clks[] = {
+       /* fixed rate clocks */
+       CLKDEV_INIT(NULL, "periph", &clk_periph),
+       /* gated clocks */
+       CLKDEV_INIT(NULL, "enet0", &clk_enet0),
+       CLKDEV_INIT(NULL, "enet1", &clk_enet1),
+       CLKDEV_INIT(NULL, "ephy", &clk_ephy),
+       CLKDEV_INIT(NULL, "usbh", &clk_usbh),
+       CLKDEV_INIT(NULL, "usbd", &clk_usbd),
+       CLKDEV_INIT(NULL, "spi", &clk_spi),
+};
 
-EXPORT_SYMBOL(clk_put);
+static struct clk_lookup bcm6358_clks[] = {
+       /* fixed rate clocks */
+       CLKDEV_INIT(NULL, "periph", &clk_periph),
+       /* gated clocks */
+       CLKDEV_INIT(NULL, "enet0", &clk_enet0),
+       CLKDEV_INIT(NULL, "enet1", &clk_enet1),
+       CLKDEV_INIT(NULL, "ephy", &clk_ephy),
+       CLKDEV_INIT(NULL, "usbh", &clk_usbh),
+       CLKDEV_INIT(NULL, "usbd", &clk_usbd),
+       CLKDEV_INIT(NULL, "spi", &clk_spi),
+       CLKDEV_INIT(NULL, "pcm", &clk_pcm),
+};
+
+static struct clk_lookup bcm6362_clks[] = {
+       /* fixed rate clocks */
+       CLKDEV_INIT(NULL, "periph", &clk_periph),
+       /* gated clocks */
+       CLKDEV_INIT(NULL, "enetsw", &clk_enetsw),
+       CLKDEV_INIT(NULL, "usbh", &clk_usbh),
+       CLKDEV_INIT(NULL, "usbd", &clk_usbd),
+       CLKDEV_INIT(NULL, "spi", &clk_spi),
+       CLKDEV_INIT(NULL, "hsspi", &clk_hsspi),
+       CLKDEV_INIT(NULL, "pcie", &clk_pcie),
+       CLKDEV_INIT(NULL, "ipsec", &clk_ipsec),
+};
+
+static struct clk_lookup bcm6368_clks[] = {
+       /* fixed rate clocks */
+       CLKDEV_INIT(NULL, "periph", &clk_periph),
+       /* gated clocks */
+       CLKDEV_INIT(NULL, "enetsw", &clk_enetsw),
+       CLKDEV_INIT(NULL, "usbh", &clk_usbh),
+       CLKDEV_INIT(NULL, "usbd", &clk_usbd),
+       CLKDEV_INIT(NULL, "spi", &clk_spi),
+       CLKDEV_INIT(NULL, "xtm", &clk_xtm),
+       CLKDEV_INIT(NULL, "ipsec", &clk_ipsec),
+};
 
 #define HSSPI_PLL_HZ_6328      133333333
 #define HSSPI_PLL_HZ_6362      400000000
@@ -404,11 +464,31 @@ EXPORT_SYMBOL(clk_put);
 static int __init bcm63xx_clk_init(void)
 {
        switch (bcm63xx_get_cpu_id()) {
+       case BCM3368_CPU_ID:
+               clkdev_add_table(bcm3368_clks, ARRAY_SIZE(bcm3368_clks));
+               break;
        case BCM6328_CPU_ID:
                clk_hsspi.rate = HSSPI_PLL_HZ_6328;
+               clkdev_add_table(bcm6328_clks, ARRAY_SIZE(bcm6328_clks));
+               break;
+       case BCM6338_CPU_ID:
+               clkdev_add_table(bcm6338_clks, ARRAY_SIZE(bcm6338_clks));
+               break;
+       case BCM6345_CPU_ID:
+               clkdev_add_table(bcm6345_clks, ARRAY_SIZE(bcm6345_clks));
+               break;
+       case BCM6348_CPU_ID:
+               clkdev_add_table(bcm6348_clks, ARRAY_SIZE(bcm6348_clks));
+               break;
+       case BCM6358_CPU_ID:
+               clkdev_add_table(bcm6358_clks, ARRAY_SIZE(bcm6358_clks));
                break;
        case BCM6362_CPU_ID:
                clk_hsspi.rate = HSSPI_PLL_HZ_6362;
+               clkdev_add_table(bcm6362_clks, ARRAY_SIZE(bcm6362_clks));
+               break;
+       case BCM6368_CPU_ID:
+               clkdev_add_table(bcm6368_clks, ARRAY_SIZE(bcm6368_clks));
                break;
        }