aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/usb/em28xx/em28xx-cards.c21
-rw-r--r--drivers/media/usb/em28xx/em28xx-dvb.c23
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. */