forked from Minki/linux
[media] mt2063: don't crash if device is not initialized
Instead of crash, return -ENODEV, if the device is not poperly initialized. Also, give a second chance for it to initialize, at set_params calls. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
b5a910679b
commit
1b0bfee39d
@ -220,6 +220,8 @@ enum MT2063_Register_Offsets {
|
||||
struct mt2063_state {
|
||||
struct i2c_adapter *i2c;
|
||||
|
||||
bool init;
|
||||
|
||||
const struct mt2063_config *config;
|
||||
struct dvb_tuner_ops ops;
|
||||
struct dvb_frontend *frontend;
|
||||
@ -1974,6 +1976,8 @@ static int mt2063_init(struct dvb_frontend *fe)
|
||||
if (status < 0)
|
||||
return status;
|
||||
|
||||
state->init = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1984,6 +1988,9 @@ static int mt2063_get_status(struct dvb_frontend *fe, u32 *tuner_status)
|
||||
|
||||
dprintk(2, "\n");
|
||||
|
||||
if (!state->init)
|
||||
return -ENODEV;
|
||||
|
||||
*tuner_status = 0;
|
||||
status = mt2063_lockStatus(state);
|
||||
if (status < 0)
|
||||
@ -2019,6 +2026,12 @@ static int mt2063_set_analog_params(struct dvb_frontend *fe,
|
||||
|
||||
dprintk(2, "\n");
|
||||
|
||||
if (!state->init) {
|
||||
status = mt2063_init(fe);
|
||||
if (status < 0)
|
||||
return status;
|
||||
}
|
||||
|
||||
switch (params->mode) {
|
||||
case V4L2_TUNER_RADIO:
|
||||
pict_car = 38900000;
|
||||
@ -2082,6 +2095,12 @@ static int mt2063_set_params(struct dvb_frontend *fe)
|
||||
s32 if_mid;
|
||||
s32 rcvr_mode;
|
||||
|
||||
if (!state->init) {
|
||||
status = mt2063_init(fe);
|
||||
if (status < 0)
|
||||
return status;
|
||||
}
|
||||
|
||||
dprintk(2, "\n");
|
||||
|
||||
if (c->bandwidth_hz == 0)
|
||||
@ -2132,6 +2151,9 @@ static int mt2063_get_frequency(struct dvb_frontend *fe, u32 *freq)
|
||||
|
||||
dprintk(2, "\n");
|
||||
|
||||
if (!state->init)
|
||||
return -ENODEV;
|
||||
|
||||
*freq = state->frequency;
|
||||
return 0;
|
||||
}
|
||||
@ -2142,6 +2164,9 @@ static int mt2063_get_bandwidth(struct dvb_frontend *fe, u32 *bw)
|
||||
|
||||
dprintk(2, "\n");
|
||||
|
||||
if (!state->init)
|
||||
return -ENODEV;
|
||||
|
||||
*bw = state->AS_Data.f_out_bw - 750000;
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user