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