|
@@ -341,21 +341,14 @@ static int tda10048_set_wref(struct dvb_frontend *fe, u32 sample_freq_hz,
|
|
|
{
|
|
|
struct tda10048_state *state = fe->demodulator_priv;
|
|
|
u64 t, z;
|
|
|
- u32 b = 8000000;
|
|
|
|
|
|
dprintk(1, "%s()\n", __func__);
|
|
|
|
|
|
if (sample_freq_hz == 0)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- if (bw == BANDWIDTH_6_MHZ)
|
|
|
- b = 6000000;
|
|
|
- else
|
|
|
- if (bw == BANDWIDTH_7_MHZ)
|
|
|
- b = 7000000;
|
|
|
-
|
|
|
/* WREF = (B / (7 * fs)) * 2^31 */
|
|
|
- t = b * 10;
|
|
|
+ t = bw * 10;
|
|
|
/* avoid warning: this decimal constant is unsigned only in ISO C90 */
|
|
|
/* t *= 2147483648 on 32bit platforms */
|
|
|
t *= (2048 * 1024);
|
|
@@ -378,25 +371,18 @@ static int tda10048_set_invwref(struct dvb_frontend *fe, u32 sample_freq_hz,
|
|
|
{
|
|
|
struct tda10048_state *state = fe->demodulator_priv;
|
|
|
u64 t;
|
|
|
- u32 b = 8000000;
|
|
|
|
|
|
dprintk(1, "%s()\n", __func__);
|
|
|
|
|
|
if (sample_freq_hz == 0)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- if (bw == BANDWIDTH_6_MHZ)
|
|
|
- b = 6000000;
|
|
|
- else
|
|
|
- if (bw == BANDWIDTH_7_MHZ)
|
|
|
- b = 7000000;
|
|
|
-
|
|
|
/* INVWREF = ((7 * fs) / B) * 2^5 */
|
|
|
t = sample_freq_hz;
|
|
|
t *= 7;
|
|
|
t *= 32;
|
|
|
t *= 10;
|
|
|
- do_div(t, b);
|
|
|
+ do_div(t, bw);
|
|
|
t += 5;
|
|
|
do_div(t, 10);
|
|
|
|
|
@@ -407,16 +393,16 @@ static int tda10048_set_invwref(struct dvb_frontend *fe, u32 sample_freq_hz,
|
|
|
}
|
|
|
|
|
|
static int tda10048_set_bandwidth(struct dvb_frontend *fe,
|
|
|
- enum fe_bandwidth bw)
|
|
|
+ u32 bw)
|
|
|
{
|
|
|
struct tda10048_state *state = fe->demodulator_priv;
|
|
|
dprintk(1, "%s(bw=%d)\n", __func__, bw);
|
|
|
|
|
|
/* Bandwidth setting may need to be adjusted */
|
|
|
switch (bw) {
|
|
|
- case BANDWIDTH_6_MHZ:
|
|
|
- case BANDWIDTH_7_MHZ:
|
|
|
- case BANDWIDTH_8_MHZ:
|
|
|
+ case 6000000:
|
|
|
+ case 7000000:
|
|
|
+ case 8000000:
|
|
|
tda10048_set_wref(fe, state->sample_freq, bw);
|
|
|
tda10048_set_invwref(fe, state->sample_freq, bw);
|
|
|
break;
|
|
@@ -430,7 +416,7 @@ static int tda10048_set_bandwidth(struct dvb_frontend *fe,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int tda10048_set_if(struct dvb_frontend *fe, enum fe_bandwidth bw)
|
|
|
+static int tda10048_set_if(struct dvb_frontend *fe, u32 bw)
|
|
|
{
|
|
|
struct tda10048_state *state = fe->demodulator_priv;
|
|
|
struct tda10048_config *config = &state->config;
|
|
@@ -441,13 +427,13 @@ static int tda10048_set_if(struct dvb_frontend *fe, enum fe_bandwidth bw)
|
|
|
|
|
|
/* based on target bandwidth and clk we calculate pll factors */
|
|
|
switch (bw) {
|
|
|
- case BANDWIDTH_6_MHZ:
|
|
|
+ case 6000000:
|
|
|
if_freq_khz = config->dtv6_if_freq_khz;
|
|
|
break;
|
|
|
- case BANDWIDTH_7_MHZ:
|
|
|
+ case 7000000:
|
|
|
if_freq_khz = config->dtv7_if_freq_khz;
|
|
|
break;
|
|
|
- case BANDWIDTH_8_MHZ:
|
|
|
+ case 8000000:
|
|
|
if_freq_khz = config->dtv8_if_freq_khz;
|
|
|
break;
|
|
|
default:
|
|
@@ -601,7 +587,7 @@ static int tda10048_set_inversion(struct dvb_frontend *fe, int inversion)
|
|
|
|
|
|
/* Retrieve the demod settings */
|
|
|
static int tda10048_get_tps(struct tda10048_state *state,
|
|
|
- struct dvb_ofdm_parameters *p)
|
|
|
+ struct dtv_frontend_properties *p)
|
|
|
{
|
|
|
u8 val;
|
|
|
|
|
@@ -612,27 +598,27 @@ static int tda10048_get_tps(struct tda10048_state *state,
|
|
|
val = tda10048_readreg(state, TDA10048_OUT_CONF2);
|
|
|
switch ((val & 0x60) >> 5) {
|
|
|
case 0:
|
|
|
- p->constellation = QPSK;
|
|
|
+ p->modulation = QPSK;
|
|
|
break;
|
|
|
case 1:
|
|
|
- p->constellation = QAM_16;
|
|
|
+ p->modulation = QAM_16;
|
|
|
break;
|
|
|
case 2:
|
|
|
- p->constellation = QAM_64;
|
|
|
+ p->modulation = QAM_64;
|
|
|
break;
|
|
|
}
|
|
|
switch ((val & 0x18) >> 3) {
|
|
|
case 0:
|
|
|
- p->hierarchy_information = HIERARCHY_NONE;
|
|
|
+ p->hierarchy = HIERARCHY_NONE;
|
|
|
break;
|
|
|
case 1:
|
|
|
- p->hierarchy_information = HIERARCHY_1;
|
|
|
+ p->hierarchy = HIERARCHY_1;
|
|
|
break;
|
|
|
case 2:
|
|
|
- p->hierarchy_information = HIERARCHY_2;
|
|
|
+ p->hierarchy = HIERARCHY_2;
|
|
|
break;
|
|
|
case 3:
|
|
|
- p->hierarchy_information = HIERARCHY_4;
|
|
|
+ p->hierarchy = HIERARCHY_4;
|
|
|
break;
|
|
|
}
|
|
|
switch (val & 0x07) {
|
|
@@ -738,17 +724,17 @@ static int tda10048_output_mode(struct dvb_frontend *fe, int serial)
|
|
|
|
|
|
/* Talk to the demod, set the FEC, GUARD, QAM settings etc */
|
|
|
/* TODO: Support manual tuning with specific params */
|
|
|
-static int tda10048_set_frontend(struct dvb_frontend *fe,
|
|
|
- struct dvb_frontend_parameters *p)
|
|
|
+static int tda10048_set_frontend(struct dvb_frontend *fe)
|
|
|
{
|
|
|
+ struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
|
|
struct tda10048_state *state = fe->demodulator_priv;
|
|
|
|
|
|
dprintk(1, "%s(frequency=%d)\n", __func__, p->frequency);
|
|
|
|
|
|
/* Update the I/F pll's if the bandwidth changes */
|
|
|
- if (p->u.ofdm.bandwidth != state->bandwidth) {
|
|
|
- tda10048_set_if(fe, p->u.ofdm.bandwidth);
|
|
|
- tda10048_set_bandwidth(fe, p->u.ofdm.bandwidth);
|
|
|
+ if (p->bandwidth_hz != state->bandwidth) {
|
|
|
+ tda10048_set_if(fe, p->bandwidth_hz);
|
|
|
+ tda10048_set_bandwidth(fe, p->bandwidth_hz);
|
|
|
}
|
|
|
|
|
|
if (fe->ops.tuner_ops.set_params) {
|
|
@@ -797,8 +783,8 @@ static int tda10048_init(struct dvb_frontend *fe)
|
|
|
tda10048_set_inversion(fe, config->inversion);
|
|
|
|
|
|
/* Establish default RF values */
|
|
|
- tda10048_set_if(fe, BANDWIDTH_8_MHZ);
|
|
|
- tda10048_set_bandwidth(fe, BANDWIDTH_8_MHZ);
|
|
|
+ tda10048_set_if(fe, 8000000);
|
|
|
+ tda10048_set_bandwidth(fe, 8000000);
|
|
|
|
|
|
/* Ensure we leave the gate closed */
|
|
|
tda10048_i2c_gate_ctrl(fe, 0);
|
|
@@ -1043,7 +1029,7 @@ static int tda10048_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
|
|
|
}
|
|
|
|
|
|
static int tda10048_get_frontend(struct dvb_frontend *fe,
|
|
|
- struct dvb_frontend_parameters *p)
|
|
|
+ struct dtv_frontend_properties *p)
|
|
|
{
|
|
|
struct tda10048_state *state = fe->demodulator_priv;
|
|
|
|
|
@@ -1052,7 +1038,7 @@ static int tda10048_get_frontend(struct dvb_frontend *fe,
|
|
|
p->inversion = tda10048_readreg(state, TDA10048_CONF_C1_1)
|
|
|
& 0x20 ? INVERSION_ON : INVERSION_OFF;
|
|
|
|
|
|
- return tda10048_get_tps(state, &p->u.ofdm);
|
|
|
+ return tda10048_get_tps(state, p);
|
|
|
}
|
|
|
|
|
|
static int tda10048_get_tune_settings(struct dvb_frontend *fe,
|
|
@@ -1126,7 +1112,7 @@ struct dvb_frontend *tda10048_attach(const struct tda10048_config *config,
|
|
|
memcpy(&state->config, config, sizeof(*config));
|
|
|
state->i2c = i2c;
|
|
|
state->fwloaded = config->no_firmware;
|
|
|
- state->bandwidth = BANDWIDTH_8_MHZ;
|
|
|
+ state->bandwidth = 8000000;
|
|
|
|
|
|
/* check if the demod is present */
|
|
|
if (tda10048_readreg(state, TDA10048_IDENTITY) != 0x048)
|
|
@@ -1152,11 +1138,11 @@ struct dvb_frontend *tda10048_attach(const struct tda10048_config *config,
|
|
|
tda10048_establish_defaults(&state->frontend);
|
|
|
|
|
|
/* Set the xtal and freq defaults */
|
|
|
- if (tda10048_set_if(&state->frontend, BANDWIDTH_8_MHZ) != 0)
|
|
|
+ if (tda10048_set_if(&state->frontend, 8000000) != 0)
|
|
|
goto error;
|
|
|
|
|
|
/* Default bandwidth */
|
|
|
- if (tda10048_set_bandwidth(&state->frontend, BANDWIDTH_8_MHZ) != 0)
|
|
|
+ if (tda10048_set_bandwidth(&state->frontend, 8000000) != 0)
|
|
|
goto error;
|
|
|
|
|
|
/* Leave the gate closed */
|
|
@@ -1188,8 +1174,8 @@ static struct dvb_frontend_ops tda10048_ops = {
|
|
|
.release = tda10048_release,
|
|
|
.init = tda10048_init,
|
|
|
.i2c_gate_ctrl = tda10048_i2c_gate_ctrl,
|
|
|
- .set_frontend_legacy = tda10048_set_frontend,
|
|
|
- .get_frontend_legacy = tda10048_get_frontend,
|
|
|
+ .set_frontend = tda10048_set_frontend,
|
|
|
+ .get_frontend = tda10048_get_frontend,
|
|
|
.get_tune_settings = tda10048_get_tune_settings,
|
|
|
.read_status = tda10048_read_status,
|
|
|
.read_ber = tda10048_read_ber,
|