u8 divisor;
 
        divisor = DIV_ROUND_UP(parent_rate, rate);
-       if (divisor > 128)
+       if (divisor > AIC32X4_DIV_MAX)
                return -EINVAL;
 
        return regmap_update_bits(div->regmap, div->reg,
        unsigned long divisor;
 
        divisor = DIV_ROUND_UP(req->best_parent_rate, req->rate);
-       if (divisor > 128)
+       if (divisor > AIC32X4_DIV_MAX)
                return -EINVAL;
 
        req->rate = DIV_ROUND_UP(req->best_parent_rate, divisor);
                                                unsigned long parent_rate)
 {
        struct clk_aic32x4 *div = to_clk_aic32x4(hw);
-
        unsigned int val;
+       int err;
+
+       err = regmap_read(div->regmap, div->reg, &val);
+       if (err)
+               return 0;
 
-       regmap_read(div->regmap, div->reg, &val);
+       val &= AIC32X4_DIV_MASK;
+       if (!val)
+               val = AIC32X4_DIV_MAX;
 
-       return DIV_ROUND_UP(parent_rate, val & AIC32X4_DIV_MASK);
+       return DIV_ROUND_UP(parent_rate, val);
 }
 
 static const struct clk_ops aic32x4_div_ops = {
 
 #define AIC32X4_REFPOWERUP_120MS       0x07
 
 /* Common mask and enable for all of the dividers */
-#define AIC32X4_DIVEN           BIT(7)
-#define AIC32X4_DIV_MASK        GENMASK(6, 0)
+#define AIC32X4_DIVEN                  BIT(7)
+#define AIC32X4_DIV_MASK               GENMASK(6, 0)
+#define AIC32X4_DIV_MAX                        128
 
 /* Clock Limits */
 #define AIC32X4_MAX_DOSR_FREQ          6200000