Merge git://git.infradead.org/mtd-2.6
[pandora-kernel.git] / drivers / media / video / gspca / gspca.c
1 /*
2  * Main USB camera driver
3  *
4  * Copyright (C) 2008-2010 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  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22  */
23
24 #define MODULE_NAME "gspca"
25
26 #include <linux/init.h>
27 #include <linux/version.h>
28 #include <linux/fs.h>
29 #include <linux/vmalloc.h>
30 #include <linux/sched.h>
31 #include <linux/slab.h>
32 #include <linux/mm.h>
33 #include <linux/string.h>
34 #include <linux/pagemap.h>
35 #include <linux/io.h>
36 #include <asm/page.h>
37 #include <linux/uaccess.h>
38 #include <linux/ktime.h>
39 #include <media/v4l2-ioctl.h>
40
41 #include "gspca.h"
42
43 #if defined(CONFIG_INPUT) || defined(CONFIG_INPUT_MODULE)
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
58 #define DRIVER_VERSION_NUMBER   KERNEL_VERSION(2, 10, 0)
59
60 #ifdef GSPCA_DEBUG
61 int gspca_debug = D_ERR | D_PROBE;
62 EXPORT_SYMBOL(gspca_debug);
63
64 static void PDEBUG_MODE(char *txt, __u32 pixfmt, int w, int h)
65 {
66         if ((pixfmt >> 24) >= '0' && (pixfmt >> 24) <= 'z') {
67                 PDEBUG(D_CONF|D_STREAM, "%s %c%c%c%c %dx%d",
68                         txt,
69                         pixfmt & 0xff,
70                         (pixfmt >> 8) & 0xff,
71                         (pixfmt >> 16) & 0xff,
72                         pixfmt >> 24,
73                         w, h);
74         } else {
75                 PDEBUG(D_CONF|D_STREAM, "%s 0x%08x %dx%d",
76                         txt,
77                         pixfmt,
78                         w, h);
79         }
80 }
81 #else
82 #define PDEBUG_MODE(txt, pixfmt, w, h)
83 #endif
84
85 /* specific memory types - !! should be different from V4L2_MEMORY_xxx */
86 #define GSPCA_MEMORY_NO 0       /* V4L2_MEMORY_xxx starts from 1 */
87 #define GSPCA_MEMORY_READ 7
88
89 #define BUF_ALL_FLAGS (V4L2_BUF_FLAG_QUEUED | V4L2_BUF_FLAG_DONE)
90
91 /*
92  * VMA operations.
93  */
94 static void gspca_vm_open(struct vm_area_struct *vma)
95 {
96         struct gspca_frame *frame = vma->vm_private_data;
97
98         frame->vma_use_count++;
99         frame->v4l2_buf.flags |= V4L2_BUF_FLAG_MAPPED;
100 }
101
102 static void gspca_vm_close(struct vm_area_struct *vma)
103 {
104         struct gspca_frame *frame = vma->vm_private_data;
105
106         if (--frame->vma_use_count <= 0)
107                 frame->v4l2_buf.flags &= ~V4L2_BUF_FLAG_MAPPED;
108 }
109
110 static const struct vm_operations_struct gspca_vm_ops = {
111         .open           = gspca_vm_open,
112         .close          = gspca_vm_close,
113 };
114
115 /*
116  * Input and interrupt endpoint handling functions
117  */
118 #if defined(CONFIG_INPUT) || defined(CONFIG_INPUT_MODULE)
119 static void int_irq(struct urb *urb)
120 {
121         struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context;
122         int ret;
123
124         ret = urb->status;
125         switch (ret) {
126         case 0:
127                 if (gspca_dev->sd_desc->int_pkt_scan(gspca_dev,
128                     urb->transfer_buffer, urb->actual_length) < 0) {
129                         PDEBUG(D_ERR, "Unknown packet received");
130                 }
131                 break;
132
133         case -ENOENT:
134         case -ECONNRESET:
135         case -ENODEV:
136         case -ESHUTDOWN:
137                 /* Stop is requested either by software or hardware is gone,
138                  * keep the ret value non-zero and don't resubmit later.
139                  */
140                 break;
141
142         default:
143                 PDEBUG(D_ERR, "URB error %i, resubmitting", urb->status);
144                 urb->status = 0;
145                 ret = 0;
146         }
147
148         if (ret == 0) {
149                 ret = usb_submit_urb(urb, GFP_ATOMIC);
150                 if (ret < 0)
151                         PDEBUG(D_ERR, "Resubmit URB failed with error %i", ret);
152         }
153 }
154
155 static int gspca_input_connect(struct gspca_dev *dev)
156 {
157         struct input_dev *input_dev;
158         int err = 0;
159
160         dev->input_dev = NULL;
161         if (dev->sd_desc->int_pkt_scan || dev->sd_desc->other_input)  {
162                 input_dev = input_allocate_device();
163                 if (!input_dev)
164                         return -ENOMEM;
165
166                 usb_make_path(dev->dev, dev->phys, sizeof(dev->phys));
167                 strlcat(dev->phys, "/input0", sizeof(dev->phys));
168
169                 input_dev->name = dev->sd_desc->name;
170                 input_dev->phys = dev->phys;
171
172                 usb_to_input_id(dev->dev, &input_dev->id);
173
174                 input_dev->evbit[0] = BIT_MASK(EV_KEY);
175                 input_dev->keybit[BIT_WORD(KEY_CAMERA)] = BIT_MASK(KEY_CAMERA);
176                 input_dev->dev.parent = &dev->dev->dev;
177
178                 err = input_register_device(input_dev);
179                 if (err) {
180                         PDEBUG(D_ERR, "Input device registration failed "
181                                 "with error %i", err);
182                         input_dev->dev.parent = NULL;
183                         input_free_device(input_dev);
184                 } else {
185                         dev->input_dev = input_dev;
186                 }
187         }
188
189         return err;
190 }
191
192 static int alloc_and_submit_int_urb(struct gspca_dev *gspca_dev,
193                           struct usb_endpoint_descriptor *ep)
194 {
195         unsigned int buffer_len;
196         int interval;
197         struct urb *urb;
198         struct usb_device *dev;
199         void *buffer = NULL;
200         int ret = -EINVAL;
201
202         buffer_len = le16_to_cpu(ep->wMaxPacketSize);
203         interval = ep->bInterval;
204         PDEBUG(D_CONF, "found int in endpoint: 0x%x, "
205                 "buffer_len=%u, interval=%u",
206                 ep->bEndpointAddress, buffer_len, interval);
207
208         dev = gspca_dev->dev;
209
210         urb = usb_alloc_urb(0, GFP_KERNEL);
211         if (!urb) {
212                 ret = -ENOMEM;
213                 goto error;
214         }
215
216         buffer = usb_alloc_coherent(dev, buffer_len,
217                                 GFP_KERNEL, &urb->transfer_dma);
218         if (!buffer) {
219                 ret = -ENOMEM;
220                 goto error_buffer;
221         }
222         usb_fill_int_urb(urb, dev,
223                 usb_rcvintpipe(dev, ep->bEndpointAddress),
224                 buffer, buffer_len,
225                 int_irq, (void *)gspca_dev, interval);
226         gspca_dev->int_urb = urb;
227         ret = usb_submit_urb(urb, GFP_KERNEL);
228         if (ret < 0) {
229                 PDEBUG(D_ERR, "submit int URB failed with error %i", ret);
230                 goto error_submit;
231         }
232         return ret;
233
234 error_submit:
235         usb_free_coherent(dev,
236                           urb->transfer_buffer_length,
237                           urb->transfer_buffer,
238                           urb->transfer_dma);
239 error_buffer:
240         usb_free_urb(urb);
241 error:
242         return ret;
243 }
244
245 static void gspca_input_create_urb(struct gspca_dev *gspca_dev)
246 {
247         struct usb_interface *intf;
248         struct usb_host_interface *intf_desc;
249         struct usb_endpoint_descriptor *ep;
250         int i;
251
252         if (gspca_dev->sd_desc->int_pkt_scan)  {
253                 intf = usb_ifnum_to_if(gspca_dev->dev, gspca_dev->iface);
254                 intf_desc = intf->cur_altsetting;
255                 for (i = 0; i < intf_desc->desc.bNumEndpoints; i++) {
256                         ep = &intf_desc->endpoint[i].desc;
257                         if (usb_endpoint_dir_in(ep) &&
258                             usb_endpoint_xfer_int(ep)) {
259
260                                 alloc_and_submit_int_urb(gspca_dev, ep);
261                                 break;
262                         }
263                 }
264         }
265 }
266
267 static void gspca_input_destroy_urb(struct gspca_dev *gspca_dev)
268 {
269         struct urb *urb;
270
271         urb = gspca_dev->int_urb;
272         if (urb) {
273                 gspca_dev->int_urb = NULL;
274                 usb_kill_urb(urb);
275                 usb_free_coherent(gspca_dev->dev,
276                                   urb->transfer_buffer_length,
277                                   urb->transfer_buffer,
278                                   urb->transfer_dma);
279                 usb_free_urb(urb);
280         }
281 }
282 #else
283 static inline void gspca_input_destroy_urb(struct gspca_dev *gspca_dev)
284 {
285 }
286
287 static inline void gspca_input_create_urb(struct gspca_dev *gspca_dev)
288 {
289 }
290
291 static inline int gspca_input_connect(struct gspca_dev *dev)
292 {
293         return 0;
294 }
295 #endif
296
297 /*
298  * fill a video frame from an URB and resubmit
299  */
300 static void fill_frame(struct gspca_dev *gspca_dev,
301                         struct urb *urb)
302 {
303         u8 *data;               /* address of data in the iso message */
304         int i, len, st;
305         cam_pkt_op pkt_scan;
306
307         if (urb->status != 0) {
308                 if (urb->status == -ESHUTDOWN)
309                         return;         /* disconnection */
310 #ifdef CONFIG_PM
311                 if (gspca_dev->frozen)
312                         return;
313 #endif
314                 PDEBUG(D_ERR|D_PACK, "urb status: %d", urb->status);
315                 urb->status = 0;
316                 goto resubmit;
317         }
318         pkt_scan = gspca_dev->sd_desc->pkt_scan;
319         for (i = 0; i < urb->number_of_packets; i++) {
320
321                 /* check the packet status and length */
322                 len = urb->iso_frame_desc[i].actual_length;
323                 if (len == 0) {
324                         if (gspca_dev->empty_packet == 0)
325                                 gspca_dev->empty_packet = 1;
326                         continue;
327                 }
328                 st = urb->iso_frame_desc[i].status;
329                 if (st) {
330                         PDEBUG(D_ERR,
331                                 "ISOC data error: [%d] len=%d, status=%d",
332                                 i, len, st);
333                         gspca_dev->last_packet_type = DISCARD_PACKET;
334                         continue;
335                 }
336
337                 /* let the packet be analyzed by the subdriver */
338                 PDEBUG(D_PACK, "packet [%d] o:%d l:%d",
339                         i, urb->iso_frame_desc[i].offset, len);
340                 data = (u8 *) urb->transfer_buffer
341                                         + urb->iso_frame_desc[i].offset;
342                 pkt_scan(gspca_dev, data, len);
343         }
344
345 resubmit:
346         /* resubmit the URB */
347         st = usb_submit_urb(urb, GFP_ATOMIC);
348         if (st < 0)
349                 PDEBUG(D_ERR|D_PACK, "usb_submit_urb() ret %d", st);
350 }
351
352 /*
353  * ISOC message interrupt from the USB device
354  *
355  * Analyse each packet and call the subdriver for copy to the frame buffer.
356  */
357 static void isoc_irq(struct urb *urb)
358 {
359         struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context;
360
361         PDEBUG(D_PACK, "isoc irq");
362         if (!gspca_dev->streaming)
363                 return;
364         fill_frame(gspca_dev, urb);
365 }
366
367 /*
368  * bulk message interrupt from the USB device
369  */
370 static void bulk_irq(struct urb *urb)
371 {
372         struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context;
373         int st;
374
375         PDEBUG(D_PACK, "bulk irq");
376         if (!gspca_dev->streaming)
377                 return;
378         switch (urb->status) {
379         case 0:
380                 break;
381         case -ESHUTDOWN:
382                 return;         /* disconnection */
383         default:
384 #ifdef CONFIG_PM
385                 if (gspca_dev->frozen)
386                         return;
387 #endif
388                 PDEBUG(D_ERR|D_PACK, "urb status: %d", urb->status);
389                 urb->status = 0;
390                 goto resubmit;
391         }
392
393         PDEBUG(D_PACK, "packet l:%d", urb->actual_length);
394         gspca_dev->sd_desc->pkt_scan(gspca_dev,
395                                 urb->transfer_buffer,
396                                 urb->actual_length);
397
398 resubmit:
399         /* resubmit the URB */
400         if (gspca_dev->cam.bulk_nurbs != 0) {
401                 st = usb_submit_urb(urb, GFP_ATOMIC);
402                 if (st < 0)
403                         PDEBUG(D_ERR|D_PACK, "usb_submit_urb() ret %d", st);
404         }
405 }
406
407 /*
408  * add data to the current frame
409  *
410  * This function is called by the subdrivers at interrupt level.
411  *
412  * To build a frame, these ones must add
413  *      - one FIRST_PACKET
414  *      - 0 or many INTER_PACKETs
415  *      - one LAST_PACKET
416  * DISCARD_PACKET invalidates the whole frame.
417  * On LAST_PACKET, a new frame is returned.
418  */
419 void gspca_frame_add(struct gspca_dev *gspca_dev,
420                         enum gspca_packet_type packet_type,
421                         const u8 *data,
422                         int len)
423 {
424         struct gspca_frame *frame;
425         int i, j;
426
427         PDEBUG(D_PACK, "add t:%d l:%d", packet_type, len);
428
429         if (packet_type == FIRST_PACKET) {
430                 i = atomic_read(&gspca_dev->fr_i);
431
432                 /* if there are no queued buffer, discard the whole frame */
433                 if (i == atomic_read(&gspca_dev->fr_q)) {
434                         gspca_dev->last_packet_type = DISCARD_PACKET;
435                         return;
436                 }
437                 j = gspca_dev->fr_queue[i];
438                 frame = &gspca_dev->frame[j];
439                 frame->v4l2_buf.timestamp = ktime_to_timeval(ktime_get());
440                 frame->v4l2_buf.sequence = ++gspca_dev->sequence;
441                 gspca_dev->image = frame->data;
442                 gspca_dev->image_len = 0;
443         } else {
444                 switch (gspca_dev->last_packet_type) {
445                 case DISCARD_PACKET:
446                         if (packet_type == LAST_PACKET)
447                                 gspca_dev->last_packet_type = packet_type;
448                         return;
449                 case LAST_PACKET:
450                         return;
451                 }
452         }
453
454         /* append the packet to the frame buffer */
455         if (len > 0) {
456                 if (gspca_dev->image_len + len > gspca_dev->frsz) {
457                         PDEBUG(D_ERR|D_PACK, "frame overflow %d > %d",
458                                 gspca_dev->image_len + len,
459                                 gspca_dev->frsz);
460                         packet_type = DISCARD_PACKET;
461                 } else {
462 /* !! image is NULL only when last pkt is LAST or DISCARD
463                         if (gspca_dev->image == NULL) {
464                                 err("gspca_frame_add() image == NULL");
465                                 return;
466                         }
467  */
468                         memcpy(gspca_dev->image + gspca_dev->image_len,
469                                 data, len);
470                         gspca_dev->image_len += len;
471                 }
472         }
473         gspca_dev->last_packet_type = packet_type;
474
475         /* if last packet, invalidate packet concatenation until
476          * next first packet, wake up the application and advance
477          * in the queue */
478         if (packet_type == LAST_PACKET) {
479                 i = atomic_read(&gspca_dev->fr_i);
480                 j = gspca_dev->fr_queue[i];
481                 frame = &gspca_dev->frame[j];
482                 frame->v4l2_buf.bytesused = gspca_dev->image_len;
483                 frame->v4l2_buf.flags = (frame->v4l2_buf.flags
484                                          | V4L2_BUF_FLAG_DONE)
485                                         & ~V4L2_BUF_FLAG_QUEUED;
486                 i = (i + 1) % GSPCA_MAX_FRAMES;
487                 atomic_set(&gspca_dev->fr_i, i);
488                 wake_up_interruptible(&gspca_dev->wq);  /* event = new frame */
489                 PDEBUG(D_FRAM, "frame complete len:%d",
490                         frame->v4l2_buf.bytesused);
491                 gspca_dev->image = NULL;
492                 gspca_dev->image_len = 0;
493         }
494 }
495 EXPORT_SYMBOL(gspca_frame_add);
496
497 static int gspca_is_compressed(__u32 format)
498 {
499         switch (format) {
500         case V4L2_PIX_FMT_MJPEG:
501         case V4L2_PIX_FMT_JPEG:
502         case V4L2_PIX_FMT_SPCA561:
503         case V4L2_PIX_FMT_PAC207:
504         case V4L2_PIX_FMT_MR97310A:
505                 return 1;
506         }
507         return 0;
508 }
509
510 static int frame_alloc(struct gspca_dev *gspca_dev,
511                         unsigned int count)
512 {
513         struct gspca_frame *frame;
514         unsigned int frsz;
515         int i;
516
517         i = gspca_dev->curr_mode;
518         frsz = gspca_dev->cam.cam_mode[i].sizeimage;
519         PDEBUG(D_STREAM, "frame alloc frsz: %d", frsz);
520         frsz = PAGE_ALIGN(frsz);
521         gspca_dev->frsz = frsz;
522         if (count >= GSPCA_MAX_FRAMES)
523                 count = GSPCA_MAX_FRAMES - 1;
524         gspca_dev->frbuf = vmalloc_32(frsz * count);
525         if (!gspca_dev->frbuf) {
526                 err("frame alloc failed");
527                 return -ENOMEM;
528         }
529         gspca_dev->nframes = count;
530         for (i = 0; i < count; i++) {
531                 frame = &gspca_dev->frame[i];
532                 frame->v4l2_buf.index = i;
533                 frame->v4l2_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
534                 frame->v4l2_buf.flags = 0;
535                 frame->v4l2_buf.field = V4L2_FIELD_NONE;
536                 frame->v4l2_buf.length = frsz;
537                 frame->v4l2_buf.memory = gspca_dev->memory;
538                 frame->v4l2_buf.sequence = 0;
539                 frame->data = gspca_dev->frbuf + i * frsz;
540                 frame->v4l2_buf.m.offset = i * frsz;
541         }
542         atomic_set(&gspca_dev->fr_q, 0);
543         atomic_set(&gspca_dev->fr_i, 0);
544         gspca_dev->fr_o = 0;
545         return 0;
546 }
547
548 static void frame_free(struct gspca_dev *gspca_dev)
549 {
550         int i;
551
552         PDEBUG(D_STREAM, "frame free");
553         if (gspca_dev->frbuf != NULL) {
554                 vfree(gspca_dev->frbuf);
555                 gspca_dev->frbuf = NULL;
556                 for (i = 0; i < gspca_dev->nframes; i++)
557                         gspca_dev->frame[i].data = NULL;
558         }
559         gspca_dev->nframes = 0;
560 }
561
562 static void destroy_urbs(struct gspca_dev *gspca_dev)
563 {
564         struct urb *urb;
565         unsigned int i;
566
567         PDEBUG(D_STREAM, "kill transfer");
568         for (i = 0; i < MAX_NURBS; i++) {
569                 urb = gspca_dev->urb[i];
570                 if (urb == NULL)
571                         break;
572
573                 gspca_dev->urb[i] = NULL;
574                 usb_kill_urb(urb);
575                 if (urb->transfer_buffer != NULL)
576                         usb_free_coherent(gspca_dev->dev,
577                                           urb->transfer_buffer_length,
578                                           urb->transfer_buffer,
579                                           urb->transfer_dma);
580                 usb_free_urb(urb);
581         }
582 }
583
584 static int gspca_set_alt0(struct gspca_dev *gspca_dev)
585 {
586         int ret;
587
588         if (gspca_dev->alt == 0)
589                 return 0;
590         ret = usb_set_interface(gspca_dev->dev, gspca_dev->iface, 0);
591         if (ret < 0)
592                 PDEBUG(D_ERR|D_STREAM, "set alt 0 err %d", ret);
593         return ret;
594 }
595
596 /* Note: both the queue and the usb locks should be held when calling this */
597 static void gspca_stream_off(struct gspca_dev *gspca_dev)
598 {
599         gspca_dev->streaming = 0;
600         if (gspca_dev->present) {
601                 if (gspca_dev->sd_desc->stopN)
602                         gspca_dev->sd_desc->stopN(gspca_dev);
603                 destroy_urbs(gspca_dev);
604                 gspca_input_destroy_urb(gspca_dev);
605                 gspca_set_alt0(gspca_dev);
606                 gspca_input_create_urb(gspca_dev);
607         }
608
609         /* always call stop0 to free the subdriver's resources */
610         if (gspca_dev->sd_desc->stop0)
611                 gspca_dev->sd_desc->stop0(gspca_dev);
612         PDEBUG(D_STREAM, "stream off OK");
613 }
614
615 /*
616  * look for an input transfer endpoint in an alternate setting
617  */
618 static struct usb_host_endpoint *alt_xfer(struct usb_host_interface *alt,
619                                           int xfer)
620 {
621         struct usb_host_endpoint *ep;
622         int i, attr;
623
624         for (i = 0; i < alt->desc.bNumEndpoints; i++) {
625                 ep = &alt->endpoint[i];
626                 attr = ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
627                 if (attr == xfer
628                     && ep->desc.wMaxPacketSize != 0)
629                         return ep;
630         }
631         return NULL;
632 }
633
634 /*
635  * look for an input (isoc or bulk) endpoint
636  *
637  * The endpoint is defined by the subdriver.
638  * Use only the first isoc (some Zoran - 0x0572:0x0001 - have two such ep).
639  * This routine may be called many times when the bandwidth is too small
640  * (the bandwidth is checked on urb submit).
641  */
642 static struct usb_host_endpoint *get_ep(struct gspca_dev *gspca_dev)
643 {
644         struct usb_interface *intf;
645         struct usb_host_endpoint *ep;
646         int xfer, i, ret;
647
648         intf = usb_ifnum_to_if(gspca_dev->dev, gspca_dev->iface);
649         ep = NULL;
650         xfer = gspca_dev->cam.bulk ? USB_ENDPOINT_XFER_BULK
651                                    : USB_ENDPOINT_XFER_ISOC;
652         i = gspca_dev->alt;                     /* previous alt setting */
653         if (gspca_dev->cam.reverse_alts) {
654                 if (gspca_dev->audio)
655                         i++;
656                 while (++i < gspca_dev->nbalt) {
657                         ep = alt_xfer(&intf->altsetting[i], xfer);
658                         if (ep)
659                                 break;
660                 }
661         } else {
662                 if (gspca_dev->audio)
663                         i--;
664                 while (--i >= 0) {
665                         ep = alt_xfer(&intf->altsetting[i], xfer);
666                         if (ep)
667                                 break;
668                 }
669         }
670         if (ep == NULL) {
671                 err("no transfer endpoint found");
672                 return NULL;
673         }
674         PDEBUG(D_STREAM, "use alt %d ep 0x%02x",
675                         i, ep->desc.bEndpointAddress);
676         gspca_dev->alt = i;             /* memorize the current alt setting */
677         if (gspca_dev->nbalt > 1) {
678                 gspca_input_destroy_urb(gspca_dev);
679                 ret = usb_set_interface(gspca_dev->dev, gspca_dev->iface, i);
680                 if (ret < 0) {
681                         err("set alt %d err %d", i, ret);
682                         ep = NULL;
683                 }
684                 gspca_input_create_urb(gspca_dev);
685         }
686         return ep;
687 }
688
689 /*
690  * create the URBs for image transfer
691  */
692 static int create_urbs(struct gspca_dev *gspca_dev,
693                         struct usb_host_endpoint *ep)
694 {
695         struct urb *urb;
696         int n, nurbs, i, psize, npkt, bsize;
697
698         /* calculate the packet size and the number of packets */
699         psize = le16_to_cpu(ep->desc.wMaxPacketSize);
700
701         if (!gspca_dev->cam.bulk) {             /* isoc */
702
703                 /* See paragraph 5.9 / table 5-11 of the usb 2.0 spec. */
704                 if (gspca_dev->pkt_size == 0)
705                         psize = (psize & 0x07ff) * (1 + ((psize >> 11) & 3));
706                 else
707                         psize = gspca_dev->pkt_size;
708                 npkt = gspca_dev->cam.npkt;
709                 if (npkt == 0)
710                         npkt = 32;              /* default value */
711                 bsize = psize * npkt;
712                 PDEBUG(D_STREAM,
713                         "isoc %d pkts size %d = bsize:%d",
714                         npkt, psize, bsize);
715                 nurbs = DEF_NURBS;
716         } else {                                /* bulk */
717                 npkt = 0;
718                 bsize = gspca_dev->cam.bulk_size;
719                 if (bsize == 0)
720                         bsize = psize;
721                 PDEBUG(D_STREAM, "bulk bsize:%d", bsize);
722                 if (gspca_dev->cam.bulk_nurbs != 0)
723                         nurbs = gspca_dev->cam.bulk_nurbs;
724                 else
725                         nurbs = 1;
726         }
727
728         for (n = 0; n < nurbs; n++) {
729                 urb = usb_alloc_urb(npkt, GFP_KERNEL);
730                 if (!urb) {
731                         err("usb_alloc_urb failed");
732                         return -ENOMEM;
733                 }
734                 gspca_dev->urb[n] = urb;
735                 urb->transfer_buffer = usb_alloc_coherent(gspca_dev->dev,
736                                                 bsize,
737                                                 GFP_KERNEL,
738                                                 &urb->transfer_dma);
739
740                 if (urb->transfer_buffer == NULL) {
741                         err("usb_alloc_coherent failed");
742                         return -ENOMEM;
743                 }
744                 urb->dev = gspca_dev->dev;
745                 urb->context = gspca_dev;
746                 urb->transfer_buffer_length = bsize;
747                 if (npkt != 0) {                /* ISOC */
748                         urb->pipe = usb_rcvisocpipe(gspca_dev->dev,
749                                                     ep->desc.bEndpointAddress);
750                         urb->transfer_flags = URB_ISO_ASAP
751                                         | URB_NO_TRANSFER_DMA_MAP;
752                         urb->interval = ep->desc.bInterval;
753                         urb->complete = isoc_irq;
754                         urb->number_of_packets = npkt;
755                         for (i = 0; i < npkt; i++) {
756                                 urb->iso_frame_desc[i].length = psize;
757                                 urb->iso_frame_desc[i].offset = psize * i;
758                         }
759                 } else {                /* bulk */
760                         urb->pipe = usb_rcvbulkpipe(gspca_dev->dev,
761                                                 ep->desc.bEndpointAddress),
762                         urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
763                         urb->complete = bulk_irq;
764                 }
765         }
766         return 0;
767 }
768
769 /*
770  * start the USB transfer
771  */
772 static int gspca_init_transfer(struct gspca_dev *gspca_dev)
773 {
774         struct usb_host_endpoint *ep;
775         struct urb *urb;
776         int n, ret;
777
778         if (mutex_lock_interruptible(&gspca_dev->usb_lock))
779                 return -ERESTARTSYS;
780
781         if (!gspca_dev->present) {
782                 ret = -ENODEV;
783                 goto out;
784         }
785
786         /* reset the streaming variables */
787         gspca_dev->image = NULL;
788         gspca_dev->image_len = 0;
789         gspca_dev->last_packet_type = DISCARD_PACKET;
790         gspca_dev->sequence = 0;
791
792         gspca_dev->usb_err = 0;
793
794         /* set the higher alternate setting and
795          * loop until urb submit succeeds */
796         if (gspca_dev->cam.reverse_alts)
797                 gspca_dev->alt = 0;
798         else
799                 gspca_dev->alt = gspca_dev->nbalt;
800
801         if (gspca_dev->sd_desc->isoc_init) {
802                 ret = gspca_dev->sd_desc->isoc_init(gspca_dev);
803                 if (ret < 0)
804                         goto out;
805         }
806         ep = get_ep(gspca_dev);
807         if (ep == NULL) {
808                 ret = -EIO;
809                 goto out;
810         }
811         for (;;) {
812                 if (!gspca_dev->cam.no_urb_create) {
813                         PDEBUG(D_STREAM, "init transfer alt %d",
814                                 gspca_dev->alt);
815                         ret = create_urbs(gspca_dev, ep);
816                         if (ret < 0) {
817                                 destroy_urbs(gspca_dev);
818                                 goto out;
819                         }
820                 }
821
822                 /* clear the bulk endpoint */
823                 if (gspca_dev->cam.bulk)
824                         usb_clear_halt(gspca_dev->dev,
825                                         gspca_dev->urb[0]->pipe);
826
827                 /* start the cam */
828                 ret = gspca_dev->sd_desc->start(gspca_dev);
829                 if (ret < 0) {
830                         destroy_urbs(gspca_dev);
831                         goto out;
832                 }
833                 gspca_dev->streaming = 1;
834
835                 /* some bulk transfers are started by the subdriver */
836                 if (gspca_dev->cam.bulk && gspca_dev->cam.bulk_nurbs == 0)
837                         break;
838
839                 /* submit the URBs */
840                 for (n = 0; n < MAX_NURBS; n++) {
841                         urb = gspca_dev->urb[n];
842                         if (urb == NULL)
843                                 break;
844                         ret = usb_submit_urb(urb, GFP_KERNEL);
845                         if (ret < 0)
846                                 break;
847                 }
848                 if (ret >= 0)
849                         break;
850                 gspca_stream_off(gspca_dev);
851                 if (ret != -ENOSPC) {
852                         PDEBUG(D_ERR|D_STREAM,
853                                 "usb_submit_urb alt %d err %d",
854                                 gspca_dev->alt, ret);
855                         goto out;
856                 }
857
858                 /* the bandwidth is not wide enough
859                  * negociate or try a lower alternate setting */
860                 PDEBUG(D_ERR|D_STREAM,
861                         "bandwidth not wide enough - trying again");
862                 msleep(20);     /* wait for kill complete */
863                 if (gspca_dev->sd_desc->isoc_nego) {
864                         ret = gspca_dev->sd_desc->isoc_nego(gspca_dev);
865                         if (ret < 0)
866                                 goto out;
867                 } else {
868                         ep = get_ep(gspca_dev);
869                         if (ep == NULL) {
870                                 ret = -EIO;
871                                 goto out;
872                         }
873                 }
874         }
875 out:
876         mutex_unlock(&gspca_dev->usb_lock);
877         return ret;
878 }
879
880 static void gspca_set_default_mode(struct gspca_dev *gspca_dev)
881 {
882         int i;
883
884         i = gspca_dev->cam.nmodes - 1;  /* take the highest mode */
885         gspca_dev->curr_mode = i;
886         gspca_dev->width = gspca_dev->cam.cam_mode[i].width;
887         gspca_dev->height = gspca_dev->cam.cam_mode[i].height;
888         gspca_dev->pixfmt = gspca_dev->cam.cam_mode[i].pixelformat;
889 }
890
891 static int wxh_to_mode(struct gspca_dev *gspca_dev,
892                         int width, int height)
893 {
894         int i;
895
896         for (i = gspca_dev->cam.nmodes; --i > 0; ) {
897                 if (width >= gspca_dev->cam.cam_mode[i].width
898                     && height >= gspca_dev->cam.cam_mode[i].height)
899                         break;
900         }
901         return i;
902 }
903
904 /*
905  * search a mode with the right pixel format
906  */
907 static int gspca_get_mode(struct gspca_dev *gspca_dev,
908                         int mode,
909                         int pixfmt)
910 {
911         int modeU, modeD;
912
913         modeU = modeD = mode;
914         while ((modeU < gspca_dev->cam.nmodes) || modeD >= 0) {
915                 if (--modeD >= 0) {
916                         if (gspca_dev->cam.cam_mode[modeD].pixelformat
917                                                                 == pixfmt)
918                                 return modeD;
919                 }
920                 if (++modeU < gspca_dev->cam.nmodes) {
921                         if (gspca_dev->cam.cam_mode[modeU].pixelformat
922                                                                 == pixfmt)
923                                 return modeU;
924                 }
925         }
926         return -EINVAL;
927 }
928
929 #ifdef CONFIG_VIDEO_ADV_DEBUG
930 static int vidioc_g_register(struct file *file, void *priv,
931                         struct v4l2_dbg_register *reg)
932 {
933         int ret;
934         struct gspca_dev *gspca_dev = priv;
935
936         if (!gspca_dev->sd_desc->get_chip_ident)
937                 return -EINVAL;
938
939         if (!gspca_dev->sd_desc->get_register)
940                 return -EINVAL;
941
942         if (mutex_lock_interruptible(&gspca_dev->usb_lock))
943                 return -ERESTARTSYS;
944         gspca_dev->usb_err = 0;
945         if (gspca_dev->present)
946                 ret = gspca_dev->sd_desc->get_register(gspca_dev, reg);
947         else
948                 ret = -ENODEV;
949         mutex_unlock(&gspca_dev->usb_lock);
950
951         return ret;
952 }
953
954 static int vidioc_s_register(struct file *file, void *priv,
955                         struct v4l2_dbg_register *reg)
956 {
957         int ret;
958         struct gspca_dev *gspca_dev = priv;
959
960         if (!gspca_dev->sd_desc->get_chip_ident)
961                 return -EINVAL;
962
963         if (!gspca_dev->sd_desc->set_register)
964                 return -EINVAL;
965
966         if (mutex_lock_interruptible(&gspca_dev->usb_lock))
967                 return -ERESTARTSYS;
968         gspca_dev->usb_err = 0;
969         if (gspca_dev->present)
970                 ret = gspca_dev->sd_desc->set_register(gspca_dev, reg);
971         else
972                 ret = -ENODEV;
973         mutex_unlock(&gspca_dev->usb_lock);
974
975         return ret;
976 }
977 #endif
978
979 static int vidioc_g_chip_ident(struct file *file, void *priv,
980                         struct v4l2_dbg_chip_ident *chip)
981 {
982         int ret;
983         struct gspca_dev *gspca_dev = priv;
984
985         if (!gspca_dev->sd_desc->get_chip_ident)
986                 return -EINVAL;
987
988         if (mutex_lock_interruptible(&gspca_dev->usb_lock))
989                 return -ERESTARTSYS;
990         gspca_dev->usb_err = 0;
991         if (gspca_dev->present)
992                 ret = gspca_dev->sd_desc->get_chip_ident(gspca_dev, chip);
993         else
994                 ret = -ENODEV;
995         mutex_unlock(&gspca_dev->usb_lock);
996
997         return ret;
998 }
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 = priv;
1004         int i, j, index;
1005         __u32 fmt_tb[8];
1006
1007         /* give an index to each format */
1008         index = 0;
1009         j = 0;
1010         for (i = gspca_dev->cam.nmodes; --i >= 0; ) {
1011                 fmt_tb[index] = gspca_dev->cam.cam_mode[i].pixelformat;
1012                 j = 0;
1013                 for (;;) {
1014                         if (fmt_tb[j] == fmt_tb[index])
1015                                 break;
1016                         j++;
1017                 }
1018                 if (j == index) {
1019                         if (fmtdesc->index == index)
1020                                 break;          /* new format */
1021                         index++;
1022                         if (index >= ARRAY_SIZE(fmt_tb))
1023                                 return -EINVAL;
1024                 }
1025         }
1026         if (i < 0)
1027                 return -EINVAL;         /* no more format */
1028
1029         fmtdesc->pixelformat = fmt_tb[index];
1030         if (gspca_is_compressed(fmt_tb[index]))
1031                 fmtdesc->flags = V4L2_FMT_FLAG_COMPRESSED;
1032         fmtdesc->description[0] = fmtdesc->pixelformat & 0xff;
1033         fmtdesc->description[1] = (fmtdesc->pixelformat >> 8) & 0xff;
1034         fmtdesc->description[2] = (fmtdesc->pixelformat >> 16) & 0xff;
1035         fmtdesc->description[3] = fmtdesc->pixelformat >> 24;
1036         fmtdesc->description[4] = '\0';
1037         return 0;
1038 }
1039
1040 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
1041                             struct v4l2_format *fmt)
1042 {
1043         struct gspca_dev *gspca_dev = priv;
1044         int mode;
1045
1046         mode = gspca_dev->curr_mode;
1047         memcpy(&fmt->fmt.pix, &gspca_dev->cam.cam_mode[mode],
1048                 sizeof fmt->fmt.pix);
1049         return 0;
1050 }
1051
1052 static int try_fmt_vid_cap(struct gspca_dev *gspca_dev,
1053                         struct v4l2_format *fmt)
1054 {
1055         int w, h, mode, mode2;
1056
1057         w = fmt->fmt.pix.width;
1058         h = fmt->fmt.pix.height;
1059
1060 #ifdef GSPCA_DEBUG
1061         if (gspca_debug & D_CONF)
1062                 PDEBUG_MODE("try fmt cap", fmt->fmt.pix.pixelformat, w, h);
1063 #endif
1064         /* search the closest mode for width and height */
1065         mode = wxh_to_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 /*              else
1077                         ;                * no chance, return this mode */
1078         }
1079         memcpy(&fmt->fmt.pix, &gspca_dev->cam.cam_mode[mode],
1080                 sizeof fmt->fmt.pix);
1081         return mode;                    /* used when s_fmt */
1082 }
1083
1084 static int vidioc_try_fmt_vid_cap(struct file *file,
1085                               void *priv,
1086                               struct v4l2_format *fmt)
1087 {
1088         struct gspca_dev *gspca_dev = priv;
1089         int ret;
1090
1091         ret = try_fmt_vid_cap(gspca_dev, fmt);
1092         if (ret < 0)
1093                 return ret;
1094         return 0;
1095 }
1096
1097 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
1098                             struct v4l2_format *fmt)
1099 {
1100         struct gspca_dev *gspca_dev = priv;
1101         int ret;
1102
1103         if (mutex_lock_interruptible(&gspca_dev->queue_lock))
1104                 return -ERESTARTSYS;
1105
1106         ret = try_fmt_vid_cap(gspca_dev, fmt);
1107         if (ret < 0)
1108                 goto out;
1109
1110         if (gspca_dev->nframes != 0
1111             && fmt->fmt.pix.sizeimage > gspca_dev->frsz) {
1112                 ret = -EINVAL;
1113                 goto out;
1114         }
1115
1116         if (ret == gspca_dev->curr_mode) {
1117                 ret = 0;
1118                 goto out;                       /* same mode */
1119         }
1120
1121         if (gspca_dev->streaming) {
1122                 ret = -EBUSY;
1123                 goto out;
1124         }
1125         gspca_dev->width = fmt->fmt.pix.width;
1126         gspca_dev->height = fmt->fmt.pix.height;
1127         gspca_dev->pixfmt = fmt->fmt.pix.pixelformat;
1128         gspca_dev->curr_mode = ret;
1129
1130         ret = 0;
1131 out:
1132         mutex_unlock(&gspca_dev->queue_lock);
1133         return ret;
1134 }
1135
1136 static int vidioc_enum_framesizes(struct file *file, void *priv,
1137                                   struct v4l2_frmsizeenum *fsize)
1138 {
1139         struct gspca_dev *gspca_dev = priv;
1140         int i;
1141         __u32 index = 0;
1142
1143         for (i = 0; i < gspca_dev->cam.nmodes; i++) {
1144                 if (fsize->pixel_format !=
1145                                 gspca_dev->cam.cam_mode[i].pixelformat)
1146                         continue;
1147
1148                 if (fsize->index == index) {
1149                         fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE;
1150                         fsize->discrete.width =
1151                                 gspca_dev->cam.cam_mode[i].width;
1152                         fsize->discrete.height =
1153                                 gspca_dev->cam.cam_mode[i].height;
1154                         return 0;
1155                 }
1156                 index++;
1157         }
1158
1159         return -EINVAL;
1160 }
1161
1162 static int vidioc_enum_frameintervals(struct file *filp, void *priv,
1163                                       struct v4l2_frmivalenum *fival)
1164 {
1165         struct gspca_dev *gspca_dev = priv;
1166         int mode = wxh_to_mode(gspca_dev, fival->width, fival->height);
1167         __u32 i;
1168
1169         if (gspca_dev->cam.mode_framerates == NULL ||
1170                         gspca_dev->cam.mode_framerates[mode].nrates == 0)
1171                 return -EINVAL;
1172
1173         if (fival->pixel_format !=
1174                         gspca_dev->cam.cam_mode[mode].pixelformat)
1175                 return -EINVAL;
1176
1177         for (i = 0; i < gspca_dev->cam.mode_framerates[mode].nrates; i++) {
1178                 if (fival->index == i) {
1179                         fival->type = V4L2_FRMSIZE_TYPE_DISCRETE;
1180                         fival->discrete.numerator = 1;
1181                         fival->discrete.denominator =
1182                                 gspca_dev->cam.mode_framerates[mode].rates[i];
1183                         return 0;
1184                 }
1185         }
1186
1187         return -EINVAL;
1188 }
1189
1190 static void gspca_release(struct video_device *vfd)
1191 {
1192         struct gspca_dev *gspca_dev = container_of(vfd, struct gspca_dev, vdev);
1193
1194         PDEBUG(D_PROBE, "%s released",
1195                 video_device_node_name(&gspca_dev->vdev));
1196
1197         kfree(gspca_dev->usb_buf);
1198         kfree(gspca_dev);
1199 }
1200
1201 static int dev_open(struct file *file)
1202 {
1203         struct gspca_dev *gspca_dev;
1204         int ret;
1205
1206         PDEBUG(D_STREAM, "[%s] open", current->comm);
1207         gspca_dev = (struct gspca_dev *) video_devdata(file);
1208         if (mutex_lock_interruptible(&gspca_dev->queue_lock))
1209                 return -ERESTARTSYS;
1210         if (!gspca_dev->present) {
1211                 ret = -ENODEV;
1212                 goto out;
1213         }
1214
1215         if (gspca_dev->users > 4) {     /* (arbitrary value) */
1216                 ret = -EBUSY;
1217                 goto out;
1218         }
1219
1220         /* protect the subdriver against rmmod */
1221         if (!try_module_get(gspca_dev->module)) {
1222                 ret = -ENODEV;
1223                 goto out;
1224         }
1225
1226         gspca_dev->users++;
1227
1228         file->private_data = gspca_dev;
1229 #ifdef GSPCA_DEBUG
1230         /* activate the v4l2 debug */
1231         if (gspca_debug & D_V4L2)
1232                 gspca_dev->vdev.debug |= V4L2_DEBUG_IOCTL
1233                                         | V4L2_DEBUG_IOCTL_ARG;
1234         else
1235                 gspca_dev->vdev.debug &= ~(V4L2_DEBUG_IOCTL
1236                                         | V4L2_DEBUG_IOCTL_ARG);
1237 #endif
1238         ret = 0;
1239 out:
1240         mutex_unlock(&gspca_dev->queue_lock);
1241         if (ret != 0)
1242                 PDEBUG(D_ERR|D_STREAM, "open failed err %d", ret);
1243         else
1244                 PDEBUG(D_STREAM, "open done");
1245         return ret;
1246 }
1247
1248 static int dev_close(struct file *file)
1249 {
1250         struct gspca_dev *gspca_dev = file->private_data;
1251
1252         PDEBUG(D_STREAM, "[%s] close", current->comm);
1253         if (mutex_lock_interruptible(&gspca_dev->queue_lock))
1254                 return -ERESTARTSYS;
1255         gspca_dev->users--;
1256
1257         /* if the file did the capture, free the streaming resources */
1258         if (gspca_dev->capt_file == file) {
1259                 if (gspca_dev->streaming) {
1260                         mutex_lock(&gspca_dev->usb_lock);
1261                         gspca_dev->usb_err = 0;
1262                         gspca_stream_off(gspca_dev);
1263                         mutex_unlock(&gspca_dev->usb_lock);
1264                 }
1265                 frame_free(gspca_dev);
1266                 gspca_dev->capt_file = NULL;
1267                 gspca_dev->memory = GSPCA_MEMORY_NO;
1268         }
1269         file->private_data = NULL;
1270         module_put(gspca_dev->module);
1271         mutex_unlock(&gspca_dev->queue_lock);
1272
1273         PDEBUG(D_STREAM, "close done");
1274
1275         return 0;
1276 }
1277
1278 static int vidioc_querycap(struct file *file, void  *priv,
1279                            struct v4l2_capability *cap)
1280 {
1281         struct gspca_dev *gspca_dev = priv;
1282         int ret;
1283
1284         /* protect the access to the usb device */
1285         if (mutex_lock_interruptible(&gspca_dev->usb_lock))
1286                 return -ERESTARTSYS;
1287         if (!gspca_dev->present) {
1288                 ret = -ENODEV;
1289                 goto out;
1290         }
1291         strncpy(cap->driver, gspca_dev->sd_desc->name, sizeof cap->driver);
1292         if (gspca_dev->dev->product != NULL) {
1293                 strncpy(cap->card, gspca_dev->dev->product,
1294                         sizeof cap->card);
1295         } else {
1296                 snprintf(cap->card, sizeof cap->card,
1297                         "USB Camera (%04x:%04x)",
1298                         le16_to_cpu(gspca_dev->dev->descriptor.idVendor),
1299                         le16_to_cpu(gspca_dev->dev->descriptor.idProduct));
1300         }
1301         usb_make_path(gspca_dev->dev, cap->bus_info, sizeof(cap->bus_info));
1302         cap->version = DRIVER_VERSION_NUMBER;
1303         cap->capabilities = V4L2_CAP_VIDEO_CAPTURE
1304                           | V4L2_CAP_STREAMING
1305                           | V4L2_CAP_READWRITE;
1306         ret = 0;
1307 out:
1308         mutex_unlock(&gspca_dev->usb_lock);
1309         return ret;
1310 }
1311
1312 static const struct ctrl *get_ctrl(struct gspca_dev *gspca_dev,
1313                                    int id)
1314 {
1315         const struct ctrl *ctrls;
1316         int i;
1317
1318         for (i = 0, ctrls = gspca_dev->sd_desc->ctrls;
1319              i < gspca_dev->sd_desc->nctrls;
1320              i++, ctrls++) {
1321                 if (gspca_dev->ctrl_dis & (1 << i))
1322                         continue;
1323                 if (id == ctrls->qctrl.id)
1324                         return ctrls;
1325         }
1326         return NULL;
1327 }
1328
1329 static int vidioc_queryctrl(struct file *file, void *priv,
1330                            struct v4l2_queryctrl *q_ctrl)
1331 {
1332         struct gspca_dev *gspca_dev = priv;
1333         const struct ctrl *ctrls;
1334         int i;
1335         u32 id;
1336
1337         ctrls = NULL;
1338         id = q_ctrl->id;
1339         if (id & V4L2_CTRL_FLAG_NEXT_CTRL) {
1340                 id &= V4L2_CTRL_ID_MASK;
1341                 id++;
1342                 for (i = 0; i < gspca_dev->sd_desc->nctrls; i++) {
1343                         if (gspca_dev->ctrl_dis & (1 << i))
1344                                 continue;
1345                         if (gspca_dev->sd_desc->ctrls[i].qctrl.id < id)
1346                                 continue;
1347                         if (ctrls && gspca_dev->sd_desc->ctrls[i].qctrl.id
1348                                             > ctrls->qctrl.id)
1349                                 continue;
1350                         ctrls = &gspca_dev->sd_desc->ctrls[i];
1351                 }
1352                 if (ctrls == NULL)
1353                         return -EINVAL;
1354         } else {
1355                 ctrls = get_ctrl(gspca_dev, id);
1356                 if (ctrls == NULL)
1357                         return -EINVAL;
1358                 i = ctrls - gspca_dev->sd_desc->ctrls;
1359         }
1360         memcpy(q_ctrl, ctrls, sizeof *q_ctrl);
1361         if (gspca_dev->ctrl_inac & (1 << i))
1362                 q_ctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
1363         return 0;
1364 }
1365
1366 static int vidioc_s_ctrl(struct file *file, void *priv,
1367                          struct v4l2_control *ctrl)
1368 {
1369         struct gspca_dev *gspca_dev = priv;
1370         const struct ctrl *ctrls;
1371         int ret;
1372
1373         ctrls = get_ctrl(gspca_dev, ctrl->id);
1374         if (ctrls == NULL)
1375                 return -EINVAL;
1376
1377         if (ctrl->value < ctrls->qctrl.minimum
1378             || ctrl->value > ctrls->qctrl.maximum)
1379                 return -ERANGE;
1380         PDEBUG(D_CONF, "set ctrl [%08x] = %d", ctrl->id, ctrl->value);
1381         if (mutex_lock_interruptible(&gspca_dev->usb_lock))
1382                 return -ERESTARTSYS;
1383         gspca_dev->usb_err = 0;
1384         if (gspca_dev->present)
1385                 ret = ctrls->set(gspca_dev, ctrl->value);
1386         else
1387                 ret = -ENODEV;
1388         mutex_unlock(&gspca_dev->usb_lock);
1389         return ret;
1390 }
1391
1392 static int vidioc_g_ctrl(struct file *file, void *priv,
1393                          struct v4l2_control *ctrl)
1394 {
1395         struct gspca_dev *gspca_dev = priv;
1396         const struct ctrl *ctrls;
1397         int ret;
1398
1399         ctrls = get_ctrl(gspca_dev, ctrl->id);
1400         if (ctrls == NULL)
1401                 return -EINVAL;
1402
1403         if (mutex_lock_interruptible(&gspca_dev->usb_lock))
1404                 return -ERESTARTSYS;
1405         gspca_dev->usb_err = 0;
1406         if (gspca_dev->present)
1407                 ret = ctrls->get(gspca_dev, &ctrl->value);
1408         else
1409                 ret = -ENODEV;
1410         mutex_unlock(&gspca_dev->usb_lock);
1411         return ret;
1412 }
1413
1414 static int vidioc_querymenu(struct file *file, void *priv,
1415                             struct v4l2_querymenu *qmenu)
1416 {
1417         struct gspca_dev *gspca_dev = priv;
1418
1419         if (!gspca_dev->sd_desc->querymenu)
1420                 return -EINVAL;
1421         return gspca_dev->sd_desc->querymenu(gspca_dev, qmenu);
1422 }
1423
1424 static int vidioc_enum_input(struct file *file, void *priv,
1425                                 struct v4l2_input *input)
1426 {
1427         struct gspca_dev *gspca_dev = priv;
1428
1429         if (input->index != 0)
1430                 return -EINVAL;
1431         input->type = V4L2_INPUT_TYPE_CAMERA;
1432         input->status = gspca_dev->cam.input_flags;
1433         strncpy(input->name, gspca_dev->sd_desc->name,
1434                 sizeof input->name);
1435         return 0;
1436 }
1437
1438 static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1439 {
1440         *i = 0;
1441         return 0;
1442 }
1443
1444 static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
1445 {
1446         if (i > 0)
1447                 return -EINVAL;
1448         return (0);
1449 }
1450
1451 static int vidioc_reqbufs(struct file *file, void *priv,
1452                           struct v4l2_requestbuffers *rb)
1453 {
1454         struct gspca_dev *gspca_dev = priv;
1455         int i, ret = 0, streaming;
1456
1457         i = rb->memory;                 /* (avoid compilation warning) */
1458         switch (i) {
1459         case GSPCA_MEMORY_READ:                 /* (internal call) */
1460         case V4L2_MEMORY_MMAP:
1461         case V4L2_MEMORY_USERPTR:
1462                 break;
1463         default:
1464                 return -EINVAL;
1465         }
1466         if (mutex_lock_interruptible(&gspca_dev->queue_lock))
1467                 return -ERESTARTSYS;
1468
1469         if (gspca_dev->memory != GSPCA_MEMORY_NO
1470             && gspca_dev->memory != rb->memory) {
1471                 ret = -EBUSY;
1472                 goto out;
1473         }
1474
1475         /* only one file may do the capture */
1476         if (gspca_dev->capt_file != NULL
1477             && gspca_dev->capt_file != file) {
1478                 ret = -EBUSY;
1479                 goto out;
1480         }
1481
1482         /* if allocated, the buffers must not be mapped */
1483         for (i = 0; i < gspca_dev->nframes; i++) {
1484                 if (gspca_dev->frame[i].vma_use_count) {
1485                         ret = -EBUSY;
1486                         goto out;
1487                 }
1488         }
1489
1490         /* stop streaming */
1491         streaming = gspca_dev->streaming;
1492         if (streaming) {
1493                 mutex_lock(&gspca_dev->usb_lock);
1494                 gspca_dev->usb_err = 0;
1495                 gspca_stream_off(gspca_dev);
1496                 mutex_unlock(&gspca_dev->usb_lock);
1497         }
1498
1499         /* free the previous allocated buffers, if any */
1500         if (gspca_dev->nframes != 0) {
1501                 frame_free(gspca_dev);
1502                 gspca_dev->capt_file = NULL;
1503         }
1504         if (rb->count == 0)                     /* unrequest */
1505                 goto out;
1506         gspca_dev->memory = rb->memory;
1507         ret = frame_alloc(gspca_dev, rb->count);
1508         if (ret == 0) {
1509                 rb->count = gspca_dev->nframes;
1510                 gspca_dev->capt_file = file;
1511                 if (streaming)
1512                         ret = gspca_init_transfer(gspca_dev);
1513         }
1514 out:
1515         mutex_unlock(&gspca_dev->queue_lock);
1516         PDEBUG(D_STREAM, "reqbufs st:%d c:%d", ret, rb->count);
1517         return ret;
1518 }
1519
1520 static int vidioc_querybuf(struct file *file, void *priv,
1521                            struct v4l2_buffer *v4l2_buf)
1522 {
1523         struct gspca_dev *gspca_dev = priv;
1524         struct gspca_frame *frame;
1525
1526         if (v4l2_buf->index < 0
1527             || v4l2_buf->index >= gspca_dev->nframes)
1528                 return -EINVAL;
1529
1530         frame = &gspca_dev->frame[v4l2_buf->index];
1531         memcpy(v4l2_buf, &frame->v4l2_buf, sizeof *v4l2_buf);
1532         return 0;
1533 }
1534
1535 static int vidioc_streamon(struct file *file, void *priv,
1536                            enum v4l2_buf_type buf_type)
1537 {
1538         struct gspca_dev *gspca_dev = priv;
1539         int ret;
1540
1541         if (buf_type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1542                 return -EINVAL;
1543         if (mutex_lock_interruptible(&gspca_dev->queue_lock))
1544                 return -ERESTARTSYS;
1545
1546         /* check the capture file */
1547         if (gspca_dev->capt_file != file) {
1548                 ret = -EBUSY;
1549                 goto out;
1550         }
1551
1552         if (gspca_dev->nframes == 0
1553             || !(gspca_dev->frame[0].v4l2_buf.flags & V4L2_BUF_FLAG_QUEUED)) {
1554                 ret = -EINVAL;
1555                 goto out;
1556         }
1557         if (!gspca_dev->streaming) {
1558                 ret = gspca_init_transfer(gspca_dev);
1559                 if (ret < 0)
1560                         goto out;
1561         }
1562 #ifdef GSPCA_DEBUG
1563         if (gspca_debug & D_STREAM) {
1564                 PDEBUG_MODE("stream on OK",
1565                         gspca_dev->pixfmt,
1566                         gspca_dev->width,
1567                         gspca_dev->height);
1568         }
1569 #endif
1570         ret = 0;
1571 out:
1572         mutex_unlock(&gspca_dev->queue_lock);
1573         return ret;
1574 }
1575
1576 static int vidioc_streamoff(struct file *file, void *priv,
1577                                 enum v4l2_buf_type buf_type)
1578 {
1579         struct gspca_dev *gspca_dev = priv;
1580         int ret;
1581
1582         if (buf_type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1583                 return -EINVAL;
1584         if (!gspca_dev->streaming)
1585                 return 0;
1586         if (mutex_lock_interruptible(&gspca_dev->queue_lock))
1587                 return -ERESTARTSYS;
1588
1589         /* check the capture file */
1590         if (gspca_dev->capt_file != file) {
1591                 ret = -EBUSY;
1592                 goto out;
1593         }
1594
1595         /* stop streaming */
1596         if (mutex_lock_interruptible(&gspca_dev->usb_lock)) {
1597                 ret = -ERESTARTSYS;
1598                 goto out;
1599         }
1600         gspca_dev->usb_err = 0;
1601         gspca_stream_off(gspca_dev);
1602         mutex_unlock(&gspca_dev->usb_lock);
1603
1604         /* empty the transfer queues */
1605         atomic_set(&gspca_dev->fr_q, 0);
1606         atomic_set(&gspca_dev->fr_i, 0);
1607         gspca_dev->fr_o = 0;
1608         ret = 0;
1609 out:
1610         mutex_unlock(&gspca_dev->queue_lock);
1611         return ret;
1612 }
1613
1614 static int vidioc_g_jpegcomp(struct file *file, void *priv,
1615                         struct v4l2_jpegcompression *jpegcomp)
1616 {
1617         struct gspca_dev *gspca_dev = priv;
1618         int ret;
1619
1620         if (!gspca_dev->sd_desc->get_jcomp)
1621                 return -EINVAL;
1622         if (mutex_lock_interruptible(&gspca_dev->usb_lock))
1623                 return -ERESTARTSYS;
1624         gspca_dev->usb_err = 0;
1625         if (gspca_dev->present)
1626                 ret = gspca_dev->sd_desc->get_jcomp(gspca_dev, jpegcomp);
1627         else
1628                 ret = -ENODEV;
1629         mutex_unlock(&gspca_dev->usb_lock);
1630         return ret;
1631 }
1632
1633 static int vidioc_s_jpegcomp(struct file *file, void *priv,
1634                         struct v4l2_jpegcompression *jpegcomp)
1635 {
1636         struct gspca_dev *gspca_dev = priv;
1637         int ret;
1638
1639         if (!gspca_dev->sd_desc->set_jcomp)
1640                 return -EINVAL;
1641         if (mutex_lock_interruptible(&gspca_dev->usb_lock))
1642                 return -ERESTARTSYS;
1643         gspca_dev->usb_err = 0;
1644         if (gspca_dev->present)
1645                 ret = gspca_dev->sd_desc->set_jcomp(gspca_dev, jpegcomp);
1646         else
1647                 ret = -ENODEV;
1648         mutex_unlock(&gspca_dev->usb_lock);
1649         return ret;
1650 }
1651
1652 static int vidioc_g_parm(struct file *filp, void *priv,
1653                         struct v4l2_streamparm *parm)
1654 {
1655         struct gspca_dev *gspca_dev = priv;
1656
1657         parm->parm.capture.readbuffers = gspca_dev->nbufread;
1658
1659         if (gspca_dev->sd_desc->get_streamparm) {
1660                 int ret;
1661
1662                 if (mutex_lock_interruptible(&gspca_dev->usb_lock))
1663                         return -ERESTARTSYS;
1664                 gspca_dev->usb_err = 0;
1665                 if (gspca_dev->present)
1666                         ret = gspca_dev->sd_desc->get_streamparm(gspca_dev,
1667                                                                  parm);
1668                 else
1669                         ret = -ENODEV;
1670                 mutex_unlock(&gspca_dev->usb_lock);
1671                 return ret;
1672         }
1673
1674         return 0;
1675 }
1676
1677 static int vidioc_s_parm(struct file *filp, void *priv,
1678                         struct v4l2_streamparm *parm)
1679 {
1680         struct gspca_dev *gspca_dev = priv;
1681         int n;
1682
1683         n = parm->parm.capture.readbuffers;
1684         if (n == 0 || n >= GSPCA_MAX_FRAMES)
1685                 parm->parm.capture.readbuffers = gspca_dev->nbufread;
1686         else
1687                 gspca_dev->nbufread = n;
1688
1689         if (gspca_dev->sd_desc->set_streamparm) {
1690                 int ret;
1691
1692                 if (mutex_lock_interruptible(&gspca_dev->usb_lock))
1693                         return -ERESTARTSYS;
1694                 gspca_dev->usb_err = 0;
1695                 if (gspca_dev->present)
1696                         ret = gspca_dev->sd_desc->set_streamparm(gspca_dev,
1697                                                                  parm);
1698                 else
1699                         ret = -ENODEV;
1700                 mutex_unlock(&gspca_dev->usb_lock);
1701                 return ret;
1702         }
1703
1704         return 0;
1705 }
1706
1707 static int dev_mmap(struct file *file, struct vm_area_struct *vma)
1708 {
1709         struct gspca_dev *gspca_dev = file->private_data;
1710         struct gspca_frame *frame;
1711         struct page *page;
1712         unsigned long addr, start, size;
1713         int i, ret;
1714
1715         start = vma->vm_start;
1716         size = vma->vm_end - vma->vm_start;
1717         PDEBUG(D_STREAM, "mmap start:%08x size:%d", (int) start, (int) size);
1718
1719         if (mutex_lock_interruptible(&gspca_dev->queue_lock))
1720                 return -ERESTARTSYS;
1721         if (!gspca_dev->present) {
1722                 ret = -ENODEV;
1723                 goto out;
1724         }
1725         if (gspca_dev->capt_file != file) {
1726                 ret = -EINVAL;
1727                 goto out;
1728         }
1729
1730         frame = NULL;
1731         for (i = 0; i < gspca_dev->nframes; ++i) {
1732                 if (gspca_dev->frame[i].v4l2_buf.memory != V4L2_MEMORY_MMAP) {
1733                         PDEBUG(D_STREAM, "mmap bad memory type");
1734                         break;
1735                 }
1736                 if ((gspca_dev->frame[i].v4l2_buf.m.offset >> PAGE_SHIFT)
1737                                                 == vma->vm_pgoff) {
1738                         frame = &gspca_dev->frame[i];
1739                         break;
1740                 }
1741         }
1742         if (frame == NULL) {
1743                 PDEBUG(D_STREAM, "mmap no frame buffer found");
1744                 ret = -EINVAL;
1745                 goto out;
1746         }
1747         if (size != frame->v4l2_buf.length) {
1748                 PDEBUG(D_STREAM, "mmap bad size");
1749                 ret = -EINVAL;
1750                 goto out;
1751         }
1752
1753         /*
1754          * - VM_IO marks the area as being a mmaped region for I/O to a
1755          *   device. It also prevents the region from being core dumped.
1756          */
1757         vma->vm_flags |= VM_IO;
1758
1759         addr = (unsigned long) frame->data;
1760         while (size > 0) {
1761                 page = vmalloc_to_page((void *) addr);
1762                 ret = vm_insert_page(vma, start, page);
1763                 if (ret < 0)
1764                         goto out;
1765                 start += PAGE_SIZE;
1766                 addr += PAGE_SIZE;
1767                 size -= PAGE_SIZE;
1768         }
1769
1770         vma->vm_ops = &gspca_vm_ops;
1771         vma->vm_private_data = frame;
1772         gspca_vm_open(vma);
1773         ret = 0;
1774 out:
1775         mutex_unlock(&gspca_dev->queue_lock);
1776         return ret;
1777 }
1778
1779 /*
1780  * wait for a video frame
1781  *
1782  * If a frame is ready, its index is returned.
1783  */
1784 static int frame_wait(struct gspca_dev *gspca_dev,
1785                         int nonblock_ing)
1786 {
1787         int i, ret;
1788
1789         /* check if a frame is ready */
1790         i = gspca_dev->fr_o;
1791         if (i == atomic_read(&gspca_dev->fr_i)) {
1792                 if (nonblock_ing)
1793                         return -EAGAIN;
1794
1795                 /* wait till a frame is ready */
1796                 ret = wait_event_interruptible_timeout(gspca_dev->wq,
1797                         i != atomic_read(&gspca_dev->fr_i) ||
1798                         !gspca_dev->streaming || !gspca_dev->present,
1799                         msecs_to_jiffies(3000));
1800                 if (ret < 0)
1801                         return ret;
1802                 if (ret == 0 || !gspca_dev->streaming || !gspca_dev->present)
1803                         return -EIO;
1804         }
1805
1806         gspca_dev->fr_o = (i + 1) % GSPCA_MAX_FRAMES;
1807
1808         if (gspca_dev->sd_desc->dq_callback) {
1809                 mutex_lock(&gspca_dev->usb_lock);
1810                 gspca_dev->usb_err = 0;
1811                 if (gspca_dev->present)
1812                         gspca_dev->sd_desc->dq_callback(gspca_dev);
1813                 mutex_unlock(&gspca_dev->usb_lock);
1814         }
1815         return gspca_dev->fr_queue[i];
1816 }
1817
1818 /*
1819  * dequeue a video buffer
1820  *
1821  * If nonblock_ing is false, block until a buffer is available.
1822  */
1823 static int vidioc_dqbuf(struct file *file, void *priv,
1824                         struct v4l2_buffer *v4l2_buf)
1825 {
1826         struct gspca_dev *gspca_dev = priv;
1827         struct gspca_frame *frame;
1828         int i, ret;
1829
1830         PDEBUG(D_FRAM, "dqbuf");
1831         if (v4l2_buf->memory != gspca_dev->memory)
1832                 return -EINVAL;
1833
1834         if (!gspca_dev->present)
1835                 return -ENODEV;
1836
1837         /* if not streaming, be sure the application will not loop forever */
1838         if (!(file->f_flags & O_NONBLOCK)
1839             && !gspca_dev->streaming && gspca_dev->users == 1)
1840                 return -EINVAL;
1841
1842         /* only the capturing file may dequeue */
1843         if (gspca_dev->capt_file != file)
1844                 return -EINVAL;
1845
1846         /* only one dequeue / read at a time */
1847         if (mutex_lock_interruptible(&gspca_dev->read_lock))
1848                 return -ERESTARTSYS;
1849
1850         ret = frame_wait(gspca_dev, file->f_flags & O_NONBLOCK);
1851         if (ret < 0)
1852                 goto out;
1853         i = ret;                                /* frame index */
1854         frame = &gspca_dev->frame[i];
1855         if (gspca_dev->memory == V4L2_MEMORY_USERPTR) {
1856                 if (copy_to_user((__u8 __user *) frame->v4l2_buf.m.userptr,
1857                                  frame->data,
1858                                  frame->v4l2_buf.bytesused)) {
1859                         PDEBUG(D_ERR|D_STREAM,
1860                                 "dqbuf cp to user failed");
1861                         ret = -EFAULT;
1862                         goto out;
1863                 }
1864         }
1865         frame->v4l2_buf.flags &= ~V4L2_BUF_FLAG_DONE;
1866         memcpy(v4l2_buf, &frame->v4l2_buf, sizeof *v4l2_buf);
1867         PDEBUG(D_FRAM, "dqbuf %d", i);
1868         ret = 0;
1869 out:
1870         mutex_unlock(&gspca_dev->read_lock);
1871         return ret;
1872 }
1873
1874 /*
1875  * queue a video buffer
1876  *
1877  * Attempting to queue a buffer that has already been
1878  * queued will return -EINVAL.
1879  */
1880 static int vidioc_qbuf(struct file *file, void *priv,
1881                         struct v4l2_buffer *v4l2_buf)
1882 {
1883         struct gspca_dev *gspca_dev = priv;
1884         struct gspca_frame *frame;
1885         int i, index, ret;
1886
1887         PDEBUG(D_FRAM, "qbuf %d", v4l2_buf->index);
1888
1889         if (mutex_lock_interruptible(&gspca_dev->queue_lock))
1890                 return -ERESTARTSYS;
1891
1892         index = v4l2_buf->index;
1893         if ((unsigned) index >= gspca_dev->nframes) {
1894                 PDEBUG(D_FRAM,
1895                         "qbuf idx %d >= %d", index, gspca_dev->nframes);
1896                 ret = -EINVAL;
1897                 goto out;
1898         }
1899         if (v4l2_buf->memory != gspca_dev->memory) {
1900                 PDEBUG(D_FRAM, "qbuf bad memory type");
1901                 ret = -EINVAL;
1902                 goto out;
1903         }
1904
1905         frame = &gspca_dev->frame[index];
1906         if (frame->v4l2_buf.flags & BUF_ALL_FLAGS) {
1907                 PDEBUG(D_FRAM, "qbuf bad state");
1908                 ret = -EINVAL;
1909                 goto out;
1910         }
1911
1912         frame->v4l2_buf.flags |= V4L2_BUF_FLAG_QUEUED;
1913
1914         if (frame->v4l2_buf.memory == V4L2_MEMORY_USERPTR) {
1915                 frame->v4l2_buf.m.userptr = v4l2_buf->m.userptr;
1916                 frame->v4l2_buf.length = v4l2_buf->length;
1917         }
1918
1919         /* put the buffer in the 'queued' queue */
1920         i = atomic_read(&gspca_dev->fr_q);
1921         gspca_dev->fr_queue[i] = index;
1922         atomic_set(&gspca_dev->fr_q, (i + 1) % GSPCA_MAX_FRAMES);
1923
1924         v4l2_buf->flags |= V4L2_BUF_FLAG_QUEUED;
1925         v4l2_buf->flags &= ~V4L2_BUF_FLAG_DONE;
1926         ret = 0;
1927 out:
1928         mutex_unlock(&gspca_dev->queue_lock);
1929         return ret;
1930 }
1931
1932 /*
1933  * allocate the resources for read()
1934  */
1935 static int read_alloc(struct gspca_dev *gspca_dev,
1936                         struct file *file)
1937 {
1938         struct v4l2_buffer v4l2_buf;
1939         int i, ret;
1940
1941         PDEBUG(D_STREAM, "read alloc");
1942         if (gspca_dev->nframes == 0) {
1943                 struct v4l2_requestbuffers rb;
1944
1945                 memset(&rb, 0, sizeof rb);
1946                 rb.count = gspca_dev->nbufread;
1947                 rb.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1948                 rb.memory = GSPCA_MEMORY_READ;
1949                 ret = vidioc_reqbufs(file, gspca_dev, &rb);
1950                 if (ret != 0) {
1951                         PDEBUG(D_STREAM, "read reqbuf err %d", ret);
1952                         return ret;
1953                 }
1954                 memset(&v4l2_buf, 0, sizeof v4l2_buf);
1955                 v4l2_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1956                 v4l2_buf.memory = GSPCA_MEMORY_READ;
1957                 for (i = 0; i < gspca_dev->nbufread; i++) {
1958                         v4l2_buf.index = i;
1959                         ret = vidioc_qbuf(file, gspca_dev, &v4l2_buf);
1960                         if (ret != 0) {
1961                                 PDEBUG(D_STREAM, "read qbuf err: %d", ret);
1962                                 return ret;
1963                         }
1964                 }
1965                 gspca_dev->memory = GSPCA_MEMORY_READ;
1966         }
1967
1968         /* start streaming */
1969         ret = vidioc_streamon(file, gspca_dev, V4L2_BUF_TYPE_VIDEO_CAPTURE);
1970         if (ret != 0)
1971                 PDEBUG(D_STREAM, "read streamon err %d", ret);
1972         return ret;
1973 }
1974
1975 static unsigned int dev_poll(struct file *file, poll_table *wait)
1976 {
1977         struct gspca_dev *gspca_dev = file->private_data;
1978         int ret;
1979
1980         PDEBUG(D_FRAM, "poll");
1981
1982         poll_wait(file, &gspca_dev->wq, wait);
1983
1984         /* if reqbufs is not done, the user would use read() */
1985         if (gspca_dev->nframes == 0) {
1986                 if (gspca_dev->memory != GSPCA_MEMORY_NO)
1987                         return POLLERR;         /* not the 1st time */
1988                 ret = read_alloc(gspca_dev, file);
1989                 if (ret != 0)
1990                         return POLLERR;
1991         }
1992
1993         if (mutex_lock_interruptible(&gspca_dev->queue_lock) != 0)
1994                 return POLLERR;
1995
1996         /* check if an image has been received */
1997         if (gspca_dev->fr_o != atomic_read(&gspca_dev->fr_i))
1998                 ret = POLLIN | POLLRDNORM;      /* yes */
1999         else
2000                 ret = 0;
2001         mutex_unlock(&gspca_dev->queue_lock);
2002         if (!gspca_dev->present)
2003                 return POLLHUP;
2004         return ret;
2005 }
2006
2007 static ssize_t dev_read(struct file *file, char __user *data,
2008                     size_t count, loff_t *ppos)
2009 {
2010         struct gspca_dev *gspca_dev = file->private_data;
2011         struct gspca_frame *frame;
2012         struct v4l2_buffer v4l2_buf;
2013         struct timeval timestamp;
2014         int n, ret, ret2;
2015
2016         PDEBUG(D_FRAM, "read (%zd)", count);
2017         if (!gspca_dev->present)
2018                 return -ENODEV;
2019         switch (gspca_dev->memory) {
2020         case GSPCA_MEMORY_NO:                   /* first time */
2021                 ret = read_alloc(gspca_dev, file);
2022                 if (ret != 0)
2023                         return ret;
2024                 break;
2025         case GSPCA_MEMORY_READ:
2026                 if (gspca_dev->capt_file == file)
2027                         break;
2028                 /* fall thru */
2029         default:
2030                 return -EINVAL;
2031         }
2032
2033         /* get a frame */
2034         timestamp = ktime_to_timeval(ktime_get());
2035         timestamp.tv_sec--;
2036         n = 2;
2037         for (;;) {
2038                 memset(&v4l2_buf, 0, sizeof v4l2_buf);
2039                 v4l2_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
2040                 v4l2_buf.memory = GSPCA_MEMORY_READ;
2041                 ret = vidioc_dqbuf(file, gspca_dev, &v4l2_buf);
2042                 if (ret != 0) {
2043                         PDEBUG(D_STREAM, "read dqbuf err %d", ret);
2044                         return ret;
2045                 }
2046
2047                 /* if the process slept for more than 1 second,
2048                  * get a newer frame */
2049                 frame = &gspca_dev->frame[v4l2_buf.index];
2050                 if (--n < 0)
2051                         break;                  /* avoid infinite loop */
2052                 if (frame->v4l2_buf.timestamp.tv_sec >= timestamp.tv_sec)
2053                         break;
2054                 ret = vidioc_qbuf(file, gspca_dev, &v4l2_buf);
2055                 if (ret != 0) {
2056                         PDEBUG(D_STREAM, "read qbuf err %d", ret);
2057                         return ret;
2058                 }
2059         }
2060
2061         /* copy the frame */
2062         if (count > frame->v4l2_buf.bytesused)
2063                 count = frame->v4l2_buf.bytesused;
2064         ret = copy_to_user(data, frame->data, count);
2065         if (ret != 0) {
2066                 PDEBUG(D_ERR|D_STREAM,
2067                         "read cp to user lack %d / %zd", ret, count);
2068                 ret = -EFAULT;
2069                 goto out;
2070         }
2071         ret = count;
2072 out:
2073         /* in each case, requeue the buffer */
2074         ret2 = vidioc_qbuf(file, gspca_dev, &v4l2_buf);
2075         if (ret2 != 0)
2076                 return ret2;
2077         return ret;
2078 }
2079
2080 static struct v4l2_file_operations dev_fops = {
2081         .owner = THIS_MODULE,
2082         .open = dev_open,
2083         .release = dev_close,
2084         .read = dev_read,
2085         .mmap = dev_mmap,
2086         .unlocked_ioctl = video_ioctl2,
2087         .poll   = dev_poll,
2088 };
2089
2090 static const struct v4l2_ioctl_ops dev_ioctl_ops = {
2091         .vidioc_querycap        = vidioc_querycap,
2092         .vidioc_dqbuf           = vidioc_dqbuf,
2093         .vidioc_qbuf            = vidioc_qbuf,
2094         .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap,
2095         .vidioc_try_fmt_vid_cap = vidioc_try_fmt_vid_cap,
2096         .vidioc_g_fmt_vid_cap   = vidioc_g_fmt_vid_cap,
2097         .vidioc_s_fmt_vid_cap   = vidioc_s_fmt_vid_cap,
2098         .vidioc_streamon        = vidioc_streamon,
2099         .vidioc_queryctrl       = vidioc_queryctrl,
2100         .vidioc_g_ctrl          = vidioc_g_ctrl,
2101         .vidioc_s_ctrl          = vidioc_s_ctrl,
2102         .vidioc_querymenu       = vidioc_querymenu,
2103         .vidioc_enum_input      = vidioc_enum_input,
2104         .vidioc_g_input         = vidioc_g_input,
2105         .vidioc_s_input         = vidioc_s_input,
2106         .vidioc_reqbufs         = vidioc_reqbufs,
2107         .vidioc_querybuf        = vidioc_querybuf,
2108         .vidioc_streamoff       = vidioc_streamoff,
2109         .vidioc_g_jpegcomp      = vidioc_g_jpegcomp,
2110         .vidioc_s_jpegcomp      = vidioc_s_jpegcomp,
2111         .vidioc_g_parm          = vidioc_g_parm,
2112         .vidioc_s_parm          = vidioc_s_parm,
2113         .vidioc_enum_framesizes = vidioc_enum_framesizes,
2114         .vidioc_enum_frameintervals = vidioc_enum_frameintervals,
2115 #ifdef CONFIG_VIDEO_ADV_DEBUG
2116         .vidioc_g_register      = vidioc_g_register,
2117         .vidioc_s_register      = vidioc_s_register,
2118 #endif
2119         .vidioc_g_chip_ident    = vidioc_g_chip_ident,
2120 };
2121
2122 static struct video_device gspca_template = {
2123         .name = "gspca main driver",
2124         .fops = &dev_fops,
2125         .ioctl_ops = &dev_ioctl_ops,
2126         .release = gspca_release,
2127 };
2128
2129 /*
2130  * probe and create a new gspca device
2131  *
2132  * This function must be called by the sub-driver when it is
2133  * called for probing a new device.
2134  */
2135 int gspca_dev_probe2(struct usb_interface *intf,
2136                 const struct usb_device_id *id,
2137                 const struct sd_desc *sd_desc,
2138                 int dev_size,
2139                 struct module *module)
2140 {
2141         struct gspca_dev *gspca_dev;
2142         struct usb_device *dev = interface_to_usbdev(intf);
2143         int ret;
2144
2145         PDEBUG(D_PROBE, "probing %04x:%04x", id->idVendor, id->idProduct);
2146
2147         /* create the device */
2148         if (dev_size < sizeof *gspca_dev)
2149                 dev_size = sizeof *gspca_dev;
2150         gspca_dev = kzalloc(dev_size, GFP_KERNEL);
2151         if (!gspca_dev) {
2152                 err("couldn't kzalloc gspca struct");
2153                 return -ENOMEM;
2154         }
2155         gspca_dev->usb_buf = kmalloc(USB_BUF_SZ, GFP_KERNEL);
2156         if (!gspca_dev->usb_buf) {
2157                 err("out of memory");
2158                 ret = -ENOMEM;
2159                 goto out;
2160         }
2161         gspca_dev->dev = dev;
2162         gspca_dev->iface = intf->cur_altsetting->desc.bInterfaceNumber;
2163         gspca_dev->nbalt = intf->num_altsetting;
2164
2165         /* check if any audio device */
2166         if (dev->config->desc.bNumInterfaces != 1) {
2167                 int i;
2168                 struct usb_interface *intf2;
2169
2170                 for (i = 0; i < dev->config->desc.bNumInterfaces; i++) {
2171                         intf2 = dev->config->interface[i];
2172                         if (intf2 != NULL
2173                          && intf2->altsetting != NULL
2174                          && intf2->altsetting->desc.bInterfaceClass ==
2175                                          USB_CLASS_AUDIO) {
2176                                 gspca_dev->audio = 1;
2177                                 break;
2178                         }
2179                 }
2180         }
2181
2182         gspca_dev->sd_desc = sd_desc;
2183         gspca_dev->nbufread = 2;
2184         gspca_dev->empty_packet = -1;   /* don't check the empty packets */
2185
2186         /* configure the subdriver and initialize the USB device */
2187         ret = sd_desc->config(gspca_dev, id);
2188         if (ret < 0)
2189                 goto out;
2190         ret = sd_desc->init(gspca_dev);
2191         if (ret < 0)
2192                 goto out;
2193         gspca_set_default_mode(gspca_dev);
2194
2195         ret = gspca_input_connect(gspca_dev);
2196         if (ret)
2197                 goto out;
2198
2199         mutex_init(&gspca_dev->usb_lock);
2200         mutex_init(&gspca_dev->read_lock);
2201         mutex_init(&gspca_dev->queue_lock);
2202         init_waitqueue_head(&gspca_dev->wq);
2203
2204         /* init video stuff */
2205         memcpy(&gspca_dev->vdev, &gspca_template, sizeof gspca_template);
2206         gspca_dev->vdev.parent = &intf->dev;
2207         gspca_dev->module = module;
2208         gspca_dev->present = 1;
2209         ret = video_register_device(&gspca_dev->vdev,
2210                                   VFL_TYPE_GRABBER,
2211                                   -1);
2212         if (ret < 0) {
2213                 err("video_register_device err %d", ret);
2214                 goto out;
2215         }
2216
2217         usb_set_intfdata(intf, gspca_dev);
2218         PDEBUG(D_PROBE, "%s created", video_device_node_name(&gspca_dev->vdev));
2219
2220         gspca_input_create_urb(gspca_dev);
2221
2222         return 0;
2223 out:
2224 #if defined(CONFIG_INPUT) || defined(CONFIG_INPUT_MODULE)
2225         if (gspca_dev->input_dev)
2226                 input_unregister_device(gspca_dev->input_dev);
2227 #endif
2228         kfree(gspca_dev->usb_buf);
2229         kfree(gspca_dev);
2230         return ret;
2231 }
2232 EXPORT_SYMBOL(gspca_dev_probe2);
2233
2234 /* same function as the previous one, but check the interface */
2235 int gspca_dev_probe(struct usb_interface *intf,
2236                 const struct usb_device_id *id,
2237                 const struct sd_desc *sd_desc,
2238                 int dev_size,
2239                 struct module *module)
2240 {
2241         struct usb_device *dev = interface_to_usbdev(intf);
2242
2243         /* we don't handle multi-config cameras */
2244         if (dev->descriptor.bNumConfigurations != 1) {
2245                 PDEBUG(D_ERR, "%04x:%04x too many config",
2246                                 id->idVendor, id->idProduct);
2247                 return -ENODEV;
2248         }
2249
2250         /* the USB video interface must be the first one */
2251         if (dev->config->desc.bNumInterfaces != 1
2252          && intf->cur_altsetting->desc.bInterfaceNumber != 0)
2253                 return -ENODEV;
2254
2255         return gspca_dev_probe2(intf, id, sd_desc, dev_size, module);
2256 }
2257 EXPORT_SYMBOL(gspca_dev_probe);
2258
2259 /*
2260  * USB disconnection
2261  *
2262  * This function must be called by the sub-driver
2263  * when the device disconnects, after the specific resources are freed.
2264  */
2265 void gspca_disconnect(struct usb_interface *intf)
2266 {
2267         struct gspca_dev *gspca_dev = usb_get_intfdata(intf);
2268 #if defined(CONFIG_INPUT) || defined(CONFIG_INPUT_MODULE)
2269         struct input_dev *input_dev;
2270 #endif
2271
2272         PDEBUG(D_PROBE, "%s disconnect",
2273                 video_device_node_name(&gspca_dev->vdev));
2274         mutex_lock(&gspca_dev->usb_lock);
2275         gspca_dev->present = 0;
2276
2277         if (gspca_dev->streaming) {
2278                 destroy_urbs(gspca_dev);
2279                 wake_up_interruptible(&gspca_dev->wq);
2280         }
2281
2282 #if defined(CONFIG_INPUT) || defined(CONFIG_INPUT_MODULE)
2283         gspca_input_destroy_urb(gspca_dev);
2284         input_dev = gspca_dev->input_dev;
2285         if (input_dev) {
2286                 gspca_dev->input_dev = NULL;
2287                 input_unregister_device(input_dev);
2288         }
2289 #endif
2290
2291         /* the device is freed at exit of this function */
2292         gspca_dev->dev = NULL;
2293         mutex_unlock(&gspca_dev->usb_lock);
2294
2295         usb_set_intfdata(intf, NULL);
2296
2297         /* release the device */
2298         /* (this will call gspca_release() immediatly or on last close) */
2299         video_unregister_device(&gspca_dev->vdev);
2300
2301 /*      PDEBUG(D_PROBE, "disconnect complete"); */
2302 }
2303 EXPORT_SYMBOL(gspca_disconnect);
2304
2305 #ifdef CONFIG_PM
2306 int gspca_suspend(struct usb_interface *intf, pm_message_t message)
2307 {
2308         struct gspca_dev *gspca_dev = usb_get_intfdata(intf);
2309
2310         if (!gspca_dev->streaming)
2311                 return 0;
2312         gspca_dev->frozen = 1;          /* avoid urb error messages */
2313         if (gspca_dev->sd_desc->stopN)
2314                 gspca_dev->sd_desc->stopN(gspca_dev);
2315         destroy_urbs(gspca_dev);
2316         gspca_input_destroy_urb(gspca_dev);
2317         gspca_set_alt0(gspca_dev);
2318         if (gspca_dev->sd_desc->stop0)
2319                 gspca_dev->sd_desc->stop0(gspca_dev);
2320         return 0;
2321 }
2322 EXPORT_SYMBOL(gspca_suspend);
2323
2324 int gspca_resume(struct usb_interface *intf)
2325 {
2326         struct gspca_dev *gspca_dev = usb_get_intfdata(intf);
2327
2328         gspca_dev->frozen = 0;
2329         gspca_dev->sd_desc->init(gspca_dev);
2330         gspca_input_create_urb(gspca_dev);
2331         if (gspca_dev->streaming)
2332                 return gspca_init_transfer(gspca_dev);
2333         return 0;
2334 }
2335 EXPORT_SYMBOL(gspca_resume);
2336 #endif
2337 /* -- cam driver utility functions -- */
2338
2339 /* auto gain and exposure algorithm based on the knee algorithm described here:
2340    http://ytse.tricolour.net/docs/LowLightOptimization.html
2341
2342    Returns 0 if no changes were made, 1 if the gain and or exposure settings
2343    where changed. */
2344 int gspca_auto_gain_n_exposure(struct gspca_dev *gspca_dev, int avg_lum,
2345         int desired_avg_lum, int deadzone, int gain_knee, int exposure_knee)
2346 {
2347         int i, steps, gain, orig_gain, exposure, orig_exposure, autogain;
2348         const struct ctrl *gain_ctrl = NULL;
2349         const struct ctrl *exposure_ctrl = NULL;
2350         const struct ctrl *autogain_ctrl = NULL;
2351         int retval = 0;
2352
2353         for (i = 0; i < gspca_dev->sd_desc->nctrls; i++) {
2354                 if (gspca_dev->ctrl_dis & (1 << i))
2355                         continue;
2356                 if (gspca_dev->sd_desc->ctrls[i].qctrl.id == V4L2_CID_GAIN)
2357                         gain_ctrl = &gspca_dev->sd_desc->ctrls[i];
2358                 if (gspca_dev->sd_desc->ctrls[i].qctrl.id == V4L2_CID_EXPOSURE)
2359                         exposure_ctrl = &gspca_dev->sd_desc->ctrls[i];
2360                 if (gspca_dev->sd_desc->ctrls[i].qctrl.id == V4L2_CID_AUTOGAIN)
2361                         autogain_ctrl = &gspca_dev->sd_desc->ctrls[i];
2362         }
2363         if (!gain_ctrl || !exposure_ctrl || !autogain_ctrl) {
2364                 PDEBUG(D_ERR, "Error: gspca_auto_gain_n_exposure called "
2365                         "on cam without (auto)gain/exposure");
2366                 return 0;
2367         }
2368
2369         if (gain_ctrl->get(gspca_dev, &gain) ||
2370                         exposure_ctrl->get(gspca_dev, &exposure) ||
2371                         autogain_ctrl->get(gspca_dev, &autogain) || !autogain)
2372                 return 0;
2373
2374         orig_gain = gain;
2375         orig_exposure = exposure;
2376
2377         /* If we are of a multiple of deadzone, do multiple steps to reach the
2378            desired lumination fast (with the risc of a slight overshoot) */
2379         steps = abs(desired_avg_lum - avg_lum) / deadzone;
2380
2381         PDEBUG(D_FRAM, "autogain: lum: %d, desired: %d, steps: %d",
2382                 avg_lum, desired_avg_lum, steps);
2383
2384         for (i = 0; i < steps; i++) {
2385                 if (avg_lum > desired_avg_lum) {
2386                         if (gain > gain_knee)
2387                                 gain--;
2388                         else if (exposure > exposure_knee)
2389                                 exposure--;
2390                         else if (gain > gain_ctrl->qctrl.default_value)
2391                                 gain--;
2392                         else if (exposure > exposure_ctrl->qctrl.minimum)
2393                                 exposure--;
2394                         else if (gain > gain_ctrl->qctrl.minimum)
2395                                 gain--;
2396                         else
2397                                 break;
2398                 } else {
2399                         if (gain < gain_ctrl->qctrl.default_value)
2400                                 gain++;
2401                         else if (exposure < exposure_knee)
2402                                 exposure++;
2403                         else if (gain < gain_knee)
2404                                 gain++;
2405                         else if (exposure < exposure_ctrl->qctrl.maximum)
2406                                 exposure++;
2407                         else if (gain < gain_ctrl->qctrl.maximum)
2408                                 gain++;
2409                         else
2410                                 break;
2411                 }
2412         }
2413
2414         if (gain != orig_gain) {
2415                 gain_ctrl->set(gspca_dev, gain);
2416                 retval = 1;
2417         }
2418         if (exposure != orig_exposure) {
2419                 exposure_ctrl->set(gspca_dev, exposure);
2420                 retval = 1;
2421         }
2422
2423         return retval;
2424 }
2425 EXPORT_SYMBOL(gspca_auto_gain_n_exposure);
2426
2427 /* -- module insert / remove -- */
2428 static int __init gspca_init(void)
2429 {
2430         info("main v%d.%d.%d registered",
2431                 (DRIVER_VERSION_NUMBER >> 16) & 0xff,
2432                 (DRIVER_VERSION_NUMBER >> 8) & 0xff,
2433                 DRIVER_VERSION_NUMBER & 0xff);
2434         return 0;
2435 }
2436 static void __exit gspca_exit(void)
2437 {
2438         info("main deregistered");
2439 }
2440
2441 module_init(gspca_init);
2442 module_exit(gspca_exit);
2443
2444 #ifdef GSPCA_DEBUG
2445 module_param_named(debug, gspca_debug, int, 0644);
2446 MODULE_PARM_DESC(debug,
2447                 "Debug (bit) 0x01:error 0x02:probe 0x04:config"
2448                 " 0x08:stream 0x10:frame 0x20:packet 0x40:USBin 0x80:USBout"
2449                 " 0x0100: v4l2");
2450 #endif