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