[5/9,v2] ds3000: clean up in tune procedure
Commit Message
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
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
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
? ????????? ?? 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.
? ????????? ?? 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.
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
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
? ????????? ?? 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
@@ -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;