[media] em28xx: move usb buffer pre-allocation and transfer uninit from the core to the dvb extension
Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
Родитель
4e1702402e
Коммит
27ba0dac2d
|
@ -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)
|
||||||
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)
|
||||||
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)
|
||||||
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. */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче