Merge tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm
[linux-2.6-microblaze.git] / drivers / clk / qcom / clk-rcg2.c
index e1b1b42..f675fd9 100644 (file)
@@ -264,7 +264,7 @@ static int clk_rcg2_determine_floor_rate(struct clk_hw *hw,
 
 static int __clk_rcg2_configure(struct clk_rcg2 *rcg, const struct freq_tbl *f)
 {
-       u32 cfg, mask;
+       u32 cfg, mask, d_val, not2d_val, n_minus_m;
        struct clk_hw *hw = &rcg->clkr.hw;
        int ret, index = qcom_find_src_index(hw, rcg->parent_map, f->src);
 
@@ -283,8 +283,17 @@ static int __clk_rcg2_configure(struct clk_rcg2 *rcg, const struct freq_tbl *f)
                if (ret)
                        return ret;
 
+               /* Calculate 2d value */
+               d_val = f->n;
+
+               n_minus_m = f->n - f->m;
+               n_minus_m *= 2;
+
+               d_val = clamp_t(u32, d_val, f->m, n_minus_m);
+               not2d_val = ~d_val & mask;
+
                ret = regmap_update_bits(rcg->clkr.regmap,
-                               RCG_D_OFFSET(rcg), mask, ~f->n);
+                               RCG_D_OFFSET(rcg), mask, not2d_val);
                if (ret)
                        return ret;
        }
@@ -720,6 +729,7 @@ static const struct frac_entry frac_table_pixel[] = {
        { 2, 9 },
        { 4, 9 },
        { 1, 1 },
+       { 2, 3 },
        { }
 };