xref: /openbmc/linux/drivers/media/usb/gspca/gspca.c (revision 151f4e2b)
1 /*
2  * Main USB camera driver
3  *
4  * Copyright (C) 2008-2011 Jean-François Moine <http://moinejf.free.fr>
5  *
6  * Camera button input handling by Márton Németh
7  * Copyright (C) 2009-2010 Márton Németh <nm127@freemail.hu>
8  *
9  * This program is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU General Public License as published by the
11  * Free Software Foundation; either version 2 of the License, or (at your
12  * option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17  * for more details.
18  */
19 
20 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
21 
22 #define GSPCA_VERSION	"2.14.0"
23 
24 #include <linux/init.h>
25 #include <linux/fs.h>
26 #include <linux/vmalloc.h>
27 #include <linux/sched.h>
28 #include <linux/slab.h>
29 #include <linux/mm.h>
30 #include <linux/string.h>
31 #include <linux/pagemap.h>
32 #include <linux/io.h>
33 #include <asm/page.h>
34 #include <linux/uaccess.h>
35 #include <linux/ktime.h>
36 #include <media/v4l2-ioctl.h>
37 #include <media/v4l2-ctrls.h>
38 #include <media/v4l2-fh.h>
39 #include <media/v4l2-event.h>
40 
41 #include "gspca.h"
42 
43 #if IS_ENABLED(CONFIG_INPUT)
44 #include <linux/input.h>
45 #include <linux/usb/input.h>
46 #endif
47 
48 /* global values */
49 #define DEF_NURBS 3		/* default number of URBs */
50 #if DEF_NURBS > MAX_NURBS
51 #error "DEF_NURBS too big"
52 #endif
53 
54 MODULE_AUTHOR("Jean-François Moine <http://moinejf.free.fr>");
55 MODULE_DESCRIPTION("GSPCA USB Camera Driver");
56 MODULE_LICENSE("GPL");
57 MODULE_VERSION(GSPCA_VERSION);
58 
59 int gspca_debug;
60 EXPORT_SYMBOL(gspca_debug);
61 
62 static void PDEBUG_MODE(struct gspca_dev *gspca_dev, int debug, char *txt,
63 			__u32 pixfmt, int w, int h)
64 {
65 	if ((pixfmt >> 24) >= '0' && (pixfmt >> 24) <= 'z') {
66 		gspca_dbg(gspca_dev, debug, "%s %c%c%c%c %dx%d\n",
67 			  txt,
68 			  pixfmt & 0xff,
69 			  (pixfmt >> 8) & 0xff,
70 			  (pixfmt >> 16) & 0xff,
71 			  pixfmt >> 24,
72 			  w, h);
73 	} else {
74 		gspca_dbg(gspca_dev, debug, "%s 0x%08x %dx%d\n",
75 			  txt,
76 			  pixfmt,
77 			  w, h);
78 	}
79 }
80 
81 /* specific memory types - !! should be different from V4L2_MEMORY_xxx */
82 #define GSPCA_MEMORY_NO 0	/* V4L2_MEMORY_xxx starts from 1 */
83 #define GSPCA_MEMORY_READ 7
84 
85 /*
86  * Input and interrupt endpoint handling functions
87  */
88 #if IS_ENABLED(CONFIG_INPUT)
89 static void int_irq(struct urb *urb)
90 {
91 	struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context;
92 	int ret;
93 
94 	ret = urb->status;
95 	switch (ret) {
96 	case 0:
97 		if (gspca_dev->sd_desc->int_pkt_scan(gspca_dev,
98 		    urb->transfer_buffer, urb->actual_length) < 0) {
99 			gspca_err(gspca_dev, "Unknown packet received\n");
100 		}
101 		break;
102 
103 	case -ENOENT:
104 	case -ECONNRESET:
105 	case -ENODEV:
106 	case -ESHUTDOWN:
107 		/* Stop is requested either by software or hardware is gone,
108 		 * keep the ret value non-zero and don't resubmit later.
109 		 */
110 		break;
111 
112 	default:
113 		gspca_err(gspca_dev, "URB error %i, resubmitting\n",
114 			  urb->status);
115 		urb->status = 0;
116 		ret = 0;
117 	}
118 
119 	if (ret == 0) {
120 		ret = usb_submit_urb(urb, GFP_ATOMIC);
121 		if (ret < 0)
122 			pr_err("Resubmit URB failed with error %i\n", ret);
123 	}
124 }
125 
126 static int gspca_input_connect(struct gspca_dev *dev)
127 {
128 	struct input_dev *input_dev;
129 	int err = 0;
130 
131 	dev->input_dev = NULL;
132 	if (dev->sd_desc->int_pkt_scan || dev->sd_desc->other_input)  {
133 		input_dev = input_allocate_device();
134 		if (!input_dev)
135 			return -ENOMEM;
136 
137 		usb_make_path(dev->dev, dev->phys, sizeof(dev->phys));
138 		strlcat(dev->phys, "/input0", sizeof(dev->phys));
139 
140 		input_dev->name = dev->sd_desc->name;
141 		input_dev->phys = dev->phys;
142 
143 		usb_to_input_id(dev->dev, &input_dev->id);
144 
145 		input_dev->evbit[0] = BIT_MASK(EV_KEY);
146 		input_dev->keybit[BIT_WORD(KEY_CAMERA)] = BIT_MASK(KEY_CAMERA);
147 		input_dev->dev.parent = &dev->dev->dev;
148 
149 		err = input_register_device(input_dev);
150 		if (err) {
151 			pr_err("Input device registration failed with error %i\n",
152 			       err);
153 			input_dev->dev.parent = NULL;
154 			input_free_device(input_dev);
155 		} else {
156 			dev->input_dev = input_dev;
157 		}
158 	}
159 
160 	return err;
161 }
162 
163 static int alloc_and_submit_int_urb(struct gspca_dev *gspca_dev,
164 			  struct usb_endpoint_descriptor *ep)
165 {
166 	unsigned int buffer_len;
167 	int interval;
168 	struct urb *urb;
169 	struct usb_device *dev;
170 	void *buffer = NULL;
171 	int ret = -EINVAL;
172 
173 	buffer_len = le16_to_cpu(ep->wMaxPacketSize);
174 	interval = ep->bInterval;
175 	gspca_dbg(gspca_dev, D_CONF, "found int in endpoint: 0x%x, buffer_len=%u, interval=%u\n",
176 		  ep->bEndpointAddress, buffer_len, interval);
177 
178 	dev = gspca_dev->dev;
179 
180 	urb = usb_alloc_urb(0, GFP_KERNEL);
181 	if (!urb) {
182 		ret = -ENOMEM;
183 		goto error;
184 	}
185 
186 	buffer = usb_alloc_coherent(dev, buffer_len,
187 				GFP_KERNEL, &urb->transfer_dma);
188 	if (!buffer) {
189 		ret = -ENOMEM;
190 		goto error_buffer;
191 	}
192 	usb_fill_int_urb(urb, dev,
193 		usb_rcvintpipe(dev, ep->bEndpointAddress),
194 		buffer, buffer_len,
195 		int_irq, (void *)gspca_dev, interval);
196 	urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
197 	ret = usb_submit_urb(urb, GFP_KERNEL);
198 	if (ret < 0) {
199 		gspca_err(gspca_dev, "submit int URB failed with error %i\n",
200 			  ret);
201 		goto error_submit;
202 	}
203 	gspca_dev->int_urb = urb;
204 	return ret;
205 
206 error_submit:
207 	usb_free_coherent(dev,
208 			  urb->transfer_buffer_length,
209 			  urb->transfer_buffer,
210 			  urb->transfer_dma);
211 error_buffer:
212 	usb_free_urb(urb);
213 error:
214 	return ret;
215 }
216 
217 static void gspca_input_create_urb(struct gspca_dev *gspca_dev)
218 {
219 	struct usb_interface *intf;
220 	struct usb_host_interface *intf_desc;
221 	struct usb_endpoint_descriptor *ep;
222 	int i;
223 
224 	if (gspca_dev->sd_desc->int_pkt_scan)  {
225 		intf = usb_ifnum_to_if(gspca_dev->dev, gspca_dev->iface);
226 		intf_desc = intf->cur_altsetting;
227 		for (i = 0; i < intf_desc->desc.bNumEndpoints; i++) {
228 			ep = &intf_desc->endpoint[i].desc;
229 			if (usb_endpoint_dir_in(ep) &&
230 			    usb_endpoint_xfer_int(ep)) {
231 
232 				alloc_and_submit_int_urb(gspca_dev, ep);
233 				break;
234 			}
235 		}
236 	}
237 }
238 
239 static void gspca_input_destroy_urb(struct gspca_dev *gspca_dev)
240 {
241 	struct urb *urb;
242 
243 	urb = gspca_dev->int_urb;
244 	if (urb) {
245 		gspca_dev->int_urb = NULL;
246 		usb_kill_urb(urb);
247 		usb_free_coherent(gspca_dev->dev,
248 				  urb->transfer_buffer_length,
249 				  urb->transfer_buffer,
250 				  urb->transfer_dma);
251 		usb_free_urb(urb);
252 	}
253 }
254 #else
255 static inline void gspca_input_destroy_urb(struct gspca_dev *gspca_dev)
256 {
257 }
258 
259 static inline void gspca_input_create_urb(struct gspca_dev *gspca_dev)
260 {
261 }
262 
263 static inline int gspca_input_connect(struct gspca_dev *dev)
264 {
265 	return 0;
266 }
267 #endif
268 
269 /*
270  * fill a video frame from an URB and resubmit
271  */
272 static void fill_frame(struct gspca_dev *gspca_dev,
273 			struct urb *urb)
274 {
275 	u8 *data;		/* address of data in the iso message */
276 	int i, len, st;
277 	cam_pkt_op pkt_scan;
278 
279 	if (urb->status != 0) {
280 		if (urb->status == -ESHUTDOWN)
281 			return;		/* disconnection */
282 #ifdef CONFIG_PM
283 		if (gspca_dev->frozen)
284 			return;
285 #endif
286 		gspca_err(gspca_dev, "urb status: %d\n", urb->status);
287 		urb->status = 0;
288 		goto resubmit;
289 	}
290 	pkt_scan = gspca_dev->sd_desc->pkt_scan;
291 	for (i = 0; i < urb->number_of_packets; i++) {
292 		len = urb->iso_frame_desc[i].actual_length;
293 
294 		/* check the packet status and length */
295 		st = urb->iso_frame_desc[i].status;
296 		if (st) {
297 			gspca_dbg(gspca_dev, D_PACK, "ISOC data error: [%d] len=%d, status=%d\n",
298 			       i, len, st);
299 			gspca_dev->last_packet_type = DISCARD_PACKET;
300 			continue;
301 		}
302 		if (len == 0) {
303 			if (gspca_dev->empty_packet == 0)
304 				gspca_dev->empty_packet = 1;
305 			continue;
306 		}
307 
308 		/* let the packet be analyzed by the subdriver */
309 		gspca_dbg(gspca_dev, D_PACK, "packet [%d] o:%d l:%d\n",
310 			  i, urb->iso_frame_desc[i].offset, len);
311 		data = (u8 *) urb->transfer_buffer
312 					+ urb->iso_frame_desc[i].offset;
313 		pkt_scan(gspca_dev, data, len);
314 	}
315 
316 resubmit:
317 	if (!gspca_dev->streaming)
318 		return;
319 	/* resubmit the URB */
320 	st = usb_submit_urb(urb, GFP_ATOMIC);
321 	if (st < 0)
322 		pr_err("usb_submit_urb() ret %d\n", st);
323 }
324 
325 /*
326  * ISOC message interrupt from the USB device
327  *
328  * Analyse each packet and call the subdriver for copy to the frame buffer.
329  */
330 static void isoc_irq(struct urb *urb)
331 {
332 	struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context;
333 
334 	gspca_dbg(gspca_dev, D_PACK, "isoc irq\n");
335 	if (!gspca_dev->streaming)
336 		return;
337 	fill_frame(gspca_dev, urb);
338 }
339 
340 /*
341  * bulk message interrupt from the USB device
342  */
343 static void bulk_irq(struct urb *urb)
344 {
345 	struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context;
346 	int st;
347 
348 	gspca_dbg(gspca_dev, D_PACK, "bulk irq\n");
349 	if (!gspca_dev->streaming)
350 		return;
351 	switch (urb->status) {
352 	case 0:
353 		break;
354 	case -ESHUTDOWN:
355 		return;		/* disconnection */
356 	default:
357 #ifdef CONFIG_PM
358 		if (gspca_dev->frozen)
359 			return;
360 #endif
361 		gspca_err(gspca_dev, "urb status: %d\n", urb->status);
362 		urb->status = 0;
363 		goto resubmit;
364 	}
365 
366 	gspca_dbg(gspca_dev, D_PACK, "packet l:%d\n", urb->actual_length);
367 	gspca_dev->sd_desc->pkt_scan(gspca_dev,
368 				urb->transfer_buffer,
369 				urb->actual_length);
370 
371 resubmit:
372 	if (!gspca_dev->streaming)
373 		return;
374 	/* resubmit the URB */
375 	if (gspca_dev->cam.bulk_nurbs != 0) {
376 		st = usb_submit_urb(urb, GFP_ATOMIC);
377 		if (st < 0)
378 			pr_err("usb_submit_urb() ret %d\n", st);
379 	}
380 }
381 
382 /*
383  * add data to the current frame
384  *
385  * This function is called by the subdrivers at interrupt level.
386  *
387  * To build a frame, these ones must add
388  *	- one FIRST_PACKET
389  *	- 0 or many INTER_PACKETs
390  *	- one LAST_PACKET
391  * DISCARD_PACKET invalidates the whole frame.
392  */
393 void gspca_frame_add(struct gspca_dev *gspca_dev,
394 			enum gspca_packet_type packet_type,
395 			const u8 *data,
396 			int len)
397 {
398 	struct gspca_buffer *buf;
399 	unsigned long flags;
400 
401 	gspca_dbg(gspca_dev, D_PACK, "add t:%d l:%d\n",	packet_type, len);
402 
403 	spin_lock_irqsave(&gspca_dev->qlock, flags);
404 	buf = list_first_entry_or_null(&gspca_dev->buf_list,
405 				       typeof(*buf), list);
406 	spin_unlock_irqrestore(&gspca_dev->qlock, flags);
407 
408 	if (packet_type == FIRST_PACKET) {
409 		/* if there is no queued buffer, discard the whole frame */
410 		if (!buf) {
411 			gspca_dev->last_packet_type = DISCARD_PACKET;
412 			gspca_dev->sequence++;
413 			return;
414 		}
415 		gspca_dev->image = vb2_plane_vaddr(&buf->vb.vb2_buf, 0);
416 		gspca_dev->image_len = 0;
417 	} else {
418 		switch (gspca_dev->last_packet_type) {
419 		case DISCARD_PACKET:
420 			if (packet_type == LAST_PACKET) {
421 				gspca_dev->last_packet_type = packet_type;
422 				gspca_dev->image = NULL;
423 				gspca_dev->image_len = 0;
424 			}
425 			return;
426 		case LAST_PACKET:
427 			return;
428 		}
429 	}
430 
431 	/* append the packet to the frame buffer */
432 	if (len > 0) {
433 		if (gspca_dev->image_len + len > PAGE_ALIGN(gspca_dev->pixfmt.sizeimage)) {
434 			gspca_err(gspca_dev, "frame overflow %d > %d\n",
435 				  gspca_dev->image_len + len,
436 				  PAGE_ALIGN(gspca_dev->pixfmt.sizeimage));
437 			packet_type = DISCARD_PACKET;
438 		} else {
439 /* !! image is NULL only when last pkt is LAST or DISCARD
440 			if (gspca_dev->image == NULL) {
441 				pr_err("gspca_frame_add() image == NULL\n");
442 				return;
443 			}
444  */
445 			memcpy(gspca_dev->image + gspca_dev->image_len,
446 				data, len);
447 			gspca_dev->image_len += len;
448 		}
449 	}
450 	gspca_dev->last_packet_type = packet_type;
451 
452 	/* if last packet, invalidate packet concatenation until
453 	 * next first packet, wake up the application and advance
454 	 * in the queue */
455 	if (packet_type == LAST_PACKET) {
456 		spin_lock_irqsave(&gspca_dev->qlock, flags);
457 		list_del(&buf->list);
458 		spin_unlock_irqrestore(&gspca_dev->qlock, flags);
459 		buf->vb.vb2_buf.timestamp = ktime_get_ns();
460 		vb2_set_plane_payload(&buf->vb.vb2_buf, 0,
461 				      gspca_dev->image_len);
462 		buf->vb.sequence = gspca_dev->sequence++;
463 		buf->vb.field = V4L2_FIELD_NONE;
464 		gspca_dbg(gspca_dev, D_FRAM, "frame complete len:%d\n",
465 			  gspca_dev->image_len);
466 		vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
467 		gspca_dev->image = NULL;
468 		gspca_dev->image_len = 0;
469 	}
470 }
471 EXPORT_SYMBOL(gspca_frame_add);
472 
473 static void destroy_urbs(struct gspca_dev *gspca_dev)
474 {
475 	struct urb *urb;
476 	unsigned int i;
477 
478 	gspca_dbg(gspca_dev, D_STREAM, "kill transfer\n");
479 
480 	/* Killing all URBs guarantee that no URB completion
481 	 * handler is running. Therefore, there shouldn't
482 	 * be anyone trying to access gspca_dev->urb[i]
483 	 */
484 	for (i = 0; i < MAX_NURBS; i++)
485 		usb_kill_urb(gspca_dev->urb[i]);
486 
487 	gspca_dbg(gspca_dev, D_STREAM, "releasing urbs\n");
488 	for (i = 0; i < MAX_NURBS; i++) {
489 		urb = gspca_dev->urb[i];
490 		if (!urb)
491 			continue;
492 		gspca_dev->urb[i] = NULL;
493 		usb_free_coherent(gspca_dev->dev,
494 				  urb->transfer_buffer_length,
495 				  urb->transfer_buffer,
496 				  urb->transfer_dma);
497 		usb_free_urb(urb);
498 	}
499 }
500 
501 static int gspca_set_alt0(struct gspca_dev *gspca_dev)
502 {
503 	int ret;
504 
505 	if (gspca_dev->alt == 0)
506 		return 0;
507 	ret = usb_set_interface(gspca_dev->dev, gspca_dev->iface, 0);
508 	if (ret < 0)
509 		pr_err("set alt 0 err %d\n", ret);
510 	return ret;
511 }
512 
513 /*
514  * look for an input transfer endpoint in an alternate setting.
515  *
516  * If xfer_ep is invalid, return the first valid ep found, otherwise
517  * look for exactly the ep with address equal to xfer_ep.
518  */
519 static struct usb_host_endpoint *alt_xfer(struct usb_host_interface *alt,
520 					  int xfer, int xfer_ep)
521 {
522 	struct usb_host_endpoint *ep;
523 	int i, attr;
524 
525 	for (i = 0; i < alt->desc.bNumEndpoints; i++) {
526 		ep = &alt->endpoint[i];
527 		attr = ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
528 		if (attr == xfer
529 		    && ep->desc.wMaxPacketSize != 0
530 		    && usb_endpoint_dir_in(&ep->desc)
531 		    && (xfer_ep < 0 || ep->desc.bEndpointAddress == xfer_ep))
532 			return ep;
533 	}
534 	return NULL;
535 }
536 
537 /* compute the minimum bandwidth for the current transfer */
538 static u32 which_bandwidth(struct gspca_dev *gspca_dev)
539 {
540 	u32 bandwidth;
541 
542 	/* get the (max) image size */
543 	bandwidth = gspca_dev->pixfmt.sizeimage;
544 
545 	/* if the image is compressed, estimate its mean size */
546 	if (!gspca_dev->cam.needs_full_bandwidth &&
547 	    bandwidth < gspca_dev->pixfmt.width *
548 				gspca_dev->pixfmt.height)
549 		bandwidth = bandwidth * 3 / 8;	/* 0.375 */
550 
551 	/* estimate the frame rate */
552 	if (gspca_dev->sd_desc->get_streamparm) {
553 		struct v4l2_streamparm parm;
554 
555 		gspca_dev->sd_desc->get_streamparm(gspca_dev, &parm);
556 		bandwidth *= parm.parm.capture.timeperframe.denominator;
557 		bandwidth /= parm.parm.capture.timeperframe.numerator;
558 	} else {
559 
560 		/* don't hope more than 15 fps with USB 1.1 and
561 		 * image resolution >= 640x480 */
562 		if (gspca_dev->pixfmt.width >= 640
563 		 && gspca_dev->dev->speed == USB_SPEED_FULL)
564 			bandwidth *= 15;		/* 15 fps */
565 		else
566 			bandwidth *= 30;		/* 30 fps */
567 	}
568 
569 	gspca_dbg(gspca_dev, D_STREAM, "min bandwidth: %d\n", bandwidth);
570 	return bandwidth;
571 }
572 
573 /* endpoint table */
574 #define MAX_ALT 16
575 struct ep_tb_s {
576 	u32 alt;
577 	u32 bandwidth;
578 };
579 
580 /*
581  * build the table of the endpoints
582  * and compute the minimum bandwidth for the image transfer
583  */
584 static int build_isoc_ep_tb(struct gspca_dev *gspca_dev,
585 			struct usb_interface *intf,
586 			struct ep_tb_s *ep_tb)
587 {
588 	struct usb_host_endpoint *ep;
589 	int i, j, nbalt, psize, found;
590 	u32 bandwidth, last_bw;
591 
592 	nbalt = intf->num_altsetting;
593 	if (nbalt > MAX_ALT)
594 		nbalt = MAX_ALT;	/* fixme: should warn */
595 
596 	/* build the endpoint table */
597 	i = 0;
598 	last_bw = 0;
599 	for (;;) {
600 		ep_tb->bandwidth = 2000 * 2000 * 120;
601 		found = 0;
602 		for (j = 0; j < nbalt; j++) {
603 			ep = alt_xfer(&intf->altsetting[j],
604 				      USB_ENDPOINT_XFER_ISOC,
605 				      gspca_dev->xfer_ep);
606 			if (ep == NULL)
607 				continue;
608 			if (ep->desc.bInterval == 0) {
609 				pr_err("alt %d iso endp with 0 interval\n", j);
610 				continue;
611 			}
612 			psize = le16_to_cpu(ep->desc.wMaxPacketSize);
613 			psize = (psize & 0x07ff) * (1 + ((psize >> 11) & 3));
614 			bandwidth = psize * 1000;
615 			if (gspca_dev->dev->speed == USB_SPEED_HIGH
616 			 || gspca_dev->dev->speed >= USB_SPEED_SUPER)
617 				bandwidth *= 8;
618 			bandwidth /= 1 << (ep->desc.bInterval - 1);
619 			if (bandwidth <= last_bw)
620 				continue;
621 			if (bandwidth < ep_tb->bandwidth) {
622 				ep_tb->bandwidth = bandwidth;
623 				ep_tb->alt = j;
624 				found = 1;
625 			}
626 		}
627 		if (!found)
628 			break;
629 		gspca_dbg(gspca_dev, D_STREAM, "alt %d bandwidth %d\n",
630 			  ep_tb->alt, ep_tb->bandwidth);
631 		last_bw = ep_tb->bandwidth;
632 		i++;
633 		ep_tb++;
634 	}
635 
636 	/*
637 	 * If the camera:
638 	 * has a usb audio class interface (a built in usb mic); and
639 	 * is a usb 1 full speed device; and
640 	 * uses the max full speed iso bandwidth; and
641 	 * and has more than 1 alt setting
642 	 * then skip the highest alt setting to spare bandwidth for the mic
643 	 */
644 	if (gspca_dev->audio &&
645 			gspca_dev->dev->speed == USB_SPEED_FULL &&
646 			last_bw >= 1000000 &&
647 			i > 1) {
648 		gspca_dbg(gspca_dev, D_STREAM, "dev has usb audio, skipping highest alt\n");
649 		i--;
650 		ep_tb--;
651 	}
652 
653 	/* get the requested bandwidth and start at the highest atlsetting */
654 	bandwidth = which_bandwidth(gspca_dev);
655 	ep_tb--;
656 	while (i > 1) {
657 		ep_tb--;
658 		if (ep_tb->bandwidth < bandwidth)
659 			break;
660 		i--;
661 	}
662 	return i;
663 }
664 
665 /*
666  * create the URBs for image transfer
667  */
668 static int create_urbs(struct gspca_dev *gspca_dev,
669 			struct usb_host_endpoint *ep)
670 {
671 	struct urb *urb;
672 	int n, nurbs, i, psize, npkt, bsize;
673 
674 	/* calculate the packet size and the number of packets */
675 	psize = le16_to_cpu(ep->desc.wMaxPacketSize);
676 
677 	if (!gspca_dev->cam.bulk) {		/* isoc */
678 
679 		/* See paragraph 5.9 / table 5-11 of the usb 2.0 spec. */
680 		if (gspca_dev->pkt_size == 0)
681 			psize = (psize & 0x07ff) * (1 + ((psize >> 11) & 3));
682 		else
683 			psize = gspca_dev->pkt_size;
684 		npkt = gspca_dev->cam.npkt;
685 		if (npkt == 0)
686 			npkt = 32;		/* default value */
687 		bsize = psize * npkt;
688 		gspca_dbg(gspca_dev, D_STREAM,
689 			  "isoc %d pkts size %d = bsize:%d\n",
690 			  npkt, psize, bsize);
691 		nurbs = DEF_NURBS;
692 	} else {				/* bulk */
693 		npkt = 0;
694 		bsize = gspca_dev->cam.bulk_size;
695 		if (bsize == 0)
696 			bsize = psize;
697 		gspca_dbg(gspca_dev, D_STREAM, "bulk bsize:%d\n", bsize);
698 		if (gspca_dev->cam.bulk_nurbs != 0)
699 			nurbs = gspca_dev->cam.bulk_nurbs;
700 		else
701 			nurbs = 1;
702 	}
703 
704 	for (n = 0; n < nurbs; n++) {
705 		urb = usb_alloc_urb(npkt, GFP_KERNEL);
706 		if (!urb)
707 			return -ENOMEM;
708 		gspca_dev->urb[n] = urb;
709 		urb->transfer_buffer = usb_alloc_coherent(gspca_dev->dev,
710 						bsize,
711 						GFP_KERNEL,
712 						&urb->transfer_dma);
713 
714 		if (urb->transfer_buffer == NULL) {
715 			pr_err("usb_alloc_coherent failed\n");
716 			return -ENOMEM;
717 		}
718 		urb->dev = gspca_dev->dev;
719 		urb->context = gspca_dev;
720 		urb->transfer_buffer_length = bsize;
721 		if (npkt != 0) {		/* ISOC */
722 			urb->pipe = usb_rcvisocpipe(gspca_dev->dev,
723 						    ep->desc.bEndpointAddress);
724 			urb->transfer_flags = URB_ISO_ASAP
725 					| URB_NO_TRANSFER_DMA_MAP;
726 			urb->interval = 1 << (ep->desc.bInterval - 1);
727 			urb->complete = isoc_irq;
728 			urb->number_of_packets = npkt;
729 			for (i = 0; i < npkt; i++) {
730 				urb->iso_frame_desc[i].length = psize;
731 				urb->iso_frame_desc[i].offset = psize * i;
732 			}
733 		} else {		/* bulk */
734 			urb->pipe = usb_rcvbulkpipe(gspca_dev->dev,
735 						ep->desc.bEndpointAddress);
736 			urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
737 			urb->complete = bulk_irq;
738 		}
739 	}
740 	return 0;
741 }
742 
743 /* Note: both the queue and the usb locks should be held when calling this */
744 static void gspca_stream_off(struct gspca_dev *gspca_dev)
745 {
746 	gspca_dev->streaming = false;
747 	gspca_dev->usb_err = 0;
748 	if (gspca_dev->sd_desc->stopN)
749 		gspca_dev->sd_desc->stopN(gspca_dev);
750 	destroy_urbs(gspca_dev);
751 	gspca_input_destroy_urb(gspca_dev);
752 	gspca_set_alt0(gspca_dev);
753 	if (gspca_dev->present)
754 		gspca_input_create_urb(gspca_dev);
755 	if (gspca_dev->sd_desc->stop0)
756 		gspca_dev->sd_desc->stop0(gspca_dev);
757 	gspca_dbg(gspca_dev, D_STREAM, "stream off OK\n");
758 }
759 
760 /*
761  * start the USB transfer
762  */
763 static int gspca_init_transfer(struct gspca_dev *gspca_dev)
764 {
765 	struct usb_interface *intf;
766 	struct usb_host_endpoint *ep;
767 	struct urb *urb;
768 	struct ep_tb_s ep_tb[MAX_ALT];
769 	int n, ret, xfer, alt, alt_idx;
770 
771 	/* reset the streaming variables */
772 	gspca_dev->image = NULL;
773 	gspca_dev->image_len = 0;
774 	gspca_dev->last_packet_type = DISCARD_PACKET;
775 
776 	gspca_dev->usb_err = 0;
777 
778 	/* do the specific subdriver stuff before endpoint selection */
779 	intf = usb_ifnum_to_if(gspca_dev->dev, gspca_dev->iface);
780 	gspca_dev->alt = gspca_dev->cam.bulk ? intf->num_altsetting : 0;
781 	if (gspca_dev->sd_desc->isoc_init) {
782 		ret = gspca_dev->sd_desc->isoc_init(gspca_dev);
783 		if (ret < 0)
784 			return ret;
785 	}
786 	xfer = gspca_dev->cam.bulk ? USB_ENDPOINT_XFER_BULK
787 				   : USB_ENDPOINT_XFER_ISOC;
788 
789 	/* if bulk or the subdriver forced an altsetting, get the endpoint */
790 	if (gspca_dev->alt != 0) {
791 		gspca_dev->alt--;	/* (previous version compatibility) */
792 		ep = alt_xfer(&intf->altsetting[gspca_dev->alt], xfer,
793 			      gspca_dev->xfer_ep);
794 		if (ep == NULL) {
795 			pr_err("bad altsetting %d\n", gspca_dev->alt);
796 			return -EIO;
797 		}
798 		ep_tb[0].alt = gspca_dev->alt;
799 		alt_idx = 1;
800 	} else {
801 		/* else, compute the minimum bandwidth
802 		 * and build the endpoint table */
803 		alt_idx = build_isoc_ep_tb(gspca_dev, intf, ep_tb);
804 		if (alt_idx <= 0) {
805 			pr_err("no transfer endpoint found\n");
806 			return -EIO;
807 		}
808 	}
809 
810 	/* set the highest alternate setting and
811 	 * loop until urb submit succeeds */
812 	gspca_input_destroy_urb(gspca_dev);
813 
814 	gspca_dev->alt = ep_tb[--alt_idx].alt;
815 	alt = -1;
816 	for (;;) {
817 		if (alt != gspca_dev->alt) {
818 			alt = gspca_dev->alt;
819 			if (intf->num_altsetting > 1) {
820 				ret = usb_set_interface(gspca_dev->dev,
821 							gspca_dev->iface,
822 							alt);
823 				if (ret < 0) {
824 					if (ret == -ENOSPC)
825 						goto retry; /*fixme: ugly*/
826 					pr_err("set alt %d err %d\n", alt, ret);
827 					goto out;
828 				}
829 			}
830 		}
831 		if (!gspca_dev->cam.no_urb_create) {
832 			gspca_dbg(gspca_dev, D_STREAM, "init transfer alt %d\n",
833 				  alt);
834 			ret = create_urbs(gspca_dev,
835 				alt_xfer(&intf->altsetting[alt], xfer,
836 					 gspca_dev->xfer_ep));
837 			if (ret < 0) {
838 				destroy_urbs(gspca_dev);
839 				goto out;
840 			}
841 		}
842 
843 		/* clear the bulk endpoint */
844 		if (gspca_dev->cam.bulk)
845 			usb_clear_halt(gspca_dev->dev,
846 					gspca_dev->urb[0]->pipe);
847 
848 		/* start the cam */
849 		ret = gspca_dev->sd_desc->start(gspca_dev);
850 		if (ret < 0) {
851 			destroy_urbs(gspca_dev);
852 			goto out;
853 		}
854 		v4l2_ctrl_handler_setup(gspca_dev->vdev.ctrl_handler);
855 		gspca_dev->streaming = true;
856 
857 		/* some bulk transfers are started by the subdriver */
858 		if (gspca_dev->cam.bulk && gspca_dev->cam.bulk_nurbs == 0)
859 			break;
860 
861 		/* submit the URBs */
862 		for (n = 0; n < MAX_NURBS; n++) {
863 			urb = gspca_dev->urb[n];
864 			if (urb == NULL)
865 				break;
866 			ret = usb_submit_urb(urb, GFP_KERNEL);
867 			if (ret < 0)
868 				break;
869 		}
870 		if (ret >= 0)
871 			break;			/* transfer is started */
872 
873 		/* something when wrong
874 		 * stop the webcam and free the transfer resources */
875 		gspca_stream_off(gspca_dev);
876 		if (ret != -ENOSPC) {
877 			pr_err("usb_submit_urb alt %d err %d\n",
878 			       gspca_dev->alt, ret);
879 			goto out;
880 		}
881 
882 		/* the bandwidth is not wide enough
883 		 * negotiate or try a lower alternate setting */
884 retry:
885 		gspca_err(gspca_dev, "alt %d - bandwidth not wide enough, trying again\n",
886 			  alt);
887 		msleep(20);	/* wait for kill complete */
888 		if (gspca_dev->sd_desc->isoc_nego) {
889 			ret = gspca_dev->sd_desc->isoc_nego(gspca_dev);
890 			if (ret < 0)
891 				goto out;
892 		} else {
893 			if (alt_idx <= 0) {
894 				pr_err("no transfer endpoint found\n");
895 				ret = -EIO;
896 				goto out;
897 			}
898 			gspca_dev->alt = ep_tb[--alt_idx].alt;
899 		}
900 	}
901 out:
902 	gspca_input_create_urb(gspca_dev);
903 	return ret;
904 }
905 
906 static void gspca_set_default_mode(struct gspca_dev *gspca_dev)
907 {
908 	int i;
909 
910 	i = gspca_dev->cam.nmodes - 1;	/* take the highest mode */
911 	gspca_dev->curr_mode = i;
912 	gspca_dev->pixfmt = gspca_dev->cam.cam_mode[i];
913 
914 	/* does nothing if ctrl_handler == NULL */
915 	v4l2_ctrl_handler_setup(gspca_dev->vdev.ctrl_handler);
916 }
917 
918 static int wxh_to_mode(struct gspca_dev *gspca_dev,
919 			int width, int height, u32 pixelformat)
920 {
921 	int i;
922 
923 	for (i = 0; i < gspca_dev->cam.nmodes; i++) {
924 		if (width == gspca_dev->cam.cam_mode[i].width
925 		    && height == gspca_dev->cam.cam_mode[i].height
926 		    && pixelformat == gspca_dev->cam.cam_mode[i].pixelformat)
927 			return i;
928 	}
929 	return -EINVAL;
930 }
931 
932 static int wxh_to_nearest_mode(struct gspca_dev *gspca_dev,
933 			int width, int height, u32 pixelformat)
934 {
935 	int i;
936 
937 	for (i = gspca_dev->cam.nmodes; --i > 0; ) {
938 		if (width >= gspca_dev->cam.cam_mode[i].width
939 		    && height >= gspca_dev->cam.cam_mode[i].height
940 		    && pixelformat == gspca_dev->cam.cam_mode[i].pixelformat)
941 			return i;
942 	}
943 	for (i = gspca_dev->cam.nmodes; --i > 0; ) {
944 		if (width >= gspca_dev->cam.cam_mode[i].width
945 		    && height >= gspca_dev->cam.cam_mode[i].height)
946 			break;
947 	}
948 	return i;
949 }
950 
951 /*
952  * search a mode with the right pixel format
953  */
954 static int gspca_get_mode(struct gspca_dev *gspca_dev,
955 			int mode,
956 			int pixfmt)
957 {
958 	int modeU, modeD;
959 
960 	modeU = modeD = mode;
961 	while ((modeU < gspca_dev->cam.nmodes) || modeD >= 0) {
962 		if (--modeD >= 0) {
963 			if (gspca_dev->cam.cam_mode[modeD].pixelformat
964 								== pixfmt)
965 				return modeD;
966 		}
967 		if (++modeU < gspca_dev->cam.nmodes) {
968 			if (gspca_dev->cam.cam_mode[modeU].pixelformat
969 								== pixfmt)
970 				return modeU;
971 		}
972 	}
973 	return -EINVAL;
974 }
975 
976 #ifdef CONFIG_VIDEO_ADV_DEBUG
977 static int vidioc_g_chip_info(struct file *file, void *priv,
978 				struct v4l2_dbg_chip_info *chip)
979 {
980 	struct gspca_dev *gspca_dev = video_drvdata(file);
981 
982 	gspca_dev->usb_err = 0;
983 	if (gspca_dev->sd_desc->get_chip_info)
984 		return gspca_dev->sd_desc->get_chip_info(gspca_dev, chip);
985 	return chip->match.addr ? -EINVAL : 0;
986 }
987 
988 static int vidioc_g_register(struct file *file, void *priv,
989 		struct v4l2_dbg_register *reg)
990 {
991 	struct gspca_dev *gspca_dev = video_drvdata(file);
992 
993 	gspca_dev->usb_err = 0;
994 	return gspca_dev->sd_desc->get_register(gspca_dev, reg);
995 }
996 
997 static int vidioc_s_register(struct file *file, void *priv,
998 		const struct v4l2_dbg_register *reg)
999 {
1000 	struct gspca_dev *gspca_dev = video_drvdata(file);
1001 
1002 	gspca_dev->usb_err = 0;
1003 	return gspca_dev->sd_desc->set_register(gspca_dev, reg);
1004 }
1005 #endif
1006 
1007 static int vidioc_enum_fmt_vid_cap(struct file *file, void  *priv,
1008 				struct v4l2_fmtdesc *fmtdesc)
1009 {
1010 	struct gspca_dev *gspca_dev = video_drvdata(file);
1011 	int i, j, index;
1012 	__u32 fmt_tb[8];
1013 
1014 	/* give an index to each format */
1015 	index = 0;
1016 	for (i = gspca_dev->cam.nmodes; --i >= 0; ) {
1017 		fmt_tb[index] = gspca_dev->cam.cam_mode[i].pixelformat;
1018 		j = 0;
1019 		for (;;) {
1020 			if (fmt_tb[j] == fmt_tb[index])
1021 				break;
1022 			j++;
1023 		}
1024 		if (j == index) {
1025 			if (fmtdesc->index == index)
1026 				break;		/* new format */
1027 			index++;
1028 			if (index >= ARRAY_SIZE(fmt_tb))
1029 				return -EINVAL;
1030 		}
1031 	}
1032 	if (i < 0)
1033 		return -EINVAL;		/* no more format */
1034 
1035 	fmtdesc->pixelformat = fmt_tb[index];
1036 	if (gspca_dev->cam.cam_mode[i].sizeimage <
1037 			gspca_dev->cam.cam_mode[i].width *
1038 				gspca_dev->cam.cam_mode[i].height)
1039 		fmtdesc->flags = V4L2_FMT_FLAG_COMPRESSED;
1040 	fmtdesc->description[0] = fmtdesc->pixelformat & 0xff;
1041 	fmtdesc->description[1] = (fmtdesc->pixelformat >> 8) & 0xff;
1042 	fmtdesc->description[2] = (fmtdesc->pixelformat >> 16) & 0xff;
1043 	fmtdesc->description[3] = fmtdesc->pixelformat >> 24;
1044 	fmtdesc->description[4] = '\0';
1045 	return 0;
1046 }
1047 
1048 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
1049 			    struct v4l2_format *fmt)
1050 {
1051 	struct gspca_dev *gspca_dev = video_drvdata(file);
1052 
1053 	fmt->fmt.pix = gspca_dev->pixfmt;
1054 	/* some drivers use priv internally, zero it before giving it back to
1055 	   the core */
1056 	fmt->fmt.pix.priv = 0;
1057 	return 0;
1058 }
1059 
1060 static int try_fmt_vid_cap(struct gspca_dev *gspca_dev,
1061 			struct v4l2_format *fmt)
1062 {
1063 	int w, h, mode, mode2;
1064 
1065 	w = fmt->fmt.pix.width;
1066 	h = fmt->fmt.pix.height;
1067 
1068 	PDEBUG_MODE(gspca_dev, D_CONF, "try fmt cap",
1069 		    fmt->fmt.pix.pixelformat, w, h);
1070 
1071 	/* search the nearest mode for width and height */
1072 	mode = wxh_to_nearest_mode(gspca_dev, w, h, fmt->fmt.pix.pixelformat);
1073 
1074 	/* OK if right palette */
1075 	if (gspca_dev->cam.cam_mode[mode].pixelformat
1076 						!= fmt->fmt.pix.pixelformat) {
1077 
1078 		/* else, search the closest mode with the same pixel format */
1079 		mode2 = gspca_get_mode(gspca_dev, mode,
1080 					fmt->fmt.pix.pixelformat);
1081 		if (mode2 >= 0)
1082 			mode = mode2;
1083 	}
1084 	fmt->fmt.pix = gspca_dev->cam.cam_mode[mode];
1085 	if (gspca_dev->sd_desc->try_fmt) {
1086 		/* pass original resolution to subdriver try_fmt */
1087 		fmt->fmt.pix.width = w;
1088 		fmt->fmt.pix.height = h;
1089 		gspca_dev->sd_desc->try_fmt(gspca_dev, fmt);
1090 	}
1091 	/* some drivers use priv internally, zero it before giving it back to
1092 	   the core */
1093 	fmt->fmt.pix.priv = 0;
1094 	return mode;			/* used when s_fmt */
1095 }
1096 
1097 static int vidioc_try_fmt_vid_cap(struct file *file,
1098 			      void *priv,
1099 			      struct v4l2_format *fmt)
1100 {
1101 	struct gspca_dev *gspca_dev = video_drvdata(file);
1102 
1103 	if (try_fmt_vid_cap(gspca_dev, fmt) < 0)
1104 		return -EINVAL;
1105 	return 0;
1106 }
1107 
1108 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
1109 			    struct v4l2_format *fmt)
1110 {
1111 	struct gspca_dev *gspca_dev = video_drvdata(file);
1112 	int mode;
1113 
1114 	if (vb2_is_busy(&gspca_dev->queue))
1115 		return -EBUSY;
1116 
1117 	mode = try_fmt_vid_cap(gspca_dev, fmt);
1118 	if (mode < 0)
1119 		return -EINVAL;
1120 
1121 	gspca_dev->curr_mode = mode;
1122 	if (gspca_dev->sd_desc->try_fmt)
1123 		/* subdriver try_fmt can modify format parameters */
1124 		gspca_dev->pixfmt = fmt->fmt.pix;
1125 	else
1126 		gspca_dev->pixfmt = gspca_dev->cam.cam_mode[mode];
1127 	return 0;
1128 }
1129 
1130 static int vidioc_enum_framesizes(struct file *file, void *priv,
1131 				  struct v4l2_frmsizeenum *fsize)
1132 {
1133 	struct gspca_dev *gspca_dev = video_drvdata(file);
1134 	int i;
1135 	__u32 index = 0;
1136 
1137 	if (gspca_dev->sd_desc->enum_framesizes)
1138 		return gspca_dev->sd_desc->enum_framesizes(gspca_dev, fsize);
1139 
1140 	for (i = 0; i < gspca_dev->cam.nmodes; i++) {
1141 		if (fsize->pixel_format !=
1142 				gspca_dev->cam.cam_mode[i].pixelformat)
1143 			continue;
1144 
1145 		if (fsize->index == index) {
1146 			fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE;
1147 			fsize->discrete.width =
1148 				gspca_dev->cam.cam_mode[i].width;
1149 			fsize->discrete.height =
1150 				gspca_dev->cam.cam_mode[i].height;
1151 			return 0;
1152 		}
1153 		index++;
1154 	}
1155 
1156 	return -EINVAL;
1157 }
1158 
1159 static int vidioc_enum_frameintervals(struct file *filp, void *priv,
1160 				      struct v4l2_frmivalenum *fival)
1161 {
1162 	struct gspca_dev *gspca_dev = video_drvdata(filp);
1163 	int mode;
1164 	__u32 i;
1165 
1166 	mode = wxh_to_mode(gspca_dev, fival->width, fival->height,
1167 			   fival->pixel_format);
1168 	if (mode < 0)
1169 		return -EINVAL;
1170 
1171 	if (gspca_dev->cam.mode_framerates == NULL ||
1172 			gspca_dev->cam.mode_framerates[mode].nrates == 0)
1173 		return -EINVAL;
1174 
1175 	if (fival->pixel_format !=
1176 			gspca_dev->cam.cam_mode[mode].pixelformat)
1177 		return -EINVAL;
1178 
1179 	for (i = 0; i < gspca_dev->cam.mode_framerates[mode].nrates; i++) {
1180 		if (fival->index == i) {
1181 			fival->type = V4L2_FRMIVAL_TYPE_DISCRETE;
1182 			fival->discrete.numerator = 1;
1183 			fival->discrete.denominator =
1184 				gspca_dev->cam.mode_framerates[mode].rates[i];
1185 			return 0;
1186 		}
1187 	}
1188 
1189 	return -EINVAL;
1190 }
1191 
1192 static void gspca_release(struct v4l2_device *v4l2_device)
1193 {
1194 	struct gspca_dev *gspca_dev =
1195 		container_of(v4l2_device, struct gspca_dev, v4l2_dev);
1196 
1197 	v4l2_ctrl_handler_free(gspca_dev->vdev.ctrl_handler);
1198 	v4l2_device_unregister(&gspca_dev->v4l2_dev);
1199 	kfree(gspca_dev->usb_buf);
1200 	kfree(gspca_dev);
1201 }
1202 
1203 static int vidioc_querycap(struct file *file, void  *priv,
1204 			   struct v4l2_capability *cap)
1205 {
1206 	struct gspca_dev *gspca_dev = video_drvdata(file);
1207 
1208 	strscpy((char *)cap->driver, gspca_dev->sd_desc->name,
1209 		sizeof(cap->driver));
1210 	if (gspca_dev->dev->product != NULL) {
1211 		strscpy((char *)cap->card, gspca_dev->dev->product,
1212 			sizeof(cap->card));
1213 	} else {
1214 		snprintf((char *) cap->card, sizeof cap->card,
1215 			"USB Camera (%04x:%04x)",
1216 			le16_to_cpu(gspca_dev->dev->descriptor.idVendor),
1217 			le16_to_cpu(gspca_dev->dev->descriptor.idProduct));
1218 	}
1219 	usb_make_path(gspca_dev->dev, (char *) cap->bus_info,
1220 			sizeof(cap->bus_info));
1221 	cap->device_caps = V4L2_CAP_VIDEO_CAPTURE
1222 			  | V4L2_CAP_STREAMING
1223 			  | V4L2_CAP_READWRITE;
1224 	cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
1225 	return 0;
1226 }
1227 
1228 static int vidioc_enum_input(struct file *file, void *priv,
1229 				struct v4l2_input *input)
1230 {
1231 	struct gspca_dev *gspca_dev = video_drvdata(file);
1232 
1233 	if (input->index != 0)
1234 		return -EINVAL;
1235 	input->type = V4L2_INPUT_TYPE_CAMERA;
1236 	input->status = gspca_dev->cam.input_flags;
1237 	strscpy(input->name, gspca_dev->sd_desc->name,
1238 		sizeof input->name);
1239 	return 0;
1240 }
1241 
1242 static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1243 {
1244 	*i = 0;
1245 	return 0;
1246 }
1247 
1248 static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
1249 {
1250 	if (i > 0)
1251 		return -EINVAL;
1252 	return 0;
1253 }
1254 
1255 static int vidioc_g_jpegcomp(struct file *file, void *priv,
1256 			struct v4l2_jpegcompression *jpegcomp)
1257 {
1258 	struct gspca_dev *gspca_dev = video_drvdata(file);
1259 
1260 	gspca_dev->usb_err = 0;
1261 	return gspca_dev->sd_desc->get_jcomp(gspca_dev, jpegcomp);
1262 }
1263 
1264 static int vidioc_s_jpegcomp(struct file *file, void *priv,
1265 			const struct v4l2_jpegcompression *jpegcomp)
1266 {
1267 	struct gspca_dev *gspca_dev = video_drvdata(file);
1268 
1269 	gspca_dev->usb_err = 0;
1270 	return gspca_dev->sd_desc->set_jcomp(gspca_dev, jpegcomp);
1271 }
1272 
1273 static int vidioc_g_parm(struct file *filp, void *priv,
1274 			struct v4l2_streamparm *parm)
1275 {
1276 	struct gspca_dev *gspca_dev = video_drvdata(filp);
1277 
1278 	parm->parm.capture.readbuffers = gspca_dev->queue.min_buffers_needed;
1279 
1280 	if (!gspca_dev->sd_desc->get_streamparm)
1281 		return 0;
1282 
1283 	parm->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
1284 	gspca_dev->usb_err = 0;
1285 	gspca_dev->sd_desc->get_streamparm(gspca_dev, parm);
1286 	return gspca_dev->usb_err;
1287 }
1288 
1289 static int vidioc_s_parm(struct file *filp, void *priv,
1290 			struct v4l2_streamparm *parm)
1291 {
1292 	struct gspca_dev *gspca_dev = video_drvdata(filp);
1293 
1294 	parm->parm.capture.readbuffers = gspca_dev->queue.min_buffers_needed;
1295 
1296 	if (!gspca_dev->sd_desc->set_streamparm) {
1297 		parm->parm.capture.capability = 0;
1298 		return 0;
1299 	}
1300 
1301 	parm->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
1302 	gspca_dev->usb_err = 0;
1303 	gspca_dev->sd_desc->set_streamparm(gspca_dev, parm);
1304 	return gspca_dev->usb_err;
1305 }
1306 
1307 static int gspca_queue_setup(struct vb2_queue *vq,
1308 			     unsigned int *nbuffers, unsigned int *nplanes,
1309 			     unsigned int sizes[], struct device *alloc_devs[])
1310 {
1311 	struct gspca_dev *gspca_dev = vb2_get_drv_priv(vq);
1312 	unsigned int size = PAGE_ALIGN(gspca_dev->pixfmt.sizeimage);
1313 
1314 	if (*nplanes)
1315 		return sizes[0] < size ? -EINVAL : 0;
1316 	*nplanes = 1;
1317 	sizes[0] = size;
1318 	return 0;
1319 }
1320 
1321 static int gspca_buffer_prepare(struct vb2_buffer *vb)
1322 {
1323 	struct gspca_dev *gspca_dev = vb2_get_drv_priv(vb->vb2_queue);
1324 	unsigned long size = PAGE_ALIGN(gspca_dev->pixfmt.sizeimage);
1325 
1326 	if (vb2_plane_size(vb, 0) < size) {
1327 		gspca_err(gspca_dev, "buffer too small (%lu < %lu)\n",
1328 			 vb2_plane_size(vb, 0), size);
1329 		return -EINVAL;
1330 	}
1331 	return 0;
1332 }
1333 
1334 static void gspca_buffer_finish(struct vb2_buffer *vb)
1335 {
1336 	struct gspca_dev *gspca_dev = vb2_get_drv_priv(vb->vb2_queue);
1337 
1338 	if (!gspca_dev->sd_desc->dq_callback)
1339 		return;
1340 
1341 	gspca_dev->usb_err = 0;
1342 	if (gspca_dev->present)
1343 		gspca_dev->sd_desc->dq_callback(gspca_dev);
1344 }
1345 
1346 static void gspca_buffer_queue(struct vb2_buffer *vb)
1347 {
1348 	struct gspca_dev *gspca_dev = vb2_get_drv_priv(vb->vb2_queue);
1349 	struct gspca_buffer *buf = to_gspca_buffer(vb);
1350 	unsigned long flags;
1351 
1352 	spin_lock_irqsave(&gspca_dev->qlock, flags);
1353 	list_add_tail(&buf->list, &gspca_dev->buf_list);
1354 	spin_unlock_irqrestore(&gspca_dev->qlock, flags);
1355 }
1356 
1357 static void gspca_return_all_buffers(struct gspca_dev *gspca_dev,
1358 				     enum vb2_buffer_state state)
1359 {
1360 	struct gspca_buffer *buf, *node;
1361 	unsigned long flags;
1362 
1363 	spin_lock_irqsave(&gspca_dev->qlock, flags);
1364 	list_for_each_entry_safe(buf, node, &gspca_dev->buf_list, list) {
1365 		vb2_buffer_done(&buf->vb.vb2_buf, state);
1366 		list_del(&buf->list);
1367 	}
1368 	spin_unlock_irqrestore(&gspca_dev->qlock, flags);
1369 }
1370 
1371 static int gspca_start_streaming(struct vb2_queue *vq, unsigned int count)
1372 {
1373 	struct gspca_dev *gspca_dev = vb2_get_drv_priv(vq);
1374 	int ret;
1375 
1376 	gspca_dev->sequence = 0;
1377 
1378 	ret = gspca_init_transfer(gspca_dev);
1379 	if (ret)
1380 		gspca_return_all_buffers(gspca_dev, VB2_BUF_STATE_QUEUED);
1381 	return ret;
1382 }
1383 
1384 static void gspca_stop_streaming(struct vb2_queue *vq)
1385 {
1386 	struct gspca_dev *gspca_dev = vb2_get_drv_priv(vq);
1387 
1388 	gspca_stream_off(gspca_dev);
1389 
1390 	/* Release all active buffers */
1391 	gspca_return_all_buffers(gspca_dev, VB2_BUF_STATE_ERROR);
1392 }
1393 
1394 static const struct vb2_ops gspca_qops = {
1395 	.queue_setup		= gspca_queue_setup,
1396 	.buf_prepare		= gspca_buffer_prepare,
1397 	.buf_finish		= gspca_buffer_finish,
1398 	.buf_queue		= gspca_buffer_queue,
1399 	.start_streaming	= gspca_start_streaming,
1400 	.stop_streaming		= gspca_stop_streaming,
1401 	.wait_prepare		= vb2_ops_wait_prepare,
1402 	.wait_finish		= vb2_ops_wait_finish,
1403 };
1404 
1405 static const struct v4l2_file_operations dev_fops = {
1406 	.owner = THIS_MODULE,
1407 	.open = v4l2_fh_open,
1408 	.release = vb2_fop_release,
1409 	.unlocked_ioctl = video_ioctl2,
1410 	.read = vb2_fop_read,
1411 	.mmap = vb2_fop_mmap,
1412 	.poll = vb2_fop_poll,
1413 };
1414 
1415 static const struct v4l2_ioctl_ops dev_ioctl_ops = {
1416 	.vidioc_querycap	= vidioc_querycap,
1417 	.vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap,
1418 	.vidioc_try_fmt_vid_cap	= vidioc_try_fmt_vid_cap,
1419 	.vidioc_g_fmt_vid_cap	= vidioc_g_fmt_vid_cap,
1420 	.vidioc_s_fmt_vid_cap	= vidioc_s_fmt_vid_cap,
1421 	.vidioc_enum_input	= vidioc_enum_input,
1422 	.vidioc_g_input		= vidioc_g_input,
1423 	.vidioc_s_input		= vidioc_s_input,
1424 	.vidioc_g_jpegcomp	= vidioc_g_jpegcomp,
1425 	.vidioc_s_jpegcomp	= vidioc_s_jpegcomp,
1426 	.vidioc_g_parm		= vidioc_g_parm,
1427 	.vidioc_s_parm		= vidioc_s_parm,
1428 	.vidioc_enum_framesizes = vidioc_enum_framesizes,
1429 	.vidioc_enum_frameintervals = vidioc_enum_frameintervals,
1430 
1431 	.vidioc_reqbufs		= vb2_ioctl_reqbufs,
1432 	.vidioc_create_bufs	= vb2_ioctl_create_bufs,
1433 	.vidioc_querybuf	= vb2_ioctl_querybuf,
1434 	.vidioc_qbuf		= vb2_ioctl_qbuf,
1435 	.vidioc_dqbuf		= vb2_ioctl_dqbuf,
1436 	.vidioc_expbuf		= vb2_ioctl_expbuf,
1437 	.vidioc_streamon	= vb2_ioctl_streamon,
1438 	.vidioc_streamoff	= vb2_ioctl_streamoff,
1439 
1440 #ifdef CONFIG_VIDEO_ADV_DEBUG
1441 	.vidioc_g_chip_info	= vidioc_g_chip_info,
1442 	.vidioc_g_register	= vidioc_g_register,
1443 	.vidioc_s_register	= vidioc_s_register,
1444 #endif
1445 	.vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
1446 	.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
1447 };
1448 
1449 static const struct video_device gspca_template = {
1450 	.name = "gspca main driver",
1451 	.fops = &dev_fops,
1452 	.ioctl_ops = &dev_ioctl_ops,
1453 	.release = video_device_release_empty, /* We use v4l2_dev.release */
1454 };
1455 
1456 /*
1457  * probe and create a new gspca device
1458  *
1459  * This function must be called by the sub-driver when it is
1460  * called for probing a new device.
1461  */
1462 int gspca_dev_probe2(struct usb_interface *intf,
1463 		const struct usb_device_id *id,
1464 		const struct sd_desc *sd_desc,
1465 		int dev_size,
1466 		struct module *module)
1467 {
1468 	struct gspca_dev *gspca_dev;
1469 	struct usb_device *dev = interface_to_usbdev(intf);
1470 	struct vb2_queue *q;
1471 	int ret;
1472 
1473 	pr_info("%s-" GSPCA_VERSION " probing %04x:%04x\n",
1474 		sd_desc->name, id->idVendor, id->idProduct);
1475 
1476 	/* create the device */
1477 	if (dev_size < sizeof *gspca_dev)
1478 		dev_size = sizeof *gspca_dev;
1479 	gspca_dev = kzalloc(dev_size, GFP_KERNEL);
1480 	if (!gspca_dev) {
1481 		pr_err("couldn't kzalloc gspca struct\n");
1482 		return -ENOMEM;
1483 	}
1484 	gspca_dev->usb_buf = kmalloc(USB_BUF_SZ, GFP_KERNEL);
1485 	if (!gspca_dev->usb_buf) {
1486 		pr_err("out of memory\n");
1487 		ret = -ENOMEM;
1488 		goto out;
1489 	}
1490 	gspca_dev->dev = dev;
1491 	gspca_dev->iface = intf->cur_altsetting->desc.bInterfaceNumber;
1492 	gspca_dev->xfer_ep = -1;
1493 
1494 	/* check if any audio device */
1495 	if (dev->actconfig->desc.bNumInterfaces != 1) {
1496 		int i;
1497 		struct usb_interface *intf2;
1498 
1499 		for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
1500 			intf2 = dev->actconfig->interface[i];
1501 			if (intf2 != NULL
1502 			 && intf2->altsetting != NULL
1503 			 && intf2->altsetting->desc.bInterfaceClass ==
1504 					 USB_CLASS_AUDIO) {
1505 				gspca_dev->audio = 1;
1506 				break;
1507 			}
1508 		}
1509 	}
1510 
1511 	gspca_dev->v4l2_dev.release = gspca_release;
1512 	ret = v4l2_device_register(&intf->dev, &gspca_dev->v4l2_dev);
1513 	if (ret)
1514 		goto out;
1515 	gspca_dev->present = true;
1516 	gspca_dev->sd_desc = sd_desc;
1517 	gspca_dev->empty_packet = -1;	/* don't check the empty packets */
1518 	gspca_dev->vdev = gspca_template;
1519 	gspca_dev->vdev.v4l2_dev = &gspca_dev->v4l2_dev;
1520 	video_set_drvdata(&gspca_dev->vdev, gspca_dev);
1521 	gspca_dev->module = module;
1522 
1523 	mutex_init(&gspca_dev->usb_lock);
1524 	gspca_dev->vdev.lock = &gspca_dev->usb_lock;
1525 	init_waitqueue_head(&gspca_dev->wq);
1526 
1527 	/* Initialize the vb2 queue */
1528 	q = &gspca_dev->queue;
1529 	q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1530 	q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_READ;
1531 	q->drv_priv = gspca_dev;
1532 	q->buf_struct_size = sizeof(struct gspca_buffer);
1533 	q->ops = &gspca_qops;
1534 	q->mem_ops = &vb2_vmalloc_memops;
1535 	q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1536 	q->min_buffers_needed = 2;
1537 	q->lock = &gspca_dev->usb_lock;
1538 	ret = vb2_queue_init(q);
1539 	if (ret)
1540 		goto out;
1541 	gspca_dev->vdev.queue = q;
1542 
1543 	INIT_LIST_HEAD(&gspca_dev->buf_list);
1544 	spin_lock_init(&gspca_dev->qlock);
1545 
1546 	/* configure the subdriver and initialize the USB device */
1547 	ret = sd_desc->config(gspca_dev, id);
1548 	if (ret < 0)
1549 		goto out;
1550 	ret = sd_desc->init(gspca_dev);
1551 	if (ret < 0)
1552 		goto out;
1553 	if (sd_desc->init_controls)
1554 		ret = sd_desc->init_controls(gspca_dev);
1555 	if (ret < 0)
1556 		goto out;
1557 	gspca_set_default_mode(gspca_dev);
1558 
1559 	ret = gspca_input_connect(gspca_dev);
1560 	if (ret)
1561 		goto out;
1562 
1563 #ifdef CONFIG_VIDEO_ADV_DEBUG
1564 	if (!gspca_dev->sd_desc->get_register)
1565 		v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_DBG_G_REGISTER);
1566 	if (!gspca_dev->sd_desc->set_register)
1567 		v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_DBG_S_REGISTER);
1568 #endif
1569 	if (!gspca_dev->sd_desc->get_jcomp)
1570 		v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_G_JPEGCOMP);
1571 	if (!gspca_dev->sd_desc->set_jcomp)
1572 		v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_S_JPEGCOMP);
1573 
1574 	/* init video stuff */
1575 	ret = video_register_device(&gspca_dev->vdev,
1576 				  VFL_TYPE_GRABBER,
1577 				  -1);
1578 	if (ret < 0) {
1579 		pr_err("video_register_device err %d\n", ret);
1580 		goto out;
1581 	}
1582 
1583 	usb_set_intfdata(intf, gspca_dev);
1584 	gspca_dbg(gspca_dev, D_PROBE, "%s created\n",
1585 		  video_device_node_name(&gspca_dev->vdev));
1586 
1587 	gspca_input_create_urb(gspca_dev);
1588 
1589 	return 0;
1590 out:
1591 #if IS_ENABLED(CONFIG_INPUT)
1592 	if (gspca_dev->input_dev)
1593 		input_unregister_device(gspca_dev->input_dev);
1594 #endif
1595 	v4l2_ctrl_handler_free(gspca_dev->vdev.ctrl_handler);
1596 	kfree(gspca_dev->usb_buf);
1597 	kfree(gspca_dev);
1598 	return ret;
1599 }
1600 EXPORT_SYMBOL(gspca_dev_probe2);
1601 
1602 /* same function as the previous one, but check the interface */
1603 int gspca_dev_probe(struct usb_interface *intf,
1604 		const struct usb_device_id *id,
1605 		const struct sd_desc *sd_desc,
1606 		int dev_size,
1607 		struct module *module)
1608 {
1609 	struct usb_device *dev = interface_to_usbdev(intf);
1610 
1611 	/* we don't handle multi-config cameras */
1612 	if (dev->descriptor.bNumConfigurations != 1) {
1613 		pr_err("%04x:%04x too many config\n",
1614 		       id->idVendor, id->idProduct);
1615 		return -ENODEV;
1616 	}
1617 
1618 	/* the USB video interface must be the first one */
1619 	if (dev->actconfig->desc.bNumInterfaces != 1
1620 	 && intf->cur_altsetting->desc.bInterfaceNumber != 0)
1621 		return -ENODEV;
1622 
1623 	return gspca_dev_probe2(intf, id, sd_desc, dev_size, module);
1624 }
1625 EXPORT_SYMBOL(gspca_dev_probe);
1626 
1627 /*
1628  * USB disconnection
1629  *
1630  * This function must be called by the sub-driver
1631  * when the device disconnects, after the specific resources are freed.
1632  */
1633 void gspca_disconnect(struct usb_interface *intf)
1634 {
1635 	struct gspca_dev *gspca_dev = usb_get_intfdata(intf);
1636 #if IS_ENABLED(CONFIG_INPUT)
1637 	struct input_dev *input_dev;
1638 #endif
1639 
1640 	gspca_dbg(gspca_dev, D_PROBE, "%s disconnect\n",
1641 		  video_device_node_name(&gspca_dev->vdev));
1642 
1643 	mutex_lock(&gspca_dev->usb_lock);
1644 	gspca_dev->present = false;
1645 	destroy_urbs(gspca_dev);
1646 	gspca_input_destroy_urb(gspca_dev);
1647 
1648 	vb2_queue_error(&gspca_dev->queue);
1649 
1650 #if IS_ENABLED(CONFIG_INPUT)
1651 	input_dev = gspca_dev->input_dev;
1652 	if (input_dev) {
1653 		gspca_dev->input_dev = NULL;
1654 		input_unregister_device(input_dev);
1655 	}
1656 #endif
1657 
1658 	v4l2_device_disconnect(&gspca_dev->v4l2_dev);
1659 	video_unregister_device(&gspca_dev->vdev);
1660 
1661 	mutex_unlock(&gspca_dev->usb_lock);
1662 
1663 	/* (this will call gspca_release() immediately or on last close) */
1664 	v4l2_device_put(&gspca_dev->v4l2_dev);
1665 }
1666 EXPORT_SYMBOL(gspca_disconnect);
1667 
1668 #ifdef CONFIG_PM
1669 int gspca_suspend(struct usb_interface *intf, pm_message_t message)
1670 {
1671 	struct gspca_dev *gspca_dev = usb_get_intfdata(intf);
1672 
1673 	gspca_input_destroy_urb(gspca_dev);
1674 
1675 	if (!vb2_start_streaming_called(&gspca_dev->queue))
1676 		return 0;
1677 
1678 	mutex_lock(&gspca_dev->usb_lock);
1679 	gspca_dev->frozen = 1;		/* avoid urb error messages */
1680 	gspca_dev->usb_err = 0;
1681 	if (gspca_dev->sd_desc->stopN)
1682 		gspca_dev->sd_desc->stopN(gspca_dev);
1683 	destroy_urbs(gspca_dev);
1684 	gspca_set_alt0(gspca_dev);
1685 	if (gspca_dev->sd_desc->stop0)
1686 		gspca_dev->sd_desc->stop0(gspca_dev);
1687 	mutex_unlock(&gspca_dev->usb_lock);
1688 
1689 	return 0;
1690 }
1691 EXPORT_SYMBOL(gspca_suspend);
1692 
1693 int gspca_resume(struct usb_interface *intf)
1694 {
1695 	struct gspca_dev *gspca_dev = usb_get_intfdata(intf);
1696 	int streaming, ret = 0;
1697 
1698 	mutex_lock(&gspca_dev->usb_lock);
1699 	gspca_dev->frozen = 0;
1700 	gspca_dev->usb_err = 0;
1701 	gspca_dev->sd_desc->init(gspca_dev);
1702 	/*
1703 	 * Most subdrivers send all ctrl values on sd_start and thus
1704 	 * only write to the device registers on s_ctrl when streaming ->
1705 	 * Clear streaming to avoid setting all ctrls twice.
1706 	 */
1707 	streaming = vb2_start_streaming_called(&gspca_dev->queue);
1708 	if (streaming)
1709 		ret = gspca_init_transfer(gspca_dev);
1710 	else
1711 		gspca_input_create_urb(gspca_dev);
1712 	mutex_unlock(&gspca_dev->usb_lock);
1713 
1714 	return ret;
1715 }
1716 EXPORT_SYMBOL(gspca_resume);
1717 #endif
1718 
1719 /* -- module insert / remove -- */
1720 static int __init gspca_init(void)
1721 {
1722 	pr_info("v" GSPCA_VERSION " registered\n");
1723 	return 0;
1724 }
1725 static void __exit gspca_exit(void)
1726 {
1727 }
1728 
1729 module_init(gspca_init);
1730 module_exit(gspca_exit);
1731 
1732 module_param_named(debug, gspca_debug, int, 0644);
1733 MODULE_PARM_DESC(debug,
1734 		"1:probe 2:config 3:stream 4:frame 5:packet 6:usbi 7:usbo");
1735