diff options
-rw-r--r-- | drivers/media/usb/em28xx/em28xx-cards.c | 21 | ||||
-rw-r--r-- | drivers/media/usb/em28xx/em28xx-dvb.c | 23 |
2 files changed, 23 insertions, 21 deletions
diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c index 6efb9029381b..7ae6e502da66 100644 --- a/drivers/media/usb/em28xx/em28xx-cards.c +++ b/drivers/media/usb/em28xx/em28xx-cards.c | |||
@@ -3339,26 +3339,6 @@ static int em28xx_usb_probe(struct usb_interface *interface, | |||
3339 | 3339 | ||
3340 | em28xx_info("dvb set to %s mode.\n", | 3340 | em28xx_info("dvb set to %s mode.\n", |
3341 | dev->dvb_xfer_bulk ? "bulk" : "isoc"); | 3341 | dev->dvb_xfer_bulk ? "bulk" : "isoc"); |
3342 | |||
3343 | /* pre-allocate DVB usb transfer buffers */ | ||
3344 | if (dev->dvb_xfer_bulk) { | ||
3345 | retval = em28xx_alloc_urbs(dev, EM28XX_DIGITAL_MODE, | ||
3346 | dev->dvb_xfer_bulk, | ||
3347 | EM28XX_DVB_NUM_BUFS, | ||
3348 | 512, | ||
3349 | EM28XX_DVB_BULK_PACKET_MULTIPLIER); | ||
3350 | } else { | ||
3351 | retval = em28xx_alloc_urbs(dev, EM28XX_DIGITAL_MODE, | ||
3352 | dev->dvb_xfer_bulk, | ||
3353 | EM28XX_DVB_NUM_BUFS, | ||
3354 | dev->dvb_max_pkt_size_isoc, | ||
3355 | EM28XX_DVB_NUM_ISOC_PACKETS); | ||
3356 | } | ||
3357 | if (retval) { | ||
3358 | printk(DRIVER_NAME | ||
3359 | ": Failed to pre-allocate USB transfer buffers for DVB.\n"); | ||
3360 | goto err_free; | ||
3361 | } | ||
3362 | } | 3342 | } |
3363 | 3343 | ||
3364 | request_modules(dev); | 3344 | request_modules(dev); |
@@ -3416,7 +3396,6 @@ static void em28xx_usb_disconnect(struct usb_interface *interface) | |||
3416 | video_device_node_name(dev->vdev)); | 3396 | video_device_node_name(dev->vdev)); |
3417 | 3397 | ||
3418 | em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE); | 3398 | em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE); |
3419 | em28xx_uninit_usb_xfer(dev, EM28XX_DIGITAL_MODE); | ||
3420 | } | 3399 | } |
3421 | mutex_unlock(&dev->lock); | 3400 | mutex_unlock(&dev->lock); |
3422 | 3401 | ||
diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c index 7dba17576edf..5ea563e3f0e4 100644 --- a/drivers/media/usb/em28xx/em28xx-dvb.c +++ b/drivers/media/usb/em28xx/em28xx-dvb.c | |||
@@ -1018,6 +1018,27 @@ static int em28xx_dvb_init(struct em28xx *dev) | |||
1018 | dev->dvb = dvb; | 1018 | dev->dvb = dvb; |
1019 | dvb->fe[0] = dvb->fe[1] = NULL; | 1019 | dvb->fe[0] = dvb->fe[1] = NULL; |
1020 | 1020 | ||
1021 | /* pre-allocate DVB usb transfer buffers */ | ||
1022 | if (dev->dvb_xfer_bulk) { | ||
1023 | result = em28xx_alloc_urbs(dev, EM28XX_DIGITAL_MODE, | ||
1024 | dev->dvb_xfer_bulk, | ||
1025 | EM28XX_DVB_NUM_BUFS, | ||
1026 | 512, | ||
1027 | EM28XX_DVB_BULK_PACKET_MULTIPLIER); | ||
1028 | } else { | ||
1029 | result = em28xx_alloc_urbs(dev, EM28XX_DIGITAL_MODE, | ||
1030 | dev->dvb_xfer_bulk, | ||
1031 | EM28XX_DVB_NUM_BUFS, | ||
1032 | dev->dvb_max_pkt_size_isoc, | ||
1033 | EM28XX_DVB_NUM_ISOC_PACKETS); | ||
1034 | } | ||
1035 | if (result) { | ||
1036 | em28xx_errdev("em28xx_dvb: failed to pre-allocate USB transfer buffers for DVB.\n"); | ||
1037 | kfree(dvb); | ||
1038 | dev->dvb = NULL; | ||
1039 | return result; | ||
1040 | } | ||
1041 | |||
1021 | mutex_lock(&dev->lock); | 1042 | mutex_lock(&dev->lock); |
1022 | em28xx_set_mode(dev, EM28XX_DIGITAL_MODE); | 1043 | em28xx_set_mode(dev, EM28XX_DIGITAL_MODE); |
1023 | /* init frontend */ | 1044 | /* init frontend */ |
@@ -1454,6 +1475,8 @@ static int em28xx_dvb_fini(struct em28xx *dev) | |||
1454 | if (dev->dvb) { | 1475 | if (dev->dvb) { |
1455 | struct em28xx_dvb *dvb = dev->dvb; | 1476 | struct em28xx_dvb *dvb = dev->dvb; |
1456 | 1477 | ||
1478 | em28xx_uninit_usb_xfer(dev, EM28XX_DIGITAL_MODE); | ||
1479 | |||
1457 | if (dev->disconnected) { | 1480 | if (dev->disconnected) { |
1458 | /* We cannot tell the device to sleep | 1481 | /* We cannot tell the device to sleep |
1459 | * once it has been unplugged. */ | 1482 | * once it has been unplugged. */ |