return ret;
 }
 
-static u32 af9013_div(struct af9013_state *state, u32 a, u32 b, u32 x)
-{
-       u32 r = 0, c = 0, i;
-
-       dev_dbg(&state->client->dev, "%s: a=%d b=%d x=%d\n", __func__, a, b, x);
-
-       if (a > b) {
-               c = a / b;
-               a = a - c * b;
-       }
-
-       for (i = 0; i < x; i++) {
-               if (a >= b) {
-                       r += 1;
-                       a -= b;
-               }
-               a <<= 1;
-               r <<= 1;
-       }
-       r = (c << (u32)x) + r;
-
-       dev_dbg(&state->client->dev, "%s: a=%d b=%d x=%d r=%d r=%x\n",
-                       __func__, a, b, x, r, r);
-
-       return r;
-}
-
 static int af9013_power_ctrl(struct af9013_state *state, u8 onoff)
 {
        int ret, i;
                        spec_inv = !state->spec_inv;
                }
 
-               freq_cw = af9013_div(state, sampling_freq, state->clk,
-                               23);
+               freq_cw = DIV_ROUND_CLOSEST_ULL((u64)sampling_freq * 0x800000,
+                                               state->clk);
 
                if (spec_inv)
                        freq_cw = 0x800000 - freq_cw;
                return -EINVAL;
        }
 
-       adc_cw = af9013_div(state, state->clk, 1000000ul, 19);
+       adc_cw = div_u64((u64)state->clk * 0x80000, 1000000);
        buf[0] = (adc_cw >>  0) & 0xff;
        buf[1] = (adc_cw >>  8) & 0xff;
        buf[2] = (adc_cw >> 16) & 0xff;
-
        ret = af9013_wr_regs(state, 0xd180, buf, 3);
        if (ret)
                goto err;