Commit 27ba0dac authored by Frank Schaefer's avatar Frank Schaefer Committed by Mauro Carvalho Chehab

[media] em28xx: move usb buffer pre-allocation and transfer uninit from the...

[media] em28xx: move usb buffer pre-allocation and transfer uninit from the core to the dvb extension
Signed-off-by: default avatarFrank Schäfer <fschaefer.oss@googlemail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 4e170240
...@@ -3339,26 +3339,6 @@ static int em28xx_usb_probe(struct usb_interface *interface, ...@@ -3339,26 +3339,6 @@ static int em28xx_usb_probe(struct usb_interface *interface,
em28xx_info("dvb set to %s mode.\n", em28xx_info("dvb set to %s mode.\n",
dev->dvb_xfer_bulk ? "bulk" : "isoc"); dev->dvb_xfer_bulk ? "bulk" : "isoc");
/* pre-allocate DVB usb transfer buffers */
if (dev->dvb_xfer_bulk) {
retval = em28xx_alloc_urbs(dev, EM28XX_DIGITAL_MODE,
dev->dvb_xfer_bulk,
EM28XX_DVB_NUM_BUFS,
512,
EM28XX_DVB_BULK_PACKET_MULTIPLIER);
} else {
retval = em28xx_alloc_urbs(dev, EM28XX_DIGITAL_MODE,
dev->dvb_xfer_bulk,
EM28XX_DVB_NUM_BUFS,
dev->dvb_max_pkt_size_isoc,
EM28XX_DVB_NUM_ISOC_PACKETS);
}
if (retval) {
printk(DRIVER_NAME
": Failed to pre-allocate USB transfer buffers for DVB.\n");
goto err_free;
}
} }
request_modules(dev); request_modules(dev);
...@@ -3416,7 +3396,6 @@ static void em28xx_usb_disconnect(struct usb_interface *interface) ...@@ -3416,7 +3396,6 @@ static void em28xx_usb_disconnect(struct usb_interface *interface)
video_device_node_name(dev->vdev)); video_device_node_name(dev->vdev));
em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE); em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
em28xx_uninit_usb_xfer(dev, EM28XX_DIGITAL_MODE);
} }
mutex_unlock(&dev->lock); mutex_unlock(&dev->lock);
......
...@@ -1018,6 +1018,27 @@ static int em28xx_dvb_init(struct em28xx *dev) ...@@ -1018,6 +1018,27 @@ static int em28xx_dvb_init(struct em28xx *dev)
dev->dvb = dvb; dev->dvb = dvb;
dvb->fe[0] = dvb->fe[1] = NULL; dvb->fe[0] = dvb->fe[1] = NULL;
/* pre-allocate DVB usb transfer buffers */
if (dev->dvb_xfer_bulk) {
result = em28xx_alloc_urbs(dev, EM28XX_DIGITAL_MODE,
dev->dvb_xfer_bulk,
EM28XX_DVB_NUM_BUFS,
512,
EM28XX_DVB_BULK_PACKET_MULTIPLIER);
} else {
result = em28xx_alloc_urbs(dev, EM28XX_DIGITAL_MODE,
dev->dvb_xfer_bulk,
EM28XX_DVB_NUM_BUFS,
dev->dvb_max_pkt_size_isoc,
EM28XX_DVB_NUM_ISOC_PACKETS);
}
if (result) {
em28xx_errdev("em28xx_dvb: failed to pre-allocate USB transfer buffers for DVB.\n");
kfree(dvb);
dev->dvb = NULL;
return result;
}
mutex_lock(&dev->lock); mutex_lock(&dev->lock);
em28xx_set_mode(dev, EM28XX_DIGITAL_MODE); em28xx_set_mode(dev, EM28XX_DIGITAL_MODE);
/* init frontend */ /* init frontend */
...@@ -1454,6 +1475,8 @@ static int em28xx_dvb_fini(struct em28xx *dev) ...@@ -1454,6 +1475,8 @@ static int em28xx_dvb_fini(struct em28xx *dev)
if (dev->dvb) { if (dev->dvb) {
struct em28xx_dvb *dvb = dev->dvb; struct em28xx_dvb *dvb = dev->dvb;
em28xx_uninit_usb_xfer(dev, EM28XX_DIGITAL_MODE);
if (dev->disconnected) { if (dev->disconnected) {
/* We cannot tell the device to sleep /* We cannot tell the device to sleep
* once it has been unplugged. */ * once it has been unplugged. */
......
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