clk: ingenic: Don't tag custom clocks with CLK_SET_RATE_PARENT
authorPaul Cercueil <paul@crapouillou.net>
Thu, 3 Sep 2020 01:50:47 +0000 (03:50 +0200)
committerStephen Boyd <sboyd@kernel.org>
Wed, 14 Oct 2020 03:04:50 +0000 (20:04 -0700)
The custom clocks have custom functions to round, get or set their rate.
Therefore, we can't assume that they need the CLK_SET_RATE_PARENT flag.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Link: https://lore.kernel.org/r/20200903015048.3091523-4-paul@crapouillou.net
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
drivers/clk/ingenic/cgu.c

index 521a40dfcb721b3b02adcd084402fdcd627c32ff..a1a4f1adaa3acc62150afd16df6d9d95539a229c 100644 (file)
@@ -629,6 +629,13 @@ static int ingenic_register_clock(struct ingenic_cgu *cgu, unsigned idx)
 
        caps = clk_info->type;
 
+       if (caps & CGU_CLK_DIV) {
+               caps &= ~CGU_CLK_DIV;
+       } else if (!(caps & CGU_CLK_CUSTOM)) {
+               /* pass rate changes to the parent clock */
+               clk_init.flags |= CLK_SET_RATE_PARENT;
+       }
+
        if (caps & (CGU_CLK_MUX | CGU_CLK_CUSTOM)) {
                clk_init.num_parents = 0;
 
@@ -690,13 +697,6 @@ static int ingenic_register_clock(struct ingenic_cgu *cgu, unsigned idx)
                caps &= ~(CGU_CLK_MUX | CGU_CLK_MUX_GLITCHFREE);
        }
 
-       if (caps & CGU_CLK_DIV) {
-               caps &= ~CGU_CLK_DIV;
-       } else {
-               /* pass rate changes to the parent clock */
-               clk_init.flags |= CLK_SET_RATE_PARENT;
-       }
-
        if (caps) {
                pr_err("%s: unknown clock type 0x%x\n", __func__, caps);
                goto out;