clk: imx: pfdv2: switch to use determine_rate
authorPeng Fan <peng.fan@nxp.com>
Wed, 19 Feb 2020 07:59:47 +0000 (15:59 +0800)
committerShawn Guo <shawnguo@kernel.org>
Tue, 10 Mar 2020 06:01:52 +0000 (14:01 +0800)
Per clk_ops, compared with round_rate, determine_rate could optionally
support the parent clock that should be used to provide the clock rate.

In this patch, the parent clock is just parent->rate as round_rate.

The following patch will calculate the best parent clock.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
drivers/clk/imx/clk-pfdv2.c

index f870727..28b5f20 100644 (file)
@@ -98,10 +98,11 @@ static unsigned long clk_pfdv2_recalc_rate(struct clk_hw *hw,
        return tmp;
 }
 
-static long clk_pfdv2_round_rate(struct clk_hw *hw, unsigned long rate,
-                                unsigned long *prate)
+static int clk_pfdv2_determine_rate(struct clk_hw *hw,
+                                   struct clk_rate_request *req)
 {
-       u64 tmp = *prate;
+       u64 tmp = req->best_parent_rate;
+       u64 rate = req->rate;
        u8 frac;
 
        tmp = tmp * 18 + rate / 2;
@@ -113,11 +114,13 @@ static long clk_pfdv2_round_rate(struct clk_hw *hw, unsigned long rate,
        else if (frac > 35)
                frac = 35;
 
-       tmp = *prate;
+       tmp = req->best_parent_rate;
        tmp *= 18;
        do_div(tmp, frac);
 
-       return tmp;
+       req->rate = tmp;
+
+       return 0;
 }
 
 static int clk_pfdv2_is_enabled(struct clk_hw *hw)
@@ -167,7 +170,7 @@ static const struct clk_ops clk_pfdv2_ops = {
        .enable         = clk_pfdv2_enable,
        .disable        = clk_pfdv2_disable,
        .recalc_rate    = clk_pfdv2_recalc_rate,
-       .round_rate     = clk_pfdv2_round_rate,
+       .determine_rate = clk_pfdv2_determine_rate,
        .set_rate       = clk_pfdv2_set_rate,
        .is_enabled     = clk_pfdv2_is_enabled,
 };