aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb-frontends/af9033.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/dvb-frontends/af9033.c')
-rw-r--r--drivers/media/dvb-frontends/af9033.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c
index 8162d939c4b2..464ad878490b 100644
--- a/drivers/media/dvb-frontends/af9033.c
+++ b/drivers/media/dvb-frontends/af9033.c
@@ -408,7 +408,7 @@ static int af9033_set_frontend(struct dvb_frontend *fe)
408{ 408{
409 struct af9033_state *state = fe->demodulator_priv; 409 struct af9033_state *state = fe->demodulator_priv;
410 struct dtv_frontend_properties *c = &fe->dtv_property_cache; 410 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
411 int ret, i, spec_inv; 411 int ret, i, spec_inv, sampling_freq;
412 u8 tmp, buf[3], bandwidth_reg_val; 412 u8 tmp, buf[3], bandwidth_reg_val;
413 u32 if_frequency, freq_cw, adc_freq; 413 u32 if_frequency, freq_cw, adc_freq;
414 414
@@ -465,18 +465,20 @@ static int af9033_set_frontend(struct dvb_frontend *fe)
465 else 465 else
466 if_frequency = 0; 466 if_frequency = 0;
467 467
468 while (if_frequency > (adc_freq / 2)) 468 sampling_freq = if_frequency;
469 if_frequency -= adc_freq;
470 469
471 if (if_frequency >= 0) 470 while (sampling_freq > (adc_freq / 2))
471 sampling_freq -= adc_freq;
472
473 if (sampling_freq >= 0)
472 spec_inv *= -1; 474 spec_inv *= -1;
473 else 475 else
474 if_frequency *= -1; 476 sampling_freq *= -1;
475 477
476 freq_cw = af9033_div(state, if_frequency, adc_freq, 23ul); 478 freq_cw = af9033_div(state, sampling_freq, adc_freq, 23ul);
477 479
478 if (spec_inv == -1) 480 if (spec_inv == -1)
479 freq_cw *= -1; 481 freq_cw = 0x800000 - freq_cw;
480 482
481 /* get adc multiplies */ 483 /* get adc multiplies */
482 ret = af9033_rd_reg(state, 0x800045, &tmp); 484 ret = af9033_rd_reg(state, 0x800045, &tmp);