Thread (25 messages) 25 messages, 7 authors, 2014-01-06

[PATCH RESEND 1/4] clk: clk-s2mps11: Refactor for including support for other MFD clocks

From: Mike Turquette <hidden>
Date: 2013-12-29 22:17:29
Also in: linux-samsung-soc, lkml

Quoting Tushar Behera (2013-12-26 02:18:58)
The clocks in S2MPS11 and S5M8767 are managed in the same way, baring
a difference in the register offset. It would be better to update
existing S2MPS11 driver to support the clocks in S5M8767, rather than
creating an almost duplicate driver altogether.
Can you rebase patches #1 & #2 onto clk-next? They do not apply cleanly
as-is.

Regards,
Mike
quoted hunk ↗ jump to hunk
Signed-off-by: Tushar Behera <redacted>
Reviewed-by: Tomasz Figa <redacted>
Reviewed-by: Yadwinder Singh Brar <redacted>
CC: Mike Turquette <redacted>
---
 drivers/clk/clk-s2mps11.c |   20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c
index 00a3abe..43e25bb 100644
--- a/drivers/clk/clk-s2mps11.c
+++ b/drivers/clk/clk-s2mps11.c
@@ -48,6 +48,7 @@ struct s2mps11_clk {
        struct clk_lookup *lookup;
        u32 mask;
        bool enabled;
+       unsigned int reg;
 };
 
 static struct s2mps11_clk *to_s2mps11_clk(struct clk_hw *hw)
@@ -61,7 +62,7 @@ static int s2mps11_clk_prepare(struct clk_hw *hw)
        int ret;
 
        ret = regmap_update_bits(s2mps11->iodev->regmap_pmic,
-                               S2MPS11_REG_RTC_CTRL,
+                                s2mps11->reg,
                                 s2mps11->mask, s2mps11->mask);
        if (!ret)
                s2mps11->enabled = true;
@@ -74,7 +75,7 @@ static void s2mps11_clk_unprepare(struct clk_hw *hw)
        struct s2mps11_clk *s2mps11 = to_s2mps11_clk(hw);
        int ret;
 
-       ret = regmap_update_bits(s2mps11->iodev->regmap_pmic, S2MPS11_REG_RTC_CTRL,
+       ret = regmap_update_bits(s2mps11->iodev->regmap_pmic, s2mps11->reg,
                           s2mps11->mask, ~s2mps11->mask);
 
        if (!ret)
@@ -155,6 +156,7 @@ static int s2mps11_clk_probe(struct platform_device *pdev)
        struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent);
        struct s2mps11_clk *s2mps11_clks, *s2mps11_clk;
        struct device_node *clk_np = NULL;
+       unsigned int s2mps11_reg;
        int i, ret = 0;
        u32 val;
 
@@ -169,13 +171,23 @@ static int s2mps11_clk_probe(struct platform_device *pdev)
        if (IS_ERR(clk_np))
                return PTR_ERR(clk_np);
 
+       switch(platform_get_device_id(pdev)->driver_data) {
+       case S2MPS11X:
+               s2mps11_reg = S2MPS11_REG_RTC_CTRL;
+               break;
+       default:
+               dev_err(&pdev->dev, "Invalid device type\n");
+               return -EINVAL;
+       };
+
        for (i = 0; i < S2MPS11_CLKS_NUM; i++, s2mps11_clk++) {
                s2mps11_clk->iodev = iodev;
                s2mps11_clk->hw.init = &s2mps11_clks_init[i];
                s2mps11_clk->mask = 1 << i;
+               s2mps11_clk->reg = s2mps11_reg;
 
                ret = regmap_read(s2mps11_clk->iodev->regmap_pmic,
-                                 S2MPS11_REG_RTC_CTRL, &val);
+                                 s2mps11_clk->reg, &val);
                if (ret < 0)
                        goto err_reg;
 
@@ -241,7 +253,7 @@ static int s2mps11_clk_remove(struct platform_device *pdev)
 }
 
 static const struct platform_device_id s2mps11_clk_id[] = {
-       { "s2mps11-clk", 0},
+       { "s2mps11-clk", S2MPS11X},
        { },
 };
 MODULE_DEVICE_TABLE(platform, s2mps11_clk_id);
-- 
1.7.9.5
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help