[media] ds3000: remove unnecessary dnxt, dcur structures
All necessary parameters already stored in frontend cache. Signed-off-by: Igor M. Liplianin <liplianin@me.by> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
18a73f36a2
commit
cb8f74da10
@@ -229,31 +229,11 @@ static u8 ds3000_dvbs2_init_tab[] = {
|
|||||||
0xb8, 0x00,
|
0xb8, 0x00,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* DS3000 doesn't need some parameters as input and auto-detects them */
|
|
||||||
/* save input from the application of those parameters */
|
|
||||||
struct ds3000_tuning {
|
|
||||||
u32 frequency;
|
|
||||||
u32 symbol_rate;
|
|
||||||
fe_spectral_inversion_t inversion;
|
|
||||||
enum fe_code_rate fec;
|
|
||||||
|
|
||||||
/* input values */
|
|
||||||
u8 inversion_val;
|
|
||||||
fe_modulation_t delivery;
|
|
||||||
u8 rolloff;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ds3000_state {
|
struct ds3000_state {
|
||||||
struct i2c_adapter *i2c;
|
struct i2c_adapter *i2c;
|
||||||
const struct ds3000_config *config;
|
const struct ds3000_config *config;
|
||||||
|
|
||||||
struct dvb_frontend frontend;
|
struct dvb_frontend frontend;
|
||||||
|
|
||||||
struct ds3000_tuning dcur;
|
|
||||||
struct ds3000_tuning dnxt;
|
|
||||||
|
|
||||||
u8 skip_fw_load;
|
u8 skip_fw_load;
|
||||||
|
|
||||||
/* previous uncorrected block counter for DVB-S2 */
|
/* previous uncorrected block counter for DVB-S2 */
|
||||||
u16 prevUCBS2;
|
u16 prevUCBS2;
|
||||||
};
|
};
|
||||||
@@ -401,45 +381,6 @@ static int ds3000_tuner_readreg(struct ds3000_state *state, u8 reg)
|
|||||||
return b1[0];
|
return b1[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ds3000_set_inversion(struct ds3000_state *state,
|
|
||||||
fe_spectral_inversion_t inversion)
|
|
||||||
{
|
|
||||||
dprintk("%s(%d)\n", __func__, inversion);
|
|
||||||
|
|
||||||
switch (inversion) {
|
|
||||||
case INVERSION_OFF:
|
|
||||||
case INVERSION_ON:
|
|
||||||
case INVERSION_AUTO:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
state->dnxt.inversion = inversion;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int ds3000_set_symbolrate(struct ds3000_state *state, u32 rate)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
dprintk("%s()\n", __func__);
|
|
||||||
|
|
||||||
dprintk("%s() symbol_rate = %d\n", __func__, state->dnxt.symbol_rate);
|
|
||||||
|
|
||||||
/* check if symbol rate is within limits */
|
|
||||||
if ((state->dnxt.symbol_rate >
|
|
||||||
state->frontend.ops.info.symbol_rate_max) ||
|
|
||||||
(state->dnxt.symbol_rate <
|
|
||||||
state->frontend.ops.info.symbol_rate_min))
|
|
||||||
ret = -EOPNOTSUPP;
|
|
||||||
|
|
||||||
state->dnxt.symbol_rate = rate;
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int ds3000_load_firmware(struct dvb_frontend *fe,
|
static int ds3000_load_firmware(struct dvb_frontend *fe,
|
||||||
const struct firmware *fw);
|
const struct firmware *fw);
|
||||||
|
|
||||||
@@ -790,13 +731,6 @@ static int ds3000_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Overwrite the current tuning params, we are about to tune */
|
|
||||||
static void ds3000_clone_params(struct dvb_frontend *fe)
|
|
||||||
{
|
|
||||||
struct ds3000_state *state = fe->demodulator_priv;
|
|
||||||
memcpy(&state->dcur, &state->dnxt, sizeof(state->dcur));
|
|
||||||
}
|
|
||||||
|
|
||||||
static int ds3000_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
|
static int ds3000_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
|
||||||
{
|
{
|
||||||
struct ds3000_state *state = fe->demodulator_priv;
|
struct ds3000_state *state = fe->demodulator_priv;
|
||||||
@@ -1027,22 +961,6 @@ static int ds3000_tune(struct dvb_frontend *fe,
|
|||||||
|
|
||||||
dprintk("%s() ", __func__);
|
dprintk("%s() ", __func__);
|
||||||
|
|
||||||
state->dnxt.delivery = c->modulation;
|
|
||||||
state->dnxt.frequency = c->frequency;
|
|
||||||
state->dnxt.rolloff = 2; /* fixme */
|
|
||||||
state->dnxt.fec = c->fec_inner;
|
|
||||||
|
|
||||||
ret = ds3000_set_inversion(state, p->inversion);
|
|
||||||
if (ret != 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
ret = ds3000_set_symbolrate(state, c->symbol_rate);
|
|
||||||
if (ret != 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
/* discard the 'current' tuning parameters and prepare to tune */
|
|
||||||
ds3000_clone_params(fe);
|
|
||||||
|
|
||||||
/* Reset status register */
|
/* Reset status register */
|
||||||
status = 0;
|
status = 0;
|
||||||
/* Tune */
|
/* Tune */
|
||||||
@@ -1053,14 +971,14 @@ static int ds3000_tune(struct dvb_frontend *fe,
|
|||||||
ds3000_tuner_writereg(state, 0x08, 0x01);
|
ds3000_tuner_writereg(state, 0x08, 0x01);
|
||||||
ds3000_tuner_writereg(state, 0x00, 0x01);
|
ds3000_tuner_writereg(state, 0x00, 0x01);
|
||||||
/* calculate and set freq divider */
|
/* calculate and set freq divider */
|
||||||
if (state->dcur.frequency < 1146000) {
|
if (p->frequency < 1146000) {
|
||||||
ds3000_tuner_writereg(state, 0x10, 0x11);
|
ds3000_tuner_writereg(state, 0x10, 0x11);
|
||||||
ndiv = ((state->dcur.frequency * (6 + 8) * 4) +
|
ndiv = ((p->frequency * (6 + 8) * 4) +
|
||||||
(DS3000_XTAL_FREQ / 2)) /
|
(DS3000_XTAL_FREQ / 2)) /
|
||||||
DS3000_XTAL_FREQ - 1024;
|
DS3000_XTAL_FREQ - 1024;
|
||||||
} else {
|
} else {
|
||||||
ds3000_tuner_writereg(state, 0x10, 0x01);
|
ds3000_tuner_writereg(state, 0x10, 0x01);
|
||||||
ndiv = ((state->dcur.frequency * (6 + 8) * 2) +
|
ndiv = ((p->frequency * (6 + 8) * 2) +
|
||||||
(DS3000_XTAL_FREQ / 2)) /
|
(DS3000_XTAL_FREQ / 2)) /
|
||||||
DS3000_XTAL_FREQ - 1024;
|
DS3000_XTAL_FREQ - 1024;
|
||||||
}
|
}
|
||||||
@@ -1106,8 +1024,8 @@ static int ds3000_tune(struct dvb_frontend *fe,
|
|||||||
ds3000_tuner_writereg(state, 0x50, 0x00);
|
ds3000_tuner_writereg(state, 0x50, 0x00);
|
||||||
msleep(5);
|
msleep(5);
|
||||||
|
|
||||||
f3db = ((state->dcur.symbol_rate / 1000) << 2) / 5 + 2000;
|
f3db = ((c->symbol_rate / 1000) << 2) / 5 + 2000;
|
||||||
if ((state->dcur.symbol_rate / 1000) < 5000)
|
if ((c->symbol_rate / 1000) < 5000)
|
||||||
f3db += 3000;
|
f3db += 3000;
|
||||||
if (f3db < 7000)
|
if (f3db < 7000)
|
||||||
f3db = 7000;
|
f3db = 7000;
|
||||||
@@ -1196,30 +1114,30 @@ static int ds3000_tune(struct dvb_frontend *fe,
|
|||||||
ds3000_writereg(state, 0x25, 0x8a);
|
ds3000_writereg(state, 0x25, 0x8a);
|
||||||
|
|
||||||
/* enhance symbol rate performance */
|
/* enhance symbol rate performance */
|
||||||
if ((state->dcur.symbol_rate / 1000) <= 5000) {
|
if ((c->symbol_rate / 1000) <= 5000) {
|
||||||
value = 29777 / (state->dcur.symbol_rate / 1000) + 1;
|
value = 29777 / (c->symbol_rate / 1000) + 1;
|
||||||
if (value % 2 != 0)
|
if (value % 2 != 0)
|
||||||
value++;
|
value++;
|
||||||
ds3000_writereg(state, 0xc3, 0x0d);
|
ds3000_writereg(state, 0xc3, 0x0d);
|
||||||
ds3000_writereg(state, 0xc8, value);
|
ds3000_writereg(state, 0xc8, value);
|
||||||
ds3000_writereg(state, 0xc4, 0x10);
|
ds3000_writereg(state, 0xc4, 0x10);
|
||||||
ds3000_writereg(state, 0xc7, 0x0e);
|
ds3000_writereg(state, 0xc7, 0x0e);
|
||||||
} else if ((state->dcur.symbol_rate / 1000) <= 10000) {
|
} else if ((c->symbol_rate / 1000) <= 10000) {
|
||||||
value = 92166 / (state->dcur.symbol_rate / 1000) + 1;
|
value = 92166 / (c->symbol_rate / 1000) + 1;
|
||||||
if (value % 2 != 0)
|
if (value % 2 != 0)
|
||||||
value++;
|
value++;
|
||||||
ds3000_writereg(state, 0xc3, 0x07);
|
ds3000_writereg(state, 0xc3, 0x07);
|
||||||
ds3000_writereg(state, 0xc8, value);
|
ds3000_writereg(state, 0xc8, value);
|
||||||
ds3000_writereg(state, 0xc4, 0x09);
|
ds3000_writereg(state, 0xc4, 0x09);
|
||||||
ds3000_writereg(state, 0xc7, 0x12);
|
ds3000_writereg(state, 0xc7, 0x12);
|
||||||
} else if ((state->dcur.symbol_rate / 1000) <= 20000) {
|
} else if ((c->symbol_rate / 1000) <= 20000) {
|
||||||
value = 64516 / (state->dcur.symbol_rate / 1000) + 1;
|
value = 64516 / (c->symbol_rate / 1000) + 1;
|
||||||
ds3000_writereg(state, 0xc3, value);
|
ds3000_writereg(state, 0xc3, value);
|
||||||
ds3000_writereg(state, 0xc8, 0x0e);
|
ds3000_writereg(state, 0xc8, 0x0e);
|
||||||
ds3000_writereg(state, 0xc4, 0x07);
|
ds3000_writereg(state, 0xc4, 0x07);
|
||||||
ds3000_writereg(state, 0xc7, 0x18);
|
ds3000_writereg(state, 0xc7, 0x18);
|
||||||
} else {
|
} else {
|
||||||
value = 129032 / (state->dcur.symbol_rate / 1000) + 1;
|
value = 129032 / (c->symbol_rate / 1000) + 1;
|
||||||
ds3000_writereg(state, 0xc3, value);
|
ds3000_writereg(state, 0xc3, value);
|
||||||
ds3000_writereg(state, 0xc8, 0x0a);
|
ds3000_writereg(state, 0xc8, 0x0a);
|
||||||
ds3000_writereg(state, 0xc4, 0x05);
|
ds3000_writereg(state, 0xc4, 0x05);
|
||||||
@@ -1227,7 +1145,7 @@ static int ds3000_tune(struct dvb_frontend *fe,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* normalized symbol rate rounded to the closest integer */
|
/* normalized symbol rate rounded to the closest integer */
|
||||||
value = (((state->dcur.symbol_rate / 1000) << 16) +
|
value = (((c->symbol_rate / 1000) << 16) +
|
||||||
(DS3000_SAMPLE_RATE / 2)) / DS3000_SAMPLE_RATE;
|
(DS3000_SAMPLE_RATE / 2)) / DS3000_SAMPLE_RATE;
|
||||||
ds3000_writereg(state, 0x61, value & 0x00ff);
|
ds3000_writereg(state, 0x61, value & 0x00ff);
|
||||||
ds3000_writereg(state, 0x62, (value & 0xff00) >> 8);
|
ds3000_writereg(state, 0x62, (value & 0xff00) >> 8);
|
||||||
|
Reference in New Issue
Block a user