diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/video/pvrusb2/pvrusb2-dvb.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/media/video/pvrusb2/pvrusb2-dvb.c b/drivers/media/video/pvrusb2/pvrusb2-dvb.c index f32d052ff4e6..177240051674 100644 --- a/drivers/media/video/pvrusb2/pvrusb2-dvb.c +++ b/drivers/media/video/pvrusb2/pvrusb2-dvb.c | |||
@@ -401,16 +401,25 @@ int pvr2_dvb_init(struct pvr2_context *pvr) | |||
401 | { | 401 | { |
402 | int ret = 0; | 402 | int ret = 0; |
403 | struct pvr2_dvb_adapter *adap; | 403 | struct pvr2_dvb_adapter *adap; |
404 | if (!pvr->hdw->hdw_desc->dvb_props) { | ||
405 | /* Device lacks a digital interface so don't set up | ||
406 | the DVB side of the driver either. For now. */ | ||
407 | return 0; | ||
408 | } | ||
404 | adap = &pvr->hdw->dvb; | 409 | adap = &pvr->hdw->dvb; |
405 | pvr2_channel_init(&adap->channel, pvr); | 410 | pvr2_channel_init(&adap->channel, pvr); |
406 | adap->channel.check_func = pvr2_dvb_internal_check; | 411 | adap->channel.check_func = pvr2_dvb_internal_check; |
407 | init_waitqueue_head(&adap->buffer_wait_data); | 412 | init_waitqueue_head(&adap->buffer_wait_data); |
408 | mutex_init(&pvr->hdw->dvb.lock); | 413 | mutex_init(&pvr->hdw->dvb.lock); |
409 | ret = pvr2_dvb_adapter_init(&pvr->hdw->dvb); | 414 | ret = pvr2_dvb_adapter_init(&pvr->hdw->dvb); |
410 | if (ret < 0) goto fail; | 415 | if (ret < 0) goto fail1; |
411 | ret = pvr2_dvb_frontend_init(&pvr->hdw->dvb); | 416 | ret = pvr2_dvb_frontend_init(&pvr->hdw->dvb); |
412 | return ret; | 417 | if (ret < 0) goto fail2; |
413 | fail: | 418 | return 0; |
419 | |||
420 | fail2: | ||
421 | pvr2_dvb_adapter_exit(adap); | ||
422 | fail1: | ||
414 | pvr2_channel_done(&adap->channel); | 423 | pvr2_channel_done(&adap->channel); |
415 | return ret; | 424 | return ret; |
416 | } | 425 | } |