Commit d8b5a8e4 authored by Oliver Endriss's avatar Oliver Endriss Committed by Mauro Carvalho Chehab

V4L/DVB (13988): [STV090x] Configuration parameters adc1_range, adc2_range, tuner_bbgain

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: default avatarOliver Endriss <o.endriss@gmx.de>
Signed-off-by: default avatarManu Abraham <abraham.manu@gmail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 41894b97
...@@ -3237,7 +3237,10 @@ static enum stv090x_signal_state stv090x_algo(struct stv090x_state *state) ...@@ -3237,7 +3237,10 @@ static enum stv090x_signal_state stv090x_algo(struct stv090x_state *state)
goto err; goto err;
if (state->config->tuner_set_bbgain) { 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; goto err_gateoff;
} }
...@@ -4446,6 +4449,20 @@ static int stv090x_setup(struct dvb_frontend *fe) ...@@ -4446,6 +4449,20 @@ static int stv090x_setup(struct dvb_frontend *fe)
state->internal->dev_ver); 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) if (stv090x_write_reg(state, STV090x_TSTRES0, 0x80) < 0)
goto err; goto err;
if (stv090x_write_reg(state, STV090x_TSTRES0, 0x00) < 0) if (stv090x_write_reg(state, STV090x_TSTRES0, 0x00) < 0)
......
...@@ -60,6 +60,11 @@ enum stv090x_i2crpt { ...@@ -60,6 +60,11 @@ enum stv090x_i2crpt {
STV090x_RPTLEVEL_2 = 7, STV090x_RPTLEVEL_2 = 7,
}; };
enum stv090x_adc_range {
STV090x_ADC_2Vpp = 0,
STV090x_ADC_1Vpp = 1
};
struct stv090x_config { struct stv090x_config {
enum stv090x_device device; enum stv090x_device device;
enum stv090x_mode demod_mode; enum stv090x_mode demod_mode;
...@@ -75,6 +80,10 @@ struct stv090x_config { ...@@ -75,6 +80,10 @@ struct stv090x_config {
enum stv090x_i2crpt repeater_level; 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; bool diseqc_envelope_mode;
int (*tuner_init) (struct dvb_frontend *fe); int (*tuner_init) (struct dvb_frontend *fe);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment