Commit 5a19f312 authored by Patrick Boettcher's avatar Patrick Boettcher Committed by Mauro Carvalho Chehab

V4L/DVB (4465): Attach the dib3000mc correctly

Flynn Marquardt found out that there is problem with the new dib3000mc-driver
when using with the real dib3000mc. It resulted in a segfault.
Fixed two things: use the correct I2C address and do not attach a tuner, when
the demod was previously failing.
Signed-off-by: default avatarPatrick Boettcher <pb@linuxtv.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 42afd061
...@@ -230,15 +230,19 @@ static struct dib3000mc_config mod3000p_dib3000p_config = { ...@@ -230,15 +230,19 @@ static struct dib3000mc_config mod3000p_dib3000p_config = {
int dibusb_dib3000mc_frontend_attach(struct dvb_usb_device *d) int dibusb_dib3000mc_frontend_attach(struct dvb_usb_device *d)
{ {
if (dib3000mc_attach(&d->i2c_adap, 1, DEFAULT_DIB3000P_I2C_ADDRESS, 0, &mod3000p_dib3000p_config, &d->fe) == 0) { int ret;
if ((ret = dib3000mc_attach(&d->i2c_adap, 1, DEFAULT_DIB3000P_I2C_ADDRESS, 0, &mod3000p_dib3000p_config, &d->fe)) != 0)
return ret;
if ((ret = dib3000mc_attach(&d->i2c_adap, 1, DEFAULT_DIB3000MC_I2C_ADDRESS, 0, &mod3000p_dib3000p_config, &d->fe)) != 0)
return ret;
if (d->priv != NULL) { if (d->priv != NULL) {
struct dibusb_state *st = d->priv; struct dibusb_state *st = d->priv;
st->ops.pid_parse = dib3000mc_pid_parse; st->ops.pid_parse = dib3000mc_pid_parse;
st->ops.pid_ctrl = dib3000mc_pid_control; st->ops.pid_ctrl = dib3000mc_pid_control;
} }
return 0; return 0;
}
return -ENODEV;
} }
EXPORT_SYMBOL(dibusb_dib3000mc_frontend_attach); EXPORT_SYMBOL(dibusb_dib3000mc_frontend_attach);
......
...@@ -191,11 +191,12 @@ int dvb_usb_fe_init(struct dvb_usb_device* d) ...@@ -191,11 +191,12 @@ int dvb_usb_fe_init(struct dvb_usb_device* d)
d->fe = NULL; d->fe = NULL;
return -ENODEV; return -ENODEV;
} }
} else
err("no frontend was attached by '%s'",d->desc->name);
/* only attach the tuner if the demod is there */
if (d->props.tuner_attach != NULL) if (d->props.tuner_attach != NULL)
d->props.tuner_attach(d); d->props.tuner_attach(d);
} else
err("no frontend was attached by '%s'",d->desc->name);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment