clk: bd718x7: Support ROHM BD70528 clk block
authorMatti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
Mon, 3 Jun 2019 07:25:39 +0000 (10:25 +0300)
committerLee Jones <lee.jones@linaro.org>
Thu, 27 Jun 2019 09:57:24 +0000 (10:57 +0100)
ROHM BD70528 is an ultra low power PMIC with similar 32K clk as
bd718x7. Only difference (from clk perspective) is register address.
Add support for controlling BD70528 clk using bd718x7 driver.

Signed-off-by: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
Acked-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/clk/Kconfig
drivers/clk/clk-bd718x7.c

index fc1e0cf44995d55284f11e2d9430b37ffc6f3df3..dd411c86b979901705a729e033272248a6c95cdd 100644 (file)
@@ -293,10 +293,10 @@ config COMMON_CLK_STM32H7
 
 config COMMON_CLK_BD718XX
        tristate "Clock driver for ROHM BD718x7 PMIC"
-       depends on MFD_ROHM_BD718XX
+       depends on MFD_ROHM_BD718XX || MFD_ROHM_BD70528
        help
-         This driver supports ROHM BD71837 and ROHM BD71847
-         PMICs clock gates.
+         This driver supports ROHM BD71837, ROHM BD71847 and
+         ROHM BD70528 PMICs clock gates.
 
 config COMMON_CLK_FIXED_MMIO
        bool "Clock driver for Memory Mapped Fixed values"
index 461228ebf70336eb0491f8d1dbae7bfd7b6fe7eb..ae6e5baee3306efaf00a73d4050c2fc81e232067 100644 (file)
@@ -8,6 +8,7 @@
 #include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/mfd/rohm-bd718x7.h>
+#include <linux/mfd/rohm-bd70528.h>
 #include <linux/clk-provider.h>
 #include <linux/clkdev.h>
 #include <linux/regmap.h>
@@ -86,9 +87,20 @@ static int bd71837_clk_probe(struct platform_device *pdev)
                dev_err(&pdev->dev, "No parent clk found\n");
                return -EINVAL;
        }
-
-       c->reg = BD718XX_REG_OUT32K;
-       c->mask = BD718XX_OUT32K_EN;
+       switch (mfd->chip_type) {
+       case ROHM_CHIP_TYPE_BD71837:
+       case ROHM_CHIP_TYPE_BD71847:
+               c->reg = BD718XX_REG_OUT32K;
+               c->mask = BD718XX_OUT32K_EN;
+               break;
+       case ROHM_CHIP_TYPE_BD70528:
+               c->reg = BD70528_REG_CLK_OUT;
+               c->mask = BD70528_CLK_OUT_EN_MASK;
+               break;
+       default:
+               dev_err(&pdev->dev, "Unknown clk chip\n");
+               return -EINVAL;
+       }
        c->mfd = mfd;
        c->pdev = pdev;
        c->hw.init = &init;
@@ -119,5 +131,5 @@ static struct platform_driver bd71837_clk = {
 module_platform_driver(bd71837_clk);
 
 MODULE_AUTHOR("Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>");
-MODULE_DESCRIPTION("BD71837/BD71847 chip clk driver");
+MODULE_DESCRIPTION("BD71837/BD71847/BD70528 chip clk driver");
 MODULE_LICENSE("GPL");