[media] dvb_frontend: pass the props cache to get_frontend() as arg
Instead of using the DTV properties cache directly, pass the get frontend data as an argument. For now, everything should remain the same, but the next patch will prevent get_frontend to affect the global cache. This is needed because several drivers don't care enough to only change the properties if locked. Due to that, calling G_PROPERTY before locking on those drivers will make them to never lock. Ok, those drivers are crap and should never be merged like that, but the core should not rely that the drivers would be doing the right thing. Reviewed-by: Michael Ira Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
a749704984
commit
7e3e68bcfd
|
@ -1361,7 +1361,7 @@ static int dtv_get_frontend(struct dvb_frontend *fe,
|
|||
int r;
|
||||
|
||||
if (fe->ops.get_frontend) {
|
||||
r = fe->ops.get_frontend(fe);
|
||||
r = fe->ops.get_frontend(fe, c);
|
||||
if (unlikely(r < 0))
|
||||
return r;
|
||||
if (p_out)
|
||||
|
|
|
@ -449,7 +449,8 @@ struct dvb_frontend_ops {
|
|||
int (*set_frontend)(struct dvb_frontend *fe);
|
||||
int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
|
||||
|
||||
int (*get_frontend)(struct dvb_frontend *fe);
|
||||
int (*get_frontend)(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *props);
|
||||
|
||||
int (*read_status)(struct dvb_frontend *fe, enum fe_status *status);
|
||||
int (*read_ber)(struct dvb_frontend* fe, u32* ber);
|
||||
|
|
|
@ -866,9 +866,9 @@ err:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int af9013_get_frontend(struct dvb_frontend *fe)
|
||||
static int af9013_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct af9013_state *state = fe->demodulator_priv;
|
||||
int ret;
|
||||
u8 buf[3];
|
||||
|
|
|
@ -691,10 +691,10 @@ err:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int af9033_get_frontend(struct dvb_frontend *fe)
|
||||
static int af9033_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct af9033_dev *dev = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
u8 buf[8];
|
||||
|
||||
|
|
|
@ -190,10 +190,10 @@ static int as102_fe_set_frontend(struct dvb_frontend *fe)
|
|||
return state->ops->set_tune(state->priv, &tune_args);
|
||||
}
|
||||
|
||||
static int as102_fe_get_frontend(struct dvb_frontend *fe)
|
||||
static int as102_fe_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct as102_state *state = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret = 0;
|
||||
struct as10x_tps tps = { 0 };
|
||||
|
||||
|
|
|
@ -297,9 +297,9 @@ static int atbm8830_set_fe(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int atbm8830_get_fe(struct dvb_frontend *fe)
|
||||
static int atbm8830_get_fe(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
dprintk("%s\n", __func__);
|
||||
|
||||
/* TODO: get real readings from device */
|
||||
|
|
|
@ -816,9 +816,9 @@ static int au8522_read_ber(struct dvb_frontend *fe, u32 *ber)
|
|||
return au8522_read_ucblocks(fe, ber);
|
||||
}
|
||||
|
||||
static int au8522_get_frontend(struct dvb_frontend *fe)
|
||||
static int au8522_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct au8522_state *state = fe->demodulator_priv;
|
||||
|
||||
c->frequency = state->current_frequency;
|
||||
|
|
|
@ -345,9 +345,9 @@ static int cx22700_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cx22700_get_frontend(struct dvb_frontend *fe)
|
||||
static int cx22700_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct cx22700_state* state = fe->demodulator_priv;
|
||||
u8 reg09 = cx22700_readreg (state, 0x09);
|
||||
|
||||
|
|
|
@ -562,9 +562,9 @@ static int cx22702_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cx22702_get_frontend(struct dvb_frontend *fe)
|
||||
static int cx22702_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct cx22702_state *state = fe->demodulator_priv;
|
||||
|
||||
u8 reg0C = cx22702_readreg(state, 0x0C);
|
||||
|
|
|
@ -550,9 +550,9 @@ static int cx24110_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cx24110_get_frontend(struct dvb_frontend *fe)
|
||||
static int cx24110_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct cx24110_state *state = fe->demodulator_priv;
|
||||
s32 afc; unsigned sclk;
|
||||
|
||||
|
|
|
@ -1560,10 +1560,10 @@ static int cx24117_get_algo(struct dvb_frontend *fe)
|
|||
return DVBFE_ALGO_HW;
|
||||
}
|
||||
|
||||
static int cx24117_get_frontend(struct dvb_frontend *fe)
|
||||
static int cx24117_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct cx24117_state *state = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct cx24117_cmd cmd;
|
||||
u8 reg, st, inv;
|
||||
int ret, idx;
|
||||
|
|
|
@ -1502,9 +1502,9 @@ static int cx24120_sleep(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cx24120_get_frontend(struct dvb_frontend *fe)
|
||||
static int cx24120_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct cx24120_state *state = fe->demodulator_priv;
|
||||
u8 freq1, freq2, freq3;
|
||||
|
||||
|
|
|
@ -945,9 +945,9 @@ static int cx24123_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cx24123_get_frontend(struct dvb_frontend *fe)
|
||||
static int cx24123_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct cx24123_state *state = fe->demodulator_priv;
|
||||
|
||||
dprintk("\n");
|
||||
|
|
|
@ -101,10 +101,10 @@ error:
|
|||
return ret;
|
||||
}
|
||||
|
||||
int cxd2820r_get_frontend_c(struct dvb_frontend *fe)
|
||||
int cxd2820r_get_frontend_c(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct cxd2820r_priv *priv = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
u8 buf[2];
|
||||
|
||||
|
|
|
@ -313,7 +313,8 @@ static int cxd2820r_read_status(struct dvb_frontend *fe, enum fe_status *status)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int cxd2820r_get_frontend(struct dvb_frontend *fe)
|
||||
static int cxd2820r_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct cxd2820r_priv *priv = fe->demodulator_priv;
|
||||
int ret;
|
||||
|
@ -326,13 +327,13 @@ static int cxd2820r_get_frontend(struct dvb_frontend *fe)
|
|||
|
||||
switch (fe->dtv_property_cache.delivery_system) {
|
||||
case SYS_DVBT:
|
||||
ret = cxd2820r_get_frontend_t(fe);
|
||||
ret = cxd2820r_get_frontend_t(fe, p);
|
||||
break;
|
||||
case SYS_DVBT2:
|
||||
ret = cxd2820r_get_frontend_t2(fe);
|
||||
ret = cxd2820r_get_frontend_t2(fe, p);
|
||||
break;
|
||||
case SYS_DVBC_ANNEX_A:
|
||||
ret = cxd2820r_get_frontend_c(fe);
|
||||
ret = cxd2820r_get_frontend_c(fe, p);
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
|
|
|
@ -76,7 +76,8 @@ int cxd2820r_rd_reg(struct cxd2820r_priv *priv, u32 reg, u8 *val);
|
|||
|
||||
/* cxd2820r_c.c */
|
||||
|
||||
int cxd2820r_get_frontend_c(struct dvb_frontend *fe);
|
||||
int cxd2820r_get_frontend_c(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p);
|
||||
|
||||
int cxd2820r_set_frontend_c(struct dvb_frontend *fe);
|
||||
|
||||
|
@ -99,7 +100,8 @@ int cxd2820r_get_tune_settings_c(struct dvb_frontend *fe,
|
|||
|
||||
/* cxd2820r_t.c */
|
||||
|
||||
int cxd2820r_get_frontend_t(struct dvb_frontend *fe);
|
||||
int cxd2820r_get_frontend_t(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p);
|
||||
|
||||
int cxd2820r_set_frontend_t(struct dvb_frontend *fe);
|
||||
|
||||
|
@ -122,7 +124,8 @@ int cxd2820r_get_tune_settings_t(struct dvb_frontend *fe,
|
|||
|
||||
/* cxd2820r_t2.c */
|
||||
|
||||
int cxd2820r_get_frontend_t2(struct dvb_frontend *fe);
|
||||
int cxd2820r_get_frontend_t2(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p);
|
||||
|
||||
int cxd2820r_set_frontend_t2(struct dvb_frontend *fe);
|
||||
|
||||
|
|
|
@ -138,10 +138,10 @@ error:
|
|||
return ret;
|
||||
}
|
||||
|
||||
int cxd2820r_get_frontend_t(struct dvb_frontend *fe)
|
||||
int cxd2820r_get_frontend_t(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct cxd2820r_priv *priv = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
u8 buf[2];
|
||||
|
||||
|
|
|
@ -23,8 +23,8 @@
|
|||
|
||||
int cxd2820r_set_frontend_t2(struct dvb_frontend *fe)
|
||||
{
|
||||
struct cxd2820r_priv *priv = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct cxd2820r_priv *priv = fe->demodulator_priv;
|
||||
int ret, i, bw_i;
|
||||
u32 if_freq, if_ctl;
|
||||
u64 num;
|
||||
|
@ -169,10 +169,10 @@ error:
|
|||
|
||||
}
|
||||
|
||||
int cxd2820r_get_frontend_t2(struct dvb_frontend *fe)
|
||||
int cxd2820r_get_frontend_t2(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct cxd2820r_priv *priv = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
u8 buf[2];
|
||||
|
||||
|
|
|
@ -2090,13 +2090,13 @@ static int cxd2841er_sleep_tc_to_active_c(struct cxd2841er_priv *priv,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cxd2841er_get_frontend(struct dvb_frontend *fe)
|
||||
static int cxd2841er_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
enum fe_status status = 0;
|
||||
u16 strength = 0, snr = 0;
|
||||
u32 errors = 0, ber = 0;
|
||||
struct cxd2841er_priv *priv = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
|
||||
dev_dbg(&priv->i2c->dev, "%s()\n", __func__);
|
||||
if (priv->state == STATE_ACTIVE_S)
|
||||
|
|
|
@ -112,7 +112,8 @@ static u16 dib3000_seq[2][2][2] = /* fft,gua, inv */
|
|||
}
|
||||
};
|
||||
|
||||
static int dib3000mb_get_frontend(struct dvb_frontend* fe);
|
||||
static int dib3000mb_get_frontend(struct dvb_frontend* fe,
|
||||
struct dtv_frontend_properties *c);
|
||||
|
||||
static int dib3000mb_set_frontend(struct dvb_frontend *fe, int tuner)
|
||||
{
|
||||
|
@ -359,7 +360,7 @@ static int dib3000mb_set_frontend(struct dvb_frontend *fe, int tuner)
|
|||
deb_setf("search_state after autosearch %d after %d checks\n",search_state,as_count);
|
||||
|
||||
if (search_state == 1) {
|
||||
if (dib3000mb_get_frontend(fe) == 0) {
|
||||
if (dib3000mb_get_frontend(fe, c) == 0) {
|
||||
deb_setf("reading tuning data from frontend succeeded.\n");
|
||||
return dib3000mb_set_frontend(fe, 0);
|
||||
}
|
||||
|
@ -450,9 +451,9 @@ static int dib3000mb_fe_init(struct dvb_frontend* fe, int mobile_mode)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int dib3000mb_get_frontend(struct dvb_frontend* fe)
|
||||
static int dib3000mb_get_frontend(struct dvb_frontend* fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct dib3000_state* state = fe->demodulator_priv;
|
||||
enum fe_code_rate *cr;
|
||||
u16 tps_val;
|
||||
|
|
|
@ -636,9 +636,9 @@ struct i2c_adapter * dib3000mc_get_tuner_i2c_master(struct dvb_frontend *demod,
|
|||
|
||||
EXPORT_SYMBOL(dib3000mc_get_tuner_i2c_master);
|
||||
|
||||
static int dib3000mc_get_frontend(struct dvb_frontend* fe)
|
||||
static int dib3000mc_get_frontend(struct dvb_frontend* fe,
|
||||
struct dtv_frontend_properties *fep)
|
||||
{
|
||||
struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
|
||||
struct dib3000mc_state *state = fe->demodulator_priv;
|
||||
u16 tps = dib3000mc_read_word(state,458);
|
||||
|
||||
|
@ -726,7 +726,7 @@ static int dib3000mc_set_frontend(struct dvb_frontend *fe)
|
|||
if (found == 0 || found == 1)
|
||||
return 0; // no channel found
|
||||
|
||||
dib3000mc_get_frontend(fe);
|
||||
dib3000mc_get_frontend(fe, fep);
|
||||
}
|
||||
|
||||
ret = dib3000mc_tune(fe);
|
||||
|
|
|
@ -1151,9 +1151,9 @@ static int dib7000m_identify(struct dib7000m_state *state)
|
|||
}
|
||||
|
||||
|
||||
static int dib7000m_get_frontend(struct dvb_frontend* fe)
|
||||
static int dib7000m_get_frontend(struct dvb_frontend* fe,
|
||||
struct dtv_frontend_properties *fep)
|
||||
{
|
||||
struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
|
||||
struct dib7000m_state *state = fe->demodulator_priv;
|
||||
u16 tps = dib7000m_read_word(state,480);
|
||||
|
||||
|
@ -1246,7 +1246,7 @@ static int dib7000m_set_frontend(struct dvb_frontend *fe)
|
|||
if (found == 0 || found == 1)
|
||||
return 0; // no channel found
|
||||
|
||||
dib7000m_get_frontend(fe);
|
||||
dib7000m_get_frontend(fe, fep);
|
||||
}
|
||||
|
||||
ret = dib7000m_tune(fe);
|
||||
|
|
|
@ -1405,9 +1405,9 @@ static int dib7000p_identify(struct dib7000p_state *st)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int dib7000p_get_frontend(struct dvb_frontend *fe)
|
||||
static int dib7000p_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *fep)
|
||||
{
|
||||
struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
|
||||
struct dib7000p_state *state = fe->demodulator_priv;
|
||||
u16 tps = dib7000p_read_word(state, 463);
|
||||
|
||||
|
@ -1540,7 +1540,7 @@ static int dib7000p_set_frontend(struct dvb_frontend *fe)
|
|||
if (found == 0 || found == 1)
|
||||
return 0;
|
||||
|
||||
dib7000p_get_frontend(fe);
|
||||
dib7000p_get_frontend(fe, fep);
|
||||
}
|
||||
|
||||
ret = dib7000p_tune(fe);
|
||||
|
|
|
@ -3382,14 +3382,15 @@ static int dib8000_sleep(struct dvb_frontend *fe)
|
|||
|
||||
static int dib8000_read_status(struct dvb_frontend *fe, enum fe_status *stat);
|
||||
|
||||
static int dib8000_get_frontend(struct dvb_frontend *fe)
|
||||
static int dib8000_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dib8000_state *state = fe->demodulator_priv;
|
||||
u16 i, val = 0;
|
||||
enum fe_status stat = 0;
|
||||
u8 index_frontend, sub_index_frontend;
|
||||
|
||||
fe->dtv_property_cache.bandwidth_hz = 6000000;
|
||||
c->bandwidth_hz = 6000000;
|
||||
|
||||
/*
|
||||
* If called to early, get_frontend makes dib8000_tune to either
|
||||
|
@ -3406,7 +3407,7 @@ static int dib8000_get_frontend(struct dvb_frontend *fe)
|
|||
if (stat&FE_HAS_SYNC) {
|
||||
dprintk("TMCC lock on the slave%i", index_frontend);
|
||||
/* synchronize the cache with the other frontends */
|
||||
state->fe[index_frontend]->ops.get_frontend(state->fe[index_frontend]);
|
||||
state->fe[index_frontend]->ops.get_frontend(state->fe[index_frontend], c);
|
||||
for (sub_index_frontend = 0; (sub_index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[sub_index_frontend] != NULL); sub_index_frontend++) {
|
||||
if (sub_index_frontend != index_frontend) {
|
||||
state->fe[sub_index_frontend]->dtv_property_cache.isdbt_sb_mode = state->fe[index_frontend]->dtv_property_cache.isdbt_sb_mode;
|
||||
|
@ -3426,57 +3427,57 @@ static int dib8000_get_frontend(struct dvb_frontend *fe)
|
|||
}
|
||||
}
|
||||
|
||||
fe->dtv_property_cache.isdbt_sb_mode = dib8000_read_word(state, 508) & 0x1;
|
||||
c->isdbt_sb_mode = dib8000_read_word(state, 508) & 0x1;
|
||||
|
||||
if (state->revision == 0x8090)
|
||||
val = dib8000_read_word(state, 572);
|
||||
else
|
||||
val = dib8000_read_word(state, 570);
|
||||
fe->dtv_property_cache.inversion = (val & 0x40) >> 6;
|
||||
c->inversion = (val & 0x40) >> 6;
|
||||
switch ((val & 0x30) >> 4) {
|
||||
case 1:
|
||||
fe->dtv_property_cache.transmission_mode = TRANSMISSION_MODE_2K;
|
||||
c->transmission_mode = TRANSMISSION_MODE_2K;
|
||||
dprintk("dib8000_get_frontend: transmission mode 2K");
|
||||
break;
|
||||
case 2:
|
||||
fe->dtv_property_cache.transmission_mode = TRANSMISSION_MODE_4K;
|
||||
c->transmission_mode = TRANSMISSION_MODE_4K;
|
||||
dprintk("dib8000_get_frontend: transmission mode 4K");
|
||||
break;
|
||||
case 3:
|
||||
default:
|
||||
fe->dtv_property_cache.transmission_mode = TRANSMISSION_MODE_8K;
|
||||
c->transmission_mode = TRANSMISSION_MODE_8K;
|
||||
dprintk("dib8000_get_frontend: transmission mode 8K");
|
||||
break;
|
||||
}
|
||||
|
||||
switch (val & 0x3) {
|
||||
case 0:
|
||||
fe->dtv_property_cache.guard_interval = GUARD_INTERVAL_1_32;
|
||||
c->guard_interval = GUARD_INTERVAL_1_32;
|
||||
dprintk("dib8000_get_frontend: Guard Interval = 1/32 ");
|
||||
break;
|
||||
case 1:
|
||||
fe->dtv_property_cache.guard_interval = GUARD_INTERVAL_1_16;
|
||||
c->guard_interval = GUARD_INTERVAL_1_16;
|
||||
dprintk("dib8000_get_frontend: Guard Interval = 1/16 ");
|
||||
break;
|
||||
case 2:
|
||||
dprintk("dib8000_get_frontend: Guard Interval = 1/8 ");
|
||||
fe->dtv_property_cache.guard_interval = GUARD_INTERVAL_1_8;
|
||||
c->guard_interval = GUARD_INTERVAL_1_8;
|
||||
break;
|
||||
case 3:
|
||||
dprintk("dib8000_get_frontend: Guard Interval = 1/4 ");
|
||||
fe->dtv_property_cache.guard_interval = GUARD_INTERVAL_1_4;
|
||||
c->guard_interval = GUARD_INTERVAL_1_4;
|
||||
break;
|
||||
}
|
||||
|
||||
val = dib8000_read_word(state, 505);
|
||||
fe->dtv_property_cache.isdbt_partial_reception = val & 1;
|
||||
dprintk("dib8000_get_frontend: partial_reception = %d ", fe->dtv_property_cache.isdbt_partial_reception);
|
||||
c->isdbt_partial_reception = val & 1;
|
||||
dprintk("dib8000_get_frontend: partial_reception = %d ", c->isdbt_partial_reception);
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
int show;
|
||||
|
||||
val = dib8000_read_word(state, 493 + i) & 0x0f;
|
||||
fe->dtv_property_cache.layer[i].segment_count = val;
|
||||
c->layer[i].segment_count = val;
|
||||
|
||||
if (val == 0 || val > 13)
|
||||
show = 0;
|
||||
|
@ -3485,41 +3486,41 @@ static int dib8000_get_frontend(struct dvb_frontend *fe)
|
|||
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d segments = %d ",
|
||||
i, fe->dtv_property_cache.layer[i].segment_count);
|
||||
i, c->layer[i].segment_count);
|
||||
|
||||
val = dib8000_read_word(state, 499 + i) & 0x3;
|
||||
/* Interleaving can be 0, 1, 2 or 4 */
|
||||
if (val == 3)
|
||||
val = 4;
|
||||
fe->dtv_property_cache.layer[i].interleaving = val;
|
||||
c->layer[i].interleaving = val;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d time_intlv = %d ",
|
||||
i, fe->dtv_property_cache.layer[i].interleaving);
|
||||
i, c->layer[i].interleaving);
|
||||
|
||||
val = dib8000_read_word(state, 481 + i);
|
||||
switch (val & 0x7) {
|
||||
case 1:
|
||||
fe->dtv_property_cache.layer[i].fec = FEC_1_2;
|
||||
c->layer[i].fec = FEC_1_2;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d Code Rate = 1/2 ", i);
|
||||
break;
|
||||
case 2:
|
||||
fe->dtv_property_cache.layer[i].fec = FEC_2_3;
|
||||
c->layer[i].fec = FEC_2_3;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d Code Rate = 2/3 ", i);
|
||||
break;
|
||||
case 3:
|
||||
fe->dtv_property_cache.layer[i].fec = FEC_3_4;
|
||||
c->layer[i].fec = FEC_3_4;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d Code Rate = 3/4 ", i);
|
||||
break;
|
||||
case 5:
|
||||
fe->dtv_property_cache.layer[i].fec = FEC_5_6;
|
||||
c->layer[i].fec = FEC_5_6;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d Code Rate = 5/6 ", i);
|
||||
break;
|
||||
default:
|
||||
fe->dtv_property_cache.layer[i].fec = FEC_7_8;
|
||||
c->layer[i].fec = FEC_7_8;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d Code Rate = 7/8 ", i);
|
||||
break;
|
||||
|
@ -3528,23 +3529,23 @@ static int dib8000_get_frontend(struct dvb_frontend *fe)
|
|||
val = dib8000_read_word(state, 487 + i);
|
||||
switch (val & 0x3) {
|
||||
case 0:
|
||||
fe->dtv_property_cache.layer[i].modulation = DQPSK;
|
||||
c->layer[i].modulation = DQPSK;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d DQPSK ", i);
|
||||
break;
|
||||
case 1:
|
||||
fe->dtv_property_cache.layer[i].modulation = QPSK;
|
||||
c->layer[i].modulation = QPSK;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d QPSK ", i);
|
||||
break;
|
||||
case 2:
|
||||
fe->dtv_property_cache.layer[i].modulation = QAM_16;
|
||||
c->layer[i].modulation = QAM_16;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d QAM16 ", i);
|
||||
break;
|
||||
case 3:
|
||||
default:
|
||||
fe->dtv_property_cache.layer[i].modulation = QAM_64;
|
||||
c->layer[i].modulation = QAM_64;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d QAM64 ", i);
|
||||
break;
|
||||
|
@ -3553,16 +3554,16 @@ static int dib8000_get_frontend(struct dvb_frontend *fe)
|
|||
|
||||
/* synchronize the cache with the other frontends */
|
||||
for (index_frontend = 1; (index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[index_frontend] != NULL); index_frontend++) {
|
||||
state->fe[index_frontend]->dtv_property_cache.isdbt_sb_mode = fe->dtv_property_cache.isdbt_sb_mode;
|
||||
state->fe[index_frontend]->dtv_property_cache.inversion = fe->dtv_property_cache.inversion;
|
||||
state->fe[index_frontend]->dtv_property_cache.transmission_mode = fe->dtv_property_cache.transmission_mode;
|
||||
state->fe[index_frontend]->dtv_property_cache.guard_interval = fe->dtv_property_cache.guard_interval;
|
||||
state->fe[index_frontend]->dtv_property_cache.isdbt_partial_reception = fe->dtv_property_cache.isdbt_partial_reception;
|
||||
state->fe[index_frontend]->dtv_property_cache.isdbt_sb_mode = c->isdbt_sb_mode;
|
||||
state->fe[index_frontend]->dtv_property_cache.inversion = c->inversion;
|
||||
state->fe[index_frontend]->dtv_property_cache.transmission_mode = c->transmission_mode;
|
||||
state->fe[index_frontend]->dtv_property_cache.guard_interval = c->guard_interval;
|
||||
state->fe[index_frontend]->dtv_property_cache.isdbt_partial_reception = c->isdbt_partial_reception;
|
||||
for (i = 0; i < 3; i++) {
|
||||
state->fe[index_frontend]->dtv_property_cache.layer[i].segment_count = fe->dtv_property_cache.layer[i].segment_count;
|
||||
state->fe[index_frontend]->dtv_property_cache.layer[i].interleaving = fe->dtv_property_cache.layer[i].interleaving;
|
||||
state->fe[index_frontend]->dtv_property_cache.layer[i].fec = fe->dtv_property_cache.layer[i].fec;
|
||||
state->fe[index_frontend]->dtv_property_cache.layer[i].modulation = fe->dtv_property_cache.layer[i].modulation;
|
||||
state->fe[index_frontend]->dtv_property_cache.layer[i].segment_count = c->layer[i].segment_count;
|
||||
state->fe[index_frontend]->dtv_property_cache.layer[i].interleaving = c->layer[i].interleaving;
|
||||
state->fe[index_frontend]->dtv_property_cache.layer[i].fec = c->layer[i].fec;
|
||||
state->fe[index_frontend]->dtv_property_cache.layer[i].modulation = c->layer[i].modulation;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
@ -3671,7 +3672,7 @@ static int dib8000_set_frontend(struct dvb_frontend *fe)
|
|||
if (state->channel_parameters_set == 0) { /* searching */
|
||||
if ((dib8000_get_status(state->fe[index_frontend]) == FE_STATUS_DEMOD_SUCCESS) || (dib8000_get_status(state->fe[index_frontend]) == FE_STATUS_FFT_SUCCESS)) {
|
||||
dprintk("autosearch succeeded on fe%i", index_frontend);
|
||||
dib8000_get_frontend(state->fe[index_frontend]); /* we read the channel parameters from the frontend which was successful */
|
||||
dib8000_get_frontend(state->fe[index_frontend], c); /* we read the channel parameters from the frontend which was successful */
|
||||
state->channel_parameters_set = 1;
|
||||
|
||||
for (l = 0; (l < MAX_NUMBER_OF_FRONTENDS) && (state->fe[l] != NULL); l++) {
|
||||
|
|
|
@ -1889,7 +1889,8 @@ static int dib9000_fe_get_tune_settings(struct dvb_frontend *fe, struct dvb_fron
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int dib9000_get_frontend(struct dvb_frontend *fe)
|
||||
static int dib9000_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dib9000_state *state = fe->demodulator_priv;
|
||||
u8 index_frontend, sub_index_frontend;
|
||||
|
@ -1909,7 +1910,7 @@ static int dib9000_get_frontend(struct dvb_frontend *fe)
|
|||
dprintk("TPS lock on the slave%i", index_frontend);
|
||||
|
||||
/* synchronize the cache with the other frontends */
|
||||
state->fe[index_frontend]->ops.get_frontend(state->fe[index_frontend]);
|
||||
state->fe[index_frontend]->ops.get_frontend(state->fe[index_frontend], c);
|
||||
for (sub_index_frontend = 0; (sub_index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[sub_index_frontend] != NULL);
|
||||
sub_index_frontend++) {
|
||||
if (sub_index_frontend != index_frontend) {
|
||||
|
@ -1943,14 +1944,14 @@ static int dib9000_get_frontend(struct dvb_frontend *fe)
|
|||
|
||||
/* synchronize the cache with the other frontends */
|
||||
for (index_frontend = 1; (index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[index_frontend] != NULL); index_frontend++) {
|
||||
state->fe[index_frontend]->dtv_property_cache.inversion = fe->dtv_property_cache.inversion;
|
||||
state->fe[index_frontend]->dtv_property_cache.transmission_mode = fe->dtv_property_cache.transmission_mode;
|
||||
state->fe[index_frontend]->dtv_property_cache.guard_interval = fe->dtv_property_cache.guard_interval;
|
||||
state->fe[index_frontend]->dtv_property_cache.modulation = fe->dtv_property_cache.modulation;
|
||||
state->fe[index_frontend]->dtv_property_cache.hierarchy = fe->dtv_property_cache.hierarchy;
|
||||
state->fe[index_frontend]->dtv_property_cache.code_rate_HP = fe->dtv_property_cache.code_rate_HP;
|
||||
state->fe[index_frontend]->dtv_property_cache.code_rate_LP = fe->dtv_property_cache.code_rate_LP;
|
||||
state->fe[index_frontend]->dtv_property_cache.rolloff = fe->dtv_property_cache.rolloff;
|
||||
state->fe[index_frontend]->dtv_property_cache.inversion = c->inversion;
|
||||
state->fe[index_frontend]->dtv_property_cache.transmission_mode = c->transmission_mode;
|
||||
state->fe[index_frontend]->dtv_property_cache.guard_interval = c->guard_interval;
|
||||
state->fe[index_frontend]->dtv_property_cache.modulation = c->modulation;
|
||||
state->fe[index_frontend]->dtv_property_cache.hierarchy = c->hierarchy;
|
||||
state->fe[index_frontend]->dtv_property_cache.code_rate_HP = c->code_rate_HP;
|
||||
state->fe[index_frontend]->dtv_property_cache.code_rate_LP = c->code_rate_LP;
|
||||
state->fe[index_frontend]->dtv_property_cache.rolloff = c->rolloff;
|
||||
}
|
||||
ret = 0;
|
||||
|
||||
|
@ -2083,7 +2084,7 @@ static int dib9000_set_frontend(struct dvb_frontend *fe)
|
|||
|
||||
/* synchronize all the channel cache */
|
||||
state->get_frontend_internal = 1;
|
||||
dib9000_get_frontend(state->fe[0]);
|
||||
dib9000_get_frontend(state->fe[0], &state->fe[0]->dtv_property_cache);
|
||||
state->get_frontend_internal = 0;
|
||||
|
||||
/* retune the other frontends with the found channel */
|
||||
|
|
|
@ -70,9 +70,12 @@ static int dvb_dummy_fe_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
|
|||
}
|
||||
|
||||
/*
|
||||
* Only needed if it actually reads something from the hardware
|
||||
* Should only be implemented if it actually reads something from the hardware.
|
||||
* Also, it should check for the locks, in order to avoid report wrong data
|
||||
* to userspace.
|
||||
*/
|
||||
static int dvb_dummy_fe_get_frontend(struct dvb_frontend *fe)
|
||||
static int dvb_dummy_fe_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -560,11 +560,11 @@ static int hd29l2_get_frontend_algo(struct dvb_frontend *fe)
|
|||
return DVBFE_ALGO_CUSTOM;
|
||||
}
|
||||
|
||||
static int hd29l2_get_frontend(struct dvb_frontend *fe)
|
||||
static int hd29l2_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
int ret;
|
||||
struct hd29l2_priv *priv = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
u8 buf[3];
|
||||
u32 if_ctl;
|
||||
char *str_constellation, *str_code_rate, *str_constellation_code_rate,
|
||||
|
|
|
@ -243,9 +243,9 @@ static int apply_frontend_param(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int get_frontend(struct dvb_frontend *fe)
|
||||
static int get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct l64781_state* state = fe->demodulator_priv;
|
||||
int tmp;
|
||||
|
||||
|
|
|
@ -942,101 +942,102 @@ static int lg216x_read_rs_err_count(struct lg216x_state *state, u16 *err)
|
|||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
static int lg216x_get_frontend(struct dvb_frontend *fe)
|
||||
static int lg216x_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct lg216x_state *state = fe->demodulator_priv;
|
||||
int ret;
|
||||
|
||||
lg_dbg("\n");
|
||||
|
||||
fe->dtv_property_cache.modulation = VSB_8;
|
||||
fe->dtv_property_cache.frequency = state->current_frequency;
|
||||
fe->dtv_property_cache.delivery_system = SYS_ATSCMH;
|
||||
c->modulation = VSB_8;
|
||||
c->frequency = state->current_frequency;
|
||||
c->delivery_system = SYS_ATSCMH;
|
||||
|
||||
ret = lg216x_get_fic_version(state,
|
||||
&fe->dtv_property_cache.atscmh_fic_ver);
|
||||
&c->atscmh_fic_ver);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
if (state->fic_ver != fe->dtv_property_cache.atscmh_fic_ver) {
|
||||
state->fic_ver = fe->dtv_property_cache.atscmh_fic_ver;
|
||||
if (state->fic_ver != c->atscmh_fic_ver) {
|
||||
state->fic_ver = c->atscmh_fic_ver;
|
||||
|
||||
#if 0
|
||||
ret = lg2160_get_parade_id(state,
|
||||
&fe->dtv_property_cache.atscmh_parade_id);
|
||||
&c->atscmh_parade_id);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
/* #else */
|
||||
fe->dtv_property_cache.atscmh_parade_id = state->parade_id;
|
||||
c->atscmh_parade_id = state->parade_id;
|
||||
#endif
|
||||
ret = lg216x_get_nog(state,
|
||||
&fe->dtv_property_cache.atscmh_nog);
|
||||
&c->atscmh_nog);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_get_tnog(state,
|
||||
&fe->dtv_property_cache.atscmh_tnog);
|
||||
&c->atscmh_tnog);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_get_sgn(state,
|
||||
&fe->dtv_property_cache.atscmh_sgn);
|
||||
&c->atscmh_sgn);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_get_prc(state,
|
||||
&fe->dtv_property_cache.atscmh_prc);
|
||||
&c->atscmh_prc);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
|
||||
ret = lg216x_get_rs_frame_mode(state,
|
||||
(enum atscmh_rs_frame_mode *)
|
||||
&fe->dtv_property_cache.atscmh_rs_frame_mode);
|
||||
&c->atscmh_rs_frame_mode);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_get_rs_frame_ensemble(state,
|
||||
(enum atscmh_rs_frame_ensemble *)
|
||||
&fe->dtv_property_cache.atscmh_rs_frame_ensemble);
|
||||
&c->atscmh_rs_frame_ensemble);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_get_rs_code_mode(state,
|
||||
(enum atscmh_rs_code_mode *)
|
||||
&fe->dtv_property_cache.atscmh_rs_code_mode_pri,
|
||||
&c->atscmh_rs_code_mode_pri,
|
||||
(enum atscmh_rs_code_mode *)
|
||||
&fe->dtv_property_cache.atscmh_rs_code_mode_sec);
|
||||
&c->atscmh_rs_code_mode_sec);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_get_sccc_block_mode(state,
|
||||
(enum atscmh_sccc_block_mode *)
|
||||
&fe->dtv_property_cache.atscmh_sccc_block_mode);
|
||||
&c->atscmh_sccc_block_mode);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_get_sccc_code_mode(state,
|
||||
(enum atscmh_sccc_code_mode *)
|
||||
&fe->dtv_property_cache.atscmh_sccc_code_mode_a,
|
||||
&c->atscmh_sccc_code_mode_a,
|
||||
(enum atscmh_sccc_code_mode *)
|
||||
&fe->dtv_property_cache.atscmh_sccc_code_mode_b,
|
||||
&c->atscmh_sccc_code_mode_b,
|
||||
(enum atscmh_sccc_code_mode *)
|
||||
&fe->dtv_property_cache.atscmh_sccc_code_mode_c,
|
||||
&c->atscmh_sccc_code_mode_c,
|
||||
(enum atscmh_sccc_code_mode *)
|
||||
&fe->dtv_property_cache.atscmh_sccc_code_mode_d);
|
||||
&c->atscmh_sccc_code_mode_d);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
}
|
||||
#if 0
|
||||
ret = lg216x_read_fic_err_count(state,
|
||||
(u8 *)&fe->dtv_property_cache.atscmh_fic_err);
|
||||
(u8 *)&c->atscmh_fic_err);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_read_crc_err_count(state,
|
||||
&fe->dtv_property_cache.atscmh_crc_err);
|
||||
&c->atscmh_crc_err);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_read_rs_err_count(state,
|
||||
&fe->dtv_property_cache.atscmh_rs_err);
|
||||
&c->atscmh_rs_err);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
|
||||
switch (state->cfg->lg_chip) {
|
||||
case LG2160:
|
||||
if (((fe->dtv_property_cache.atscmh_rs_err >= 240) &&
|
||||
(fe->dtv_property_cache.atscmh_crc_err >= 240)) &&
|
||||
if (((c->atscmh_rs_err >= 240) &&
|
||||
(c->atscmh_crc_err >= 240)) &&
|
||||
((jiffies_to_msecs(jiffies) - state->last_reset) > 6000))
|
||||
ret = lg216x_soft_reset(state);
|
||||
break;
|
||||
|
@ -1054,14 +1055,17 @@ fail:
|
|||
static int lg216x_get_property(struct dvb_frontend *fe,
|
||||
struct dtv_property *tvp)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
|
||||
return (DTV_ATSCMH_FIC_VER == tvp->cmd) ?
|
||||
lg216x_get_frontend(fe) : 0;
|
||||
lg216x_get_frontend(fe, c) : 0;
|
||||
}
|
||||
|
||||
|
||||
static int lg2160_set_frontend(struct dvb_frontend *fe)
|
||||
{
|
||||
struct lg216x_state *state = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
|
||||
lg_dbg("(%d)\n", fe->dtv_property_cache.frequency);
|
||||
|
@ -1129,7 +1133,7 @@ static int lg2160_set_frontend(struct dvb_frontend *fe)
|
|||
ret = lg216x_enable_fic(state, 1);
|
||||
lg_fail(ret);
|
||||
|
||||
lg216x_get_frontend(fe);
|
||||
lg216x_get_frontend(fe, c);
|
||||
fail:
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -812,9 +812,9 @@ fail:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int lgdt3305_get_frontend(struct dvb_frontend *fe)
|
||||
static int lgdt3305_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct lgdt3305_state *state = fe->demodulator_priv;
|
||||
|
||||
lg_dbg("\n");
|
||||
|
|
|
@ -1040,10 +1040,10 @@ fail:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int lgdt3306a_get_frontend(struct dvb_frontend *fe)
|
||||
static int lgdt3306a_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct lgdt3306a_state *state = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
|
||||
dbg_info("(%u, %d)\n",
|
||||
state->current_frequency, state->current_modulation);
|
||||
|
|
|
@ -439,10 +439,11 @@ static int lgdt330x_set_parameters(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int lgdt330x_get_frontend(struct dvb_frontend *fe)
|
||||
static int lgdt330x_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct lgdt330x_state *state = fe->demodulator_priv;
|
||||
|
||||
p->frequency = state->current_frequency;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -336,10 +336,11 @@ lgs8gl5_set_frontend(struct dvb_frontend *fe)
|
|||
|
||||
|
||||
static int
|
||||
lgs8gl5_get_frontend(struct dvb_frontend *fe)
|
||||
lgs8gl5_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct lgs8gl5_state *state = fe->demodulator_priv;
|
||||
|
||||
u8 inv = lgs8gl5_read_reg(state, REG_INVERSION);
|
||||
|
||||
p->inversion = (inv & REG_INVERSION_ON) ? INVERSION_ON : INVERSION_OFF;
|
||||
|
|
|
@ -791,11 +791,11 @@ err:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int m88ds3103_get_frontend(struct dvb_frontend *fe)
|
||||
static int m88ds3103_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct m88ds3103_dev *dev = fe->demodulator_priv;
|
||||
struct i2c_client *client = dev->client;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
u8 buf[3];
|
||||
|
||||
|
|
|
@ -708,10 +708,11 @@ static int m88rs2000_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int m88rs2000_get_frontend(struct dvb_frontend *fe)
|
||||
static int m88rs2000_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct m88rs2000_state *state = fe->demodulator_priv;
|
||||
|
||||
c->fec_inner = state->fec_inner;
|
||||
c->frequency = state->tuner_frequency;
|
||||
c->symbol_rate = state->symbol_rate;
|
||||
|
|
|
@ -647,9 +647,9 @@ static int mt312_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mt312_get_frontend(struct dvb_frontend *fe)
|
||||
static int mt312_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct mt312_state *state = fe->demodulator_priv;
|
||||
int ret;
|
||||
|
||||
|
|
|
@ -311,9 +311,9 @@ static int mt352_set_parameters(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mt352_get_parameters(struct dvb_frontend* fe)
|
||||
static int mt352_get_parameters(struct dvb_frontend* fe,
|
||||
struct dtv_frontend_properties *op)
|
||||
{
|
||||
struct dtv_frontend_properties *op = &fe->dtv_property_cache;
|
||||
struct mt352_state* state = fe->demodulator_priv;
|
||||
u16 tps;
|
||||
u16 div;
|
||||
|
|
|
@ -375,9 +375,9 @@ static int or51132_set_parameters(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int or51132_get_parameters(struct dvb_frontend* fe)
|
||||
static int or51132_get_parameters(struct dvb_frontend* fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct or51132_state* state = fe->demodulator_priv;
|
||||
int status;
|
||||
int retry = 1;
|
||||
|
|
|
@ -279,11 +279,11 @@ err:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int rtl2830_get_frontend(struct dvb_frontend *fe)
|
||||
static int rtl2830_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct i2c_client *client = fe->demodulator_priv;
|
||||
struct rtl2830_dev *dev = i2c_get_clientdata(client);
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
u8 buf[3];
|
||||
|
||||
|
|
|
@ -575,11 +575,11 @@ err:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int rtl2832_get_frontend(struct dvb_frontend *fe)
|
||||
static int rtl2832_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct rtl2832_dev *dev = fe->demodulator_priv;
|
||||
struct i2c_client *client = dev->client;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
u8 buf[3];
|
||||
|
||||
|
|
|
@ -925,9 +925,9 @@ static int s5h1409_read_ber(struct dvb_frontend *fe, u32 *ber)
|
|||
return s5h1409_read_ucblocks(fe, ber);
|
||||
}
|
||||
|
||||
static int s5h1409_get_frontend(struct dvb_frontend *fe)
|
||||
static int s5h1409_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct s5h1409_state *state = fe->demodulator_priv;
|
||||
|
||||
p->frequency = state->current_frequency;
|
||||
|
|
|
@ -840,9 +840,9 @@ static int s5h1411_read_ber(struct dvb_frontend *fe, u32 *ber)
|
|||
return s5h1411_read_ucblocks(fe, ber);
|
||||
}
|
||||
|
||||
static int s5h1411_get_frontend(struct dvb_frontend *fe)
|
||||
static int s5h1411_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct s5h1411_state *state = fe->demodulator_priv;
|
||||
|
||||
p->frequency = state->current_frequency;
|
||||
|
|
|
@ -756,9 +756,9 @@ static int s5h1420_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int s5h1420_get_frontend(struct dvb_frontend* fe)
|
||||
static int s5h1420_get_frontend(struct dvb_frontend* fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct s5h1420_state* state = fe->demodulator_priv;
|
||||
|
||||
p->frequency = state->tunedfreq + s5h1420_getfreqoffset(state);
|
||||
|
|
|
@ -433,9 +433,9 @@ static int s921_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int s921_get_frontend(struct dvb_frontend *fe)
|
||||
static int s921_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct s921_state *state = fe->demodulator_priv;
|
||||
|
||||
/* FIXME: Probably it is possible to get it from regs f1 and f2 */
|
||||
|
|
|
@ -1568,9 +1568,9 @@ static enum dvbfe_search stb0899_search(struct dvb_frontend *fe)
|
|||
return DVBFE_ALGO_SEARCH_ERROR;
|
||||
}
|
||||
|
||||
static int stb0899_get_frontend(struct dvb_frontend *fe)
|
||||
static int stb0899_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct stb0899_state *state = fe->demodulator_priv;
|
||||
struct stb0899_internal *internal = &state->internal;
|
||||
|
||||
|
|
|
@ -346,7 +346,7 @@ static int stb6100_set_frequency(struct dvb_frontend *fe, u32 frequency)
|
|||
|
||||
if (fe->ops.get_frontend) {
|
||||
dprintk(verbose, FE_DEBUG, 1, "Get frontend parameters");
|
||||
fe->ops.get_frontend(fe);
|
||||
fe->ops.get_frontend(fe, p);
|
||||
}
|
||||
srate = p->symbol_rate;
|
||||
|
||||
|
|
|
@ -615,9 +615,9 @@ timeout:
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int stv0297_get_frontend(struct dvb_frontend *fe)
|
||||
static int stv0297_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct stv0297_state *state = fe->demodulator_priv;
|
||||
int reg_00, reg_83;
|
||||
|
||||
|
|
|
@ -602,9 +602,9 @@ static int stv0299_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int stv0299_get_frontend(struct dvb_frontend *fe)
|
||||
static int stv0299_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct stv0299_state* state = fe->demodulator_priv;
|
||||
s32 derot_freq;
|
||||
int invval;
|
||||
|
|
|
@ -1938,9 +1938,9 @@ static int stv0367ter_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int stv0367ter_get_frontend(struct dvb_frontend *fe)
|
||||
static int stv0367ter_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct stv0367_state *state = fe->demodulator_priv;
|
||||
struct stv0367ter_state *ter_state = state->ter_state;
|
||||
enum stv0367_ter_mode mode;
|
||||
|
@ -3146,9 +3146,9 @@ static int stv0367cab_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int stv0367cab_get_frontend(struct dvb_frontend *fe)
|
||||
static int stv0367cab_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct stv0367_state *state = fe->demodulator_priv;
|
||||
struct stv0367cab_state *cab_state = state->cab_state;
|
||||
|
||||
|
|
|
@ -1859,9 +1859,9 @@ static int stv0900_sleep(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int stv0900_get_frontend(struct dvb_frontend *fe)
|
||||
static int stv0900_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct stv0900_state *state = fe->demodulator_priv;
|
||||
struct stv0900_internal *intp = state->internal;
|
||||
enum fe_stv0900_demod_num demod = state->demod;
|
||||
|
|
|
@ -201,10 +201,10 @@ static const enum fe_code_rate fec_conv_sat[] = {
|
|||
FEC_2_3, /* for 8PSK. (trellis code) */
|
||||
};
|
||||
|
||||
static int tc90522s_get_frontend(struct dvb_frontend *fe)
|
||||
static int tc90522s_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct tc90522_state *state;
|
||||
struct dtv_frontend_properties *c;
|
||||
struct dtv_fe_stats *stats;
|
||||
int ret, i;
|
||||
int layers;
|
||||
|
@ -212,7 +212,6 @@ static int tc90522s_get_frontend(struct dvb_frontend *fe)
|
|||
u32 cndat;
|
||||
|
||||
state = fe->demodulator_priv;
|
||||
c = &fe->dtv_property_cache;
|
||||
c->delivery_system = SYS_ISDBS;
|
||||
c->symbol_rate = 28860000;
|
||||
|
||||
|
@ -337,10 +336,10 @@ static const enum fe_modulation mod_conv[] = {
|
|||
DQPSK, QPSK, QAM_16, QAM_64, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
static int tc90522t_get_frontend(struct dvb_frontend *fe)
|
||||
static int tc90522t_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct tc90522_state *state;
|
||||
struct dtv_frontend_properties *c;
|
||||
struct dtv_fe_stats *stats;
|
||||
int ret, i;
|
||||
int layers;
|
||||
|
@ -348,7 +347,6 @@ static int tc90522t_get_frontend(struct dvb_frontend *fe)
|
|||
u32 cndat;
|
||||
|
||||
state = fe->demodulator_priv;
|
||||
c = &fe->dtv_property_cache;
|
||||
c->delivery_system = SYS_ISDBT;
|
||||
c->bandwidth_hz = 6000000;
|
||||
mode = 1;
|
||||
|
|
|
@ -387,9 +387,9 @@ static int tda10021_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tda10021_get_frontend(struct dvb_frontend *fe)
|
||||
static int tda10021_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct tda10021_state* state = fe->demodulator_priv;
|
||||
int sync;
|
||||
s8 afc = 0;
|
||||
|
|
|
@ -457,9 +457,9 @@ static int tda10023_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tda10023_get_frontend(struct dvb_frontend *fe)
|
||||
static int tda10023_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct tda10023_state* state = fe->demodulator_priv;
|
||||
int sync,inv;
|
||||
s8 afc = 0;
|
||||
|
|
|
@ -1028,9 +1028,9 @@ static int tda10048_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tda10048_get_frontend(struct dvb_frontend *fe)
|
||||
static int tda10048_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct tda10048_state *state = fe->demodulator_priv;
|
||||
|
||||
dprintk(1, "%s()\n", __func__);
|
||||
|
|
|
@ -899,9 +899,9 @@ static int tda1004x_set_fe(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tda1004x_get_fe(struct dvb_frontend *fe)
|
||||
static int tda1004x_get_fe(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *fe_params)
|
||||
{
|
||||
struct dtv_frontend_properties *fe_params = &fe->dtv_property_cache;
|
||||
struct tda1004x_state* state = fe->demodulator_priv;
|
||||
|
||||
dprintk("%s\n", __func__);
|
||||
|
|
|
@ -701,11 +701,11 @@ error:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int tda10071_get_frontend(struct dvb_frontend *fe)
|
||||
static int tda10071_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct tda10071_dev *dev = fe->demodulator_priv;
|
||||
struct i2c_client *client = dev->client;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret, i;
|
||||
u8 buf[5], tmp;
|
||||
|
||||
|
|
|
@ -459,9 +459,9 @@ static int tda10086_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tda10086_get_frontend(struct dvb_frontend *fe)
|
||||
static int tda10086_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *fe_params)
|
||||
{
|
||||
struct dtv_frontend_properties *fe_params = &fe->dtv_property_cache;
|
||||
struct tda10086_state* state = fe->demodulator_priv;
|
||||
u8 val;
|
||||
int tmp;
|
||||
|
|
|
@ -342,9 +342,9 @@ static int tda8083_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tda8083_get_frontend(struct dvb_frontend *fe)
|
||||
static int tda8083_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct tda8083_state* state = fe->demodulator_priv;
|
||||
|
||||
/* FIXME: get symbolrate & frequency offset...*/
|
||||
|
|
|
@ -312,9 +312,9 @@ static int ves1820_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int ves1820_get_frontend(struct dvb_frontend *fe)
|
||||
static int ves1820_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct ves1820_state* state = fe->demodulator_priv;
|
||||
int sync;
|
||||
s8 afc = 0;
|
||||
|
|
|
@ -406,9 +406,9 @@ static int ves1x93_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int ves1x93_get_frontend(struct dvb_frontend *fe)
|
||||
static int ves1x93_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct ves1x93_state* state = fe->demodulator_priv;
|
||||
int afc;
|
||||
|
||||
|
|
|
@ -371,9 +371,9 @@ static int zl10353_set_parameters(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int zl10353_get_parameters(struct dvb_frontend *fe)
|
||||
static int zl10353_get_parameters(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct zl10353_state *state = fe->demodulator_priv;
|
||||
int s6, s9;
|
||||
u16 tps;
|
||||
|
|
|
@ -1688,9 +1688,9 @@ static int dst_get_tuning_algo(struct dvb_frontend *fe)
|
|||
return dst_algo ? DVBFE_ALGO_HW : DVBFE_ALGO_SW;
|
||||
}
|
||||
|
||||
static int dst_get_frontend(struct dvb_frontend *fe)
|
||||
static int dst_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct dst_state *state = fe->demodulator_priv;
|
||||
|
||||
p->frequency = state->decode_freq;
|
||||
|
|
|
@ -507,9 +507,9 @@ static int mxl111sf_demod_read_signal_strength(struct dvb_frontend *fe,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mxl111sf_demod_get_frontend(struct dvb_frontend *fe)
|
||||
static int mxl111sf_demod_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct mxl111sf_demod_state *state = fe->demodulator_priv;
|
||||
|
||||
mxl_dbg("()");
|
||||
|
|
|
@ -1227,9 +1227,9 @@ static int af9005_fe_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int af9005_fe_get_frontend(struct dvb_frontend *fe)
|
||||
static int af9005_fe_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *fep)
|
||||
{
|
||||
struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
|
||||
struct af9005_fe_state *state = fe->demodulator_priv;
|
||||
int ret;
|
||||
u8 temp;
|
||||
|
|
|
@ -140,10 +140,11 @@ static int dtt200u_fe_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int dtt200u_fe_get_frontend(struct dvb_frontend* fe)
|
||||
static int dtt200u_fe_get_frontend(struct dvb_frontend* fe,
|
||||
struct dtv_frontend_properties *fep)
|
||||
{
|
||||
struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
|
||||
struct dtt200u_fe_state *state = fe->demodulator_priv;
|
||||
|
||||
memcpy(fep, &state->fep, sizeof(struct dtv_frontend_properties));
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue