Allocate a clock controller and use new clk_register_with_ctrl() API.
Signed-off-by: Krzysztof Kozlowski k.kozlowski@samsung.com --- drivers/clk/clk-s2mps11.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c index fbaa84a33c46..881f1e226867 100644 --- a/drivers/clk/clk-s2mps11.c +++ b/drivers/clk/clk-s2mps11.c @@ -41,6 +41,7 @@ struct s2mps11_clk { struct clk_hw hw; struct clk *clk; struct clk_lookup *lookup; + struct clk_ctrl *clk_ctrl; u32 mask; unsigned int reg; }; @@ -176,6 +177,10 @@ static int s2mps11_clk_probe(struct platform_device *pdev) if (IS_ERR(s2mps11_clks->clk_np)) return PTR_ERR(s2mps11_clks->clk_np);
+ s2mps11_clks->clk_ctrl = clk_ctrl_register(&pdev->dev); + if (IS_ERR(s2mps11_clks->clk_ctrl)) + return PTR_ERR(s2mps11_clks->clk_ctrl); // FIXME: use devm-like + for (i = 0; i < S2MPS11_CLKS_NUM; i++) { if (i == S2MPS11_CLK_CP && hwid == S2MPS14X) continue; /* Skip clocks not present in some devices */ @@ -184,7 +189,8 @@ static int s2mps11_clk_probe(struct platform_device *pdev) s2mps11_clks[i].mask = 1 << i; s2mps11_clks[i].reg = s2mps11_reg;
- s2mps11_clks[i].clk = devm_clk_register(&pdev->dev, + s2mps11_clks[i].clk = devm_clk_register_with_ctrl(&pdev->dev, + s2mps11_clks->clk_ctrl, &s2mps11_clks[i].hw); if (IS_ERR(s2mps11_clks[i].clk)) { dev_err(&pdev->dev, "Fail to register : %s\n", @@ -233,6 +239,8 @@ static int s2mps11_clk_remove(struct platform_device *pdev) clkdev_drop(s2mps11_clks[i].lookup); }
+ clk_ctrl_unregister(s2mps11_clks->clk_ctrl); + return 0; }