diff options
author | Patrick Boettcher <pb@linuxtv.org> | 2006-08-02 07:44:31 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2006-09-26 10:53:47 -0400 |
commit | 5a19f312162abd1356cdcda608f2b13502a383cc (patch) | |
tree | ec54b98becf8e47f215587f33e26784fc4011732 /drivers/media/dvb/dvb-usb/dibusb-common.c | |
parent | 42afd061700edb43bb082bc65a2ddde431151d6b (diff) |
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: Patrick Boettcher <pb@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/dvb/dvb-usb/dibusb-common.c')
-rw-r--r-- | drivers/media/dvb/dvb-usb/dibusb-common.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/drivers/media/dvb/dvb-usb/dibusb-common.c b/drivers/media/dvb/dvb-usb/dibusb-common.c index 390ced9ae4bc..6723c153e3f4 100644 --- a/drivers/media/dvb/dvb-usb/dibusb-common.c +++ b/drivers/media/dvb/dvb-usb/dibusb-common.c | |||
@@ -230,15 +230,19 @@ static struct dib3000mc_config mod3000p_dib3000p_config = { | |||
230 | 230 | ||
231 | int dibusb_dib3000mc_frontend_attach(struct dvb_usb_device *d) | 231 | int dibusb_dib3000mc_frontend_attach(struct dvb_usb_device *d) |
232 | { | 232 | { |
233 | if (dib3000mc_attach(&d->i2c_adap, 1, DEFAULT_DIB3000P_I2C_ADDRESS, 0, &mod3000p_dib3000p_config, &d->fe) == 0) { | 233 | int ret; |
234 | if (d->priv != NULL) { | 234 | if ((ret = dib3000mc_attach(&d->i2c_adap, 1, DEFAULT_DIB3000P_I2C_ADDRESS, 0, &mod3000p_dib3000p_config, &d->fe)) != 0) |
235 | struct dibusb_state *st = d->priv; | 235 | return ret; |
236 | st->ops.pid_parse = dib3000mc_pid_parse; | 236 | |
237 | st->ops.pid_ctrl = dib3000mc_pid_control; | 237 | if ((ret = dib3000mc_attach(&d->i2c_adap, 1, DEFAULT_DIB3000MC_I2C_ADDRESS, 0, &mod3000p_dib3000p_config, &d->fe)) != 0) |
238 | } | 238 | return ret; |
239 | return 0; | 239 | |
240 | if (d->priv != NULL) { | ||
241 | struct dibusb_state *st = d->priv; | ||
242 | st->ops.pid_parse = dib3000mc_pid_parse; | ||
243 | st->ops.pid_ctrl = dib3000mc_pid_control; | ||
240 | } | 244 | } |
241 | return -ENODEV; | 245 | return 0; |
242 | } | 246 | } |
243 | EXPORT_SYMBOL(dibusb_dib3000mc_frontend_attach); | 247 | EXPORT_SYMBOL(dibusb_dib3000mc_frontend_attach); |
244 | 248 | ||