BD71828GW is a single-chip power management IC for battery-powered portable
devices. Add support for controlling BD71828 clk using bd718x7 driver.

Signed-off-by: Matti Vaittinen <matti.vaitti...@fi.rohmeurope.com>
---
 drivers/clk/Kconfig       |  6 +++---
 drivers/clk/clk-bd718x7.c | 15 ++++++++++-----
 2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig
index 801fa1cd0321..1d61d94cdb29 100644
--- a/drivers/clk/Kconfig
+++ b/drivers/clk/Kconfig
@@ -302,10 +302,10 @@ config COMMON_CLK_STM32H7
          Support for stm32h7 SoC family clocks
 
 config COMMON_CLK_BD718XX
-       tristate "Clock driver for ROHM BD718x7 PMIC"
-       depends on MFD_ROHM_BD718XX || MFD_ROHM_BD70528
+       tristate "Clock driver for 32K clk gates on ROHM PMICs"
+       depends on MFD_ROHM_BD718XX || MFD_ROHM_BD70528 || MFD_ROHM_BD71828
        help
-         This driver supports ROHM BD71837, ROHM BD71847 and
+         This driver supports ROHM BD71837, ROHM BD71847, ROHM BD71828 and
          ROHM BD70528 PMICs clock gates.
 
 config COMMON_CLK_FIXED_MMIO
diff --git a/drivers/clk/clk-bd718x7.c b/drivers/clk/clk-bd718x7.c
index ae6e5baee330..d17a19e04592 100644
--- a/drivers/clk/clk-bd718x7.c
+++ b/drivers/clk/clk-bd718x7.c
@@ -8,6 +8,7 @@
 #include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/mfd/rohm-bd718x7.h>
+#include <linux/mfd/rohm-bd71828.h>
 #include <linux/mfd/rohm-bd70528.h>
 #include <linux/clk-provider.h>
 #include <linux/clkdev.h>
@@ -21,10 +22,8 @@ struct bd718xx_clk {
        struct rohm_regmap_dev *mfd;
 };
 
-static int bd71837_clk_set(struct clk_hw *hw, int status)
+static int bd71837_clk_set(struct bd718xx_clk *c, int status)
 {
-       struct bd718xx_clk *c = container_of(hw, struct bd718xx_clk, hw);
-
        return regmap_update_bits(c->mfd->regmap, c->reg, c->mask, status);
 }
 
@@ -33,14 +32,16 @@ static void bd71837_clk_disable(struct clk_hw *hw)
        int rv;
        struct bd718xx_clk *c = container_of(hw, struct bd718xx_clk, hw);
 
-       rv = bd71837_clk_set(hw, 0);
+       rv = bd71837_clk_set(c, 0);
        if (rv)
                dev_dbg(&c->pdev->dev, "Failed to disable 32K clk (%d)\n", rv);
 }
 
 static int bd71837_clk_enable(struct clk_hw *hw)
 {
-       return bd71837_clk_set(hw, 1);
+       struct bd718xx_clk *c = container_of(hw, struct bd718xx_clk, hw);
+
+       return bd71837_clk_set(c, 0xffffffff);
 }
 
 static int bd71837_clk_is_enabled(struct clk_hw *hw)
@@ -93,6 +94,10 @@ static int bd71837_clk_probe(struct platform_device *pdev)
                c->reg = BD718XX_REG_OUT32K;
                c->mask = BD718XX_OUT32K_EN;
                break;
+       case ROHM_CHIP_TYPE_BD71828:
+               c->reg = BD71828_REG_OUT32K;
+               c->mask = BD71828_OUT32K_EN;
+               break;
        case ROHM_CHIP_TYPE_BD70528:
                c->reg = BD70528_REG_CLK_OUT;
                c->mask = BD70528_CLK_OUT_EN_MASK;
-- 
2.21.0


-- 
Matti Vaittinen, Linux device drivers
ROHM Semiconductors, Finland SWDC
Kiviharjunlenkki 1E
90220 OULU
FINLAND

~~~ "I don't think so," said Rene Descartes. Just then he vanished ~~~
Simon says - in Latin please.
~~~ "non cogito me" dixit Rene Descarte, deinde evanescavit ~~~
Thanks to Simon Glass for the translation =] 

Reply via email to