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@xxxxxxxxxx> --- drivers/media/common/tuners/mt2063.c | 25 +++++++++++++++++++++++++ 1 files changed, 25 insertions(+), 0 deletions(-) diff --git a/drivers/media/common/tuners/mt2063.c b/drivers/media/common/tuners/mt2063.c index 92653a9..db347d9 100644 --- a/drivers/media/common/tuners/mt2063.c +++ b/drivers/media/common/tuners/mt2063.c @@ -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; } -- 1.7.7.5 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html