[5/9,v2] ds3000: clean up in tune procedure

Message ID 201102020040.49656.liplianin@me.by (mailing list archive)
State Superseded, archived
Headers

Commit Message

Igor M. Liplianin Feb. 1, 2011, 10:40 p.m. UTC
  Variable 'retune' does not make sense.
Loop is not needed for only one try.
Remove unnecessary dprintk's.

Signed-off-by: Igor M. Liplianin <liplianin@me.by>
---
 drivers/media/dvb/frontends/ds3000.c |  442 +++++++++++++++++-----------------
 1 files changed, 216 insertions(+), 226 deletions(-)
  

Comments

Mauro Carvalho Chehab Feb. 24, 2011, 7:04 p.m. UTC | #1
Hi Igor,

Em 01-02-2011 20:40, Igor M. Liplianin escreveu:
> Variable 'retune' does not make sense.
> Loop is not needed for only one try.
> Remove unnecessary dprintk's.
> 
> Signed-off-by: Igor M. Liplianin <liplianin@me.by>

This patch didn't apply. Please fix and resend.

Thanks!
Mauro.

> ---
>  drivers/media/dvb/frontends/ds3000.c |  442 +++++++++++++++++-----------------
>  1 files changed, 216 insertions(+), 226 deletions(-)
> 
> diff --git a/drivers/media/dvb/frontends/ds3000.c b/drivers/media/dvb/frontends/ds3000.c
> index 3373890..7c61936 100644
> --- a/drivers/media/dvb/frontends/ds3000.c
> +++ b/drivers/media/dvb/frontends/ds3000.c
> @@ -1049,7 +1049,7 @@ static int ds3000_tune(struct dvb_frontend *fe,
>  	struct ds3000_state *state = fe->demodulator_priv;
>  	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
>  
> -	int ret = 0, retune, i;
> +	int ret = 0, i;
>  	u8 status, mlpf, mlpf_new, mlpf_max, mlpf_min, nlpf;
>  	u16 value, ndiv;
>  	u32 f3db;
> @@ -1072,249 +1072,239 @@ static int ds3000_tune(struct dvb_frontend *fe,
>  	/* discard the 'current' tuning parameters and prepare to tune */
>  	ds3000_clone_params(fe);
>  
> -	retune = 1;	/* try 1 times */
> -	dprintk("%s:   retune = %d\n", __func__, retune);
> -	dprintk("%s:   frequency   = %d\n", __func__, state->dcur.frequency);
> -	dprintk("%s:   symbol_rate = %d\n", __func__, state->dcur.symbol_rate);
> -	dprintk("%s:   FEC	 = %d \n", __func__,
> -		state->dcur.fec);
> -	dprintk("%s:   Inversion   = %d\n", __func__, state->dcur.inversion);
> -
> -	do {
> -		/* Reset status register */
> -		status = 0;
> -		/* Tune */
> -		/* unknown */
> -		ds3000_tuner_writereg(state, 0x07, 0x02);
> -		ds3000_tuner_writereg(state, 0x10, 0x00);
> -		ds3000_tuner_writereg(state, 0x60, 0x79);
> -		ds3000_tuner_writereg(state, 0x08, 0x01);
> -		ds3000_tuner_writereg(state, 0x00, 0x01);
> -		/* calculate and set freq divider */
> -		if (state->dcur.frequency < 1146000) {
> -			ds3000_tuner_writereg(state, 0x10, 0x11);
> -			ndiv = ((state->dcur.frequency * (6 + 8) * 4) +
> -					(DS3000_XTAL_FREQ / 2)) /
> -					DS3000_XTAL_FREQ - 1024;
> -		} else {
> -			ds3000_tuner_writereg(state, 0x10, 0x01);
> -			ndiv = ((state->dcur.frequency * (6 + 8) * 2) +
> -					(DS3000_XTAL_FREQ / 2)) /
> -					DS3000_XTAL_FREQ - 1024;
> -		}
> +	/* Reset status register */
> +	status = 0;
> +	/* Tune */
> +	/* unknown */
> +	ds3000_tuner_writereg(state, 0x07, 0x02);
> +	ds3000_tuner_writereg(state, 0x10, 0x00);
> +	ds3000_tuner_writereg(state, 0x60, 0x79);
> +	ds3000_tuner_writereg(state, 0x08, 0x01);
> +	ds3000_tuner_writereg(state, 0x00, 0x01);
> +	/* calculate and set freq divider */
> +	if (state->dcur.frequency < 1146000) {
> +		ds3000_tuner_writereg(state, 0x10, 0x11);
> +		ndiv = ((state->dcur.frequency * (6 + 8) * 4) +
> +				(DS3000_XTAL_FREQ / 2)) /
> +				DS3000_XTAL_FREQ - 1024;
> +	} else {
> +		ds3000_tuner_writereg(state, 0x10, 0x01);
> +		ndiv = ((state->dcur.frequency * (6 + 8) * 2) +
> +				(DS3000_XTAL_FREQ / 2)) /
> +				DS3000_XTAL_FREQ - 1024;
> +	}
>  
> -		ds3000_tuner_writereg(state, 0x01, (ndiv & 0x0f00) >> 8);
> -		ds3000_tuner_writereg(state, 0x02, ndiv & 0x00ff);
> -
> -		/* set pll */
> -		ds3000_tuner_writereg(state, 0x03, 0x06);
> -		ds3000_tuner_writereg(state, 0x51, 0x0f);
> -		ds3000_tuner_writereg(state, 0x51, 0x1f);
> -		ds3000_tuner_writereg(state, 0x50, 0x10);
> -		ds3000_tuner_writereg(state, 0x50, 0x00);
> -		msleep(5);
> -
> -		/* unknown */
> -		ds3000_tuner_writereg(state, 0x51, 0x17);
> -		ds3000_tuner_writereg(state, 0x51, 0x1f);
> -		ds3000_tuner_writereg(state, 0x50, 0x08);
> -		ds3000_tuner_writereg(state, 0x50, 0x00);
> -		msleep(5);
> -
> -		value = ds3000_tuner_readreg(state, 0x3d);
> -		value &= 0x0f;
> -		if ((value > 4) && (value < 15)) {
> -			value -= 3;
> -			if (value < 4)
> -				value = 4;
> -			value = ((value << 3) | 0x01) & 0x79;
> -		}
> +	ds3000_tuner_writereg(state, 0x01, (ndiv & 0x0f00) >> 8);
> +	ds3000_tuner_writereg(state, 0x02, ndiv & 0x00ff);
> +
> +	/* set pll */
> +	ds3000_tuner_writereg(state, 0x03, 0x06);
> +	ds3000_tuner_writereg(state, 0x51, 0x0f);
> +	ds3000_tuner_writereg(state, 0x51, 0x1f);
> +	ds3000_tuner_writereg(state, 0x50, 0x10);
> +	ds3000_tuner_writereg(state, 0x50, 0x00);
> +	msleep(5);
> +
> +	/* unknown */
> +	ds3000_tuner_writereg(state, 0x51, 0x17);
> +	ds3000_tuner_writereg(state, 0x51, 0x1f);
> +	ds3000_tuner_writereg(state, 0x50, 0x08);
> +	ds3000_tuner_writereg(state, 0x50, 0x00);
> +	msleep(5);
> +
> +	value = ds3000_tuner_readreg(state, 0x3d);
> +	value &= 0x0f;
> +	if ((value > 4) && (value < 15)) {
> +		value -= 3;
> +		if (value < 4)
> +			value = 4;
> +		value = ((value << 3) | 0x01) & 0x79;
> +	}
>  
> -		ds3000_tuner_writereg(state, 0x60, value);
> -		ds3000_tuner_writereg(state, 0x51, 0x17);
> -		ds3000_tuner_writereg(state, 0x51, 0x1f);
> -		ds3000_tuner_writereg(state, 0x50, 0x08);
> -		ds3000_tuner_writereg(state, 0x50, 0x00);
> -
> -		/* set low-pass filter period */
> -		ds3000_tuner_writereg(state, 0x04, 0x2e);
> -		ds3000_tuner_writereg(state, 0x51, 0x1b);
> -		ds3000_tuner_writereg(state, 0x51, 0x1f);
> -		ds3000_tuner_writereg(state, 0x50, 0x04);
> -		ds3000_tuner_writereg(state, 0x50, 0x00);
> -		msleep(5);
> -
> -		f3db = ((state->dcur.symbol_rate / 1000) << 2) / 5 + 2000;
> -		if ((state->dcur.symbol_rate / 1000) < 5000)
> -			f3db += 3000;
> -		if (f3db < 7000)
> -			f3db = 7000;
> -		if (f3db > 40000)
> -			f3db = 40000;
> -
> -		/* set low-pass filter baseband */
> -		value = ds3000_tuner_readreg(state, 0x26);
> -		mlpf = 0x2e * 207 / ((value << 1) + 151);
> -		mlpf_max = mlpf * 135 / 100;
> -		mlpf_min = mlpf * 78 / 100;
> -		if (mlpf_max > 63)
> -			mlpf_max = 63;
> -
> -		/* rounded to the closest integer */
> -		nlpf = ((mlpf * f3db * 1000) + (2766 * DS3000_XTAL_FREQ / 2))
> -				/ (2766 * DS3000_XTAL_FREQ);
> -		if (nlpf > 23)
> -			nlpf = 23;
> -		if (nlpf < 1)
> -			nlpf = 1;
> -
> -		/* rounded to the closest integer */
> +	ds3000_tuner_writereg(state, 0x60, value);
> +	ds3000_tuner_writereg(state, 0x51, 0x17);
> +	ds3000_tuner_writereg(state, 0x51, 0x1f);
> +	ds3000_tuner_writereg(state, 0x50, 0x08);
> +	ds3000_tuner_writereg(state, 0x50, 0x00);
> +
> +	/* set low-pass filter period */
> +	ds3000_tuner_writereg(state, 0x04, 0x2e);
> +	ds3000_tuner_writereg(state, 0x51, 0x1b);
> +	ds3000_tuner_writereg(state, 0x51, 0x1f);
> +	ds3000_tuner_writereg(state, 0x50, 0x04);
> +	ds3000_tuner_writereg(state, 0x50, 0x00);
> +	msleep(5);
> +
> +	f3db = ((state->dcur.symbol_rate / 1000) << 2) / 5 + 2000;
> +	if ((state->dcur.symbol_rate / 1000) < 5000)
> +		f3db += 3000;
> +	if (f3db < 7000)
> +		f3db = 7000;
> +	if (f3db > 40000)
> +		f3db = 40000;
> +
> +	/* set low-pass filter baseband */
> +	value = ds3000_tuner_readreg(state, 0x26);
> +	mlpf = 0x2e * 207 / ((value << 1) + 151);
> +	mlpf_max = mlpf * 135 / 100;
> +	mlpf_min = mlpf * 78 / 100;
> +	if (mlpf_max > 63)
> +		mlpf_max = 63;
> +
> +	/* rounded to the closest integer */
> +	nlpf = ((mlpf * f3db * 1000) + (2766 * DS3000_XTAL_FREQ / 2))
> +			/ (2766 * DS3000_XTAL_FREQ);
> +	if (nlpf > 23)
> +		nlpf = 23;
> +	if (nlpf < 1)
> +		nlpf = 1;
> +
> +	/* rounded to the closest integer */
> +	mlpf_new = ((DS3000_XTAL_FREQ * nlpf * 2766) +
> +			(1000 * f3db / 2)) / (1000 * f3db);
> +
> +	if (mlpf_new < mlpf_min) {
> +		nlpf++;
>  		mlpf_new = ((DS3000_XTAL_FREQ * nlpf * 2766) +
>  				(1000 * f3db / 2)) / (1000 * f3db);
> +	}
>  
> -		if (mlpf_new < mlpf_min) {
> -			nlpf++;
> -			mlpf_new = ((DS3000_XTAL_FREQ * nlpf * 2766) +
> -					(1000 * f3db / 2)) / (1000 * f3db);
> -		}
> +	if (mlpf_new > mlpf_max)
> +		mlpf_new = mlpf_max;
> +
> +	ds3000_tuner_writereg(state, 0x04, mlpf_new);
> +	ds3000_tuner_writereg(state, 0x06, nlpf);
> +	ds3000_tuner_writereg(state, 0x51, 0x1b);
> +	ds3000_tuner_writereg(state, 0x51, 0x1f);
> +	ds3000_tuner_writereg(state, 0x50, 0x04);
> +	ds3000_tuner_writereg(state, 0x50, 0x00);
> +	msleep(5);
> +
> +	/* unknown */
> +	ds3000_tuner_writereg(state, 0x51, 0x1e);
> +	ds3000_tuner_writereg(state, 0x51, 0x1f);
> +	ds3000_tuner_writereg(state, 0x50, 0x01);
> +	ds3000_tuner_writereg(state, 0x50, 0x00);
> +	msleep(60);
> +
> +	/* ds3000 global reset */
> +	ds3000_writereg(state, 0x07, 0x80);
> +	ds3000_writereg(state, 0x07, 0x00);
> +	/* ds3000 build-in uC reset */
> +	ds3000_writereg(state, 0xb2, 0x01);
> +	/* ds3000 software reset */
> +	ds3000_writereg(state, 0x00, 0x01);
> +
> +	switch (c->delivery_system) {
> +	case SYS_DVBS:
> +		/* initialise the demod in DVB-S mode */
> +		for (i = 0; i < sizeof(ds3000_dvbs_init_tab); i += 2)
> +			ds3000_writereg(state,
> +				ds3000_dvbs_init_tab[i],
> +				ds3000_dvbs_init_tab[i + 1]);
> +		value = ds3000_readreg(state, 0xfe);
> +		value &= 0xc0;
> +		value |= 0x1b;
> +		ds3000_writereg(state, 0xfe, value);
> +		break;
> +	case SYS_DVBS2:
> +		/* initialise the demod in DVB-S2 mode */
> +		for (i = 0; i < sizeof(ds3000_dvbs2_init_tab); i += 2)
> +			ds3000_writereg(state,
> +				ds3000_dvbs2_init_tab[i],
> +				ds3000_dvbs2_init_tab[i + 1]);
> +		ds3000_writereg(state, 0xfe, 0x98);
> +		break;
> +	default:
> +		return 1;
> +	}
>  
> -		if (mlpf_new > mlpf_max)
> -			mlpf_new = mlpf_max;
> -
> -		ds3000_tuner_writereg(state, 0x04, mlpf_new);
> -		ds3000_tuner_writereg(state, 0x06, nlpf);
> -		ds3000_tuner_writereg(state, 0x51, 0x1b);
> -		ds3000_tuner_writereg(state, 0x51, 0x1f);
> -		ds3000_tuner_writereg(state, 0x50, 0x04);
> -		ds3000_tuner_writereg(state, 0x50, 0x00);
> -		msleep(5);
> -
> -		/* unknown */
> -		ds3000_tuner_writereg(state, 0x51, 0x1e);
> -		ds3000_tuner_writereg(state, 0x51, 0x1f);
> -		ds3000_tuner_writereg(state, 0x50, 0x01);
> -		ds3000_tuner_writereg(state, 0x50, 0x00);
> -		msleep(60);
> -
> -		/* ds3000 global reset */
> -		ds3000_writereg(state, 0x07, 0x80);
> -		ds3000_writereg(state, 0x07, 0x00);
> -		/* ds3000 build-in uC reset */
> -		ds3000_writereg(state, 0xb2, 0x01);
> -		/* ds3000 software reset */
> -		ds3000_writereg(state, 0x00, 0x01);
> +	/* enable 27MHz clock output */
> +	ds3000_writereg(state, 0x29, 0x80);
> +	/* enable ac coupling */
> +	ds3000_writereg(state, 0x25, 0x8a);
> +
> +	/* enhance symbol rate performance */
> +	if ((state->dcur.symbol_rate / 1000) <= 5000) {
> +		value = 29777 / (state->dcur.symbol_rate / 1000) + 1;
> +		if (value % 2 != 0)
> +			value++;
> +		ds3000_writereg(state, 0xc3, 0x0d);
> +		ds3000_writereg(state, 0xc8, value);
> +		ds3000_writereg(state, 0xc4, 0x10);
> +		ds3000_writereg(state, 0xc7, 0x0e);
> +	} else if ((state->dcur.symbol_rate / 1000) <= 10000) {
> +		value = 92166 / (state->dcur.symbol_rate / 1000) + 1;
> +		if (value % 2 != 0)
> +			value++;
> +		ds3000_writereg(state, 0xc3, 0x07);
> +		ds3000_writereg(state, 0xc8, value);
> +		ds3000_writereg(state, 0xc4, 0x09);
> +		ds3000_writereg(state, 0xc7, 0x12);
> +	} else if ((state->dcur.symbol_rate / 1000) <= 20000) {
> +		value = 64516 / (state->dcur.symbol_rate / 1000) + 1;
> +		ds3000_writereg(state, 0xc3, value);
> +		ds3000_writereg(state, 0xc8, 0x0e);
> +		ds3000_writereg(state, 0xc4, 0x07);
> +		ds3000_writereg(state, 0xc7, 0x18);
> +	} else {
> +		value = 129032 / (state->dcur.symbol_rate / 1000) + 1;
> +		ds3000_writereg(state, 0xc3, value);
> +		ds3000_writereg(state, 0xc8, 0x0a);
> +		ds3000_writereg(state, 0xc4, 0x05);
> +		ds3000_writereg(state, 0xc7, 0x24);
> +	}
> +
> +	/* normalized symbol rate rounded to the closest integer */
> +	value = (((state->dcur.symbol_rate / 1000) << 16) +
> +			(DS3000_SAMPLE_RATE / 2)) / DS3000_SAMPLE_RATE;
> +	ds3000_writereg(state, 0x61, value & 0x00ff);
> +	ds3000_writereg(state, 0x62, (value & 0xff00) >> 8);
> +
> +	/* co-channel interference cancellation disabled */
> +	ds3000_writereg(state, 0x56, 0x00);
> +
> +	/* equalizer disabled */
> +	ds3000_writereg(state, 0x76, 0x00);
> +
> +	/*ds3000_writereg(state, 0x08, 0x03);
> +	ds3000_writereg(state, 0xfd, 0x22);
> +	ds3000_writereg(state, 0x08, 0x07);
> +	ds3000_writereg(state, 0xfd, 0x42);
> +	ds3000_writereg(state, 0x08, 0x07);*/
>  
> +	if (state->config->ci_mode) {
>  		switch (c->delivery_system) {
>  		case SYS_DVBS:
> -			/* initialise the demod in DVB-S mode */
> -			for (i = 0; i < sizeof(ds3000_dvbs_init_tab); i += 2)
> -				ds3000_writereg(state,
> -					ds3000_dvbs_init_tab[i],
> -					ds3000_dvbs_init_tab[i + 1]);
> -			value = ds3000_readreg(state, 0xfe);
> -			value &= 0xc0;
> -			value |= 0x1b;
> -			ds3000_writereg(state, 0xfe, value);
> -			break;
> +		default:
> +			ds3000_writereg(state, 0xfd, 0x80);
> +		break;
>  		case SYS_DVBS2:
> -			/* initialise the demod in DVB-S2 mode */
> -			for (i = 0; i < sizeof(ds3000_dvbs2_init_tab); i += 2)
> -				ds3000_writereg(state,
> -					ds3000_dvbs2_init_tab[i],
> -					ds3000_dvbs2_init_tab[i + 1]);
> -			ds3000_writereg(state, 0xfe, 0x98);
> +			ds3000_writereg(state, 0xfd, 0x01);
>  			break;
> -		default:
> -			return 1;
>  		}
> +	}
>  
> -		/* enable 27MHz clock output */
> -		ds3000_writereg(state, 0x29, 0x80);
> -		/* enable ac coupling */
> -		ds3000_writereg(state, 0x25, 0x8a);
> -
> -		/* enhance symbol rate performance */
> -		if ((state->dcur.symbol_rate / 1000) <= 5000) {
> -			value = 29777 / (state->dcur.symbol_rate / 1000) + 1;
> -			if (value % 2 != 0)
> -				value++;
> -			ds3000_writereg(state, 0xc3, 0x0d);
> -			ds3000_writereg(state, 0xc8, value);
> -			ds3000_writereg(state, 0xc4, 0x10);
> -			ds3000_writereg(state, 0xc7, 0x0e);
> -		} else if ((state->dcur.symbol_rate / 1000) <= 10000) {
> -			value = 92166 / (state->dcur.symbol_rate / 1000) + 1;
> -			if (value % 2 != 0)
> -				value++;
> -			ds3000_writereg(state, 0xc3, 0x07);
> -			ds3000_writereg(state, 0xc8, value);
> -			ds3000_writereg(state, 0xc4, 0x09);
> -			ds3000_writereg(state, 0xc7, 0x12);
> -		} else if ((state->dcur.symbol_rate / 1000) <= 20000) {
> -			value = 64516 / (state->dcur.symbol_rate / 1000) + 1;
> -			ds3000_writereg(state, 0xc3, value);
> -			ds3000_writereg(state, 0xc8, 0x0e);
> -			ds3000_writereg(state, 0xc4, 0x07);
> -			ds3000_writereg(state, 0xc7, 0x18);
> -		} else {
> -			value = 129032 / (state->dcur.symbol_rate / 1000) + 1;
> -			ds3000_writereg(state, 0xc3, value);
> -			ds3000_writereg(state, 0xc8, 0x0a);
> -			ds3000_writereg(state, 0xc4, 0x05);
> -			ds3000_writereg(state, 0xc7, 0x24);
> -		}
> +	/* ds3000 out of software reset */
> +	ds3000_writereg(state, 0x00, 0x00);
> +	/* start ds3000 build-in uC */
> +	ds3000_writereg(state, 0xb2, 0x00);
>  
> -		/* normalized symbol rate rounded to the closest integer */
> -		value = (((state->dcur.symbol_rate / 1000) << 16) +
> -				(DS3000_SAMPLE_RATE / 2)) / DS3000_SAMPLE_RATE;
> -		ds3000_writereg(state, 0x61, value & 0x00ff);
> -		ds3000_writereg(state, 0x62, (value & 0xff00) >> 8);
> -
> -		/* co-channel interference cancellation disabled */
> -		ds3000_writereg(state, 0x56, 0x00);
> -
> -		/* equalizer disabled */
> -		ds3000_writereg(state, 0x76, 0x00);
> -
> -		/*ds3000_writereg(state, 0x08, 0x03);
> -		ds3000_writereg(state, 0xfd, 0x22);
> -		ds3000_writereg(state, 0x08, 0x07);
> -		ds3000_writereg(state, 0xfd, 0x42);
> -		ds3000_writereg(state, 0x08, 0x07);*/
> -
> -		if (state->config->ci_mode) {
> -			switch (c->delivery_system) {
> -			case SYS_DVBS:
> -			default:
> -				ds3000_writereg(state, 0xfd, 0x80);
> -			break;
> -			case SYS_DVBS2:
> -				ds3000_writereg(state, 0xfd, 0x01);
> -				break;
> -			}
> -		}
> +	/* TODO: calculate and set carrier offset */
>  
> -		/* ds3000 out of software reset */
> -		ds3000_writereg(state, 0x00, 0x00);
> -		/* start ds3000 build-in uC */
> -		ds3000_writereg(state, 0xb2, 0x00);
> -
> -		/* TODO: calculate and set carrier offset */
> -
> -		/* wait before retrying */
> -		for (i = 0; i < 30 ; i++) {
> -			if (ds3000_is_tuned(fe)) {
> -				dprintk("%s: Tuned\n", __func__);
> -				ds3000_dump_registers(fe);
> -				goto tuned;
> -			}
> -			msleep(1);
> +	/* wait before retrying */
> +	for (i = 0; i < 30 ; i++) {
> +		if (ds3000_is_tuned(fe)) {
> +			dprintk("%s: Tuned\n", __func__);
> +			ds3000_dump_registers(fe);
> +			goto tuned;
>  		}
> +		msleep(1);
> +	}
>  
> -		dprintk("%s: Not tuned\n", __func__);
> -		ds3000_dump_registers(fe);
> +	dprintk("%s: Not tuned\n", __func__);
> +	ds3000_dump_registers(fe);
>  
> -	} while (--retune);
>  
>  tuned:
>  	return ret;

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  
Mauro Carvalho Chehab Feb. 24, 2011, 7:11 p.m. UTC | #2
Em 24-02-2011 16:04, Mauro Carvalho Chehab escreveu:
> Hi Igor,
> 
> Em 01-02-2011 20:40, Igor M. Liplianin escreveu:
>> Variable 'retune' does not make sense.
>> Loop is not needed for only one try.
>> Remove unnecessary dprintk's.
>>
>> Signed-off-by: Igor M. Liplianin <liplianin@me.by>
> 
> This patch didn't apply. Please fix and resend.

PS.: I won't try to apply patches 7, 8 and 9, as they are all related to
tune changes. They'll probably fail to apply, and, even if not failing or if
I fix the conflicts, they may be breaking the driver. So, please put them
on your next patch series.

thanks!
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  
Igor M. Liplianin Feb. 24, 2011, 8:25 p.m. UTC | #3
? ????????? ?? 24 ??????? 2011 21:11:13 ????? Mauro Carvalho Chehab ???????:
> Em 24-02-2011 16:04, Mauro Carvalho Chehab escreveu:
> > Hi Igor,
> > 
> > Em 01-02-2011 20:40, Igor M. Liplianin escreveu:
> >> Variable 'retune' does not make sense.
> >> Loop is not needed for only one try.
> >> Remove unnecessary dprintk's.
> >> 
> >> Signed-off-by: Igor M. Liplianin <liplianin@me.by>
> > 
> > This patch didn't apply. Please fix and resend.
> 
> PS.: I won't try to apply patches 7, 8 and 9, as they are all related to
> tune changes. They'll probably fail to apply, and, even if not failing or
> if I fix the conflicts, they may be breaking the driver. So, please put
> them on your next patch series.
> 
> thanks!
> Mauro
Hi Mauro,

Will do tonight.

BTW, Why did you dropp/miss dw2102 patches?
They was sent before ds3000 series.

Thank you in advance.
  
Igor M. Liplianin Feb. 24, 2011, 8:27 p.m. UTC | #4
? ????????? ?? 24 ??????? 2011 22:25:35 ????? Igor M. Liplianin ???????:
> ? ????????? ?? 24 ??????? 2011 21:11:13 ????? Mauro Carvalho Chehab ???????:
> > Em 24-02-2011 16:04, Mauro Carvalho Chehab escreveu:
> > > Hi Igor,
> > > 
> > > Em 01-02-2011 20:40, Igor M. Liplianin escreveu:
> > >> Variable 'retune' does not make sense.
> > >> Loop is not needed for only one try.
> > >> Remove unnecessary dprintk's.
> > >> 
> > >> Signed-off-by: Igor M. Liplianin <liplianin@me.by>
> > > 
> > > This patch didn't apply. Please fix and resend.
> > 
> > PS.: I won't try to apply patches 7, 8 and 9, as they are all related to
> > tune changes. They'll probably fail to apply, and, even if not failing or
> > if I fix the conflicts, they may be breaking the driver. So, please put
> > them on your next patch series.
> > 
> > thanks!
> > Mauro
> 
> Hi Mauro,
> 
> Will do tonight.
> 
> BTW, Why did you dropp/miss dw2102 patches?
> They was sent before ds3000 series.
Do I must resend them?

> 
> Thank you in advance.
  
Mauro Carvalho Chehab Feb. 24, 2011, 11:33 p.m. UTC | #5
Em 24-02-2011 17:25, Igor M. Liplianin escreveu:
> ? ????????? ?? 24 ??????? 2011 21:11:13 ????? Mauro Carvalho Chehab ???????:
>> Em 24-02-2011 16:04, Mauro Carvalho Chehab escreveu:
>>> Hi Igor,
>>>
>>> Em 01-02-2011 20:40, Igor M. Liplianin escreveu:
>>>> Variable 'retune' does not make sense.
>>>> Loop is not needed for only one try.
>>>> Remove unnecessary dprintk's.
>>>>
>>>> Signed-off-by: Igor M. Liplianin <liplianin@me.by>
>>>
>>> This patch didn't apply. Please fix and resend.
>>
>> PS.: I won't try to apply patches 7, 8 and 9, as they are all related to
>> tune changes. They'll probably fail to apply, and, even if not failing or
>> if I fix the conflicts, they may be breaking the driver. So, please put
>> them on your next patch series.
>>
>> thanks!
>> Mauro
> Hi Mauro,
> 
> Will do tonight.

OK.

> BTW, Why did you dropp/miss dw2102 patches?
> They was sent before ds3000 series.

I probably missed, or they are still on my queue. While in general I apply
patches in order, sometimes I reorder them, trying to merge first the more
trivial ones (or the ones that I had already analyzed, like the altera ones). 
Please take a look at Patchwork. If they're there, then I'll probably be 
handling until the weekend. Otherwise, just re-send them to me.

That's said, it is probably a good idea if you could have a git repository
somewhere to send me patches. Git works better when there are lots of
patches, so, works better for driver maintainers.

Thanks,
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  
Mauro Carvalho Chehab Feb. 24, 2011, 11:33 p.m. UTC | #6
Em 24-02-2011 17:25, Igor M. Liplianin escreveu:
> ? ????????? ?? 24 ??????? 2011 21:11:13 ????? Mauro Carvalho Chehab ???????:
>> Em 24-02-2011 16:04, Mauro Carvalho Chehab escreveu:
>>> Hi Igor,
>>>
>>> Em 01-02-2011 20:40, Igor M. Liplianin escreveu:
>>>> Variable 'retune' does not make sense.
>>>> Loop is not needed for only one try.
>>>> Remove unnecessary dprintk's.
>>>>
>>>> Signed-off-by: Igor M. Liplianin <liplianin@me.by>
>>>
>>> This patch didn't apply. Please fix and resend.
>>
>> PS.: I won't try to apply patches 7, 8 and 9, as they are all related to
>> tune changes. They'll probably fail to apply, and, even if not failing or
>> if I fix the conflicts, they may be breaking the driver. So, please put
>> them on your next patch series.
>>
>> thanks!
>> Mauro
> Hi Mauro,
> 
> Will do tonight.

OK.

> BTW, Why did you dropp/miss dw2102 patches?
> They was sent before ds3000 series.

I probably missed, or they are still on my queue. While in general I apply
patches in order, sometimes I reorder them, trying to merge first the more
trivial ones (or the ones that I had already analyzed, like the altera ones). 
Please take a look at Patchwork. If they're there, then I'll probably be 
handling until the weekend. Otherwise, just re-send them to me.

That's said, it is probably a good idea if you could have a git repository
somewhere to send me patches. Git works better when there are lots of
patches, so, works better for driver maintainers. If you want, I may
create you an account at LinuxTV (or you may host it on any other place).

Thanks,
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  
Igor M. Liplianin Feb. 25, 2011, 5:37 p.m. UTC | #7
? ????????? ?? 25 ??????? 2011 01:33:41 ????? Mauro Carvalho Chehab ???????:
> Em 24-02-2011 17:25, Igor M. Liplianin escreveu:
> > ? ????????? ?? 24 ??????? 2011 21:11:13 ????? Mauro Carvalho Chehab ???????:
> >> Em 24-02-2011 16:04, Mauro Carvalho Chehab escreveu:
> >>> Hi Igor,
> >>> 
> >>> Em 01-02-2011 20:40, Igor M. Liplianin escreveu:
> >>>> Variable 'retune' does not make sense.
> >>>> Loop is not needed for only one try.
> >>>> Remove unnecessary dprintk's.
> >>>> 
> >>>> Signed-off-by: Igor M. Liplianin <liplianin@me.by>
> >>> 
> >>> This patch didn't apply. Please fix and resend.
> >> 
> >> PS.: I won't try to apply patches 7, 8 and 9, as they are all related to
> >> tune changes. They'll probably fail to apply, and, even if not failing
> >> or if I fix the conflicts, they may be breaking the driver. So, please
> >> put them on your next patch series.
> >> 
> >> thanks!
> >> Mauro
> > 
> > Hi Mauro,
> > 
> > Will do tonight.
> 
> OK.
> 
> > BTW, Why did you dropp/miss dw2102 patches?
> > They was sent before ds3000 series.
> 
> I probably missed, or they are still on my queue. While in general I apply
> patches in order, sometimes I reorder them, trying to merge first the more
> trivial ones (or the ones that I had already analyzed, like the altera
> ones). Please take a look at Patchwork. If they're there, then I'll
> probably be handling until the weekend. Otherwise, just re-send them to
> me.
Patches you already included are OK, but 5 to 9 needs(and depend) to be applied after dw2102 
series. I can rebase in differend order, but what's a matter?
I will create git tree somwere (probably at assembla), push there and send you pull request.

> 
> That's said, it is probably a good idea if you could have a git repository
> somewhere to send me patches. Git works better when there are lots of
> patches, so, works better for driver maintainers. If you want, I may
> create you an account at LinuxTV (or you may host it on any other place).
I will appreciate you very much if you create it for me, as I have a lot of stuff to commit.

Thank you in advance.
Igor
> 
> Thanks,
> Mauro
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
  

Patch

diff --git a/drivers/media/dvb/frontends/ds3000.c b/drivers/media/dvb/frontends/ds3000.c
index 3373890..7c61936 100644
--- a/drivers/media/dvb/frontends/ds3000.c
+++ b/drivers/media/dvb/frontends/ds3000.c
@@ -1049,7 +1049,7 @@  static int ds3000_tune(struct dvb_frontend *fe,
 	struct ds3000_state *state = fe->demodulator_priv;
 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
 
-	int ret = 0, retune, i;
+	int ret = 0, i;
 	u8 status, mlpf, mlpf_new, mlpf_max, mlpf_min, nlpf;
 	u16 value, ndiv;
 	u32 f3db;
@@ -1072,249 +1072,239 @@  static int ds3000_tune(struct dvb_frontend *fe,
 	/* discard the 'current' tuning parameters and prepare to tune */
 	ds3000_clone_params(fe);
 
-	retune = 1;	/* try 1 times */
-	dprintk("%s:   retune = %d\n", __func__, retune);
-	dprintk("%s:   frequency   = %d\n", __func__, state->dcur.frequency);
-	dprintk("%s:   symbol_rate = %d\n", __func__, state->dcur.symbol_rate);
-	dprintk("%s:   FEC	 = %d \n", __func__,
-		state->dcur.fec);
-	dprintk("%s:   Inversion   = %d\n", __func__, state->dcur.inversion);
-
-	do {
-		/* Reset status register */
-		status = 0;
-		/* Tune */
-		/* unknown */
-		ds3000_tuner_writereg(state, 0x07, 0x02);
-		ds3000_tuner_writereg(state, 0x10, 0x00);
-		ds3000_tuner_writereg(state, 0x60, 0x79);
-		ds3000_tuner_writereg(state, 0x08, 0x01);
-		ds3000_tuner_writereg(state, 0x00, 0x01);
-		/* calculate and set freq divider */
-		if (state->dcur.frequency < 1146000) {
-			ds3000_tuner_writereg(state, 0x10, 0x11);
-			ndiv = ((state->dcur.frequency * (6 + 8) * 4) +
-					(DS3000_XTAL_FREQ / 2)) /
-					DS3000_XTAL_FREQ - 1024;
-		} else {
-			ds3000_tuner_writereg(state, 0x10, 0x01);
-			ndiv = ((state->dcur.frequency * (6 + 8) * 2) +
-					(DS3000_XTAL_FREQ / 2)) /
-					DS3000_XTAL_FREQ - 1024;
-		}
+	/* Reset status register */
+	status = 0;
+	/* Tune */
+	/* unknown */
+	ds3000_tuner_writereg(state, 0x07, 0x02);
+	ds3000_tuner_writereg(state, 0x10, 0x00);
+	ds3000_tuner_writereg(state, 0x60, 0x79);
+	ds3000_tuner_writereg(state, 0x08, 0x01);
+	ds3000_tuner_writereg(state, 0x00, 0x01);
+	/* calculate and set freq divider */
+	if (state->dcur.frequency < 1146000) {
+		ds3000_tuner_writereg(state, 0x10, 0x11);
+		ndiv = ((state->dcur.frequency * (6 + 8) * 4) +
+				(DS3000_XTAL_FREQ / 2)) /
+				DS3000_XTAL_FREQ - 1024;
+	} else {
+		ds3000_tuner_writereg(state, 0x10, 0x01);
+		ndiv = ((state->dcur.frequency * (6 + 8) * 2) +
+				(DS3000_XTAL_FREQ / 2)) /
+				DS3000_XTAL_FREQ - 1024;
+	}
 
-		ds3000_tuner_writereg(state, 0x01, (ndiv & 0x0f00) >> 8);
-		ds3000_tuner_writereg(state, 0x02, ndiv & 0x00ff);
-
-		/* set pll */
-		ds3000_tuner_writereg(state, 0x03, 0x06);
-		ds3000_tuner_writereg(state, 0x51, 0x0f);
-		ds3000_tuner_writereg(state, 0x51, 0x1f);
-		ds3000_tuner_writereg(state, 0x50, 0x10);
-		ds3000_tuner_writereg(state, 0x50, 0x00);
-		msleep(5);
-
-		/* unknown */
-		ds3000_tuner_writereg(state, 0x51, 0x17);
-		ds3000_tuner_writereg(state, 0x51, 0x1f);
-		ds3000_tuner_writereg(state, 0x50, 0x08);
-		ds3000_tuner_writereg(state, 0x50, 0x00);
-		msleep(5);
-
-		value = ds3000_tuner_readreg(state, 0x3d);
-		value &= 0x0f;
-		if ((value > 4) && (value < 15)) {
-			value -= 3;
-			if (value < 4)
-				value = 4;
-			value = ((value << 3) | 0x01) & 0x79;
-		}
+	ds3000_tuner_writereg(state, 0x01, (ndiv & 0x0f00) >> 8);
+	ds3000_tuner_writereg(state, 0x02, ndiv & 0x00ff);
+
+	/* set pll */
+	ds3000_tuner_writereg(state, 0x03, 0x06);
+	ds3000_tuner_writereg(state, 0x51, 0x0f);
+	ds3000_tuner_writereg(state, 0x51, 0x1f);
+	ds3000_tuner_writereg(state, 0x50, 0x10);
+	ds3000_tuner_writereg(state, 0x50, 0x00);
+	msleep(5);
+
+	/* unknown */
+	ds3000_tuner_writereg(state, 0x51, 0x17);
+	ds3000_tuner_writereg(state, 0x51, 0x1f);
+	ds3000_tuner_writereg(state, 0x50, 0x08);
+	ds3000_tuner_writereg(state, 0x50, 0x00);
+	msleep(5);
+
+	value = ds3000_tuner_readreg(state, 0x3d);
+	value &= 0x0f;
+	if ((value > 4) && (value < 15)) {
+		value -= 3;
+		if (value < 4)
+			value = 4;
+		value = ((value << 3) | 0x01) & 0x79;
+	}
 
-		ds3000_tuner_writereg(state, 0x60, value);
-		ds3000_tuner_writereg(state, 0x51, 0x17);
-		ds3000_tuner_writereg(state, 0x51, 0x1f);
-		ds3000_tuner_writereg(state, 0x50, 0x08);
-		ds3000_tuner_writereg(state, 0x50, 0x00);
-
-		/* set low-pass filter period */
-		ds3000_tuner_writereg(state, 0x04, 0x2e);
-		ds3000_tuner_writereg(state, 0x51, 0x1b);
-		ds3000_tuner_writereg(state, 0x51, 0x1f);
-		ds3000_tuner_writereg(state, 0x50, 0x04);
-		ds3000_tuner_writereg(state, 0x50, 0x00);
-		msleep(5);
-
-		f3db = ((state->dcur.symbol_rate / 1000) << 2) / 5 + 2000;
-		if ((state->dcur.symbol_rate / 1000) < 5000)
-			f3db += 3000;
-		if (f3db < 7000)
-			f3db = 7000;
-		if (f3db > 40000)
-			f3db = 40000;
-
-		/* set low-pass filter baseband */
-		value = ds3000_tuner_readreg(state, 0x26);
-		mlpf = 0x2e * 207 / ((value << 1) + 151);
-		mlpf_max = mlpf * 135 / 100;
-		mlpf_min = mlpf * 78 / 100;
-		if (mlpf_max > 63)
-			mlpf_max = 63;
-
-		/* rounded to the closest integer */
-		nlpf = ((mlpf * f3db * 1000) + (2766 * DS3000_XTAL_FREQ / 2))
-				/ (2766 * DS3000_XTAL_FREQ);
-		if (nlpf > 23)
-			nlpf = 23;
-		if (nlpf < 1)
-			nlpf = 1;
-
-		/* rounded to the closest integer */
+	ds3000_tuner_writereg(state, 0x60, value);
+	ds3000_tuner_writereg(state, 0x51, 0x17);
+	ds3000_tuner_writereg(state, 0x51, 0x1f);
+	ds3000_tuner_writereg(state, 0x50, 0x08);
+	ds3000_tuner_writereg(state, 0x50, 0x00);
+
+	/* set low-pass filter period */
+	ds3000_tuner_writereg(state, 0x04, 0x2e);
+	ds3000_tuner_writereg(state, 0x51, 0x1b);
+	ds3000_tuner_writereg(state, 0x51, 0x1f);
+	ds3000_tuner_writereg(state, 0x50, 0x04);
+	ds3000_tuner_writereg(state, 0x50, 0x00);
+	msleep(5);
+
+	f3db = ((state->dcur.symbol_rate / 1000) << 2) / 5 + 2000;
+	if ((state->dcur.symbol_rate / 1000) < 5000)
+		f3db += 3000;
+	if (f3db < 7000)
+		f3db = 7000;
+	if (f3db > 40000)
+		f3db = 40000;
+
+	/* set low-pass filter baseband */
+	value = ds3000_tuner_readreg(state, 0x26);
+	mlpf = 0x2e * 207 / ((value << 1) + 151);
+	mlpf_max = mlpf * 135 / 100;
+	mlpf_min = mlpf * 78 / 100;
+	if (mlpf_max > 63)
+		mlpf_max = 63;
+
+	/* rounded to the closest integer */
+	nlpf = ((mlpf * f3db * 1000) + (2766 * DS3000_XTAL_FREQ / 2))
+			/ (2766 * DS3000_XTAL_FREQ);
+	if (nlpf > 23)
+		nlpf = 23;
+	if (nlpf < 1)
+		nlpf = 1;
+
+	/* rounded to the closest integer */
+	mlpf_new = ((DS3000_XTAL_FREQ * nlpf * 2766) +
+			(1000 * f3db / 2)) / (1000 * f3db);
+
+	if (mlpf_new < mlpf_min) {
+		nlpf++;
 		mlpf_new = ((DS3000_XTAL_FREQ * nlpf * 2766) +
 				(1000 * f3db / 2)) / (1000 * f3db);
+	}
 
-		if (mlpf_new < mlpf_min) {
-			nlpf++;
-			mlpf_new = ((DS3000_XTAL_FREQ * nlpf * 2766) +
-					(1000 * f3db / 2)) / (1000 * f3db);
-		}
+	if (mlpf_new > mlpf_max)
+		mlpf_new = mlpf_max;
+
+	ds3000_tuner_writereg(state, 0x04, mlpf_new);
+	ds3000_tuner_writereg(state, 0x06, nlpf);
+	ds3000_tuner_writereg(state, 0x51, 0x1b);
+	ds3000_tuner_writereg(state, 0x51, 0x1f);
+	ds3000_tuner_writereg(state, 0x50, 0x04);
+	ds3000_tuner_writereg(state, 0x50, 0x00);
+	msleep(5);
+
+	/* unknown */
+	ds3000_tuner_writereg(state, 0x51, 0x1e);
+	ds3000_tuner_writereg(state, 0x51, 0x1f);
+	ds3000_tuner_writereg(state, 0x50, 0x01);
+	ds3000_tuner_writereg(state, 0x50, 0x00);
+	msleep(60);
+
+	/* ds3000 global reset */
+	ds3000_writereg(state, 0x07, 0x80);
+	ds3000_writereg(state, 0x07, 0x00);
+	/* ds3000 build-in uC reset */
+	ds3000_writereg(state, 0xb2, 0x01);
+	/* ds3000 software reset */
+	ds3000_writereg(state, 0x00, 0x01);
+
+	switch (c->delivery_system) {
+	case SYS_DVBS:
+		/* initialise the demod in DVB-S mode */
+		for (i = 0; i < sizeof(ds3000_dvbs_init_tab); i += 2)
+			ds3000_writereg(state,
+				ds3000_dvbs_init_tab[i],
+				ds3000_dvbs_init_tab[i + 1]);
+		value = ds3000_readreg(state, 0xfe);
+		value &= 0xc0;
+		value |= 0x1b;
+		ds3000_writereg(state, 0xfe, value);
+		break;
+	case SYS_DVBS2:
+		/* initialise the demod in DVB-S2 mode */
+		for (i = 0; i < sizeof(ds3000_dvbs2_init_tab); i += 2)
+			ds3000_writereg(state,
+				ds3000_dvbs2_init_tab[i],
+				ds3000_dvbs2_init_tab[i + 1]);
+		ds3000_writereg(state, 0xfe, 0x98);
+		break;
+	default:
+		return 1;
+	}
 
-		if (mlpf_new > mlpf_max)
-			mlpf_new = mlpf_max;
-
-		ds3000_tuner_writereg(state, 0x04, mlpf_new);
-		ds3000_tuner_writereg(state, 0x06, nlpf);
-		ds3000_tuner_writereg(state, 0x51, 0x1b);
-		ds3000_tuner_writereg(state, 0x51, 0x1f);
-		ds3000_tuner_writereg(state, 0x50, 0x04);
-		ds3000_tuner_writereg(state, 0x50, 0x00);
-		msleep(5);
-
-		/* unknown */
-		ds3000_tuner_writereg(state, 0x51, 0x1e);
-		ds3000_tuner_writereg(state, 0x51, 0x1f);
-		ds3000_tuner_writereg(state, 0x50, 0x01);
-		ds3000_tuner_writereg(state, 0x50, 0x00);
-		msleep(60);
-
-		/* ds3000 global reset */
-		ds3000_writereg(state, 0x07, 0x80);
-		ds3000_writereg(state, 0x07, 0x00);
-		/* ds3000 build-in uC reset */
-		ds3000_writereg(state, 0xb2, 0x01);
-		/* ds3000 software reset */
-		ds3000_writereg(state, 0x00, 0x01);
+	/* enable 27MHz clock output */
+	ds3000_writereg(state, 0x29, 0x80);
+	/* enable ac coupling */
+	ds3000_writereg(state, 0x25, 0x8a);
+
+	/* enhance symbol rate performance */
+	if ((state->dcur.symbol_rate / 1000) <= 5000) {
+		value = 29777 / (state->dcur.symbol_rate / 1000) + 1;
+		if (value % 2 != 0)
+			value++;
+		ds3000_writereg(state, 0xc3, 0x0d);
+		ds3000_writereg(state, 0xc8, value);
+		ds3000_writereg(state, 0xc4, 0x10);
+		ds3000_writereg(state, 0xc7, 0x0e);
+	} else if ((state->dcur.symbol_rate / 1000) <= 10000) {
+		value = 92166 / (state->dcur.symbol_rate / 1000) + 1;
+		if (value % 2 != 0)
+			value++;
+		ds3000_writereg(state, 0xc3, 0x07);
+		ds3000_writereg(state, 0xc8, value);
+		ds3000_writereg(state, 0xc4, 0x09);
+		ds3000_writereg(state, 0xc7, 0x12);
+	} else if ((state->dcur.symbol_rate / 1000) <= 20000) {
+		value = 64516 / (state->dcur.symbol_rate / 1000) + 1;
+		ds3000_writereg(state, 0xc3, value);
+		ds3000_writereg(state, 0xc8, 0x0e);
+		ds3000_writereg(state, 0xc4, 0x07);
+		ds3000_writereg(state, 0xc7, 0x18);
+	} else {
+		value = 129032 / (state->dcur.symbol_rate / 1000) + 1;
+		ds3000_writereg(state, 0xc3, value);
+		ds3000_writereg(state, 0xc8, 0x0a);
+		ds3000_writereg(state, 0xc4, 0x05);
+		ds3000_writereg(state, 0xc7, 0x24);
+	}
+
+	/* normalized symbol rate rounded to the closest integer */
+	value = (((state->dcur.symbol_rate / 1000) << 16) +
+			(DS3000_SAMPLE_RATE / 2)) / DS3000_SAMPLE_RATE;
+	ds3000_writereg(state, 0x61, value & 0x00ff);
+	ds3000_writereg(state, 0x62, (value & 0xff00) >> 8);
+
+	/* co-channel interference cancellation disabled */
+	ds3000_writereg(state, 0x56, 0x00);
+
+	/* equalizer disabled */
+	ds3000_writereg(state, 0x76, 0x00);
+
+	/*ds3000_writereg(state, 0x08, 0x03);
+	ds3000_writereg(state, 0xfd, 0x22);
+	ds3000_writereg(state, 0x08, 0x07);
+	ds3000_writereg(state, 0xfd, 0x42);
+	ds3000_writereg(state, 0x08, 0x07);*/
 
+	if (state->config->ci_mode) {
 		switch (c->delivery_system) {
 		case SYS_DVBS:
-			/* initialise the demod in DVB-S mode */
-			for (i = 0; i < sizeof(ds3000_dvbs_init_tab); i += 2)
-				ds3000_writereg(state,
-					ds3000_dvbs_init_tab[i],
-					ds3000_dvbs_init_tab[i + 1]);
-			value = ds3000_readreg(state, 0xfe);
-			value &= 0xc0;
-			value |= 0x1b;
-			ds3000_writereg(state, 0xfe, value);
-			break;
+		default:
+			ds3000_writereg(state, 0xfd, 0x80);
+		break;
 		case SYS_DVBS2:
-			/* initialise the demod in DVB-S2 mode */
-			for (i = 0; i < sizeof(ds3000_dvbs2_init_tab); i += 2)
-				ds3000_writereg(state,
-					ds3000_dvbs2_init_tab[i],
-					ds3000_dvbs2_init_tab[i + 1]);
-			ds3000_writereg(state, 0xfe, 0x98);
+			ds3000_writereg(state, 0xfd, 0x01);
 			break;
-		default:
-			return 1;
 		}
+	}
 
-		/* enable 27MHz clock output */
-		ds3000_writereg(state, 0x29, 0x80);
-		/* enable ac coupling */
-		ds3000_writereg(state, 0x25, 0x8a);
-
-		/* enhance symbol rate performance */
-		if ((state->dcur.symbol_rate / 1000) <= 5000) {
-			value = 29777 / (state->dcur.symbol_rate / 1000) + 1;
-			if (value % 2 != 0)
-				value++;
-			ds3000_writereg(state, 0xc3, 0x0d);
-			ds3000_writereg(state, 0xc8, value);
-			ds3000_writereg(state, 0xc4, 0x10);
-			ds3000_writereg(state, 0xc7, 0x0e);
-		} else if ((state->dcur.symbol_rate / 1000) <= 10000) {
-			value = 92166 / (state->dcur.symbol_rate / 1000) + 1;
-			if (value % 2 != 0)
-				value++;
-			ds3000_writereg(state, 0xc3, 0x07);
-			ds3000_writereg(state, 0xc8, value);
-			ds3000_writereg(state, 0xc4, 0x09);
-			ds3000_writereg(state, 0xc7, 0x12);
-		} else if ((state->dcur.symbol_rate / 1000) <= 20000) {
-			value = 64516 / (state->dcur.symbol_rate / 1000) + 1;
-			ds3000_writereg(state, 0xc3, value);
-			ds3000_writereg(state, 0xc8, 0x0e);
-			ds3000_writereg(state, 0xc4, 0x07);
-			ds3000_writereg(state, 0xc7, 0x18);
-		} else {
-			value = 129032 / (state->dcur.symbol_rate / 1000) + 1;
-			ds3000_writereg(state, 0xc3, value);
-			ds3000_writereg(state, 0xc8, 0x0a);
-			ds3000_writereg(state, 0xc4, 0x05);
-			ds3000_writereg(state, 0xc7, 0x24);
-		}
+	/* ds3000 out of software reset */
+	ds3000_writereg(state, 0x00, 0x00);
+	/* start ds3000 build-in uC */
+	ds3000_writereg(state, 0xb2, 0x00);
 
-		/* normalized symbol rate rounded to the closest integer */
-		value = (((state->dcur.symbol_rate / 1000) << 16) +
-				(DS3000_SAMPLE_RATE / 2)) / DS3000_SAMPLE_RATE;
-		ds3000_writereg(state, 0x61, value & 0x00ff);
-		ds3000_writereg(state, 0x62, (value & 0xff00) >> 8);
-
-		/* co-channel interference cancellation disabled */
-		ds3000_writereg(state, 0x56, 0x00);
-
-		/* equalizer disabled */
-		ds3000_writereg(state, 0x76, 0x00);
-
-		/*ds3000_writereg(state, 0x08, 0x03);
-		ds3000_writereg(state, 0xfd, 0x22);
-		ds3000_writereg(state, 0x08, 0x07);
-		ds3000_writereg(state, 0xfd, 0x42);
-		ds3000_writereg(state, 0x08, 0x07);*/
-
-		if (state->config->ci_mode) {
-			switch (c->delivery_system) {
-			case SYS_DVBS:
-			default:
-				ds3000_writereg(state, 0xfd, 0x80);
-			break;
-			case SYS_DVBS2:
-				ds3000_writereg(state, 0xfd, 0x01);
-				break;
-			}
-		}
+	/* TODO: calculate and set carrier offset */
 
-		/* ds3000 out of software reset */
-		ds3000_writereg(state, 0x00, 0x00);
-		/* start ds3000 build-in uC */
-		ds3000_writereg(state, 0xb2, 0x00);
-
-		/* TODO: calculate and set carrier offset */
-
-		/* wait before retrying */
-		for (i = 0; i < 30 ; i++) {
-			if (ds3000_is_tuned(fe)) {
-				dprintk("%s: Tuned\n", __func__);
-				ds3000_dump_registers(fe);
-				goto tuned;
-			}
-			msleep(1);
+	/* wait before retrying */
+	for (i = 0; i < 30 ; i++) {
+		if (ds3000_is_tuned(fe)) {
+			dprintk("%s: Tuned\n", __func__);
+			ds3000_dump_registers(fe);
+			goto tuned;
 		}
+		msleep(1);
+	}
 
-		dprintk("%s: Not tuned\n", __func__);
-		ds3000_dump_registers(fe);
+	dprintk("%s: Not tuned\n", __func__);
+	ds3000_dump_registers(fe);
 
-	} while (--retune);
 
 tuned:
 	return ret;