Some clocks have a global pre-divider that applies to all their parents.
Since it might also apply to clocks that have a single parent, this is
merged in the ccu_common structure, unlike the other pre-divider settings
that are tied to a specific index, and thus a specific parent.
Acked-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
 #define CCU_FEATURE_VARIABLE_PREDIV    BIT(1)
 #define CCU_FEATURE_FIXED_PREDIV       BIT(2)
 #define CCU_FEATURE_FIXED_POSTDIV      BIT(3)
+#define CCU_FEATURE_ALL_PREDIV         BIT(4)
 
 struct device_node;
 
 struct ccu_common {
        void __iomem    *base;
        u16             reg;
+       u32             prediv;
 
        unsigned long   features;
        spinlock_t      *lock;
 
        int i;
 
        if (!((common->features & CCU_FEATURE_FIXED_PREDIV) ||
-             (common->features & CCU_FEATURE_VARIABLE_PREDIV)))
+             (common->features & CCU_FEATURE_VARIABLE_PREDIV) ||
+             (common->features & CCU_FEATURE_ALL_PREDIV)))
                return;
 
+       if (common->features & CCU_FEATURE_ALL_PREDIV) {
+               *parent_rate = *parent_rate / common->prediv;
+               return;
+       }
+
        reg = readl(common->base + common->reg);
        if (parent_index < 0) {
                parent_index = reg >> cm->shift;