GNU Linux-libre 4.19.286-gnu1
[releases.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                         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)
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                         return i;
927         }
928         return -EINVAL;
929 }
930
931 static int wxh_to_nearest_mode(struct gspca_dev *gspca_dev,
932                         int width, int height)
933 {
934         int i;
935
936         for (i = gspca_dev->cam.nmodes; --i > 0; ) {
937                 if (width >= gspca_dev->cam.cam_mode[i].width
938                     && height >= gspca_dev->cam.cam_mode[i].height)
939                         break;
940         }
941         return i;
942 }
943
944 /*
945  * search a mode with the right pixel format
946  */
947 static int gspca_get_mode(struct gspca_dev *gspca_dev,
948                         int mode,
949                         int pixfmt)
950 {
951         int modeU, modeD;
952
953         modeU = modeD = mode;
954         while ((modeU < gspca_dev->cam.nmodes) || modeD >= 0) {
955                 if (--modeD >= 0) {
956                         if (gspca_dev->cam.cam_mode[modeD].pixelformat
957                                                                 == pixfmt)
958                                 return modeD;
959                 }
960                 if (++modeU < gspca_dev->cam.nmodes) {
961                         if (gspca_dev->cam.cam_mode[modeU].pixelformat
962                                                                 == pixfmt)
963                                 return modeU;
964                 }
965         }
966         return -EINVAL;
967 }
968
969 #ifdef CONFIG_VIDEO_ADV_DEBUG
970 static int vidioc_g_chip_info(struct file *file, void *priv,
971                                 struct v4l2_dbg_chip_info *chip)
972 {
973         struct gspca_dev *gspca_dev = video_drvdata(file);
974
975         gspca_dev->usb_err = 0;
976         if (gspca_dev->sd_desc->get_chip_info)
977                 return gspca_dev->sd_desc->get_chip_info(gspca_dev, chip);
978         return chip->match.addr ? -EINVAL : 0;
979 }
980
981 static int vidioc_g_register(struct file *file, void *priv,
982                 struct v4l2_dbg_register *reg)
983 {
984         struct gspca_dev *gspca_dev = video_drvdata(file);
985
986         gspca_dev->usb_err = 0;
987         return gspca_dev->sd_desc->get_register(gspca_dev, reg);
988 }
989
990 static int vidioc_s_register(struct file *file, void *priv,
991                 const struct v4l2_dbg_register *reg)
992 {
993         struct gspca_dev *gspca_dev = video_drvdata(file);
994
995         gspca_dev->usb_err = 0;
996         return gspca_dev->sd_desc->set_register(gspca_dev, reg);
997 }
998 #endif
999
1000 static int vidioc_enum_fmt_vid_cap(struct file *file, void  *priv,
1001                                 struct v4l2_fmtdesc *fmtdesc)
1002 {
1003         struct gspca_dev *gspca_dev = video_drvdata(file);
1004         int i, j, index;
1005         __u32 fmt_tb[8];
1006
1007         /* give an index to each format */
1008         index = 0;
1009         for (i = gspca_dev->cam.nmodes; --i >= 0; ) {
1010                 fmt_tb[index] = gspca_dev->cam.cam_mode[i].pixelformat;
1011                 j = 0;
1012                 for (;;) {
1013                         if (fmt_tb[j] == fmt_tb[index])
1014                                 break;
1015                         j++;
1016                 }
1017                 if (j == index) {
1018                         if (fmtdesc->index == index)
1019                                 break;          /* new format */
1020                         index++;
1021                         if (index >= ARRAY_SIZE(fmt_tb))
1022                                 return -EINVAL;
1023                 }
1024         }
1025         if (i < 0)
1026                 return -EINVAL;         /* no more format */
1027
1028         fmtdesc->pixelformat = fmt_tb[index];
1029         if (gspca_dev->cam.cam_mode[i].sizeimage <
1030                         gspca_dev->cam.cam_mode[i].width *
1031                                 gspca_dev->cam.cam_mode[i].height)
1032                 fmtdesc->flags = V4L2_FMT_FLAG_COMPRESSED;
1033         fmtdesc->description[0] = fmtdesc->pixelformat & 0xff;
1034         fmtdesc->description[1] = (fmtdesc->pixelformat >> 8) & 0xff;
1035         fmtdesc->description[2] = (fmtdesc->pixelformat >> 16) & 0xff;
1036         fmtdesc->description[3] = fmtdesc->pixelformat >> 24;
1037         fmtdesc->description[4] = '\0';
1038         return 0;
1039 }
1040
1041 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
1042                             struct v4l2_format *fmt)
1043 {
1044         struct gspca_dev *gspca_dev = video_drvdata(file);
1045
1046         fmt->fmt.pix = gspca_dev->pixfmt;
1047         /* some drivers use priv internally, zero it before giving it back to
1048            the core */
1049         fmt->fmt.pix.priv = 0;
1050         return 0;
1051 }
1052
1053 static int try_fmt_vid_cap(struct gspca_dev *gspca_dev,
1054                         struct v4l2_format *fmt)
1055 {
1056         int w, h, mode, mode2;
1057
1058         w = fmt->fmt.pix.width;
1059         h = fmt->fmt.pix.height;
1060
1061         PDEBUG_MODE(gspca_dev, D_CONF, "try fmt cap",
1062                     fmt->fmt.pix.pixelformat, w, h);
1063
1064         /* search the nearest mode for width and height */
1065         mode = wxh_to_nearest_mode(gspca_dev, w, h);
1066
1067         /* OK if right palette */
1068         if (gspca_dev->cam.cam_mode[mode].pixelformat
1069                                                 != fmt->fmt.pix.pixelformat) {
1070
1071                 /* else, search the closest mode with the same pixel format */
1072                 mode2 = gspca_get_mode(gspca_dev, mode,
1073                                         fmt->fmt.pix.pixelformat);
1074                 if (mode2 >= 0)
1075                         mode = mode2;
1076         }
1077         fmt->fmt.pix = gspca_dev->cam.cam_mode[mode];
1078         if (gspca_dev->sd_desc->try_fmt) {
1079                 /* pass original resolution to subdriver try_fmt */
1080                 fmt->fmt.pix.width = w;
1081                 fmt->fmt.pix.height = h;
1082                 gspca_dev->sd_desc->try_fmt(gspca_dev, fmt);
1083         }
1084         /* some drivers use priv internally, zero it before giving it back to
1085            the core */
1086         fmt->fmt.pix.priv = 0;
1087         return mode;                    /* used when s_fmt */
1088 }
1089
1090 static int vidioc_try_fmt_vid_cap(struct file *file,
1091                               void *priv,
1092                               struct v4l2_format *fmt)
1093 {
1094         struct gspca_dev *gspca_dev = video_drvdata(file);
1095
1096         if (try_fmt_vid_cap(gspca_dev, fmt) < 0)
1097                 return -EINVAL;
1098         return 0;
1099 }
1100
1101 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
1102                             struct v4l2_format *fmt)
1103 {
1104         struct gspca_dev *gspca_dev = video_drvdata(file);
1105         int mode;
1106
1107         if (vb2_is_busy(&gspca_dev->queue))
1108                 return -EBUSY;
1109
1110         mode = try_fmt_vid_cap(gspca_dev, fmt);
1111         if (mode < 0)
1112                 return -EINVAL;
1113
1114         gspca_dev->curr_mode = mode;
1115         if (gspca_dev->sd_desc->try_fmt)
1116                 /* subdriver try_fmt can modify format parameters */
1117                 gspca_dev->pixfmt = fmt->fmt.pix;
1118         else
1119                 gspca_dev->pixfmt = gspca_dev->cam.cam_mode[mode];
1120         return 0;
1121 }
1122
1123 static int vidioc_enum_framesizes(struct file *file, void *priv,
1124                                   struct v4l2_frmsizeenum *fsize)
1125 {
1126         struct gspca_dev *gspca_dev = video_drvdata(file);
1127         int i;
1128         __u32 index = 0;
1129
1130         if (gspca_dev->sd_desc->enum_framesizes)
1131                 return gspca_dev->sd_desc->enum_framesizes(gspca_dev, fsize);
1132
1133         for (i = 0; i < gspca_dev->cam.nmodes; i++) {
1134                 if (fsize->pixel_format !=
1135                                 gspca_dev->cam.cam_mode[i].pixelformat)
1136                         continue;
1137
1138                 if (fsize->index == index) {
1139                         fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE;
1140                         fsize->discrete.width =
1141                                 gspca_dev->cam.cam_mode[i].width;
1142                         fsize->discrete.height =
1143                                 gspca_dev->cam.cam_mode[i].height;
1144                         return 0;
1145                 }
1146                 index++;
1147         }
1148
1149         return -EINVAL;
1150 }
1151
1152 static int vidioc_enum_frameintervals(struct file *filp, void *priv,
1153                                       struct v4l2_frmivalenum *fival)
1154 {
1155         struct gspca_dev *gspca_dev = video_drvdata(filp);
1156         int mode;
1157         __u32 i;
1158
1159         mode = wxh_to_mode(gspca_dev, fival->width, fival->height);
1160         if (mode < 0)
1161                 return -EINVAL;
1162
1163         if (gspca_dev->cam.mode_framerates == NULL ||
1164                         gspca_dev->cam.mode_framerates[mode].nrates == 0)
1165                 return -EINVAL;
1166
1167         if (fival->pixel_format !=
1168                         gspca_dev->cam.cam_mode[mode].pixelformat)
1169                 return -EINVAL;
1170
1171         for (i = 0; i < gspca_dev->cam.mode_framerates[mode].nrates; i++) {
1172                 if (fival->index == i) {
1173                         fival->type = V4L2_FRMIVAL_TYPE_DISCRETE;
1174                         fival->discrete.numerator = 1;
1175                         fival->discrete.denominator =
1176                                 gspca_dev->cam.mode_framerates[mode].rates[i];
1177                         return 0;
1178                 }
1179         }
1180
1181         return -EINVAL;
1182 }
1183
1184 static void gspca_release(struct v4l2_device *v4l2_device)
1185 {
1186         struct gspca_dev *gspca_dev =
1187                 container_of(v4l2_device, struct gspca_dev, v4l2_dev);
1188
1189         v4l2_ctrl_handler_free(gspca_dev->vdev.ctrl_handler);
1190         v4l2_device_unregister(&gspca_dev->v4l2_dev);
1191         kfree(gspca_dev->usb_buf);
1192         kfree(gspca_dev);
1193 }
1194
1195 static int vidioc_querycap(struct file *file, void  *priv,
1196                            struct v4l2_capability *cap)
1197 {
1198         struct gspca_dev *gspca_dev = video_drvdata(file);
1199
1200         strlcpy((char *) cap->driver, gspca_dev->sd_desc->name,
1201                         sizeof cap->driver);
1202         if (gspca_dev->dev->product != NULL) {
1203                 strlcpy((char *) cap->card, gspca_dev->dev->product,
1204                         sizeof cap->card);
1205         } else {
1206                 snprintf((char *) cap->card, sizeof cap->card,
1207                         "USB Camera (%04x:%04x)",
1208                         le16_to_cpu(gspca_dev->dev->descriptor.idVendor),
1209                         le16_to_cpu(gspca_dev->dev->descriptor.idProduct));
1210         }
1211         usb_make_path(gspca_dev->dev, (char *) cap->bus_info,
1212                         sizeof(cap->bus_info));
1213         cap->device_caps = V4L2_CAP_VIDEO_CAPTURE
1214                           | V4L2_CAP_STREAMING
1215                           | V4L2_CAP_READWRITE;
1216         cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
1217         return 0;
1218 }
1219
1220 static int vidioc_enum_input(struct file *file, void *priv,
1221                                 struct v4l2_input *input)
1222 {
1223         struct gspca_dev *gspca_dev = video_drvdata(file);
1224
1225         if (input->index != 0)
1226                 return -EINVAL;
1227         input->type = V4L2_INPUT_TYPE_CAMERA;
1228         input->status = gspca_dev->cam.input_flags;
1229         strlcpy(input->name, gspca_dev->sd_desc->name,
1230                 sizeof input->name);
1231         return 0;
1232 }
1233
1234 static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1235 {
1236         *i = 0;
1237         return 0;
1238 }
1239
1240 static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
1241 {
1242         if (i > 0)
1243                 return -EINVAL;
1244         return 0;
1245 }
1246
1247 static int vidioc_g_jpegcomp(struct file *file, void *priv,
1248                         struct v4l2_jpegcompression *jpegcomp)
1249 {
1250         struct gspca_dev *gspca_dev = video_drvdata(file);
1251
1252         gspca_dev->usb_err = 0;
1253         return gspca_dev->sd_desc->get_jcomp(gspca_dev, jpegcomp);
1254 }
1255
1256 static int vidioc_s_jpegcomp(struct file *file, void *priv,
1257                         const struct v4l2_jpegcompression *jpegcomp)
1258 {
1259         struct gspca_dev *gspca_dev = video_drvdata(file);
1260
1261         gspca_dev->usb_err = 0;
1262         return gspca_dev->sd_desc->set_jcomp(gspca_dev, jpegcomp);
1263 }
1264
1265 static int vidioc_g_parm(struct file *filp, void *priv,
1266                         struct v4l2_streamparm *parm)
1267 {
1268         struct gspca_dev *gspca_dev = video_drvdata(filp);
1269
1270         parm->parm.capture.readbuffers = gspca_dev->queue.min_buffers_needed;
1271
1272         if (!gspca_dev->sd_desc->get_streamparm)
1273                 return 0;
1274
1275         parm->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
1276         gspca_dev->usb_err = 0;
1277         gspca_dev->sd_desc->get_streamparm(gspca_dev, parm);
1278         return gspca_dev->usb_err;
1279 }
1280
1281 static int vidioc_s_parm(struct file *filp, void *priv,
1282                         struct v4l2_streamparm *parm)
1283 {
1284         struct gspca_dev *gspca_dev = video_drvdata(filp);
1285
1286         parm->parm.capture.readbuffers = gspca_dev->queue.min_buffers_needed;
1287
1288         if (!gspca_dev->sd_desc->set_streamparm) {
1289                 parm->parm.capture.capability = 0;
1290                 return 0;
1291         }
1292
1293         parm->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
1294         gspca_dev->usb_err = 0;
1295         gspca_dev->sd_desc->set_streamparm(gspca_dev, parm);
1296         return gspca_dev->usb_err;
1297 }
1298
1299 static int gspca_queue_setup(struct vb2_queue *vq,
1300                              unsigned int *nbuffers, unsigned int *nplanes,
1301                              unsigned int sizes[], struct device *alloc_devs[])
1302 {
1303         struct gspca_dev *gspca_dev = vb2_get_drv_priv(vq);
1304         unsigned int size = PAGE_ALIGN(gspca_dev->pixfmt.sizeimage);
1305
1306         if (*nplanes)
1307                 return sizes[0] < size ? -EINVAL : 0;
1308         *nplanes = 1;
1309         sizes[0] = size;
1310         return 0;
1311 }
1312
1313 static int gspca_buffer_prepare(struct vb2_buffer *vb)
1314 {
1315         struct gspca_dev *gspca_dev = vb2_get_drv_priv(vb->vb2_queue);
1316         unsigned long size = PAGE_ALIGN(gspca_dev->pixfmt.sizeimage);
1317
1318         if (vb2_plane_size(vb, 0) < size) {
1319                 gspca_err(gspca_dev, "buffer too small (%lu < %lu)\n",
1320                          vb2_plane_size(vb, 0), size);
1321                 return -EINVAL;
1322         }
1323         return 0;
1324 }
1325
1326 static void gspca_buffer_finish(struct vb2_buffer *vb)
1327 {
1328         struct gspca_dev *gspca_dev = vb2_get_drv_priv(vb->vb2_queue);
1329
1330         if (!gspca_dev->sd_desc->dq_callback)
1331                 return;
1332
1333         gspca_dev->usb_err = 0;
1334         if (gspca_dev->present)
1335                 gspca_dev->sd_desc->dq_callback(gspca_dev);
1336 }
1337
1338 static void gspca_buffer_queue(struct vb2_buffer *vb)
1339 {
1340         struct gspca_dev *gspca_dev = vb2_get_drv_priv(vb->vb2_queue);
1341         struct gspca_buffer *buf = to_gspca_buffer(vb);
1342         unsigned long flags;
1343
1344         spin_lock_irqsave(&gspca_dev->qlock, flags);
1345         list_add_tail(&buf->list, &gspca_dev->buf_list);
1346         spin_unlock_irqrestore(&gspca_dev->qlock, flags);
1347 }
1348
1349 static void gspca_return_all_buffers(struct gspca_dev *gspca_dev,
1350                                      enum vb2_buffer_state state)
1351 {
1352         struct gspca_buffer *buf, *node;
1353         unsigned long flags;
1354
1355         spin_lock_irqsave(&gspca_dev->qlock, flags);
1356         list_for_each_entry_safe(buf, node, &gspca_dev->buf_list, list) {
1357                 vb2_buffer_done(&buf->vb.vb2_buf, state);
1358                 list_del(&buf->list);
1359         }
1360         spin_unlock_irqrestore(&gspca_dev->qlock, flags);
1361 }
1362
1363 static int gspca_start_streaming(struct vb2_queue *vq, unsigned int count)
1364 {
1365         struct gspca_dev *gspca_dev = vb2_get_drv_priv(vq);
1366         int ret;
1367
1368         gspca_dev->sequence = 0;
1369
1370         ret = gspca_init_transfer(gspca_dev);
1371         if (ret)
1372                 gspca_return_all_buffers(gspca_dev, VB2_BUF_STATE_QUEUED);
1373         return ret;
1374 }
1375
1376 static void gspca_stop_streaming(struct vb2_queue *vq)
1377 {
1378         struct gspca_dev *gspca_dev = vb2_get_drv_priv(vq);
1379
1380         gspca_stream_off(gspca_dev);
1381
1382         /* Release all active buffers */
1383         gspca_return_all_buffers(gspca_dev, VB2_BUF_STATE_ERROR);
1384 }
1385
1386 static const struct vb2_ops gspca_qops = {
1387         .queue_setup            = gspca_queue_setup,
1388         .buf_prepare            = gspca_buffer_prepare,
1389         .buf_finish             = gspca_buffer_finish,
1390         .buf_queue              = gspca_buffer_queue,
1391         .start_streaming        = gspca_start_streaming,
1392         .stop_streaming         = gspca_stop_streaming,
1393         .wait_prepare           = vb2_ops_wait_prepare,
1394         .wait_finish            = vb2_ops_wait_finish,
1395 };
1396
1397 static const struct v4l2_file_operations dev_fops = {
1398         .owner = THIS_MODULE,
1399         .open = v4l2_fh_open,
1400         .release = vb2_fop_release,
1401         .unlocked_ioctl = video_ioctl2,
1402         .read = vb2_fop_read,
1403         .mmap = vb2_fop_mmap,
1404         .poll = vb2_fop_poll,
1405 };
1406
1407 static const struct v4l2_ioctl_ops dev_ioctl_ops = {
1408         .vidioc_querycap        = vidioc_querycap,
1409         .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap,
1410         .vidioc_try_fmt_vid_cap = vidioc_try_fmt_vid_cap,
1411         .vidioc_g_fmt_vid_cap   = vidioc_g_fmt_vid_cap,
1412         .vidioc_s_fmt_vid_cap   = vidioc_s_fmt_vid_cap,
1413         .vidioc_enum_input      = vidioc_enum_input,
1414         .vidioc_g_input         = vidioc_g_input,
1415         .vidioc_s_input         = vidioc_s_input,
1416         .vidioc_g_jpegcomp      = vidioc_g_jpegcomp,
1417         .vidioc_s_jpegcomp      = vidioc_s_jpegcomp,
1418         .vidioc_g_parm          = vidioc_g_parm,
1419         .vidioc_s_parm          = vidioc_s_parm,
1420         .vidioc_enum_framesizes = vidioc_enum_framesizes,
1421         .vidioc_enum_frameintervals = vidioc_enum_frameintervals,
1422
1423         .vidioc_reqbufs         = vb2_ioctl_reqbufs,
1424         .vidioc_create_bufs     = vb2_ioctl_create_bufs,
1425         .vidioc_querybuf        = vb2_ioctl_querybuf,
1426         .vidioc_qbuf            = vb2_ioctl_qbuf,
1427         .vidioc_dqbuf           = vb2_ioctl_dqbuf,
1428         .vidioc_expbuf          = vb2_ioctl_expbuf,
1429         .vidioc_streamon        = vb2_ioctl_streamon,
1430         .vidioc_streamoff       = vb2_ioctl_streamoff,
1431
1432 #ifdef CONFIG_VIDEO_ADV_DEBUG
1433         .vidioc_g_chip_info     = vidioc_g_chip_info,
1434         .vidioc_g_register      = vidioc_g_register,
1435         .vidioc_s_register      = vidioc_s_register,
1436 #endif
1437         .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
1438         .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
1439 };
1440
1441 static const struct video_device gspca_template = {
1442         .name = "gspca main driver",
1443         .fops = &dev_fops,
1444         .ioctl_ops = &dev_ioctl_ops,
1445         .release = video_device_release_empty, /* We use v4l2_dev.release */
1446 };
1447
1448 /*
1449  * probe and create a new gspca device
1450  *
1451  * This function must be called by the sub-driver when it is
1452  * called for probing a new device.
1453  */
1454 int gspca_dev_probe2(struct usb_interface *intf,
1455                 const struct usb_device_id *id,
1456                 const struct sd_desc *sd_desc,
1457                 int dev_size,
1458                 struct module *module)
1459 {
1460         struct gspca_dev *gspca_dev;
1461         struct usb_device *dev = interface_to_usbdev(intf);
1462         struct vb2_queue *q;
1463         int ret;
1464
1465         pr_info("%s-" GSPCA_VERSION " probing %04x:%04x\n",
1466                 sd_desc->name, id->idVendor, id->idProduct);
1467
1468         /* create the device */
1469         if (dev_size < sizeof *gspca_dev)
1470                 dev_size = sizeof *gspca_dev;
1471         gspca_dev = kzalloc(dev_size, GFP_KERNEL);
1472         if (!gspca_dev) {
1473                 pr_err("couldn't kzalloc gspca struct\n");
1474                 return -ENOMEM;
1475         }
1476         gspca_dev->usb_buf = kzalloc(USB_BUF_SZ, GFP_KERNEL);
1477         if (!gspca_dev->usb_buf) {
1478                 pr_err("out of memory\n");
1479                 ret = -ENOMEM;
1480                 goto out;
1481         }
1482         gspca_dev->dev = dev;
1483         gspca_dev->iface = intf->cur_altsetting->desc.bInterfaceNumber;
1484         gspca_dev->xfer_ep = -1;
1485
1486         /* check if any audio device */
1487         if (dev->actconfig->desc.bNumInterfaces != 1) {
1488                 int i;
1489                 struct usb_interface *intf2;
1490
1491                 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
1492                         intf2 = dev->actconfig->interface[i];
1493                         if (intf2 != NULL
1494                          && intf2->altsetting != NULL
1495                          && intf2->altsetting->desc.bInterfaceClass ==
1496                                          USB_CLASS_AUDIO) {
1497                                 gspca_dev->audio = 1;
1498                                 break;
1499                         }
1500                 }
1501         }
1502
1503         gspca_dev->v4l2_dev.release = gspca_release;
1504         ret = v4l2_device_register(&intf->dev, &gspca_dev->v4l2_dev);
1505         if (ret)
1506                 goto out;
1507         gspca_dev->present = true;
1508         gspca_dev->sd_desc = sd_desc;
1509         gspca_dev->empty_packet = -1;   /* don't check the empty packets */
1510         gspca_dev->vdev = gspca_template;
1511         gspca_dev->vdev.v4l2_dev = &gspca_dev->v4l2_dev;
1512         video_set_drvdata(&gspca_dev->vdev, gspca_dev);
1513         gspca_dev->module = module;
1514
1515         mutex_init(&gspca_dev->usb_lock);
1516         gspca_dev->vdev.lock = &gspca_dev->usb_lock;
1517         init_waitqueue_head(&gspca_dev->wq);
1518
1519         /* Initialize the vb2 queue */
1520         q = &gspca_dev->queue;
1521         q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1522         q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_READ;
1523         q->drv_priv = gspca_dev;
1524         q->buf_struct_size = sizeof(struct gspca_buffer);
1525         q->ops = &gspca_qops;
1526         q->mem_ops = &vb2_vmalloc_memops;
1527         q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1528         q->min_buffers_needed = 2;
1529         q->lock = &gspca_dev->usb_lock;
1530         ret = vb2_queue_init(q);
1531         if (ret)
1532                 goto out;
1533         gspca_dev->vdev.queue = q;
1534
1535         INIT_LIST_HEAD(&gspca_dev->buf_list);
1536         spin_lock_init(&gspca_dev->qlock);
1537
1538         /* configure the subdriver and initialize the USB device */
1539         ret = sd_desc->config(gspca_dev, id);
1540         if (ret < 0)
1541                 goto out;
1542         ret = sd_desc->init(gspca_dev);
1543         if (ret < 0)
1544                 goto out;
1545         if (sd_desc->init_controls)
1546                 ret = sd_desc->init_controls(gspca_dev);
1547         if (ret < 0)
1548                 goto out;
1549         gspca_set_default_mode(gspca_dev);
1550
1551         ret = gspca_input_connect(gspca_dev);
1552         if (ret)
1553                 goto out;
1554
1555 #ifdef CONFIG_VIDEO_ADV_DEBUG
1556         if (!gspca_dev->sd_desc->get_register)
1557                 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_DBG_G_REGISTER);
1558         if (!gspca_dev->sd_desc->set_register)
1559                 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_DBG_S_REGISTER);
1560 #endif
1561         if (!gspca_dev->sd_desc->get_jcomp)
1562                 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_G_JPEGCOMP);
1563         if (!gspca_dev->sd_desc->set_jcomp)
1564                 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_S_JPEGCOMP);
1565
1566         /* init video stuff */
1567         ret = video_register_device(&gspca_dev->vdev,
1568                                   VFL_TYPE_GRABBER,
1569                                   -1);
1570         if (ret < 0) {
1571                 pr_err("video_register_device err %d\n", ret);
1572                 goto out;
1573         }
1574
1575         usb_set_intfdata(intf, gspca_dev);
1576         gspca_dbg(gspca_dev, D_PROBE, "%s created\n",
1577                   video_device_node_name(&gspca_dev->vdev));
1578
1579         gspca_input_create_urb(gspca_dev);
1580
1581         return 0;
1582 out:
1583 #if IS_ENABLED(CONFIG_INPUT)
1584         if (gspca_dev->input_dev)
1585                 input_unregister_device(gspca_dev->input_dev);
1586 #endif
1587         v4l2_ctrl_handler_free(gspca_dev->vdev.ctrl_handler);
1588         v4l2_device_unregister(&gspca_dev->v4l2_dev);
1589         if (sd_desc->probe_error)
1590                 sd_desc->probe_error(gspca_dev);
1591         kfree(gspca_dev->usb_buf);
1592         kfree(gspca_dev);
1593         return ret;
1594 }
1595 EXPORT_SYMBOL(gspca_dev_probe2);
1596
1597 /* same function as the previous one, but check the interface */
1598 int gspca_dev_probe(struct usb_interface *intf,
1599                 const struct usb_device_id *id,
1600                 const struct sd_desc *sd_desc,
1601                 int dev_size,
1602                 struct module *module)
1603 {
1604         struct usb_device *dev = interface_to_usbdev(intf);
1605
1606         /* we don't handle multi-config cameras */
1607         if (dev->descriptor.bNumConfigurations != 1) {
1608                 pr_err("%04x:%04x too many config\n",
1609                        id->idVendor, id->idProduct);
1610                 return -ENODEV;
1611         }
1612
1613         /* the USB video interface must be the first one */
1614         if (dev->actconfig->desc.bNumInterfaces != 1
1615          && intf->cur_altsetting->desc.bInterfaceNumber != 0)
1616                 return -ENODEV;
1617
1618         return gspca_dev_probe2(intf, id, sd_desc, dev_size, module);
1619 }
1620 EXPORT_SYMBOL(gspca_dev_probe);
1621
1622 /*
1623  * USB disconnection
1624  *
1625  * This function must be called by the sub-driver
1626  * when the device disconnects, after the specific resources are freed.
1627  */
1628 void gspca_disconnect(struct usb_interface *intf)
1629 {
1630         struct gspca_dev *gspca_dev = usb_get_intfdata(intf);
1631 #if IS_ENABLED(CONFIG_INPUT)
1632         struct input_dev *input_dev;
1633 #endif
1634
1635         gspca_dbg(gspca_dev, D_PROBE, "%s disconnect\n",
1636                   video_device_node_name(&gspca_dev->vdev));
1637
1638         mutex_lock(&gspca_dev->usb_lock);
1639         gspca_dev->present = false;
1640         destroy_urbs(gspca_dev);
1641         gspca_input_destroy_urb(gspca_dev);
1642
1643         vb2_queue_error(&gspca_dev->queue);
1644
1645 #if IS_ENABLED(CONFIG_INPUT)
1646         input_dev = gspca_dev->input_dev;
1647         if (input_dev) {
1648                 gspca_dev->input_dev = NULL;
1649                 input_unregister_device(input_dev);
1650         }
1651 #endif
1652
1653         v4l2_device_disconnect(&gspca_dev->v4l2_dev);
1654         video_unregister_device(&gspca_dev->vdev);
1655
1656         mutex_unlock(&gspca_dev->usb_lock);
1657
1658         /* (this will call gspca_release() immediately or on last close) */
1659         v4l2_device_put(&gspca_dev->v4l2_dev);
1660 }
1661 EXPORT_SYMBOL(gspca_disconnect);
1662
1663 #ifdef CONFIG_PM
1664 int gspca_suspend(struct usb_interface *intf, pm_message_t message)
1665 {
1666         struct gspca_dev *gspca_dev = usb_get_intfdata(intf);
1667
1668         gspca_input_destroy_urb(gspca_dev);
1669
1670         if (!vb2_start_streaming_called(&gspca_dev->queue))
1671                 return 0;
1672
1673         mutex_lock(&gspca_dev->usb_lock);
1674         gspca_dev->frozen = 1;          /* avoid urb error messages */
1675         gspca_dev->usb_err = 0;
1676         if (gspca_dev->sd_desc->stopN)
1677                 gspca_dev->sd_desc->stopN(gspca_dev);
1678         destroy_urbs(gspca_dev);
1679         gspca_set_alt0(gspca_dev);
1680         if (gspca_dev->sd_desc->stop0)
1681                 gspca_dev->sd_desc->stop0(gspca_dev);
1682         mutex_unlock(&gspca_dev->usb_lock);
1683
1684         return 0;
1685 }
1686 EXPORT_SYMBOL(gspca_suspend);
1687
1688 int gspca_resume(struct usb_interface *intf)
1689 {
1690         struct gspca_dev *gspca_dev = usb_get_intfdata(intf);
1691         int streaming, ret = 0;
1692
1693         mutex_lock(&gspca_dev->usb_lock);
1694         gspca_dev->frozen = 0;
1695         gspca_dev->usb_err = 0;
1696         gspca_dev->sd_desc->init(gspca_dev);
1697         /*
1698          * Most subdrivers send all ctrl values on sd_start and thus
1699          * only write to the device registers on s_ctrl when streaming ->
1700          * Clear streaming to avoid setting all ctrls twice.
1701          */
1702         streaming = vb2_start_streaming_called(&gspca_dev->queue);
1703         if (streaming)
1704                 ret = gspca_init_transfer(gspca_dev);
1705         else
1706                 gspca_input_create_urb(gspca_dev);
1707         mutex_unlock(&gspca_dev->usb_lock);
1708
1709         return ret;
1710 }
1711 EXPORT_SYMBOL(gspca_resume);
1712 #endif
1713
1714 /* -- module insert / remove -- */
1715 static int __init gspca_init(void)
1716 {
1717         pr_info("v" GSPCA_VERSION " registered\n");
1718         return 0;
1719 }
1720 static void __exit gspca_exit(void)
1721 {
1722 }
1723
1724 module_init(gspca_init);
1725 module_exit(gspca_exit);
1726
1727 module_param_named(debug, gspca_debug, int, 0644);
1728 MODULE_PARM_DESC(debug,
1729                 "1:probe 2:config 3:stream 4:frame 5:packet 6:usbi 7:usbo");