]> Pileus Git - ~andy/linux/commitdiff
V4L/DVB (13988): [STV090x] Configuration parameters adc1_range, adc2_range, tuner_bbgain
authorOliver Endriss <o.endriss@gmx.de>
Sun, 10 Jan 2010 18:40:28 +0000 (15:40 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 26 Feb 2010 18:10:38 +0000 (15:10 -0300)
Add parameters adc1_range, adc2_range and tuner_bbgain to the config struct.
Defaults: adc1_range = adc2_range = 2Vpp, tuner_bbgain = 10db

Signed-off-by: Oliver Endriss <o.endriss@gmx.de>
Signed-off-by: Manu Abraham <abraham.manu@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/frontends/stv090x.c
drivers/media/dvb/frontends/stv090x.h

index a5bae404701cba9bc35f3c507210d9c88434c093..e1d4647b1a9942c05fcb96606b5a2c53db60d3ff 100644 (file)
@@ -3237,7 +3237,10 @@ static enum stv090x_signal_state stv090x_algo(struct stv090x_state *state)
                goto err;
 
        if (state->config->tuner_set_bbgain) {
-               if (state->config->tuner_set_bbgain(fe, 10) < 0) /* 10dB */
+               reg = state->config->tuner_bbgain;
+               if (reg == 0)
+                       reg = 10; /* default: 10dB */
+               if (state->config->tuner_set_bbgain(fe, reg) < 0)
                        goto err_gateoff;
        }
 
@@ -4446,6 +4449,20 @@ static int stv090x_setup(struct dvb_frontend *fe)
                        state->internal->dev_ver);
        }
 
+       /* ADC1 range */
+       reg = stv090x_read_reg(state, STV090x_TSTTNR1);
+       STV090x_SETFIELD(reg, ADC1_INMODE_FIELD,
+               (config->adc1_range == STV090x_ADC_1Vpp) ? 0 : 1);
+       if (stv090x_write_reg(state, STV090x_TSTTNR1, reg) < 0)
+               goto err;
+
+       /* ADC2 range */
+       reg = stv090x_read_reg(state, STV090x_TSTTNR3);
+       STV090x_SETFIELD(reg, ADC2_INMODE_FIELD,
+               (config->adc2_range == STV090x_ADC_1Vpp) ? 0 : 1);
+       if (stv090x_write_reg(state, STV090x_TSTTNR3, reg) < 0)
+               goto err;
+
        if (stv090x_write_reg(state, STV090x_TSTRES0, 0x80) < 0)
                goto err;
        if (stv090x_write_reg(state, STV090x_TSTRES0, 0x00) < 0)
index 96e3dc758e0820aeea0b6f2c7c39507ac0ad75d4..30f01a6902ac118b4b0ec0d7fb83b0d5a411dd73 100644 (file)
@@ -60,6 +60,11 @@ enum stv090x_i2crpt {
        STV090x_RPTLEVEL_2      = 7,
 };
 
+enum stv090x_adc_range {
+       STV090x_ADC_2Vpp        = 0,
+       STV090x_ADC_1Vpp        = 1
+};
+
 struct stv090x_config {
        enum stv090x_device     device;
        enum stv090x_mode       demod_mode;
@@ -75,6 +80,10 @@ struct stv090x_config {
 
        enum stv090x_i2crpt     repeater_level;
 
+       u8                      tuner_bbgain; /* default: 10db */
+       enum stv090x_adc_range  adc1_range; /* default: 2Vpp */
+       enum stv090x_adc_range  adc2_range; /* default: 2Vpp */
+
        bool diseqc_envelope_mode;
 
        int (*tuner_init) (struct dvb_frontend *fe);