1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Zoran 364xx based USB webcam module version 0.73
5 * Allows you to use your USB webcam with V4L2 applications
6 * This is still in heavy development !
8 * Copyright (C) 2004 Antoine Jacquet <royale@zerezo.com>
9 * http://royale.zerezo.com/zr364xx/
11 * Heavily inspired by usb-skeleton.c, vicam.c, cpia.c and spca50x.c drivers
12 * V4L2 version inspired by meye.c driver
14 * Some video buffer code by Lamarque based on s2255drv.c and vivi.c drivers.
18 #include <linux/module.h>
19 #include <linux/init.h>
20 #include <linux/usb.h>
21 #include <linux/vmalloc.h>
22 #include <linux/slab.h>
23 #include <linux/highmem.h>
24 #include <media/v4l2-common.h>
25 #include <media/v4l2-ioctl.h>
26 #include <media/v4l2-device.h>
27 #include <media/v4l2-ctrls.h>
28 #include <media/v4l2-fh.h>
29 #include <media/v4l2-event.h>
30 #include <media/videobuf-vmalloc.h>
33 /* Version Information */
34 #define DRIVER_VERSION "0.7.4"
35 #define DRIVER_AUTHOR "Antoine Jacquet, http://royale.zerezo.com/"
36 #define DRIVER_DESC "Zoran 364xx"
41 #define MAX_FRAME_SIZE 200000
42 #define BUFFER_SIZE 0x1000
43 #define CTRL_TIMEOUT 500
45 #define ZR364XX_DEF_BUFS 4
46 #define ZR364XX_READ_IDLE 0
47 #define ZR364XX_READ_FRAME 1
50 #define DBG(fmt, args...) \
53 printk(KERN_INFO KBUILD_MODNAME " " fmt, ##args); \
57 /*#define FULL_DEBUG 1*/
61 #define _DBG(fmt, args...)
64 /* Init methods, need to find nicer names for these
65 * the exact names of the chipsets would be the best if someone finds it */
72 /* Module parameters */
77 /* Module parameters interface */
78 module_param(debug
, int, 0644);
79 MODULE_PARM_DESC(debug
, "Debug level");
80 module_param(mode
, int, 0644);
81 MODULE_PARM_DESC(mode
, "0 = 320x240, 1 = 160x120, 2 = 640x480");
84 /* Devices supported by this driver
85 * .driver_info contains the init method used by the camera */
86 static const struct usb_device_id device_table
[] = {
87 {USB_DEVICE(0x08ca, 0x0109), .driver_info
= METHOD0
},
88 {USB_DEVICE(0x041e, 0x4024), .driver_info
= METHOD0
},
89 {USB_DEVICE(0x0d64, 0x0108), .driver_info
= METHOD0
},
90 {USB_DEVICE(0x0546, 0x3187), .driver_info
= METHOD0
},
91 {USB_DEVICE(0x0d64, 0x3108), .driver_info
= METHOD0
},
92 {USB_DEVICE(0x0595, 0x4343), .driver_info
= METHOD0
},
93 {USB_DEVICE(0x0bb0, 0x500d), .driver_info
= METHOD0
},
94 {USB_DEVICE(0x0feb, 0x2004), .driver_info
= METHOD0
},
95 {USB_DEVICE(0x055f, 0xb500), .driver_info
= METHOD0
},
96 {USB_DEVICE(0x08ca, 0x2062), .driver_info
= METHOD2
},
97 {USB_DEVICE(0x052b, 0x1a18), .driver_info
= METHOD1
},
98 {USB_DEVICE(0x04c8, 0x0729), .driver_info
= METHOD0
},
99 {USB_DEVICE(0x04f2, 0xa208), .driver_info
= METHOD0
},
100 {USB_DEVICE(0x0784, 0x0040), .driver_info
= METHOD1
},
101 {USB_DEVICE(0x06d6, 0x0034), .driver_info
= METHOD0
},
102 {USB_DEVICE(0x0a17, 0x0062), .driver_info
= METHOD2
},
103 {USB_DEVICE(0x06d6, 0x003b), .driver_info
= METHOD0
},
104 {USB_DEVICE(0x0a17, 0x004e), .driver_info
= METHOD2
},
105 {USB_DEVICE(0x041e, 0x405d), .driver_info
= METHOD2
},
106 {USB_DEVICE(0x08ca, 0x2102), .driver_info
= METHOD3
},
107 {USB_DEVICE(0x06d6, 0x003d), .driver_info
= METHOD0
},
108 {} /* Terminating entry */
111 MODULE_DEVICE_TABLE(usb
, device_table
);
113 /* frame structure */
114 struct zr364xx_framei
{
115 unsigned long ulState
; /* ulState:ZR364XX_READ_IDLE,
116 ZR364XX_READ_FRAME */
117 void *lpvbits
; /* image data */
118 unsigned long cur_size
; /* current data copied to it */
121 /* image buffer structure */
122 struct zr364xx_bufferi
{
123 unsigned long dwFrames
; /* number of frames in buffer */
124 struct zr364xx_framei frame
[FRAMES
]; /* array of FRAME structures */
127 struct zr364xx_dmaqueue
{
128 struct list_head active
;
129 struct zr364xx_camera
*cam
;
132 struct zr364xx_pipeinfo
{
137 void *cam
; /* back pointer to zr364xx_camera struct */
148 static const struct zr364xx_fmt formats
[] = {
150 .fourcc
= V4L2_PIX_FMT_JPEG
,
156 struct zr364xx_camera
{
157 struct usb_device
*udev
; /* save off the usb device pointer */
158 struct usb_interface
*interface
;/* the interface for this device */
159 struct v4l2_device v4l2_dev
;
160 struct v4l2_ctrl_handler ctrl_handler
;
161 struct video_device vdev
; /* v4l video device */
162 struct v4l2_fh
*owner
; /* owns the streaming */
164 struct zr364xx_bufferi buffer
;
172 struct zr364xx_dmaqueue vidq
;
175 unsigned long frame_count
;
177 struct zr364xx_pipeinfo pipe
[1];
181 const struct zr364xx_fmt
*fmt
;
182 struct videobuf_queue vb_vidq
;
186 /* buffer for one video frame */
187 struct zr364xx_buffer
{
188 /* common v4l buffer stuff -- must be first */
189 struct videobuf_buffer vb
;
190 const struct zr364xx_fmt
*fmt
;
193 /* function used to send initialisation commands to the camera */
194 static int send_control_msg(struct usb_device
*udev
, u8 request
, u16 value
,
195 u16 index
, unsigned char *cp
, u16 size
)
199 unsigned char *transfer_buffer
= kmemdup(cp
, size
, GFP_KERNEL
);
200 if (!transfer_buffer
)
203 status
= usb_control_msg(udev
,
204 usb_sndctrlpipe(udev
, 0),
206 USB_DIR_OUT
| USB_TYPE_VENDOR
|
207 USB_RECIP_DEVICE
, value
, index
,
208 transfer_buffer
, size
, CTRL_TIMEOUT
);
210 kfree(transfer_buffer
);
215 /* Control messages sent to the camera to initialize it
216 * and launch the capture */
220 unsigned char *bytes
;
224 static unsigned char m0d1
[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
225 static unsigned char m0d2
[] = { 0, 0, 0, 0, 0, 0 };
226 static unsigned char m0d3
[] = { 0, 0 };
227 static message m0
[] = {
230 {0x3370, sizeof(m0d1
), m0d1
},
233 {0x2610, sizeof(m0d2
), m0d2
},
238 {0x9a01, sizeof(m0d3
), m0d3
},
243 static unsigned char m1d1
[] = { 0xff, 0xff };
244 static unsigned char m1d2
[] = { 0x00, 0x00 };
245 static message m1
[] = {
253 {0x2502, sizeof(m1d1
), m1d1
},
258 {0x9a01, sizeof(m1d2
), m1d2
},
263 static unsigned char m2d1
[] = { 0xff, 0xff };
264 static message m2
[] = {
271 {0x2502, sizeof(m2d1
), m2d1
},
277 static message
*init
[4] = { m0
, m1
, m2
, m2
};
280 /* JPEG static data in header (Huffman table, etc) */
281 static unsigned char header1
[] = {
284 0xFF, 0xE0, 0x00, 0x10, 'J', 'F', 'I', 'F',
285 0x00, 0x01, 0x01, 0x00, 0x33, 0x8A, 0x00, 0x00, 0x33, 0x88,
287 0xFF, 0xDB, 0x00, 0x84
289 static unsigned char header2
[] = {
290 0xFF, 0xC4, 0x00, 0x1F, 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01,
291 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
292 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
293 0xFF, 0xC4, 0x00, 0xB5, 0x10, 0x00, 0x02, 0x01, 0x03, 0x03, 0x02,
294 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, 0x7D, 0x01,
295 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06,
296 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xA1,
297 0x08, 0x23, 0x42, 0xB1, 0xC1, 0x15, 0x52, 0xD1, 0xF0, 0x24, 0x33,
298 0x62, 0x72, 0x82, 0x09, 0x0A, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x25,
299 0x26, 0x27, 0x28, 0x29, 0x2A, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
300 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x53, 0x54,
301 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67,
302 0x68, 0x69, 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A,
303 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x92, 0x93, 0x94,
304 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,
305 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8,
306 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA,
307 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE1, 0xE2,
308 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF1, 0xF2, 0xF3,
309 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFF, 0xC4, 0x00, 0x1F,
310 0x01, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
311 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04,
312 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0xFF, 0xC4, 0x00, 0xB5,
313 0x11, 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05,
314 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, 0x00, 0x01, 0x02, 0x03, 0x11,
315 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
316 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xA1, 0xB1, 0xC1,
317 0x09, 0x23, 0x33, 0x52, 0xF0, 0x15, 0x62, 0x72, 0xD1, 0x0A, 0x16,
318 0x24, 0x34, 0xE1, 0x25, 0xF1, 0x17, 0x18, 0x19, 0x1A, 0x26, 0x27,
319 0x28, 0x29, 0x2A, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x43, 0x44,
320 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57,
321 0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A,
322 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x82, 0x83, 0x84,
323 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96,
324 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8,
325 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA,
326 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3,
327 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE2, 0xE3, 0xE4, 0xE5,
328 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
329 0xF8, 0xF9, 0xFA, 0xFF, 0xC0, 0x00, 0x11, 0x08, 0x00, 0xF0, 0x01,
330 0x40, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01,
331 0xFF, 0xDA, 0x00, 0x0C, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11,
334 static unsigned char header3
;
336 /* ------------------------------------------------------------------
338 ------------------------------------------------------------------*/
340 static int buffer_setup(struct videobuf_queue
*vq
, unsigned int *count
,
343 struct zr364xx_camera
*cam
= vq
->priv_data
;
345 *size
= cam
->width
* cam
->height
* (cam
->fmt
->depth
>> 3);
348 *count
= ZR364XX_DEF_BUFS
;
350 if (*size
* *count
> ZR364XX_DEF_BUFS
* 1024 * 1024)
351 *count
= (ZR364XX_DEF_BUFS
* 1024 * 1024) / *size
;
356 static void free_buffer(struct videobuf_queue
*vq
, struct zr364xx_buffer
*buf
)
358 _DBG("%s\n", __func__
);
360 videobuf_vmalloc_free(&buf
->vb
);
361 buf
->vb
.state
= VIDEOBUF_NEEDS_INIT
;
364 static int buffer_prepare(struct videobuf_queue
*vq
, struct videobuf_buffer
*vb
,
365 enum v4l2_field field
)
367 struct zr364xx_camera
*cam
= vq
->priv_data
;
368 struct zr364xx_buffer
*buf
= container_of(vb
, struct zr364xx_buffer
,
372 DBG("%s, field=%d\n", __func__
, field
);
376 buf
->vb
.size
= cam
->width
* cam
->height
* (cam
->fmt
->depth
>> 3);
378 if (buf
->vb
.baddr
!= 0 && buf
->vb
.bsize
< buf
->vb
.size
) {
379 DBG("invalid buffer prepare\n");
384 buf
->vb
.width
= cam
->width
;
385 buf
->vb
.height
= cam
->height
;
386 buf
->vb
.field
= field
;
388 if (buf
->vb
.state
== VIDEOBUF_NEEDS_INIT
) {
389 rc
= videobuf_iolock(vq
, &buf
->vb
, NULL
);
394 buf
->vb
.state
= VIDEOBUF_PREPARED
;
397 free_buffer(vq
, buf
);
401 static void buffer_queue(struct videobuf_queue
*vq
, struct videobuf_buffer
*vb
)
403 struct zr364xx_buffer
*buf
= container_of(vb
, struct zr364xx_buffer
,
405 struct zr364xx_camera
*cam
= vq
->priv_data
;
407 _DBG("%s\n", __func__
);
409 buf
->vb
.state
= VIDEOBUF_QUEUED
;
410 list_add_tail(&buf
->vb
.queue
, &cam
->vidq
.active
);
413 static void buffer_release(struct videobuf_queue
*vq
,
414 struct videobuf_buffer
*vb
)
416 struct zr364xx_buffer
*buf
= container_of(vb
, struct zr364xx_buffer
,
419 _DBG("%s\n", __func__
);
420 free_buffer(vq
, buf
);
423 static const struct videobuf_queue_ops zr364xx_video_qops
= {
424 .buf_setup
= buffer_setup
,
425 .buf_prepare
= buffer_prepare
,
426 .buf_queue
= buffer_queue
,
427 .buf_release
= buffer_release
,
430 /********************/
431 /* V4L2 integration */
432 /********************/
433 static int zr364xx_vidioc_streamon(struct file
*file
, void *priv
,
434 enum v4l2_buf_type type
);
436 static ssize_t
zr364xx_read(struct file
*file
, char __user
*buf
, size_t count
,
439 struct zr364xx_camera
*cam
= video_drvdata(file
);
442 _DBG("%s\n", __func__
);
450 if (mutex_lock_interruptible(&cam
->lock
))
453 err
= zr364xx_vidioc_streamon(file
, file
->private_data
,
454 V4L2_BUF_TYPE_VIDEO_CAPTURE
);
456 DBG("%s: reading %d bytes at pos %d.\n", __func__
,
457 (int) count
, (int) *ppos
);
460 err
= videobuf_read_one(&cam
->vb_vidq
, buf
, count
, ppos
,
461 file
->f_flags
& O_NONBLOCK
);
463 mutex_unlock(&cam
->lock
);
467 /* video buffer vmalloc implementation based partly on VIVI driver which is
468 * Copyright (c) 2006 by
469 * Mauro Carvalho Chehab <mchehab--a.t--infradead.org>
470 * Ted Walther <ted--a.t--enumera.com>
471 * John Sokol <sokol--a.t--videotechnology.com>
472 * http://v4l.videotechnology.com/
475 static void zr364xx_fillbuff(struct zr364xx_camera
*cam
,
476 struct zr364xx_buffer
*buf
,
481 char *vbuf
= videobuf_to_vmalloc(&buf
->vb
);
482 unsigned long last_frame
;
487 last_frame
= cam
->last_frame
;
488 if (last_frame
!= -1) {
489 tmpbuf
= (const char *)cam
->buffer
.frame
[last_frame
].lpvbits
;
490 switch (buf
->fmt
->fourcc
) {
491 case V4L2_PIX_FMT_JPEG
:
492 buf
->vb
.size
= jpgsize
;
493 memcpy(vbuf
, tmpbuf
, buf
->vb
.size
);
496 printk(KERN_DEBUG KBUILD_MODNAME
": unknown format?\n");
498 cam
->last_frame
= -1;
500 printk(KERN_ERR KBUILD_MODNAME
": =======no frame\n");
503 DBG("%s: Buffer %p size= %d\n", __func__
, vbuf
, pos
);
504 /* tell v4l buffer was filled */
506 buf
->vb
.field_count
= cam
->frame_count
* 2;
507 buf
->vb
.ts
= ktime_get_ns();
508 buf
->vb
.state
= VIDEOBUF_DONE
;
511 static int zr364xx_got_frame(struct zr364xx_camera
*cam
, int jpgsize
)
513 struct zr364xx_dmaqueue
*dma_q
= &cam
->vidq
;
514 struct zr364xx_buffer
*buf
;
515 unsigned long flags
= 0;
518 DBG("wakeup: %p\n", &dma_q
);
519 spin_lock_irqsave(&cam
->slock
, flags
);
521 if (list_empty(&dma_q
->active
)) {
522 DBG("No active queue to serve\n");
526 buf
= list_entry(dma_q
->active
.next
,
527 struct zr364xx_buffer
, vb
.queue
);
529 if (!waitqueue_active(&buf
->vb
.done
)) {
534 list_del(&buf
->vb
.queue
);
535 buf
->vb
.ts
= ktime_get_ns();
536 DBG("[%p/%d] wakeup\n", buf
, buf
->vb
.i
);
537 zr364xx_fillbuff(cam
, buf
, jpgsize
);
538 wake_up(&buf
->vb
.done
);
539 DBG("wakeup [buf/i] [%p/%d]\n", buf
, buf
->vb
.i
);
541 spin_unlock_irqrestore(&cam
->slock
, flags
);
545 /* this function moves the usb stream read pipe data
546 * into the system buffers.
547 * returns 0 on success, EAGAIN if more data to process (call this
550 static int zr364xx_read_video_callback(struct zr364xx_camera
*cam
,
551 struct zr364xx_pipeinfo
*pipe_info
,
554 unsigned char *pdest
;
556 s32 idx
= cam
->cur_frame
;
557 struct zr364xx_framei
*frm
= &cam
->buffer
.frame
[idx
];
559 unsigned char *ptr
= NULL
;
561 _DBG("buffer to user\n");
563 /* swap bytes if camera needs it */
564 if (cam
->method
== METHOD0
) {
565 u16
*buf
= (u16
*)pipe_info
->transfer_buffer
;
566 for (i
= 0; i
< purb
->actual_length
/2; i
++)
570 /* search done. now find out if should be acquiring */
571 if (!cam
->b_acquire
) {
572 /* we found a frame, but this channel is turned off */
573 frm
->ulState
= ZR364XX_READ_IDLE
;
577 psrc
= (u8
*)pipe_info
->transfer_buffer
;
578 ptr
= pdest
= frm
->lpvbits
;
580 if (frm
->ulState
== ZR364XX_READ_IDLE
) {
581 if (purb
->actual_length
< 128) {
582 /* header incomplete */
583 dev_info(&cam
->udev
->dev
,
584 "%s: buffer (%d bytes) too small to hold jpeg header. Discarding.\n",
585 __func__
, purb
->actual_length
);
589 frm
->ulState
= ZR364XX_READ_FRAME
;
592 _DBG("jpeg header, ");
593 memcpy(ptr
, header1
, sizeof(header1
));
594 ptr
+= sizeof(header1
);
596 memcpy(ptr
, &header3
, 1);
598 memcpy(ptr
, psrc
, 64);
601 memcpy(ptr
, &header3
, 1);
603 memcpy(ptr
, psrc
+ 64, 64);
605 memcpy(ptr
, header2
, sizeof(header2
));
606 ptr
+= sizeof(header2
);
607 memcpy(ptr
, psrc
+ 128,
608 purb
->actual_length
- 128);
609 ptr
+= purb
->actual_length
- 128;
610 _DBG("header : %d %d %d %d %d %d %d %d %d\n",
611 psrc
[0], psrc
[1], psrc
[2],
612 psrc
[3], psrc
[4], psrc
[5],
613 psrc
[6], psrc
[7], psrc
[8]);
614 frm
->cur_size
= ptr
- pdest
;
616 if (frm
->cur_size
+ purb
->actual_length
> MAX_FRAME_SIZE
) {
617 dev_info(&cam
->udev
->dev
,
618 "%s: buffer (%d bytes) too small to hold frame data. Discarding frame data.\n",
619 __func__
, MAX_FRAME_SIZE
);
621 pdest
+= frm
->cur_size
;
622 memcpy(pdest
, psrc
, purb
->actual_length
);
623 frm
->cur_size
+= purb
->actual_length
;
626 /*_DBG("cur_size %lu urb size %d\n", frm->cur_size,
627 purb->actual_length);*/
629 if (purb
->actual_length
< pipe_info
->transfer_size
) {
630 _DBG("****************Buffer[%d]full*************\n", idx
);
631 cam
->last_frame
= cam
->cur_frame
;
633 /* end of system frame ring buffer, start at zero */
634 if (cam
->cur_frame
== cam
->buffer
.dwFrames
)
638 /* go back to find the JPEG EOI marker */
639 ptr
= pdest
= frm
->lpvbits
;
640 ptr
+= frm
->cur_size
- 2;
641 while (ptr
> pdest
) {
642 if (*ptr
== 0xFF && *(ptr
+ 1) == 0xD9
643 && *(ptr
+ 2) == 0xFF)
648 DBG("No EOI marker\n");
650 /* Sometimes there is junk data in the middle of the picture,
651 * we want to skip this bogus frames */
652 while (ptr
> pdest
) {
653 if (*ptr
== 0xFF && *(ptr
+ 1) == 0xFF
654 && *(ptr
+ 2) == 0xFF)
659 DBG("Bogus frame ? %d\n", ++(cam
->nb
));
660 } else if (cam
->b_acquire
) {
661 /* we skip the 2 first frames which are usually buggy */
665 _DBG("jpeg(%lu): %d %d %d %d %d %d %d %d\n",
667 pdest
[0], pdest
[1], pdest
[2], pdest
[3],
668 pdest
[4], pdest
[5], pdest
[6], pdest
[7]);
670 zr364xx_got_frame(cam
, frm
->cur_size
);
674 frm
->ulState
= ZR364XX_READ_IDLE
;
677 /* done successfully */
681 static int zr364xx_vidioc_querycap(struct file
*file
, void *priv
,
682 struct v4l2_capability
*cap
)
684 struct zr364xx_camera
*cam
= video_drvdata(file
);
686 strscpy(cap
->driver
, DRIVER_DESC
, sizeof(cap
->driver
));
687 if (cam
->udev
->product
)
688 strscpy(cap
->card
, cam
->udev
->product
, sizeof(cap
->card
));
689 strscpy(cap
->bus_info
, dev_name(&cam
->udev
->dev
),
690 sizeof(cap
->bus_info
));
694 static int zr364xx_vidioc_enum_input(struct file
*file
, void *priv
,
695 struct v4l2_input
*i
)
699 strscpy(i
->name
, DRIVER_DESC
" Camera", sizeof(i
->name
));
700 i
->type
= V4L2_INPUT_TYPE_CAMERA
;
704 static int zr364xx_vidioc_g_input(struct file
*file
, void *priv
,
711 static int zr364xx_vidioc_s_input(struct file
*file
, void *priv
,
719 static int zr364xx_s_ctrl(struct v4l2_ctrl
*ctrl
)
721 struct zr364xx_camera
*cam
=
722 container_of(ctrl
->handler
, struct zr364xx_camera
, ctrl_handler
);
726 case V4L2_CID_BRIGHTNESS
:
727 /* hardware brightness */
728 send_control_msg(cam
->udev
, 1, 0x2001, 0, NULL
, 0);
729 temp
= (0x60 << 8) + 127 - ctrl
->val
;
730 send_control_msg(cam
->udev
, 1, temp
, 0, NULL
, 0);
739 static int zr364xx_vidioc_enum_fmt_vid_cap(struct file
*file
,
740 void *priv
, struct v4l2_fmtdesc
*f
)
744 f
->pixelformat
= formats
[0].fourcc
;
748 static char *decode_fourcc(__u32 pixelformat
, char *buf
)
750 buf
[0] = pixelformat
& 0xff;
751 buf
[1] = (pixelformat
>> 8) & 0xff;
752 buf
[2] = (pixelformat
>> 16) & 0xff;
753 buf
[3] = (pixelformat
>> 24) & 0xff;
758 static int zr364xx_vidioc_try_fmt_vid_cap(struct file
*file
, void *priv
,
759 struct v4l2_format
*f
)
761 struct zr364xx_camera
*cam
= video_drvdata(file
);
762 char pixelformat_name
[5];
767 if (f
->fmt
.pix
.pixelformat
!= V4L2_PIX_FMT_JPEG
) {
768 DBG("%s: unsupported pixelformat V4L2_PIX_FMT_%s\n", __func__
,
769 decode_fourcc(f
->fmt
.pix
.pixelformat
, pixelformat_name
));
773 if (!(f
->fmt
.pix
.width
== 160 && f
->fmt
.pix
.height
== 120) &&
774 !(f
->fmt
.pix
.width
== 640 && f
->fmt
.pix
.height
== 480)) {
775 f
->fmt
.pix
.width
= 320;
776 f
->fmt
.pix
.height
= 240;
779 f
->fmt
.pix
.field
= V4L2_FIELD_NONE
;
780 f
->fmt
.pix
.bytesperline
= f
->fmt
.pix
.width
* 2;
781 f
->fmt
.pix
.sizeimage
= f
->fmt
.pix
.height
* f
->fmt
.pix
.bytesperline
;
782 f
->fmt
.pix
.colorspace
= V4L2_COLORSPACE_JPEG
;
783 DBG("%s: V4L2_PIX_FMT_%s (%d) ok!\n", __func__
,
784 decode_fourcc(f
->fmt
.pix
.pixelformat
, pixelformat_name
),
789 static int zr364xx_vidioc_g_fmt_vid_cap(struct file
*file
, void *priv
,
790 struct v4l2_format
*f
)
792 struct zr364xx_camera
*cam
;
796 cam
= video_drvdata(file
);
798 f
->fmt
.pix
.pixelformat
= formats
[0].fourcc
;
799 f
->fmt
.pix
.field
= V4L2_FIELD_NONE
;
800 f
->fmt
.pix
.width
= cam
->width
;
801 f
->fmt
.pix
.height
= cam
->height
;
802 f
->fmt
.pix
.bytesperline
= f
->fmt
.pix
.width
* 2;
803 f
->fmt
.pix
.sizeimage
= f
->fmt
.pix
.height
* f
->fmt
.pix
.bytesperline
;
804 f
->fmt
.pix
.colorspace
= V4L2_COLORSPACE_JPEG
;
808 static int zr364xx_vidioc_s_fmt_vid_cap(struct file
*file
, void *priv
,
809 struct v4l2_format
*f
)
811 struct zr364xx_camera
*cam
= video_drvdata(file
);
812 struct videobuf_queue
*q
= &cam
->vb_vidq
;
813 char pixelformat_name
[5];
814 int ret
= zr364xx_vidioc_try_fmt_vid_cap(file
, cam
, f
);
820 mutex_lock(&q
->vb_lock
);
822 if (videobuf_queue_is_busy(&cam
->vb_vidq
)) {
823 DBG("%s queue busy\n", __func__
);
829 DBG("%s can't change format after started\n", __func__
);
834 cam
->width
= f
->fmt
.pix
.width
;
835 cam
->height
= f
->fmt
.pix
.height
;
836 DBG("%s: %dx%d mode selected\n", __func__
,
837 cam
->width
, cam
->height
);
838 f
->fmt
.pix
.bytesperline
= f
->fmt
.pix
.width
* 2;
839 f
->fmt
.pix
.sizeimage
= f
->fmt
.pix
.height
* f
->fmt
.pix
.bytesperline
;
840 f
->fmt
.pix
.colorspace
= V4L2_COLORSPACE_JPEG
;
841 cam
->vb_vidq
.field
= f
->fmt
.pix
.field
;
843 if (f
->fmt
.pix
.width
== 160 && f
->fmt
.pix
.height
== 120)
845 else if (f
->fmt
.pix
.width
== 640 && f
->fmt
.pix
.height
== 480)
851 m1
[2].value
= 0xf000 + mode
;
852 m2
[1].value
= 0xf000 + mode
;
854 /* special case for METHOD3, the modes are different */
855 if (cam
->method
== METHOD3
) {
858 m2
[1].value
= 0xf000 + 4;
861 m2
[1].value
= 0xf000 + 0;
864 m2
[1].value
= 0xf000 + 1;
869 header2
[437] = cam
->height
/ 256;
870 header2
[438] = cam
->height
% 256;
871 header2
[439] = cam
->width
/ 256;
872 header2
[440] = cam
->width
% 256;
874 for (i
= 0; init
[cam
->method
][i
].size
!= -1; i
++) {
876 send_control_msg(cam
->udev
, 1, init
[cam
->method
][i
].value
,
877 0, init
[cam
->method
][i
].bytes
,
878 init
[cam
->method
][i
].size
);
880 dev_err(&cam
->udev
->dev
,
881 "error during resolution change sequence: %d\n", i
);
886 /* Added some delay here, since opening/closing the camera quickly,
887 * like Ekiga does during its startup, can crash the webcam
894 mutex_unlock(&q
->vb_lock
);
896 DBG("%s: V4L2_PIX_FMT_%s (%d) ok!\n", __func__
,
897 decode_fourcc(f
->fmt
.pix
.pixelformat
, pixelformat_name
),
902 static int zr364xx_vidioc_reqbufs(struct file
*file
, void *priv
,
903 struct v4l2_requestbuffers
*p
)
905 struct zr364xx_camera
*cam
= video_drvdata(file
);
907 if (cam
->owner
&& cam
->owner
!= priv
)
909 return videobuf_reqbufs(&cam
->vb_vidq
, p
);
912 static int zr364xx_vidioc_querybuf(struct file
*file
,
914 struct v4l2_buffer
*p
)
917 struct zr364xx_camera
*cam
= video_drvdata(file
);
918 rc
= videobuf_querybuf(&cam
->vb_vidq
, p
);
922 static int zr364xx_vidioc_qbuf(struct file
*file
,
924 struct v4l2_buffer
*p
)
927 struct zr364xx_camera
*cam
= video_drvdata(file
);
928 _DBG("%s\n", __func__
);
929 if (cam
->owner
&& cam
->owner
!= priv
)
931 rc
= videobuf_qbuf(&cam
->vb_vidq
, p
);
935 static int zr364xx_vidioc_dqbuf(struct file
*file
,
937 struct v4l2_buffer
*p
)
940 struct zr364xx_camera
*cam
= video_drvdata(file
);
941 _DBG("%s\n", __func__
);
942 if (cam
->owner
&& cam
->owner
!= priv
)
944 rc
= videobuf_dqbuf(&cam
->vb_vidq
, p
, file
->f_flags
& O_NONBLOCK
);
948 static void read_pipe_completion(struct urb
*purb
)
950 struct zr364xx_pipeinfo
*pipe_info
;
951 struct zr364xx_camera
*cam
;
954 pipe_info
= purb
->context
;
955 _DBG("%s %p, status %d\n", __func__
, purb
, purb
->status
);
957 printk(KERN_ERR KBUILD_MODNAME
": no context!\n");
961 cam
= pipe_info
->cam
;
963 printk(KERN_ERR KBUILD_MODNAME
": no context!\n");
967 /* if shutting down, do not resubmit, exit immediately */
968 if (purb
->status
== -ESHUTDOWN
) {
969 DBG("%s, err shutdown\n", __func__
);
970 pipe_info
->err_count
++;
974 if (pipe_info
->state
== 0) {
975 DBG("exiting USB pipe\n");
979 if (purb
->actual_length
> pipe_info
->transfer_size
) {
980 dev_err(&cam
->udev
->dev
, "wrong number of bytes\n");
984 if (purb
->status
== 0)
985 zr364xx_read_video_callback(cam
, pipe_info
, purb
);
987 pipe_info
->err_count
++;
988 DBG("%s: failed URB %d\n", __func__
, purb
->status
);
991 pipe
= usb_rcvbulkpipe(cam
->udev
, cam
->read_endpoint
);
994 usb_fill_bulk_urb(pipe_info
->stream_urb
, cam
->udev
,
996 pipe_info
->transfer_buffer
,
997 pipe_info
->transfer_size
,
998 read_pipe_completion
, pipe_info
);
1000 if (pipe_info
->state
!= 0) {
1001 purb
->status
= usb_submit_urb(pipe_info
->stream_urb
,
1005 dev_err(&cam
->udev
->dev
,
1006 "error submitting urb (error=%i)\n",
1009 DBG("read pipe complete state 0\n");
1012 static int zr364xx_start_readpipe(struct zr364xx_camera
*cam
)
1016 struct zr364xx_pipeinfo
*pipe_info
= cam
->pipe
;
1017 pipe
= usb_rcvbulkpipe(cam
->udev
, cam
->read_endpoint
);
1018 DBG("%s: start pipe IN x%x\n", __func__
, cam
->read_endpoint
);
1020 pipe_info
->state
= 1;
1021 pipe_info
->err_count
= 0;
1022 pipe_info
->stream_urb
= usb_alloc_urb(0, GFP_KERNEL
);
1023 if (!pipe_info
->stream_urb
)
1025 /* transfer buffer allocated in board_init */
1026 usb_fill_bulk_urb(pipe_info
->stream_urb
, cam
->udev
,
1028 pipe_info
->transfer_buffer
,
1029 pipe_info
->transfer_size
,
1030 read_pipe_completion
, pipe_info
);
1032 DBG("submitting URB %p\n", pipe_info
->stream_urb
);
1033 retval
= usb_submit_urb(pipe_info
->stream_urb
, GFP_KERNEL
);
1035 printk(KERN_ERR KBUILD_MODNAME
": start read pipe failed\n");
1042 static void zr364xx_stop_readpipe(struct zr364xx_camera
*cam
)
1044 struct zr364xx_pipeinfo
*pipe_info
;
1047 printk(KERN_ERR KBUILD_MODNAME
": invalid device\n");
1050 DBG("stop read pipe\n");
1051 pipe_info
= cam
->pipe
;
1053 if (pipe_info
->state
!= 0)
1054 pipe_info
->state
= 0;
1056 if (pipe_info
->stream_urb
) {
1058 usb_kill_urb(pipe_info
->stream_urb
);
1059 usb_free_urb(pipe_info
->stream_urb
);
1060 pipe_info
->stream_urb
= NULL
;
1066 /* starts acquisition process */
1067 static int zr364xx_start_acquire(struct zr364xx_camera
*cam
)
1071 DBG("start acquire\n");
1073 cam
->last_frame
= -1;
1075 for (j
= 0; j
< FRAMES
; j
++) {
1076 cam
->buffer
.frame
[j
].ulState
= ZR364XX_READ_IDLE
;
1077 cam
->buffer
.frame
[j
].cur_size
= 0;
1083 static inline int zr364xx_stop_acquire(struct zr364xx_camera
*cam
)
1089 static int zr364xx_prepare(struct zr364xx_camera
*cam
)
1094 for (i
= 0; init
[cam
->method
][i
].size
!= -1; i
++) {
1095 res
= send_control_msg(cam
->udev
, 1, init
[cam
->method
][i
].value
,
1096 0, init
[cam
->method
][i
].bytes
,
1097 init
[cam
->method
][i
].size
);
1099 dev_err(&cam
->udev
->dev
,
1100 "error during open sequence: %d\n", i
);
1106 cam
->last_frame
= -1;
1108 cam
->frame_count
= 0;
1109 for (j
= 0; j
< FRAMES
; j
++) {
1110 cam
->buffer
.frame
[j
].ulState
= ZR364XX_READ_IDLE
;
1111 cam
->buffer
.frame
[j
].cur_size
= 0;
1113 v4l2_ctrl_handler_setup(&cam
->ctrl_handler
);
1117 static int zr364xx_vidioc_streamon(struct file
*file
, void *priv
,
1118 enum v4l2_buf_type type
)
1120 struct zr364xx_camera
*cam
= video_drvdata(file
);
1123 DBG("%s\n", __func__
);
1125 if (type
!= V4L2_BUF_TYPE_VIDEO_CAPTURE
)
1128 if (cam
->owner
&& cam
->owner
!= priv
)
1131 res
= zr364xx_prepare(cam
);
1134 res
= videobuf_streamon(&cam
->vb_vidq
);
1136 zr364xx_start_acquire(cam
);
1137 cam
->owner
= file
->private_data
;
1142 static int zr364xx_vidioc_streamoff(struct file
*file
, void *priv
,
1143 enum v4l2_buf_type type
)
1145 struct zr364xx_camera
*cam
= video_drvdata(file
);
1147 DBG("%s\n", __func__
);
1148 if (type
!= V4L2_BUF_TYPE_VIDEO_CAPTURE
)
1150 if (cam
->owner
&& cam
->owner
!= priv
)
1152 zr364xx_stop_acquire(cam
);
1153 return videobuf_streamoff(&cam
->vb_vidq
);
1157 /* open the camera */
1158 static int zr364xx_open(struct file
*file
)
1160 struct zr364xx_camera
*cam
= video_drvdata(file
);
1163 DBG("%s\n", __func__
);
1165 if (mutex_lock_interruptible(&cam
->lock
))
1166 return -ERESTARTSYS
;
1168 err
= v4l2_fh_open(file
);
1172 /* Added some delay here, since opening/closing the camera quickly,
1173 * like Ekiga does during its startup, can crash the webcam
1179 mutex_unlock(&cam
->lock
);
1180 DBG("%s: %d\n", __func__
, err
);
1184 static void zr364xx_release(struct v4l2_device
*v4l2_dev
)
1186 struct zr364xx_camera
*cam
=
1187 container_of(v4l2_dev
, struct zr364xx_camera
, v4l2_dev
);
1190 v4l2_device_unregister(&cam
->v4l2_dev
);
1192 videobuf_mmap_free(&cam
->vb_vidq
);
1194 /* release sys buffers */
1195 for (i
= 0; i
< FRAMES
; i
++) {
1196 if (cam
->buffer
.frame
[i
].lpvbits
) {
1197 DBG("vfree %p\n", cam
->buffer
.frame
[i
].lpvbits
);
1198 vfree(cam
->buffer
.frame
[i
].lpvbits
);
1200 cam
->buffer
.frame
[i
].lpvbits
= NULL
;
1203 v4l2_ctrl_handler_free(&cam
->ctrl_handler
);
1204 /* release transfer buffer */
1205 kfree(cam
->pipe
->transfer_buffer
);
1209 /* release the camera */
1210 static int zr364xx_close(struct file
*file
)
1212 struct zr364xx_camera
*cam
;
1213 struct usb_device
*udev
;
1216 DBG("%s\n", __func__
);
1217 cam
= video_drvdata(file
);
1219 mutex_lock(&cam
->lock
);
1222 if (file
->private_data
== cam
->owner
) {
1223 /* turn off stream */
1225 zr364xx_stop_acquire(cam
);
1226 videobuf_streamoff(&cam
->vb_vidq
);
1228 for (i
= 0; i
< 2; i
++) {
1229 send_control_msg(udev
, 1, init
[cam
->method
][i
].value
,
1230 0, init
[cam
->method
][i
].bytes
,
1231 init
[cam
->method
][i
].size
);
1236 /* Added some delay here, since opening/closing the camera quickly,
1237 * like Ekiga does during its startup, can crash the webcam
1240 mutex_unlock(&cam
->lock
);
1241 return v4l2_fh_release(file
);
1245 static int zr364xx_mmap(struct file
*file
, struct vm_area_struct
*vma
)
1247 struct zr364xx_camera
*cam
= video_drvdata(file
);
1251 DBG("%s: cam == NULL\n", __func__
);
1254 DBG("mmap called, vma=%p\n", vma
);
1256 ret
= videobuf_mmap_mapper(&cam
->vb_vidq
, vma
);
1258 DBG("vma start=0x%08lx, size=%ld, ret=%d\n",
1259 (unsigned long)vma
->vm_start
,
1260 (unsigned long)vma
->vm_end
- (unsigned long)vma
->vm_start
, ret
);
1264 static __poll_t
zr364xx_poll(struct file
*file
,
1265 struct poll_table_struct
*wait
)
1267 struct zr364xx_camera
*cam
= video_drvdata(file
);
1268 struct videobuf_queue
*q
= &cam
->vb_vidq
;
1269 __poll_t res
= v4l2_ctrl_poll(file
, wait
);
1271 _DBG("%s\n", __func__
);
1273 return res
| videobuf_poll_stream(file
, q
, wait
);
1276 static const struct v4l2_ctrl_ops zr364xx_ctrl_ops
= {
1277 .s_ctrl
= zr364xx_s_ctrl
,
1280 static const struct v4l2_file_operations zr364xx_fops
= {
1281 .owner
= THIS_MODULE
,
1282 .open
= zr364xx_open
,
1283 .release
= zr364xx_close
,
1284 .read
= zr364xx_read
,
1285 .mmap
= zr364xx_mmap
,
1286 .unlocked_ioctl
= video_ioctl2
,
1287 .poll
= zr364xx_poll
,
1290 static const struct v4l2_ioctl_ops zr364xx_ioctl_ops
= {
1291 .vidioc_querycap
= zr364xx_vidioc_querycap
,
1292 .vidioc_enum_fmt_vid_cap
= zr364xx_vidioc_enum_fmt_vid_cap
,
1293 .vidioc_try_fmt_vid_cap
= zr364xx_vidioc_try_fmt_vid_cap
,
1294 .vidioc_s_fmt_vid_cap
= zr364xx_vidioc_s_fmt_vid_cap
,
1295 .vidioc_g_fmt_vid_cap
= zr364xx_vidioc_g_fmt_vid_cap
,
1296 .vidioc_enum_input
= zr364xx_vidioc_enum_input
,
1297 .vidioc_g_input
= zr364xx_vidioc_g_input
,
1298 .vidioc_s_input
= zr364xx_vidioc_s_input
,
1299 .vidioc_streamon
= zr364xx_vidioc_streamon
,
1300 .vidioc_streamoff
= zr364xx_vidioc_streamoff
,
1301 .vidioc_reqbufs
= zr364xx_vidioc_reqbufs
,
1302 .vidioc_querybuf
= zr364xx_vidioc_querybuf
,
1303 .vidioc_qbuf
= zr364xx_vidioc_qbuf
,
1304 .vidioc_dqbuf
= zr364xx_vidioc_dqbuf
,
1305 .vidioc_log_status
= v4l2_ctrl_log_status
,
1306 .vidioc_subscribe_event
= v4l2_ctrl_subscribe_event
,
1307 .vidioc_unsubscribe_event
= v4l2_event_unsubscribe
,
1310 static const struct video_device zr364xx_template
= {
1311 .name
= DRIVER_DESC
,
1312 .fops
= &zr364xx_fops
,
1313 .ioctl_ops
= &zr364xx_ioctl_ops
,
1314 .release
= video_device_release_empty
,
1315 .device_caps
= V4L2_CAP_VIDEO_CAPTURE
| V4L2_CAP_READWRITE
|
1321 /*******************/
1322 /* USB integration */
1323 /*******************/
1324 static int zr364xx_board_init(struct zr364xx_camera
*cam
)
1326 struct zr364xx_pipeinfo
*pipe
= cam
->pipe
;
1330 DBG("board init: %p\n", cam
);
1331 memset(pipe
, 0, sizeof(*pipe
));
1333 pipe
->transfer_size
= BUFFER_SIZE
;
1335 pipe
->transfer_buffer
= kzalloc(pipe
->transfer_size
,
1337 if (!pipe
->transfer_buffer
) {
1338 DBG("out of memory!\n");
1343 cam
->frame_count
= 0;
1345 /*** start create system buffers ***/
1346 for (i
= 0; i
< FRAMES
; i
++) {
1347 /* always allocate maximum size for system buffers */
1348 cam
->buffer
.frame
[i
].lpvbits
= vmalloc(MAX_FRAME_SIZE
);
1350 DBG("valloc %p, idx %lu, pdata %p\n",
1351 &cam
->buffer
.frame
[i
], i
,
1352 cam
->buffer
.frame
[i
].lpvbits
);
1353 if (!cam
->buffer
.frame
[i
].lpvbits
) {
1354 printk(KERN_INFO KBUILD_MODNAME
": out of memory. Using less frames\n");
1360 printk(KERN_INFO KBUILD_MODNAME
": out of memory. Aborting\n");
1364 cam
->buffer
.dwFrames
= i
;
1366 /* make sure internal states are set */
1367 for (i
= 0; i
< FRAMES
; i
++) {
1368 cam
->buffer
.frame
[i
].ulState
= ZR364XX_READ_IDLE
;
1369 cam
->buffer
.frame
[i
].cur_size
= 0;
1373 cam
->last_frame
= -1;
1374 /*** end create system buffers ***/
1376 /* start read pipe */
1377 err
= zr364xx_start_readpipe(cam
);
1381 DBG(": board initialized\n");
1385 kfree(cam
->pipe
->transfer_buffer
);
1386 cam
->pipe
->transfer_buffer
= NULL
;
1390 static int zr364xx_probe(struct usb_interface
*intf
,
1391 const struct usb_device_id
*id
)
1393 struct usb_device
*udev
= interface_to_usbdev(intf
);
1394 struct zr364xx_camera
*cam
= NULL
;
1395 struct usb_host_interface
*iface_desc
;
1396 struct usb_endpoint_descriptor
*endpoint
;
1397 struct v4l2_ctrl_handler
*hdl
;
1401 DBG("probing...\n");
1403 dev_info(&intf
->dev
, DRIVER_DESC
" compatible webcam plugged\n");
1404 dev_info(&intf
->dev
, "model %04x:%04x detected\n",
1405 le16_to_cpu(udev
->descriptor
.idVendor
),
1406 le16_to_cpu(udev
->descriptor
.idProduct
));
1408 cam
= kzalloc(sizeof(*cam
), GFP_KERNEL
);
1412 cam
->v4l2_dev
.release
= zr364xx_release
;
1413 err
= v4l2_device_register(&intf
->dev
, &cam
->v4l2_dev
);
1415 dev_err(&udev
->dev
, "couldn't register v4l2_device\n");
1419 hdl
= &cam
->ctrl_handler
;
1420 v4l2_ctrl_handler_init(hdl
, 1);
1421 v4l2_ctrl_new_std(hdl
, &zr364xx_ctrl_ops
,
1422 V4L2_CID_BRIGHTNESS
, 0, 127, 1, 64);
1425 dev_err(&udev
->dev
, "couldn't register control\n");
1428 /* save the init method used by this camera */
1429 cam
->method
= id
->driver_info
;
1430 mutex_init(&cam
->lock
);
1431 cam
->vdev
= zr364xx_template
;
1432 cam
->vdev
.lock
= &cam
->lock
;
1433 cam
->vdev
.v4l2_dev
= &cam
->v4l2_dev
;
1434 cam
->vdev
.ctrl_handler
= &cam
->ctrl_handler
;
1435 video_set_drvdata(&cam
->vdev
, cam
);
1441 dev_info(&udev
->dev
, "160x120 mode selected\n");
1446 dev_info(&udev
->dev
, "640x480 mode selected\n");
1451 dev_info(&udev
->dev
, "320x240 mode selected\n");
1458 m1
[2].value
= 0xf000 + mode
;
1459 m2
[1].value
= 0xf000 + mode
;
1461 /* special case for METHOD3, the modes are different */
1462 if (cam
->method
== METHOD3
) {
1465 m2
[1].value
= 0xf000 + 4;
1468 m2
[1].value
= 0xf000 + 0;
1471 m2
[1].value
= 0xf000 + 1;
1476 header2
[437] = cam
->height
/ 256;
1477 header2
[438] = cam
->height
% 256;
1478 header2
[439] = cam
->width
/ 256;
1479 header2
[440] = cam
->width
% 256;
1483 DBG("dev: %p, udev %p interface %p\n", cam
, cam
->udev
, intf
);
1485 /* set up the endpoint information */
1486 iface_desc
= intf
->cur_altsetting
;
1487 DBG("num endpoints %d\n", iface_desc
->desc
.bNumEndpoints
);
1488 for (i
= 0; i
< iface_desc
->desc
.bNumEndpoints
; ++i
) {
1489 endpoint
= &iface_desc
->endpoint
[i
].desc
;
1490 if (!cam
->read_endpoint
&& usb_endpoint_is_bulk_in(endpoint
)) {
1491 /* we found the bulk in endpoint */
1492 cam
->read_endpoint
= endpoint
->bEndpointAddress
;
1496 if (!cam
->read_endpoint
) {
1498 dev_err(&intf
->dev
, "Could not find bulk-in endpoint\n");
1503 INIT_LIST_HEAD(&cam
->vidq
.active
);
1504 cam
->vidq
.cam
= cam
;
1506 usb_set_intfdata(intf
, cam
);
1508 /* load zr364xx board specific */
1509 err
= zr364xx_board_init(cam
);
1511 err
= v4l2_ctrl_handler_setup(hdl
);
1515 spin_lock_init(&cam
->slock
);
1519 videobuf_queue_vmalloc_init(&cam
->vb_vidq
, &zr364xx_video_qops
,
1521 V4L2_BUF_TYPE_VIDEO_CAPTURE
,
1523 sizeof(struct zr364xx_buffer
), cam
, &cam
->lock
);
1525 err
= video_register_device(&cam
->vdev
, VFL_TYPE_VIDEO
, -1);
1527 dev_err(&udev
->dev
, "video_register_device failed\n");
1531 dev_info(&udev
->dev
, DRIVER_DESC
" controlling device %s\n",
1532 video_device_node_name(&cam
->vdev
));
1536 v4l2_ctrl_handler_free(hdl
);
1537 v4l2_device_unregister(&cam
->v4l2_dev
);
1543 static void zr364xx_disconnect(struct usb_interface
*intf
)
1545 struct zr364xx_camera
*cam
= usb_get_intfdata(intf
);
1547 mutex_lock(&cam
->lock
);
1548 usb_set_intfdata(intf
, NULL
);
1549 dev_info(&intf
->dev
, DRIVER_DESC
" webcam unplugged\n");
1550 video_unregister_device(&cam
->vdev
);
1551 v4l2_device_disconnect(&cam
->v4l2_dev
);
1553 /* stops the read pipe if it is running */
1555 zr364xx_stop_acquire(cam
);
1557 zr364xx_stop_readpipe(cam
);
1558 mutex_unlock(&cam
->lock
);
1559 v4l2_device_put(&cam
->v4l2_dev
);
1564 static int zr364xx_suspend(struct usb_interface
*intf
, pm_message_t message
)
1566 struct zr364xx_camera
*cam
= usb_get_intfdata(intf
);
1568 cam
->was_streaming
= cam
->b_acquire
;
1569 if (!cam
->was_streaming
)
1571 zr364xx_stop_acquire(cam
);
1572 zr364xx_stop_readpipe(cam
);
1576 static int zr364xx_resume(struct usb_interface
*intf
)
1578 struct zr364xx_camera
*cam
= usb_get_intfdata(intf
);
1581 if (!cam
->was_streaming
)
1584 res
= zr364xx_start_readpipe(cam
);
1588 res
= zr364xx_prepare(cam
);
1592 zr364xx_start_acquire(cam
);
1596 zr364xx_stop_readpipe(cam
);
1601 /**********************/
1602 /* Module integration */
1603 /**********************/
1605 static struct usb_driver zr364xx_driver
= {
1607 .probe
= zr364xx_probe
,
1608 .disconnect
= zr364xx_disconnect
,
1610 .suspend
= zr364xx_suspend
,
1611 .resume
= zr364xx_resume
,
1612 .reset_resume
= zr364xx_resume
,
1614 .id_table
= device_table
1617 module_usb_driver(zr364xx_driver
);
1619 MODULE_AUTHOR(DRIVER_AUTHOR
);
1620 MODULE_DESCRIPTION(DRIVER_DESC
);
1621 MODULE_LICENSE("GPL");
1622 MODULE_VERSION(DRIVER_VERSION
);