|
@@ -1577,9 +1577,9 @@ int stv0367ter_init(struct dvb_frontend *fe)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int stv0367ter_algo(struct dvb_frontend *fe,
|
|
|
- struct dvb_frontend_parameters *param)
|
|
|
+static int stv0367ter_algo(struct dvb_frontend *fe)
|
|
|
{
|
|
|
+ struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
|
|
struct stv0367_state *state = fe->demodulator_priv;
|
|
|
struct stv0367ter_state *ter_state = state->ter_state;
|
|
|
int offset = 0, tempo = 0;
|
|
@@ -1591,7 +1591,7 @@ static int stv0367ter_algo(struct dvb_frontend *fe,
|
|
|
|
|
|
dprintk("%s:\n", __func__);
|
|
|
|
|
|
- ter_state->frequency = param->frequency;
|
|
|
+ ter_state->frequency = p->frequency;
|
|
|
ter_state->force = FE_TER_FORCENONE
|
|
|
+ stv0367_readbits(state, F367TER_FORCE) * 2;
|
|
|
ter_state->if_iq_mode = state->config->if_iq_mode;
|
|
@@ -1620,7 +1620,7 @@ static int stv0367ter_algo(struct dvb_frontend *fe,
|
|
|
|
|
|
usleep_range(5000, 7000);
|
|
|
|
|
|
- switch (param->inversion) {
|
|
|
+ switch (p->inversion) {
|
|
|
case INVERSION_AUTO:
|
|
|
default:
|
|
|
dprintk("%s: inversion AUTO\n", __func__);
|
|
@@ -1636,10 +1636,10 @@ static int stv0367ter_algo(struct dvb_frontend *fe,
|
|
|
case INVERSION_OFF:
|
|
|
if (ter_state->if_iq_mode == FE_TER_IQ_TUNER)
|
|
|
stv0367_writebits(state, F367TER_IQ_INVERT,
|
|
|
- param->inversion);
|
|
|
+ p->inversion);
|
|
|
else
|
|
|
stv0367_writebits(state, F367TER_INV_SPECTR,
|
|
|
- param->inversion);
|
|
|
+ p->inversion);
|
|
|
|
|
|
break;
|
|
|
}
|
|
@@ -1806,10 +1806,9 @@ static int stv0367ter_algo(struct dvb_frontend *fe,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int stv0367ter_set_frontend(struct dvb_frontend *fe,
|
|
|
- struct dvb_frontend_parameters *param)
|
|
|
+static int stv0367ter_set_frontend(struct dvb_frontend *fe)
|
|
|
{
|
|
|
- struct dvb_ofdm_parameters *op = ¶m->u.ofdm;
|
|
|
+ struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
|
|
struct stv0367_state *state = fe->demodulator_priv;
|
|
|
struct stv0367ter_state *ter_state = state->ter_state;
|
|
|
|
|
@@ -1827,7 +1826,7 @@ static int stv0367ter_set_frontend(struct dvb_frontend *fe,
|
|
|
fe->ops.i2c_gate_ctrl(fe, 0);
|
|
|
}
|
|
|
|
|
|
- switch (op->transmission_mode) {
|
|
|
+ switch (p->transmission_mode) {
|
|
|
default:
|
|
|
case TRANSMISSION_MODE_AUTO:
|
|
|
case TRANSMISSION_MODE_2K:
|
|
@@ -1841,34 +1840,34 @@ static int stv0367ter_set_frontend(struct dvb_frontend *fe,
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- switch (op->guard_interval) {
|
|
|
+ switch (p->guard_interval) {
|
|
|
default:
|
|
|
case GUARD_INTERVAL_1_32:
|
|
|
case GUARD_INTERVAL_1_16:
|
|
|
case GUARD_INTERVAL_1_8:
|
|
|
case GUARD_INTERVAL_1_4:
|
|
|
- ter_state->guard = op->guard_interval;
|
|
|
+ ter_state->guard = p->guard_interval;
|
|
|
break;
|
|
|
case GUARD_INTERVAL_AUTO:
|
|
|
ter_state->guard = GUARD_INTERVAL_1_32;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- switch (op->bandwidth) {
|
|
|
- case BANDWIDTH_6_MHZ:
|
|
|
+ switch (p->bandwidth_hz) {
|
|
|
+ case 6000000:
|
|
|
ter_state->bw = FE_TER_CHAN_BW_6M;
|
|
|
break;
|
|
|
- case BANDWIDTH_7_MHZ:
|
|
|
+ case 7000000:
|
|
|
ter_state->bw = FE_TER_CHAN_BW_7M;
|
|
|
break;
|
|
|
- case BANDWIDTH_8_MHZ:
|
|
|
+ case 8000000:
|
|
|
default:
|
|
|
ter_state->bw = FE_TER_CHAN_BW_8M;
|
|
|
}
|
|
|
|
|
|
ter_state->hierarchy = FE_TER_HIER_NONE;
|
|
|
|
|
|
- switch (param->inversion) {
|
|
|
+ switch (p->inversion) {
|
|
|
case INVERSION_OFF:
|
|
|
case INVERSION_ON:
|
|
|
num_trials = 1;
|
|
@@ -1885,14 +1884,14 @@ static int stv0367ter_set_frontend(struct dvb_frontend *fe,
|
|
|
|
|
|
while (((index) < num_trials) && (ter_state->state != FE_TER_LOCKOK)) {
|
|
|
if (!ter_state->first_lock) {
|
|
|
- if (param->inversion == INVERSION_AUTO)
|
|
|
+ if (p->inversion == INVERSION_AUTO)
|
|
|
ter_state->sense = SenseTrials[index];
|
|
|
|
|
|
}
|
|
|
- stv0367ter_algo(fe,/* &pLook, result,*/ param);
|
|
|
+ stv0367ter_algo(fe);
|
|
|
|
|
|
if ((ter_state->state == FE_TER_LOCKOK) &&
|
|
|
- (param->inversion == INVERSION_AUTO) &&
|
|
|
+ (p->inversion == INVERSION_AUTO) &&
|
|
|
(index == 1)) {
|
|
|
/* invert spectrum sense */
|
|
|
SenseTrials[index] = SenseTrials[0];
|
|
@@ -1928,49 +1927,47 @@ static int stv0367ter_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
|
|
|
}
|
|
|
|
|
|
static int stv0367ter_get_frontend(struct dvb_frontend *fe,
|
|
|
- struct dvb_frontend_parameters *param)
|
|
|
+ struct dtv_frontend_properties *p)
|
|
|
{
|
|
|
struct stv0367_state *state = fe->demodulator_priv;
|
|
|
struct stv0367ter_state *ter_state = state->ter_state;
|
|
|
- struct dvb_ofdm_parameters *op = ¶m->u.ofdm;
|
|
|
- struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
|
|
|
|
|
int error = 0;
|
|
|
enum stv0367_ter_mode mode;
|
|
|
int constell = 0,/* snr = 0,*/ Data = 0;
|
|
|
|
|
|
- param->frequency = stv0367_get_tuner_freq(fe);
|
|
|
- if ((int)param->frequency < 0)
|
|
|
- param->frequency = c->frequency;
|
|
|
+ p->frequency = stv0367_get_tuner_freq(fe);
|
|
|
+ if ((int)p->frequency < 0)
|
|
|
+ p->frequency = -p->frequency;
|
|
|
|
|
|
constell = stv0367_readbits(state, F367TER_TPS_CONST);
|
|
|
if (constell == 0)
|
|
|
- op->constellation = QPSK;
|
|
|
+ p->modulation = QPSK;
|
|
|
else if (constell == 1)
|
|
|
- op->constellation = QAM_16;
|
|
|
+ p->modulation = QAM_16;
|
|
|
else
|
|
|
- op->constellation = QAM_64;
|
|
|
+ p->modulation = QAM_64;
|
|
|
|
|
|
- param->inversion = stv0367_readbits(state, F367TER_INV_SPECTR);
|
|
|
+ p->inversion = stv0367_readbits(state, F367TER_INV_SPECTR);
|
|
|
|
|
|
/* Get the Hierarchical mode */
|
|
|
Data = stv0367_readbits(state, F367TER_TPS_HIERMODE);
|
|
|
|
|
|
switch (Data) {
|
|
|
case 0:
|
|
|
- op->hierarchy_information = HIERARCHY_NONE;
|
|
|
+ p->hierarchy = HIERARCHY_NONE;
|
|
|
break;
|
|
|
case 1:
|
|
|
- op->hierarchy_information = HIERARCHY_1;
|
|
|
+ p->hierarchy = HIERARCHY_1;
|
|
|
break;
|
|
|
case 2:
|
|
|
- op->hierarchy_information = HIERARCHY_2;
|
|
|
+ p->hierarchy = HIERARCHY_2;
|
|
|
break;
|
|
|
case 3:
|
|
|
- op->hierarchy_information = HIERARCHY_4;
|
|
|
+ p->hierarchy = HIERARCHY_4;
|
|
|
break;
|
|
|
default:
|
|
|
- op->hierarchy_information = HIERARCHY_AUTO;
|
|
|
+ p->hierarchy = HIERARCHY_AUTO;
|
|
|
break; /* error */
|
|
|
}
|
|
|
|
|
@@ -1982,22 +1979,22 @@ static int stv0367ter_get_frontend(struct dvb_frontend *fe,
|
|
|
|
|
|
switch (Data) {
|
|
|
case 0:
|
|
|
- op->code_rate_HP = FEC_1_2;
|
|
|
+ p->code_rate_HP = FEC_1_2;
|
|
|
break;
|
|
|
case 1:
|
|
|
- op->code_rate_HP = FEC_2_3;
|
|
|
+ p->code_rate_HP = FEC_2_3;
|
|
|
break;
|
|
|
case 2:
|
|
|
- op->code_rate_HP = FEC_3_4;
|
|
|
+ p->code_rate_HP = FEC_3_4;
|
|
|
break;
|
|
|
case 3:
|
|
|
- op->code_rate_HP = FEC_5_6;
|
|
|
+ p->code_rate_HP = FEC_5_6;
|
|
|
break;
|
|
|
case 4:
|
|
|
- op->code_rate_HP = FEC_7_8;
|
|
|
+ p->code_rate_HP = FEC_7_8;
|
|
|
break;
|
|
|
default:
|
|
|
- op->code_rate_HP = FEC_AUTO;
|
|
|
+ p->code_rate_HP = FEC_AUTO;
|
|
|
break; /* error */
|
|
|
}
|
|
|
|
|
@@ -2005,19 +2002,19 @@ static int stv0367ter_get_frontend(struct dvb_frontend *fe,
|
|
|
|
|
|
switch (mode) {
|
|
|
case FE_TER_MODE_2K:
|
|
|
- op->transmission_mode = TRANSMISSION_MODE_2K;
|
|
|
+ p->transmission_mode = TRANSMISSION_MODE_2K;
|
|
|
break;
|
|
|
/* case FE_TER_MODE_4K:
|
|
|
- op->transmission_mode = TRANSMISSION_MODE_4K;
|
|
|
+ p->transmission_mode = TRANSMISSION_MODE_4K;
|
|
|
break;*/
|
|
|
case FE_TER_MODE_8K:
|
|
|
- op->transmission_mode = TRANSMISSION_MODE_8K;
|
|
|
+ p->transmission_mode = TRANSMISSION_MODE_8K;
|
|
|
break;
|
|
|
default:
|
|
|
- op->transmission_mode = TRANSMISSION_MODE_AUTO;
|
|
|
+ p->transmission_mode = TRANSMISSION_MODE_AUTO;
|
|
|
}
|
|
|
|
|
|
- op->guard_interval = stv0367_readbits(state, F367TER_SYR_GUARD);
|
|
|
+ p->guard_interval = stv0367_readbits(state, F367TER_SYR_GUARD);
|
|
|
|
|
|
return error;
|
|
|
}
|
|
@@ -2265,6 +2262,7 @@ static void stv0367_release(struct dvb_frontend *fe)
|
|
|
}
|
|
|
|
|
|
static struct dvb_frontend_ops stv0367ter_ops = {
|
|
|
+ .delsys = { SYS_DVBT },
|
|
|
.info = {
|
|
|
.name = "ST STV0367 DVB-T",
|
|
|
.type = FE_OFDM,
|
|
@@ -2285,8 +2283,8 @@ static struct dvb_frontend_ops stv0367ter_ops = {
|
|
|
.init = stv0367ter_init,
|
|
|
.sleep = stv0367ter_sleep,
|
|
|
.i2c_gate_ctrl = stv0367ter_gate_ctrl,
|
|
|
- .set_frontend_legacy = stv0367ter_set_frontend,
|
|
|
- .get_frontend_legacy = stv0367ter_get_frontend,
|
|
|
+ .set_frontend = stv0367ter_set_frontend,
|
|
|
+ .get_frontend = stv0367ter_get_frontend,
|
|
|
.get_tune_settings = stv0367_get_tune_settings,
|
|
|
.read_status = stv0367ter_read_status,
|
|
|
.read_ber = stv0367ter_read_ber,/* too slow */
|
|
@@ -2822,9 +2820,8 @@ int stv0367cab_init(struct dvb_frontend *fe)
|
|
|
}
|
|
|
static
|
|
|
enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state,
|
|
|
- struct dvb_frontend_parameters *param)
|
|
|
+ struct dtv_frontend_properties *p)
|
|
|
{
|
|
|
- struct dvb_qam_parameters *op = ¶m->u.qam;
|
|
|
struct stv0367cab_state *cab_state = state->cab_state;
|
|
|
enum stv0367_cab_signal_type signalType = FE_CAB_NOAGC;
|
|
|
u32 QAMFEC_Lock, QAM_Lock, u32_tmp,
|
|
@@ -2839,7 +2836,7 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state,
|
|
|
/* A max lock time of 25 ms is allowed for delayed AGC */
|
|
|
AGCTimeOut = 25;
|
|
|
/* 100000 symbols needed by the TRL as a maximum value */
|
|
|
- TRLTimeOut = 100000000 / op->symbol_rate;
|
|
|
+ TRLTimeOut = 100000000 / p->symbol_rate;
|
|
|
/* CRLSymbols is the needed number of symbols to achieve a lock
|
|
|
within [-4%, +4%] of the symbol rate.
|
|
|
CRL timeout is calculated
|
|
@@ -2849,7 +2846,7 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state,
|
|
|
A characterization must be performed
|
|
|
with these echoes to get new timeout values.
|
|
|
*/
|
|
|
- switch (op->modulation) {
|
|
|
+ switch (p->modulation) {
|
|
|
case QAM_16:
|
|
|
CRLSymbols = 150000;
|
|
|
EQLTimeOut = 100;
|
|
@@ -2883,9 +2880,9 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state,
|
|
|
} else
|
|
|
#endif
|
|
|
CRLTimeOut = (25 * CRLSymbols * (cab_state->search_range / 1000)) /
|
|
|
- (op->symbol_rate / 1000);
|
|
|
+ (p->symbol_rate / 1000);
|
|
|
|
|
|
- CRLTimeOut = (1000 * CRLTimeOut) / op->symbol_rate;
|
|
|
+ CRLTimeOut = (1000 * CRLTimeOut) / p->symbol_rate;
|
|
|
/* Timeouts below 50ms are coerced */
|
|
|
if (CRLTimeOut < 50)
|
|
|
CRLTimeOut = 50;
|
|
@@ -2915,7 +2912,7 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state,
|
|
|
stv0367cab_set_derot_freq(state, cab_state->adc_clk,
|
|
|
(1000 * (s32)state->config->if_khz + cab_state->derot_offset));
|
|
|
/* Disable the Allpass Filter when the symbol rate is out of range */
|
|
|
- if ((op->symbol_rate > 10800000) | (op->symbol_rate < 1800000)) {
|
|
|
+ if ((p->symbol_rate > 10800000) | (p->symbol_rate < 1800000)) {
|
|
|
stv0367_writebits(state, F367CAB_ADJ_EN, 0);
|
|
|
stv0367_writebits(state, F367CAB_ALLPASSFILT_EN, 0);
|
|
|
}
|
|
@@ -2999,7 +2996,7 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state,
|
|
|
|
|
|
if (QAMFEC_Lock) {
|
|
|
signalType = FE_CAB_DATAOK;
|
|
|
- cab_state->modulation = op->modulation;
|
|
|
+ cab_state->modulation = p->modulation;
|
|
|
cab_state->spect_inv = stv0367_readbits(state,
|
|
|
F367CAB_QUAD_INV);
|
|
|
#if 0
|
|
@@ -3081,20 +3078,19 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state,
|
|
|
return signalType;
|
|
|
}
|
|
|
|
|
|
-static int stv0367cab_set_frontend(struct dvb_frontend *fe,
|
|
|
- struct dvb_frontend_parameters *param)
|
|
|
+static int stv0367cab_set_frontend(struct dvb_frontend *fe)
|
|
|
{
|
|
|
+ struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
|
|
struct stv0367_state *state = fe->demodulator_priv;
|
|
|
struct stv0367cab_state *cab_state = state->cab_state;
|
|
|
- struct dvb_qam_parameters *op = ¶m->u.qam;
|
|
|
enum stv0367cab_mod QAMSize = 0;
|
|
|
|
|
|
dprintk("%s: freq = %d, srate = %d\n", __func__,
|
|
|
- param->frequency, op->symbol_rate);
|
|
|
+ p->frequency, p->symbol_rate);
|
|
|
|
|
|
cab_state->derot_offset = 0;
|
|
|
|
|
|
- switch (op->modulation) {
|
|
|
+ switch (p->modulation) {
|
|
|
case QAM_16:
|
|
|
QAMSize = FE_CAB_MOD_QAM16;
|
|
|
break;
|
|
@@ -3127,70 +3123,69 @@ static int stv0367cab_set_frontend(struct dvb_frontend *fe,
|
|
|
|
|
|
stv0367cab_SetQamSize(
|
|
|
state,
|
|
|
- op->symbol_rate,
|
|
|
+ p->symbol_rate,
|
|
|
QAMSize);
|
|
|
|
|
|
stv0367cab_set_srate(state,
|
|
|
cab_state->adc_clk,
|
|
|
cab_state->mclk,
|
|
|
- op->symbol_rate,
|
|
|
+ p->symbol_rate,
|
|
|
QAMSize);
|
|
|
/* Search algorithm launch, [-1.1*RangeOffset, +1.1*RangeOffset] scan */
|
|
|
- cab_state->state = stv0367cab_algo(state, param);
|
|
|
+ cab_state->state = stv0367cab_algo(state, p);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
static int stv0367cab_get_frontend(struct dvb_frontend *fe,
|
|
|
- struct dvb_frontend_parameters *param)
|
|
|
+ struct dtv_frontend_properties *p)
|
|
|
{
|
|
|
struct stv0367_state *state = fe->demodulator_priv;
|
|
|
struct stv0367cab_state *cab_state = state->cab_state;
|
|
|
- struct dvb_qam_parameters *op = ¶m->u.qam;
|
|
|
|
|
|
enum stv0367cab_mod QAMSize;
|
|
|
|
|
|
dprintk("%s:\n", __func__);
|
|
|
|
|
|
- op->symbol_rate = stv0367cab_GetSymbolRate(state, cab_state->mclk);
|
|
|
+ p->symbol_rate = stv0367cab_GetSymbolRate(state, cab_state->mclk);
|
|
|
|
|
|
QAMSize = stv0367_readbits(state, F367CAB_QAM_MODE);
|
|
|
switch (QAMSize) {
|
|
|
case FE_CAB_MOD_QAM16:
|
|
|
- op->modulation = QAM_16;
|
|
|
+ p->modulation = QAM_16;
|
|
|
break;
|
|
|
case FE_CAB_MOD_QAM32:
|
|
|
- op->modulation = QAM_32;
|
|
|
+ p->modulation = QAM_32;
|
|
|
break;
|
|
|
case FE_CAB_MOD_QAM64:
|
|
|
- op->modulation = QAM_64;
|
|
|
+ p->modulation = QAM_64;
|
|
|
break;
|
|
|
case FE_CAB_MOD_QAM128:
|
|
|
- op->modulation = QAM_128;
|
|
|
+ p->modulation = QAM_128;
|
|
|
break;
|
|
|
case QAM_256:
|
|
|
- op->modulation = QAM_256;
|
|
|
+ p->modulation = QAM_256;
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- param->frequency = stv0367_get_tuner_freq(fe);
|
|
|
+ p->frequency = stv0367_get_tuner_freq(fe);
|
|
|
|
|
|
- dprintk("%s: tuner frequency = %d\n", __func__, param->frequency);
|
|
|
+ dprintk("%s: tuner frequency = %d\n", __func__, p->frequency);
|
|
|
|
|
|
if (state->config->if_khz == 0) {
|
|
|
- param->frequency +=
|
|
|
+ p->frequency +=
|
|
|
(stv0367cab_get_derot_freq(state, cab_state->adc_clk) -
|
|
|
cab_state->adc_clk / 4000);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
if (state->config->if_khz > cab_state->adc_clk / 1000)
|
|
|
- param->frequency += (state->config->if_khz
|
|
|
+ p->frequency += (state->config->if_khz
|
|
|
- stv0367cab_get_derot_freq(state, cab_state->adc_clk)
|
|
|
- cab_state->adc_clk / 1000);
|
|
|
else
|
|
|
- param->frequency += (state->config->if_khz
|
|
|
+ p->frequency += (state->config->if_khz
|
|
|
- stv0367cab_get_derot_freq(state, cab_state->adc_clk));
|
|
|
|
|
|
return 0;
|
|
@@ -3386,6 +3381,7 @@ static int stv0367cab_read_ucblcks(struct dvb_frontend *fe, u32 *ucblocks)
|
|
|
};
|
|
|
|
|
|
static struct dvb_frontend_ops stv0367cab_ops = {
|
|
|
+ .delsys = { SYS_DVBC_ANNEX_A },
|
|
|
.info = {
|
|
|
.name = "ST STV0367 DVB-C",
|
|
|
.type = FE_QAM,
|
|
@@ -3403,8 +3399,8 @@ static struct dvb_frontend_ops stv0367cab_ops = {
|
|
|
.init = stv0367cab_init,
|
|
|
.sleep = stv0367cab_sleep,
|
|
|
.i2c_gate_ctrl = stv0367cab_gate_ctrl,
|
|
|
- .set_frontend_legacy = stv0367cab_set_frontend,
|
|
|
- .get_frontend_legacy = stv0367cab_get_frontend,
|
|
|
+ .set_frontend = stv0367cab_set_frontend,
|
|
|
+ .get_frontend = stv0367cab_get_frontend,
|
|
|
.read_status = stv0367cab_read_status,
|
|
|
/* .read_ber = stv0367cab_read_ber, */
|
|
|
.read_signal_strength = stv0367cab_read_strength,
|