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 <[email protected]>
---
 drivers/clk/ingenic/cgu.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/clk/ingenic/cgu.c b/drivers/clk/ingenic/cgu.c
index 521a40dfcb72..a1a4f1adaa3a 100644
--- a/drivers/clk/ingenic/cgu.c
+++ b/drivers/clk/ingenic/cgu.c
@@ -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;
-- 
2.28.0

Reply via email to