diff options
author | Mike Turquette <mturquette@linaro.org> | 2014-07-02 19:58:14 -0400 |
---|---|---|
committer | Mike Turquette <mturquette@linaro.org> | 2014-07-13 15:17:05 -0400 |
commit | 5a994e151f7c54a5fdeb07fe2fed4ed64b9321b8 (patch) | |
tree | 59575205b146557cf837264c80dfbdb9a7978fc7 | |
parent | 0c02cf2f1c2ffd75221b43bacb4f02a0e52e014b (diff) |
clk: composite: improve rate_hw sanity check logic
The function pointer population and sanity checking logic got a bit ugly
with the advent of the .determine_rate callback. Clean it up.
Signed-off-by: Mike Turquette <mturquette@linaro.org>
-rw-r--r-- | drivers/clk/clk-composite.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/drivers/clk/clk-composite.c b/drivers/clk/clk-composite.c index faf7c32fe351..b9355daf8065 100644 --- a/drivers/clk/clk-composite.c +++ b/drivers/clk/clk-composite.c | |||
@@ -226,21 +226,27 @@ struct clk *clk_register_composite(struct device *dev, const char *name, | |||
226 | clk = ERR_PTR(-EINVAL); | 226 | clk = ERR_PTR(-EINVAL); |
227 | goto err; | 227 | goto err; |
228 | } | 228 | } |
229 | clk_composite_ops->recalc_rate = clk_composite_recalc_rate; | ||
229 | 230 | ||
230 | /* .round_rate is a prerequisite for .set_rate */ | 231 | if (rate_ops->determine_rate) |
231 | if (rate_ops->round_rate) { | 232 | clk_composite_ops->determine_rate = |
232 | clk_composite_ops->round_rate = clk_composite_round_rate; | 233 | clk_composite_determine_rate; |
233 | if (rate_ops->set_rate) { | 234 | else if (rate_ops->round_rate) |
234 | clk_composite_ops->set_rate = clk_composite_set_rate; | 235 | clk_composite_ops->round_rate = |
235 | } | 236 | clk_composite_round_rate; |
237 | |||
238 | /* .set_rate requires either .round_rate or .determine_rate */ | ||
239 | if (rate_ops->set_rate) { | ||
240 | if (rate_ops->determine_rate || rate_ops->round_rate) | ||
241 | clk_composite_ops->set_rate = | ||
242 | clk_composite_set_rate; | ||
243 | else | ||
244 | WARN(1, "%s: missing round_rate op is required\n", | ||
245 | __func__); | ||
236 | } | 246 | } |
237 | 247 | ||
238 | composite->rate_hw = rate_hw; | 248 | composite->rate_hw = rate_hw; |
239 | composite->rate_ops = rate_ops; | 249 | composite->rate_ops = rate_ops; |
240 | clk_composite_ops->recalc_rate = clk_composite_recalc_rate; | ||
241 | if (rate_ops->determine_rate || | ||
242 | (rate_ops->round_rate && clk_composite_ops->set_parent)) | ||
243 | clk_composite_ops->determine_rate = clk_composite_determine_rate; | ||
244 | } | 250 | } |
245 | 251 | ||
246 | if (gate_hw && gate_ops) { | 252 | if (gate_hw && gate_ops) { |