On 01/06/2015 07:45 AM, Philipp Zabel wrote:
> diff --git a/drivers/clk/clk-conf.c b/drivers/clk/clk-conf.c
> index aad4796..bb4dc02 100644
> --- a/drivers/clk/clk-conf.c
> +++ b/drivers/clk/clk-conf.c
> @@ -62,10 +62,13 @@ static int __set_clk_parents(struct device_node *node, 
> bool clk_supplier)
>                       goto err;
>               }
>  
> -             rc = clk_set_parent(clk, pclk);
> -             if (rc < 0)
> -                     pr_err("clk: failed to reparent %s to %s: %d\n",
> -                            __clk_get_name(clk), __clk_get_name(pclk), rc);
> +             if (pclk != __clk_get_parent(clk)) {
> +                     rc = clk_set_parent(clk, pclk);
> +                     if (rc < 0)
> +                             pr_err("clk: failed to reparent %s to %s: %d\n",
> +                                    __clk_get_name(clk),
> +                                    __clk_get_name(pclk), rc);
> +             }
>               clk_put(clk);
>               clk_put(pclk);
>       }

Why not do this in the core? As far as I can tell other drivers could
run into the same problem, no? Does this work?

-----8<-------

diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index f4963b7d4e17..3278645f4729 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -1677,16 +1677,18 @@ int clk_set_parent(struct clk *clk, struct clk *parent)
        if (!clk)
                return 0;
 
-       /* verify ops for for multi-parent clks */
-       if ((clk->num_parents > 1) && (!clk->ops->set_parent))
-               return -ENOSYS;
-
        /* prevent racing with updates to the clock topology */
        clk_prepare_lock();
 
        if (clk->parent == parent)
                goto out;
 
+       /* verify ops for for multi-parent clks */
+       if ((clk->num_parents > 1) && (!clk->ops->set_parent)) {
+               ret = -ENOSYS;
+               goto out;
+       }
+
        /* check that we are allowed to re-parent if the clock is in use */
        if ((clk->flags & CLK_SET_PARENT_GATE) && clk->prepare_count) {
                ret = -EBUSY;

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to