diff options
Diffstat (limited to 'drivers/media/dvb-frontends/af9033.c')
| -rw-r--r-- | drivers/media/dvb-frontends/af9033.c | 16 | 
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c index 8162d939c4b..464ad878490 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)  {  	struct af9033_state *state = fe->demodulator_priv;  	struct dtv_frontend_properties *c = &fe->dtv_property_cache; -	int ret, i, spec_inv; +	int ret, i, spec_inv, sampling_freq;  	u8 tmp, buf[3], bandwidth_reg_val;  	u32 if_frequency, freq_cw, adc_freq; @@ -465,18 +465,20 @@ static int af9033_set_frontend(struct dvb_frontend *fe)  		else  			if_frequency = 0; -		while (if_frequency > (adc_freq / 2)) -			if_frequency -= adc_freq; +		sampling_freq = if_frequency; -		if (if_frequency >= 0) +		while (sampling_freq > (adc_freq / 2)) +			sampling_freq -= adc_freq; + +		if (sampling_freq >= 0)  			spec_inv *= -1;  		else -			if_frequency *= -1; +			sampling_freq *= -1; -		freq_cw = af9033_div(state, if_frequency, adc_freq, 23ul); +		freq_cw = af9033_div(state, sampling_freq, adc_freq, 23ul);  		if (spec_inv == -1) -			freq_cw *= -1; +			freq_cw = 0x800000 - freq_cw;  		/* get adc multiplies */  		ret = af9033_rd_reg(state, 0x800045, &tmp);  |