Skip to content

Commit

Permalink
[media] mt2063: don't crash if device is not initialized
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Mauro Carvalho Chehab committed Jan 5, 2012
1 parent b5a9106 commit 1b0bfee
Showing 1 changed file with 25 additions and 0 deletions.
25 changes: 25 additions & 0 deletions drivers/media/common/tuners/mt2063.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -1974,6 +1976,8 @@ static int mt2063_init(struct dvb_frontend *fe)
if (status < 0)
return status;

state->init = true;

return 0;
}

Expand All @@ -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)
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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;
}
Expand All @@ -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;
}
Expand Down

0 comments on commit 1b0bfee

Please sign in to comment.