|
@@ -277,33 +277,6 @@ err:
|
|
|
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;
|
|
@@ -641,8 +614,8 @@ static int af9013_set_frontend(struct dvb_frontend *fe)
|
|
|
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;
|
|
@@ -1111,11 +1084,10 @@ static int af9013_init(struct dvb_frontend *fe)
|
|
|
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;
|