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

Commit ce3556bd authored by Terry Heo's avatar Terry Heo Committed by Mauro Carvalho Chehab
Browse files

[media] cx231xx: fix bulk transfer mode



The current cx231xx driver doesn't work with bulk transfer mode.
This patch makes it possible to use bulk transfer mode.

Signed-off-by: default avatarTerry Heo <terryheo@google.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 18a8560c
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -914,6 +914,7 @@ EXPORT_SYMBOL_GPL(cx231xx_uninit_isoc);
 */
void cx231xx_uninit_bulk(struct cx231xx *dev)
{
	struct cx231xx_dmaqueue *dma_q = &dev->video_mode.vidq;
	struct urb *urb;
	int i;

@@ -931,7 +932,7 @@ void cx231xx_uninit_bulk(struct cx231xx *dev)
			if (dev->video_mode.bulk_ctl.transfer_buffer[i]) {
				usb_free_coherent(dev->udev,
						urb->transfer_buffer_length,
						dev->video_mode.isoc_ctl.
						dev->video_mode.bulk_ctl.
						transfer_buffer[i],
						urb->transfer_dma);
			}
@@ -943,10 +944,12 @@ void cx231xx_uninit_bulk(struct cx231xx *dev)

	kfree(dev->video_mode.bulk_ctl.urb);
	kfree(dev->video_mode.bulk_ctl.transfer_buffer);
	kfree(dma_q->p_left_data);

	dev->video_mode.bulk_ctl.urb = NULL;
	dev->video_mode.bulk_ctl.transfer_buffer = NULL;
	dev->video_mode.bulk_ctl.num_bufs = 0;
	dma_q->p_left_data = NULL;

	if (dev->mode_tv == 0)
		cx231xx_capture_start(dev, 0, Raw_Video);
@@ -1196,6 +1199,16 @@ int cx231xx_init_bulk(struct cx231xx *dev, int max_packets,
				  sb_size, cx231xx_bulk_irq_callback, dma_q);
	}

	/* clear halt */
	rc = usb_clear_halt(dev->udev, dev->video_mode.bulk_ctl.urb[0]->pipe);
	if (rc < 0) {
		dev_err(dev->dev,
			"failed to clear USB bulk endpoint stall/halt condition (error=%i)\n",
			rc);
		cx231xx_uninit_bulk(dev);
		return rc;
	}

	init_waitqueue_head(&dma_q->wq);

	/* submit urbs and enables IRQ */