Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+16 -10
+16 -10
drivers/clk/clk-composite.c
··· 226 226 clk = ERR_PTR(-EINVAL); 227 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->round_rate) { 232 - clk_composite_ops->round_rate = clk_composite_round_rate; 233 - if (rate_ops->set_rate) { 234 - clk_composite_ops->set_rate = clk_composite_set_rate; 235 - } 231 + if (rate_ops->determine_rate) 232 + clk_composite_ops->determine_rate = 233 + clk_composite_determine_rate; 234 + else if (rate_ops->round_rate) 235 + clk_composite_ops->round_rate = 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 248 composite->rate_hw = rate_hw; 239 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 252 if (gate_hw && gate_ops) {