Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+0 −21
Original line number Diff line number Diff line
@@ -3339,26 +3339,6 @@ static int em28xx_usb_probe(struct usb_interface *interface,

		em28xx_info("dvb set to %s mode.\n",
			    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);
@@ -3416,7 +3396,6 @@ static void em28xx_usb_disconnect(struct usb_interface *interface)
			    video_device_node_name(dev->vdev));

		em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
		em28xx_uninit_usb_xfer(dev, EM28XX_DIGITAL_MODE);
	}
	mutex_unlock(&dev->lock);

+23 −0
Original line number Diff line number Diff line
@@ -1018,6 +1018,27 @@ static int em28xx_dvb_init(struct em28xx *dev)
	dev->dvb = dvb;
	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);
	em28xx_set_mode(dev, EM28XX_DIGITAL_MODE);
	/* init frontend */
@@ -1454,6 +1475,8 @@ static int em28xx_dvb_fini(struct em28xx *dev)
	if (dev->dvb) {
		struct em28xx_dvb *dvb = dev->dvb;

		em28xx_uninit_usb_xfer(dev, EM28XX_DIGITAL_MODE);

		if (dev->disconnected) {
			/* We cannot tell the device to sleep
			 * once it has been unplugged. */