OSDN Git Service

clk: move checking .get_parent to __clk_core_init()
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Mon, 28 Dec 2015 10:23:04 +0000 (19:23 +0900)
committerStephen Boyd <sboyd@codeaurora.org>
Tue, 2 Feb 2016 19:52:06 +0000 (11:52 -0800)
The .get_parent is mandatory for multi-parent clocks.  Move the check
to __clk_core_init(), like other callback checkings.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Reviewed-by: Vladimir Zapolskiy <vz@mleia.com>
[sboyd@codeaurora.org: Squashed in error path handling, fix typos
in commit message]
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
drivers/clk/clk.c

index 09d8445..7fe94a5 100644 (file)
@@ -1695,13 +1695,6 @@ static struct clk_core *__clk_init_parent(struct clk_core *core)
                goto out;
        }
 
-       if (!core->ops->get_parent) {
-               WARN(!core->ops->get_parent,
-                       "%s: multi-parent clocks must implement .get_parent\n",
-                       __func__);
-               goto out;
-       }
-
        /*
         * Do our best to cache parent clocks in core->parents.  This prevents
         * unnecessary and expensive lookups.  We don't set core->parent here;
@@ -2333,6 +2326,13 @@ static int __clk_core_init(struct clk_core *core)
                goto out;
        }
 
+       if (core->num_parents > 1 && !core->ops->get_parent) {
+               pr_err("%s: %s must implement .get_parent as it has multi parents\n",
+                      __func__, core->name);
+               ret = -EINVAL;
+               goto out;
+       }
+
        if (core->ops->set_rate_and_parent &&
                        !(core->ops->set_parent && core->ops->set_rate)) {
                pr_err("%s: %s must implement .set_parent & .set_rate\n",