Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[sfrench/cifs-2.6.git] / drivers / media / usb / s2255 / s2255drv.c
1 /*
2  *  s2255drv.c - a driver for the Sensoray 2255 USB video capture device
3  *
4  *   Copyright (C) 2007-2014 by Sensoray Company Inc.
5  *                              Dean Anderson
6  *
7  * Some video buffer code based on vivi driver:
8  *
9  * Sensoray 2255 device supports 4 simultaneous channels.
10  * The channels are not "crossbar" inputs, they are physically
11  * attached to separate video decoders.
12  *
13  * Because of USB2.0 bandwidth limitations. There is only a
14  * certain amount of data which may be transferred at one time.
15  *
16  * Example maximum bandwidth utilization:
17  *
18  * -full size, color mode YUYV or YUV422P: 2 channels at once
19  * -full or half size Grey scale: all 4 channels at once
20  * -half size, color mode YUYV or YUV422P: all 4 channels at once
21  * -full size, color mode YUYV or YUV422P 1/2 frame rate: all 4 channels
22  *  at once.
23  *
24  * This program is free software; you can redistribute it and/or modify
25  * it under the terms of the GNU General Public License as published by
26  * the Free Software Foundation; either version 2 of the License, or
27  * (at your option) any later version.
28  *
29  * This program is distributed in the hope that it will be useful,
30  * but WITHOUT ANY WARRANTY; without even the implied warranty of
31  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
32  * GNU General Public License for more details.
33  */
34
35 #include <linux/module.h>
36 #include <linux/firmware.h>
37 #include <linux/kernel.h>
38 #include <linux/mutex.h>
39 #include <linux/slab.h>
40 #include <linux/videodev2.h>
41 #include <linux/mm.h>
42 #include <linux/vmalloc.h>
43 #include <linux/usb.h>
44 #include <media/videobuf2-v4l2.h>
45 #include <media/videobuf2-vmalloc.h>
46 #include <media/v4l2-common.h>
47 #include <media/v4l2-device.h>
48 #include <media/v4l2-ioctl.h>
49 #include <media/v4l2-ctrls.h>
50 #include <media/v4l2-event.h>
51
52 #define S2255_VERSION           "1.25.1"
53 #define FIRMWARE_FILE_NAME "f2255usb.bin"
54
55 /* default JPEG quality */
56 #define S2255_DEF_JPEG_QUAL     50
57 /* vendor request in */
58 #define S2255_VR_IN             0
59 /* vendor request out */
60 #define S2255_VR_OUT            1
61 /* firmware query */
62 #define S2255_VR_FW             0x30
63 /* USB endpoint number for configuring the device */
64 #define S2255_CONFIG_EP         2
65 /* maximum time for DSP to start responding after last FW word loaded(ms) */
66 #define S2255_DSP_BOOTTIME      800
67 /* maximum time to wait for firmware to load (ms) */
68 #define S2255_LOAD_TIMEOUT      (5000 + S2255_DSP_BOOTTIME)
69 #define S2255_MIN_BUFS          2
70 #define S2255_SETMODE_TIMEOUT   500
71 #define S2255_VIDSTATUS_TIMEOUT 350
72 #define S2255_MARKER_FRAME      cpu_to_le32(0x2255DA4AL)
73 #define S2255_MARKER_RESPONSE   cpu_to_le32(0x2255ACACL)
74 #define S2255_RESPONSE_SETMODE  cpu_to_le32(0x01)
75 #define S2255_RESPONSE_FW       cpu_to_le32(0x10)
76 #define S2255_RESPONSE_STATUS   cpu_to_le32(0x20)
77 #define S2255_USB_XFER_SIZE     (16 * 1024)
78 #define MAX_CHANNELS            4
79 #define SYS_FRAMES              4
80 /* maximum size is PAL full size plus room for the marker header(s) */
81 #define SYS_FRAMES_MAXSIZE      (720*288*2*2 + 4096)
82 #define DEF_USB_BLOCK           S2255_USB_XFER_SIZE
83 #define LINE_SZ_4CIFS_NTSC      640
84 #define LINE_SZ_2CIFS_NTSC      640
85 #define LINE_SZ_1CIFS_NTSC      320
86 #define LINE_SZ_4CIFS_PAL       704
87 #define LINE_SZ_2CIFS_PAL       704
88 #define LINE_SZ_1CIFS_PAL       352
89 #define NUM_LINES_4CIFS_NTSC    240
90 #define NUM_LINES_2CIFS_NTSC    240
91 #define NUM_LINES_1CIFS_NTSC    240
92 #define NUM_LINES_4CIFS_PAL     288
93 #define NUM_LINES_2CIFS_PAL     288
94 #define NUM_LINES_1CIFS_PAL     288
95 #define LINE_SZ_DEF             640
96 #define NUM_LINES_DEF           240
97
98
99 /* predefined settings */
100 #define FORMAT_NTSC     1
101 #define FORMAT_PAL      2
102
103 #define SCALE_4CIFS     1       /* 640x480(NTSC) or 704x576(PAL) */
104 #define SCALE_2CIFS     2       /* 640x240(NTSC) or 704x288(PAL) */
105 #define SCALE_1CIFS     3       /* 320x240(NTSC) or 352x288(PAL) */
106 /* SCALE_4CIFSI is the 2 fields interpolated into one */
107 #define SCALE_4CIFSI    4       /* 640x480(NTSC) or 704x576(PAL) high quality */
108
109 #define COLOR_YUVPL     1       /* YUV planar */
110 #define COLOR_YUVPK     2       /* YUV packed */
111 #define COLOR_Y8        4       /* monochrome */
112 #define COLOR_JPG       5       /* JPEG */
113
114 #define MASK_COLOR       0x000000ff
115 #define MASK_JPG_QUALITY 0x0000ff00
116 #define MASK_INPUT_TYPE  0x000f0000
117 /* frame decimation. */
118 #define FDEC_1          1       /* capture every frame. default */
119 #define FDEC_2          2       /* capture every 2nd frame */
120 #define FDEC_3          3       /* capture every 3rd frame */
121 #define FDEC_5          5       /* capture every 5th frame */
122
123 /*-------------------------------------------------------
124  * Default mode parameters.
125  *-------------------------------------------------------*/
126 #define DEF_SCALE       SCALE_4CIFS
127 #define DEF_COLOR       COLOR_YUVPL
128 #define DEF_FDEC        FDEC_1
129 #define DEF_BRIGHT      0
130 #define DEF_CONTRAST    0x5c
131 #define DEF_SATURATION  0x80
132 #define DEF_HUE         0
133
134 /* usb config commands */
135 #define IN_DATA_TOKEN   cpu_to_le32(0x2255c0de)
136 #define CMD_2255        0xc2255000
137 #define CMD_SET_MODE    cpu_to_le32((CMD_2255 | 0x10))
138 #define CMD_START       cpu_to_le32((CMD_2255 | 0x20))
139 #define CMD_STOP        cpu_to_le32((CMD_2255 | 0x30))
140 #define CMD_STATUS      cpu_to_le32((CMD_2255 | 0x40))
141
142 struct s2255_mode {
143         u32 format;     /* input video format (NTSC, PAL) */
144         u32 scale;      /* output video scale */
145         u32 color;      /* output video color format */
146         u32 fdec;       /* frame decimation */
147         u32 bright;     /* brightness */
148         u32 contrast;   /* contrast */
149         u32 saturation; /* saturation */
150         u32 hue;        /* hue (NTSC only)*/
151         u32 single;     /* capture 1 frame at a time (!=0), continuously (==0)*/
152         u32 usb_block;  /* block size. should be 4096 of DEF_USB_BLOCK */
153         u32 restart;    /* if DSP requires restart */
154 };
155
156
157 #define S2255_READ_IDLE         0
158 #define S2255_READ_FRAME        1
159
160 /* frame structure */
161 struct s2255_framei {
162         unsigned long size;
163         unsigned long ulState;  /* ulState:S2255_READ_IDLE, S2255_READ_FRAME*/
164         void *lpvbits;          /* image data */
165         unsigned long cur_size; /* current data copied to it */
166 };
167
168 /* image buffer structure */
169 struct s2255_bufferi {
170         unsigned long dwFrames;                 /* number of frames in buffer */
171         struct s2255_framei frame[SYS_FRAMES];  /* array of FRAME structures */
172 };
173
174 #define DEF_MODEI_NTSC_CONT     {FORMAT_NTSC, DEF_SCALE, DEF_COLOR,     \
175                         DEF_FDEC, DEF_BRIGHT, DEF_CONTRAST, DEF_SATURATION, \
176                         DEF_HUE, 0, DEF_USB_BLOCK, 0}
177
178 /* for firmware loading, fw_state */
179 #define S2255_FW_NOTLOADED      0
180 #define S2255_FW_LOADED_DSPWAIT 1
181 #define S2255_FW_SUCCESS        2
182 #define S2255_FW_FAILED         3
183 #define S2255_FW_DISCONNECTING  4
184 #define S2255_FW_MARKER         cpu_to_le32(0x22552f2f)
185 /* 2255 read states */
186 #define S2255_READ_IDLE         0
187 #define S2255_READ_FRAME        1
188 struct s2255_fw {
189         int                   fw_loaded;
190         int                   fw_size;
191         struct urb            *fw_urb;
192         atomic_t              fw_state;
193         void                  *pfw_data;
194         wait_queue_head_t     wait_fw;
195         const struct firmware *fw;
196 };
197
198 struct s2255_pipeinfo {
199         u32 max_transfer_size;
200         u32 cur_transfer_size;
201         u8 *transfer_buffer;
202         u32 state;
203         void *stream_urb;
204         void *dev;      /* back pointer to s2255_dev struct*/
205         u32 err_count;
206         u32 idx;
207 };
208
209 struct s2255_fmt; /*forward declaration */
210 struct s2255_dev;
211
212 /* 2255 video channel */
213 struct s2255_vc {
214         struct s2255_dev        *dev;
215         struct video_device     vdev;
216         struct v4l2_ctrl_handler hdl;
217         struct v4l2_ctrl        *jpegqual_ctrl;
218         int                     resources;
219         struct list_head        buf_list;
220         struct s2255_bufferi    buffer;
221         struct s2255_mode       mode;
222         v4l2_std_id             std;
223         /* jpeg compression */
224         unsigned                jpegqual;
225         /* capture parameters (for high quality mode full size) */
226         struct v4l2_captureparm cap_parm;
227         int                     cur_frame;
228         int                     last_frame;
229         /* allocated image size */
230         unsigned long           req_image_size;
231         /* received packet size */
232         unsigned long           pkt_size;
233         int                     bad_payload;
234         unsigned long           frame_count;
235         /* if JPEG image */
236         int                     jpg_size;
237         /* if channel configured to default state */
238         int                     configured;
239         wait_queue_head_t       wait_setmode;
240         int                     setmode_ready;
241         /* video status items */
242         int                     vidstatus;
243         wait_queue_head_t       wait_vidstatus;
244         int                     vidstatus_ready;
245         unsigned int            width;
246         unsigned int            height;
247         enum v4l2_field         field;
248         const struct s2255_fmt  *fmt;
249         int idx; /* channel number on device, 0-3 */
250         struct vb2_queue vb_vidq;
251         struct mutex vb_lock; /* streaming lock */
252         spinlock_t qlock;
253 };
254
255
256 struct s2255_dev {
257         struct s2255_vc         vc[MAX_CHANNELS];
258         struct v4l2_device      v4l2_dev;
259         atomic_t                num_channels;
260         int                     frames;
261         struct mutex            lock;   /* channels[].vdev.lock */
262         struct mutex            cmdlock; /* protects cmdbuf */
263         struct usb_device       *udev;
264         struct usb_interface    *interface;
265         u8                      read_endpoint;
266         struct timer_list       timer;
267         struct s2255_fw *fw_data;
268         struct s2255_pipeinfo   pipe;
269         u32                     cc;     /* current channel */
270         int                     frame_ready;
271         int                     chn_ready;
272         /* dsp firmware version (f2255usb.bin) */
273         int                     dsp_fw_ver;
274         u16                     pid; /* product id */
275 #define S2255_CMDBUF_SIZE 512
276         __le32                  *cmdbuf;
277 };
278
279 static inline struct s2255_dev *to_s2255_dev(struct v4l2_device *v4l2_dev)
280 {
281         return container_of(v4l2_dev, struct s2255_dev, v4l2_dev);
282 }
283
284 struct s2255_fmt {
285         char *name;
286         u32 fourcc;
287         int depth;
288 };
289
290 /* buffer for one video frame */
291 struct s2255_buffer {
292         /* common v4l buffer stuff -- must be first */
293         struct vb2_v4l2_buffer vb;
294         struct list_head list;
295 };
296
297
298 /* current cypress EEPROM firmware version */
299 #define S2255_CUR_USB_FWVER     ((3 << 8) | 12)
300 /* current DSP FW version */
301 #define S2255_CUR_DSP_FWVER     10104
302 /* Need DSP version 5+ for video status feature */
303 #define S2255_MIN_DSP_STATUS      5
304 #define S2255_MIN_DSP_COLORFILTER 8
305 #define S2255_NORMS             (V4L2_STD_ALL)
306
307 /* private V4L2 controls */
308
309 /*
310  * The following chart displays how COLORFILTER should be set
311  *  =========================================================
312  *  =     fourcc              =     COLORFILTER             =
313  *  =                         ===============================
314  *  =                         =   0             =    1      =
315  *  =========================================================
316  *  =  V4L2_PIX_FMT_GREY(Y8)  = monochrome from = monochrome=
317  *  =                         = s-video or      = composite =
318  *  =                         = B/W camera      = input     =
319  *  =========================================================
320  *  =    other                = color, svideo   = color,    =
321  *  =                         =                 = composite =
322  *  =========================================================
323  *
324  * Notes:
325  *   channels 0-3 on 2255 are composite
326  *   channels 0-1 on 2257 are composite, 2-3 are s-video
327  * If COLORFILTER is 0 with a composite color camera connected,
328  * the output will appear monochrome but hatching
329  * will occur.
330  * COLORFILTER is different from "color killer" and "color effects"
331  * for reasons above.
332  */
333 #define S2255_V4L2_YC_ON  1
334 #define S2255_V4L2_YC_OFF 0
335 #define V4L2_CID_S2255_COLORFILTER (V4L2_CID_USER_S2255_BASE + 0)
336
337 /* frame prefix size (sent once every frame) */
338 #define PREFIX_SIZE             512
339
340 /* Channels on box are in reverse order */
341 static unsigned long G_chnmap[MAX_CHANNELS] = {3, 2, 1, 0};
342
343 static int debug;
344
345 static int s2255_start_readpipe(struct s2255_dev *dev);
346 static void s2255_stop_readpipe(struct s2255_dev *dev);
347 static int s2255_start_acquire(struct s2255_vc *vc);
348 static int s2255_stop_acquire(struct s2255_vc *vc);
349 static void s2255_fillbuff(struct s2255_vc *vc, struct s2255_buffer *buf,
350                            int jpgsize);
351 static int s2255_set_mode(struct s2255_vc *vc, struct s2255_mode *mode);
352 static int s2255_board_shutdown(struct s2255_dev *dev);
353 static void s2255_fwload_start(struct s2255_dev *dev);
354 static void s2255_destroy(struct s2255_dev *dev);
355 static long s2255_vendor_req(struct s2255_dev *dev, unsigned char req,
356                              u16 index, u16 value, void *buf,
357                              s32 buf_len, int bOut);
358
359 /* dev_err macro with driver name */
360 #define S2255_DRIVER_NAME "s2255"
361 #define s2255_dev_err(dev, fmt, arg...)                                 \
362                 dev_err(dev, S2255_DRIVER_NAME " - " fmt, ##arg)
363
364 #define dprintk(dev, level, fmt, arg...) \
365         v4l2_dbg(level, debug, &dev->v4l2_dev, fmt, ## arg)
366
367 static struct usb_driver s2255_driver;
368
369 /* start video number */
370 static int video_nr = -1;       /* /dev/videoN, -1 for autodetect */
371
372 /* Enable jpeg capture. */
373 static int jpeg_enable = 1;
374
375 module_param(debug, int, 0644);
376 MODULE_PARM_DESC(debug, "Debug level(0-100) default 0");
377 module_param(video_nr, int, 0644);
378 MODULE_PARM_DESC(video_nr, "start video minor(-1 default autodetect)");
379 module_param(jpeg_enable, int, 0644);
380 MODULE_PARM_DESC(jpeg_enable, "Jpeg enable(1-on 0-off) default 1");
381
382 /* USB device table */
383 #define USB_SENSORAY_VID        0x1943
384 static const struct usb_device_id s2255_table[] = {
385         {USB_DEVICE(USB_SENSORAY_VID, 0x2255)},
386         {USB_DEVICE(USB_SENSORAY_VID, 0x2257)}, /*same family as 2255*/
387         { }                     /* Terminating entry */
388 };
389 MODULE_DEVICE_TABLE(usb, s2255_table);
390
391 #define BUFFER_TIMEOUT msecs_to_jiffies(400)
392
393 /* image formats.  */
394 /* JPEG formats must be defined last to support jpeg_enable parameter */
395 static const struct s2255_fmt formats[] = {
396         {
397                 .name = "4:2:2, packed, YUYV",
398                 .fourcc = V4L2_PIX_FMT_YUYV,
399                 .depth = 16
400
401         }, {
402                 .name = "4:2:2, packed, UYVY",
403                 .fourcc = V4L2_PIX_FMT_UYVY,
404                 .depth = 16
405         }, {
406                 .name = "4:2:2, planar, YUV422P",
407                 .fourcc = V4L2_PIX_FMT_YUV422P,
408                 .depth = 16
409
410         }, {
411                 .name = "8bpp GREY",
412                 .fourcc = V4L2_PIX_FMT_GREY,
413                 .depth = 8
414         }, {
415                 .name = "JPG",
416                 .fourcc = V4L2_PIX_FMT_JPEG,
417                 .depth = 24
418         }, {
419                 .name = "MJPG",
420                 .fourcc = V4L2_PIX_FMT_MJPEG,
421                 .depth = 24
422         }
423 };
424
425 static int norm_maxw(struct s2255_vc *vc)
426 {
427         return (vc->std & V4L2_STD_525_60) ?
428             LINE_SZ_4CIFS_NTSC : LINE_SZ_4CIFS_PAL;
429 }
430
431 static int norm_maxh(struct s2255_vc *vc)
432 {
433         return (vc->std & V4L2_STD_525_60) ?
434             (NUM_LINES_1CIFS_NTSC * 2) : (NUM_LINES_1CIFS_PAL * 2);
435 }
436
437 static int norm_minw(struct s2255_vc *vc)
438 {
439         return (vc->std & V4L2_STD_525_60) ?
440             LINE_SZ_1CIFS_NTSC : LINE_SZ_1CIFS_PAL;
441 }
442
443 static int norm_minh(struct s2255_vc *vc)
444 {
445         return (vc->std & V4L2_STD_525_60) ?
446             (NUM_LINES_1CIFS_NTSC) : (NUM_LINES_1CIFS_PAL);
447 }
448
449
450 /*
451  * TODO: fixme: move YUV reordering to hardware
452  * converts 2255 planar format to yuyv or uyvy
453  */
454 static void planar422p_to_yuv_packed(const unsigned char *in,
455                                      unsigned char *out,
456                                      int width, int height,
457                                      int fmt)
458 {
459         unsigned char *pY;
460         unsigned char *pCb;
461         unsigned char *pCr;
462         unsigned long size = height * width;
463         unsigned int i;
464         pY = (unsigned char *)in;
465         pCr = (unsigned char *)in + height * width;
466         pCb = (unsigned char *)in + height * width + (height * width / 2);
467         for (i = 0; i < size * 2; i += 4) {
468                 out[i] = (fmt == V4L2_PIX_FMT_YUYV) ? *pY++ : *pCr++;
469                 out[i + 1] = (fmt == V4L2_PIX_FMT_YUYV) ? *pCr++ : *pY++;
470                 out[i + 2] = (fmt == V4L2_PIX_FMT_YUYV) ? *pY++ : *pCb++;
471                 out[i + 3] = (fmt == V4L2_PIX_FMT_YUYV) ? *pCb++ : *pY++;
472         }
473         return;
474 }
475
476 static void s2255_reset_dsppower(struct s2255_dev *dev)
477 {
478         s2255_vendor_req(dev, 0x40, 0x0000, 0x0001, NULL, 0, 1);
479         msleep(50);
480         s2255_vendor_req(dev, 0x50, 0x0000, 0x0000, NULL, 0, 1);
481         msleep(600);
482         s2255_vendor_req(dev, 0x10, 0x0000, 0x0000, NULL, 0, 1);
483         return;
484 }
485
486 /* kickstarts the firmware loading. from probe
487  */
488 static void s2255_timer(struct timer_list *t)
489 {
490         struct s2255_dev *dev = from_timer(dev, t, timer);
491         struct s2255_fw *data = dev->fw_data;
492         if (usb_submit_urb(data->fw_urb, GFP_ATOMIC) < 0) {
493                 pr_err("s2255: can't submit urb\n");
494                 atomic_set(&data->fw_state, S2255_FW_FAILED);
495                 /* wake up anything waiting for the firmware */
496                 wake_up(&data->wait_fw);
497                 return;
498         }
499 }
500
501
502 /* this loads the firmware asynchronously.
503    Originally this was done synchronously in probe.
504    But it is better to load it asynchronously here than block
505    inside the probe function. Blocking inside probe affects boot time.
506    FW loading is triggered by the timer in the probe function
507 */
508 static void s2255_fwchunk_complete(struct urb *urb)
509 {
510         struct s2255_fw *data = urb->context;
511         struct usb_device *udev = urb->dev;
512         int len;
513         if (urb->status) {
514                 dev_err(&udev->dev, "URB failed with status %d\n", urb->status);
515                 atomic_set(&data->fw_state, S2255_FW_FAILED);
516                 /* wake up anything waiting for the firmware */
517                 wake_up(&data->wait_fw);
518                 return;
519         }
520         if (data->fw_urb == NULL) {
521                 s2255_dev_err(&udev->dev, "disconnected\n");
522                 atomic_set(&data->fw_state, S2255_FW_FAILED);
523                 /* wake up anything waiting for the firmware */
524                 wake_up(&data->wait_fw);
525                 return;
526         }
527 #define CHUNK_SIZE 512
528         /* all USB transfers must be done with continuous kernel memory.
529            can't allocate more than 128k in current linux kernel, so
530            upload the firmware in chunks
531          */
532         if (data->fw_loaded < data->fw_size) {
533                 len = (data->fw_loaded + CHUNK_SIZE) > data->fw_size ?
534                     data->fw_size % CHUNK_SIZE : CHUNK_SIZE;
535
536                 if (len < CHUNK_SIZE)
537                         memset(data->pfw_data, 0, CHUNK_SIZE);
538
539                 memcpy(data->pfw_data,
540                        (char *) data->fw->data + data->fw_loaded, len);
541
542                 usb_fill_bulk_urb(data->fw_urb, udev, usb_sndbulkpipe(udev, 2),
543                                   data->pfw_data, CHUNK_SIZE,
544                                   s2255_fwchunk_complete, data);
545                 if (usb_submit_urb(data->fw_urb, GFP_ATOMIC) < 0) {
546                         dev_err(&udev->dev, "failed submit URB\n");
547                         atomic_set(&data->fw_state, S2255_FW_FAILED);
548                         /* wake up anything waiting for the firmware */
549                         wake_up(&data->wait_fw);
550                         return;
551                 }
552                 data->fw_loaded += len;
553         } else
554                 atomic_set(&data->fw_state, S2255_FW_LOADED_DSPWAIT);
555         return;
556
557 }
558
559 static void s2255_got_frame(struct s2255_vc *vc, int jpgsize)
560 {
561         struct s2255_buffer *buf;
562         struct s2255_dev *dev = to_s2255_dev(vc->vdev.v4l2_dev);
563         unsigned long flags = 0;
564
565         spin_lock_irqsave(&vc->qlock, flags);
566         if (list_empty(&vc->buf_list)) {
567                 dprintk(dev, 1, "No active queue to serve\n");
568                 spin_unlock_irqrestore(&vc->qlock, flags);
569                 return;
570         }
571         buf = list_entry(vc->buf_list.next,
572                          struct s2255_buffer, list);
573         list_del(&buf->list);
574         buf->vb.vb2_buf.timestamp = ktime_get_ns();
575         buf->vb.field = vc->field;
576         buf->vb.sequence = vc->frame_count;
577         spin_unlock_irqrestore(&vc->qlock, flags);
578
579         s2255_fillbuff(vc, buf, jpgsize);
580         /* tell v4l buffer was filled */
581         vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
582         dprintk(dev, 2, "%s: [buf] [%p]\n", __func__, buf);
583 }
584
585 static const struct s2255_fmt *format_by_fourcc(int fourcc)
586 {
587         unsigned int i;
588         for (i = 0; i < ARRAY_SIZE(formats); i++) {
589                 if (-1 == formats[i].fourcc)
590                         continue;
591                 if (!jpeg_enable && ((formats[i].fourcc == V4L2_PIX_FMT_JPEG) ||
592                                      (formats[i].fourcc == V4L2_PIX_FMT_MJPEG)))
593                         continue;
594                 if (formats[i].fourcc == fourcc)
595                         return formats + i;
596         }
597         return NULL;
598 }
599
600 /* video buffer vmalloc implementation based partly on VIVI driver which is
601  *          Copyright (c) 2006 by
602  *                  Mauro Carvalho Chehab <mchehab--a.t--infradead.org>
603  *                  Ted Walther <ted--a.t--enumera.com>
604  *                  John Sokol <sokol--a.t--videotechnology.com>
605  *                  http://v4l.videotechnology.com/
606  *
607  */
608 static void s2255_fillbuff(struct s2255_vc *vc,
609                            struct s2255_buffer *buf, int jpgsize)
610 {
611         int pos = 0;
612         const char *tmpbuf;
613         char *vbuf = vb2_plane_vaddr(&buf->vb.vb2_buf, 0);
614         unsigned long last_frame;
615         struct s2255_dev *dev = vc->dev;
616
617         if (!vbuf)
618                 return;
619         last_frame = vc->last_frame;
620         if (last_frame != -1) {
621                 tmpbuf =
622                     (const char *)vc->buffer.frame[last_frame].lpvbits;
623                 switch (vc->fmt->fourcc) {
624                 case V4L2_PIX_FMT_YUYV:
625                 case V4L2_PIX_FMT_UYVY:
626                         planar422p_to_yuv_packed((const unsigned char *)tmpbuf,
627                                                  vbuf, vc->width,
628                                                  vc->height,
629                                                  vc->fmt->fourcc);
630                         break;
631                 case V4L2_PIX_FMT_GREY:
632                         memcpy(vbuf, tmpbuf, vc->width * vc->height);
633                         break;
634                 case V4L2_PIX_FMT_JPEG:
635                 case V4L2_PIX_FMT_MJPEG:
636                         vb2_set_plane_payload(&buf->vb.vb2_buf, 0, jpgsize);
637                         memcpy(vbuf, tmpbuf, jpgsize);
638                         break;
639                 case V4L2_PIX_FMT_YUV422P:
640                         memcpy(vbuf, tmpbuf,
641                                vc->width * vc->height * 2);
642                         break;
643                 default:
644                         pr_info("s2255: unknown format?\n");
645                 }
646                 vc->last_frame = -1;
647         } else {
648                 pr_err("s2255: =======no frame\n");
649                 return;
650         }
651         dprintk(dev, 2, "s2255fill at : Buffer %p size= %d\n",
652                 vbuf, pos);
653 }
654
655
656 /* ------------------------------------------------------------------
657    Videobuf operations
658    ------------------------------------------------------------------*/
659
660 static int queue_setup(struct vb2_queue *vq,
661                        unsigned int *nbuffers, unsigned int *nplanes,
662                        unsigned int sizes[], struct device *alloc_devs[])
663 {
664         struct s2255_vc *vc = vb2_get_drv_priv(vq);
665         if (*nbuffers < S2255_MIN_BUFS)
666                 *nbuffers = S2255_MIN_BUFS;
667         *nplanes = 1;
668         sizes[0] = vc->width * vc->height * (vc->fmt->depth >> 3);
669         return 0;
670 }
671
672 static int buffer_prepare(struct vb2_buffer *vb)
673 {
674         struct s2255_vc *vc = vb2_get_drv_priv(vb->vb2_queue);
675         struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
676         struct s2255_buffer *buf = container_of(vbuf, struct s2255_buffer, vb);
677         int w = vc->width;
678         int h = vc->height;
679         unsigned long size;
680
681         dprintk(vc->dev, 4, "%s\n", __func__);
682         if (vc->fmt == NULL)
683                 return -EINVAL;
684
685         if ((w < norm_minw(vc)) ||
686             (w > norm_maxw(vc)) ||
687             (h < norm_minh(vc)) ||
688             (h > norm_maxh(vc))) {
689                 dprintk(vc->dev, 4, "invalid buffer prepare\n");
690                 return -EINVAL;
691         }
692         size = w * h * (vc->fmt->depth >> 3);
693         if (vb2_plane_size(vb, 0) < size) {
694                 dprintk(vc->dev, 4, "invalid buffer prepare\n");
695                 return -EINVAL;
696         }
697
698         vb2_set_plane_payload(&buf->vb.vb2_buf, 0, size);
699         return 0;
700 }
701
702 static void buffer_queue(struct vb2_buffer *vb)
703 {
704         struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
705         struct s2255_buffer *buf = container_of(vbuf, struct s2255_buffer, vb);
706         struct s2255_vc *vc = vb2_get_drv_priv(vb->vb2_queue);
707         unsigned long flags = 0;
708         dprintk(vc->dev, 1, "%s\n", __func__);
709         spin_lock_irqsave(&vc->qlock, flags);
710         list_add_tail(&buf->list, &vc->buf_list);
711         spin_unlock_irqrestore(&vc->qlock, flags);
712 }
713
714 static int start_streaming(struct vb2_queue *vq, unsigned int count);
715 static void stop_streaming(struct vb2_queue *vq);
716
717 static const struct vb2_ops s2255_video_qops = {
718         .queue_setup = queue_setup,
719         .buf_prepare = buffer_prepare,
720         .buf_queue = buffer_queue,
721         .start_streaming = start_streaming,
722         .stop_streaming = stop_streaming,
723         .wait_prepare = vb2_ops_wait_prepare,
724         .wait_finish = vb2_ops_wait_finish,
725 };
726
727 static int vidioc_querycap(struct file *file, void *priv,
728                            struct v4l2_capability *cap)
729 {
730         struct s2255_vc *vc = video_drvdata(file);
731         struct s2255_dev *dev = vc->dev;
732
733         strscpy(cap->driver, "s2255", sizeof(cap->driver));
734         strscpy(cap->card, "s2255", sizeof(cap->card));
735         usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info));
736         cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING |
737                 V4L2_CAP_READWRITE;
738         cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
739         return 0;
740 }
741
742 static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv,
743                                struct v4l2_fmtdesc *f)
744 {
745         int index = f->index;
746
747         if (index >= ARRAY_SIZE(formats))
748                 return -EINVAL;
749         if (!jpeg_enable && ((formats[index].fourcc == V4L2_PIX_FMT_JPEG) ||
750                         (formats[index].fourcc == V4L2_PIX_FMT_MJPEG)))
751                 return -EINVAL;
752         strscpy(f->description, formats[index].name, sizeof(f->description));
753         f->pixelformat = formats[index].fourcc;
754         return 0;
755 }
756
757 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
758                             struct v4l2_format *f)
759 {
760         struct s2255_vc *vc = video_drvdata(file);
761         int is_ntsc = vc->std & V4L2_STD_525_60;
762
763         f->fmt.pix.width = vc->width;
764         f->fmt.pix.height = vc->height;
765         if (f->fmt.pix.height >=
766             (is_ntsc ? NUM_LINES_1CIFS_NTSC : NUM_LINES_1CIFS_PAL) * 2)
767                 f->fmt.pix.field = V4L2_FIELD_INTERLACED;
768         else
769                 f->fmt.pix.field = V4L2_FIELD_TOP;
770         f->fmt.pix.pixelformat = vc->fmt->fourcc;
771         f->fmt.pix.bytesperline = f->fmt.pix.width * (vc->fmt->depth >> 3);
772         f->fmt.pix.sizeimage = f->fmt.pix.height * f->fmt.pix.bytesperline;
773         f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
774         f->fmt.pix.priv = 0;
775         return 0;
776 }
777
778 static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
779                               struct v4l2_format *f)
780 {
781         const struct s2255_fmt *fmt;
782         enum v4l2_field field;
783         struct s2255_vc *vc = video_drvdata(file);
784         int is_ntsc = vc->std & V4L2_STD_525_60;
785
786         fmt = format_by_fourcc(f->fmt.pix.pixelformat);
787
788         if (fmt == NULL)
789                 return -EINVAL;
790
791         field = f->fmt.pix.field;
792
793         dprintk(vc->dev, 50, "%s NTSC: %d suggested width: %d, height: %d\n",
794                 __func__, is_ntsc, f->fmt.pix.width, f->fmt.pix.height);
795         if (is_ntsc) {
796                 /* NTSC */
797                 if (f->fmt.pix.height >= NUM_LINES_1CIFS_NTSC * 2) {
798                         f->fmt.pix.height = NUM_LINES_1CIFS_NTSC * 2;
799                         field = V4L2_FIELD_INTERLACED;
800                 } else {
801                         f->fmt.pix.height = NUM_LINES_1CIFS_NTSC;
802                         field = V4L2_FIELD_TOP;
803                 }
804                 if (f->fmt.pix.width >= LINE_SZ_4CIFS_NTSC)
805                         f->fmt.pix.width = LINE_SZ_4CIFS_NTSC;
806                 else
807                         f->fmt.pix.width = LINE_SZ_1CIFS_NTSC;
808         } else {
809                 /* PAL */
810                 if (f->fmt.pix.height >= NUM_LINES_1CIFS_PAL * 2) {
811                         f->fmt.pix.height = NUM_LINES_1CIFS_PAL * 2;
812                         field = V4L2_FIELD_INTERLACED;
813                 } else {
814                         f->fmt.pix.height = NUM_LINES_1CIFS_PAL;
815                         field = V4L2_FIELD_TOP;
816                 }
817                 if (f->fmt.pix.width >= LINE_SZ_4CIFS_PAL)
818                         f->fmt.pix.width = LINE_SZ_4CIFS_PAL;
819                 else
820                         f->fmt.pix.width = LINE_SZ_1CIFS_PAL;
821         }
822         f->fmt.pix.field = field;
823         f->fmt.pix.bytesperline = (f->fmt.pix.width * fmt->depth) >> 3;
824         f->fmt.pix.sizeimage = f->fmt.pix.height * f->fmt.pix.bytesperline;
825         f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
826         f->fmt.pix.priv = 0;
827         dprintk(vc->dev, 50, "%s: set width %d height %d field %d\n", __func__,
828                 f->fmt.pix.width, f->fmt.pix.height, f->fmt.pix.field);
829         return 0;
830 }
831
832 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
833                             struct v4l2_format *f)
834 {
835         struct s2255_vc *vc = video_drvdata(file);
836         const struct s2255_fmt *fmt;
837         struct vb2_queue *q = &vc->vb_vidq;
838         struct s2255_mode mode;
839         int ret;
840
841         ret = vidioc_try_fmt_vid_cap(file, vc, f);
842
843         if (ret < 0)
844                 return ret;
845
846         fmt = format_by_fourcc(f->fmt.pix.pixelformat);
847
848         if (fmt == NULL)
849                 return -EINVAL;
850
851         if (vb2_is_busy(q)) {
852                 dprintk(vc->dev, 1, "queue busy\n");
853                 return -EBUSY;
854         }
855
856         mode = vc->mode;
857         vc->fmt = fmt;
858         vc->width = f->fmt.pix.width;
859         vc->height = f->fmt.pix.height;
860         vc->field = f->fmt.pix.field;
861         if (vc->width > norm_minw(vc)) {
862                 if (vc->height > norm_minh(vc)) {
863                         if (vc->cap_parm.capturemode &
864                             V4L2_MODE_HIGHQUALITY)
865                                 mode.scale = SCALE_4CIFSI;
866                         else
867                                 mode.scale = SCALE_4CIFS;
868                 } else
869                         mode.scale = SCALE_2CIFS;
870
871         } else {
872                 mode.scale = SCALE_1CIFS;
873         }
874         /* color mode */
875         switch (vc->fmt->fourcc) {
876         case V4L2_PIX_FMT_GREY:
877                 mode.color &= ~MASK_COLOR;
878                 mode.color |= COLOR_Y8;
879                 break;
880         case V4L2_PIX_FMT_JPEG:
881         case V4L2_PIX_FMT_MJPEG:
882                 mode.color &= ~MASK_COLOR;
883                 mode.color |= COLOR_JPG;
884                 mode.color |= (vc->jpegqual << 8);
885                 break;
886         case V4L2_PIX_FMT_YUV422P:
887                 mode.color &= ~MASK_COLOR;
888                 mode.color |= COLOR_YUVPL;
889                 break;
890         case V4L2_PIX_FMT_YUYV:
891         case V4L2_PIX_FMT_UYVY:
892         default:
893                 mode.color &= ~MASK_COLOR;
894                 mode.color |= COLOR_YUVPK;
895                 break;
896         }
897         if ((mode.color & MASK_COLOR) != (vc->mode.color & MASK_COLOR))
898                 mode.restart = 1;
899         else if (mode.scale != vc->mode.scale)
900                 mode.restart = 1;
901         else if (mode.format != vc->mode.format)
902                 mode.restart = 1;
903         vc->mode = mode;
904         (void) s2255_set_mode(vc, &mode);
905         return 0;
906 }
907
908
909 /* write to the configuration pipe, synchronously */
910 static int s2255_write_config(struct usb_device *udev, unsigned char *pbuf,
911                               int size)
912 {
913         int pipe;
914         int done;
915         long retval = -1;
916         if (udev) {
917                 pipe = usb_sndbulkpipe(udev, S2255_CONFIG_EP);
918                 retval = usb_bulk_msg(udev, pipe, pbuf, size, &done, 500);
919         }
920         return retval;
921 }
922
923 static u32 get_transfer_size(struct s2255_mode *mode)
924 {
925         int linesPerFrame = LINE_SZ_DEF;
926         int pixelsPerLine = NUM_LINES_DEF;
927         u32 outImageSize;
928         u32 usbInSize;
929         unsigned int mask_mult;
930
931         if (mode == NULL)
932                 return 0;
933
934         if (mode->format == FORMAT_NTSC) {
935                 switch (mode->scale) {
936                 case SCALE_4CIFS:
937                 case SCALE_4CIFSI:
938                         linesPerFrame = NUM_LINES_4CIFS_NTSC * 2;
939                         pixelsPerLine = LINE_SZ_4CIFS_NTSC;
940                         break;
941                 case SCALE_2CIFS:
942                         linesPerFrame = NUM_LINES_2CIFS_NTSC;
943                         pixelsPerLine = LINE_SZ_2CIFS_NTSC;
944                         break;
945                 case SCALE_1CIFS:
946                         linesPerFrame = NUM_LINES_1CIFS_NTSC;
947                         pixelsPerLine = LINE_SZ_1CIFS_NTSC;
948                         break;
949                 default:
950                         break;
951                 }
952         } else if (mode->format == FORMAT_PAL) {
953                 switch (mode->scale) {
954                 case SCALE_4CIFS:
955                 case SCALE_4CIFSI:
956                         linesPerFrame = NUM_LINES_4CIFS_PAL * 2;
957                         pixelsPerLine = LINE_SZ_4CIFS_PAL;
958                         break;
959                 case SCALE_2CIFS:
960                         linesPerFrame = NUM_LINES_2CIFS_PAL;
961                         pixelsPerLine = LINE_SZ_2CIFS_PAL;
962                         break;
963                 case SCALE_1CIFS:
964                         linesPerFrame = NUM_LINES_1CIFS_PAL;
965                         pixelsPerLine = LINE_SZ_1CIFS_PAL;
966                         break;
967                 default:
968                         break;
969                 }
970         }
971         outImageSize = linesPerFrame * pixelsPerLine;
972         if ((mode->color & MASK_COLOR) != COLOR_Y8) {
973                 /* 2 bytes/pixel if not monochrome */
974                 outImageSize *= 2;
975         }
976
977         /* total bytes to send including prefix and 4K padding;
978            must be a multiple of USB_READ_SIZE */
979         usbInSize = outImageSize + PREFIX_SIZE; /* always send prefix */
980         mask_mult = 0xffffffffUL - DEF_USB_BLOCK + 1;
981         /* if size not a multiple of USB_READ_SIZE */
982         if (usbInSize & ~mask_mult)
983                 usbInSize = (usbInSize & mask_mult) + (DEF_USB_BLOCK);
984         return usbInSize;
985 }
986
987 static void s2255_print_cfg(struct s2255_dev *sdev, struct s2255_mode *mode)
988 {
989         struct device *dev = &sdev->udev->dev;
990         dev_info(dev, "------------------------------------------------\n");
991         dev_info(dev, "format: %d\nscale %d\n", mode->format, mode->scale);
992         dev_info(dev, "fdec: %d\ncolor %d\n", mode->fdec, mode->color);
993         dev_info(dev, "bright: 0x%x\n", mode->bright);
994         dev_info(dev, "------------------------------------------------\n");
995 }
996
997 /*
998  * set mode is the function which controls the DSP.
999  * the restart parameter in struct s2255_mode should be set whenever
1000  * the image size could change via color format, video system or image
1001  * size.
1002  * When the restart parameter is set, we sleep for ONE frame to allow the
1003  * DSP time to get the new frame
1004  */
1005 static int s2255_set_mode(struct s2255_vc *vc,
1006                           struct s2255_mode *mode)
1007 {
1008         int res;
1009         unsigned long chn_rev;
1010         struct s2255_dev *dev = to_s2255_dev(vc->vdev.v4l2_dev);
1011         int i;
1012         __le32 *buffer = dev->cmdbuf;
1013
1014         mutex_lock(&dev->cmdlock);
1015         chn_rev = G_chnmap[vc->idx];
1016         dprintk(dev, 3, "%s channel: %d\n", __func__, vc->idx);
1017         /* if JPEG, set the quality */
1018         if ((mode->color & MASK_COLOR) == COLOR_JPG) {
1019                 mode->color &= ~MASK_COLOR;
1020                 mode->color |= COLOR_JPG;
1021                 mode->color &= ~MASK_JPG_QUALITY;
1022                 mode->color |= (vc->jpegqual << 8);
1023         }
1024         /* save the mode */
1025         vc->mode = *mode;
1026         vc->req_image_size = get_transfer_size(mode);
1027         dprintk(dev, 1, "%s: reqsize %ld\n", __func__, vc->req_image_size);
1028         /* set the mode */
1029         buffer[0] = IN_DATA_TOKEN;
1030         buffer[1] = (__le32) cpu_to_le32(chn_rev);
1031         buffer[2] = CMD_SET_MODE;
1032         for (i = 0; i < sizeof(struct s2255_mode) / sizeof(u32); i++)
1033                 buffer[3 + i] = cpu_to_le32(((u32 *)&vc->mode)[i]);
1034         vc->setmode_ready = 0;
1035         res = s2255_write_config(dev->udev, (unsigned char *)buffer, 512);
1036         if (debug)
1037                 s2255_print_cfg(dev, mode);
1038         /* wait at least 3 frames before continuing */
1039         if (mode->restart) {
1040                 wait_event_timeout(vc->wait_setmode,
1041                                    (vc->setmode_ready != 0),
1042                                    msecs_to_jiffies(S2255_SETMODE_TIMEOUT));
1043                 if (vc->setmode_ready != 1) {
1044                         dprintk(dev, 0, "s2255: no set mode response\n");
1045                         res = -EFAULT;
1046                 }
1047         }
1048         /* clear the restart flag */
1049         vc->mode.restart = 0;
1050         dprintk(dev, 1, "%s chn %d, result: %d\n", __func__, vc->idx, res);
1051         mutex_unlock(&dev->cmdlock);
1052         return res;
1053 }
1054
1055 static int s2255_cmd_status(struct s2255_vc *vc, u32 *pstatus)
1056 {
1057         int res;
1058         u32 chn_rev;
1059         struct s2255_dev *dev = to_s2255_dev(vc->vdev.v4l2_dev);
1060         __le32 *buffer = dev->cmdbuf;
1061
1062         mutex_lock(&dev->cmdlock);
1063         chn_rev = G_chnmap[vc->idx];
1064         dprintk(dev, 4, "%s chan %d\n", __func__, vc->idx);
1065         /* form the get vid status command */
1066         buffer[0] = IN_DATA_TOKEN;
1067         buffer[1] = (__le32) cpu_to_le32(chn_rev);
1068         buffer[2] = CMD_STATUS;
1069         *pstatus = 0;
1070         vc->vidstatus_ready = 0;
1071         res = s2255_write_config(dev->udev, (unsigned char *)buffer, 512);
1072         wait_event_timeout(vc->wait_vidstatus,
1073                            (vc->vidstatus_ready != 0),
1074                            msecs_to_jiffies(S2255_VIDSTATUS_TIMEOUT));
1075         if (vc->vidstatus_ready != 1) {
1076                 dprintk(dev, 0, "s2255: no vidstatus response\n");
1077                 res = -EFAULT;
1078         }
1079         *pstatus = vc->vidstatus;
1080         dprintk(dev, 4, "%s, vid status %d\n", __func__, *pstatus);
1081         mutex_unlock(&dev->cmdlock);
1082         return res;
1083 }
1084
1085 static int start_streaming(struct vb2_queue *vq, unsigned int count)
1086 {
1087         struct s2255_vc *vc = vb2_get_drv_priv(vq);
1088         int j;
1089
1090         vc->last_frame = -1;
1091         vc->bad_payload = 0;
1092         vc->cur_frame = 0;
1093         vc->frame_count = 0;
1094         for (j = 0; j < SYS_FRAMES; j++) {
1095                 vc->buffer.frame[j].ulState = S2255_READ_IDLE;
1096                 vc->buffer.frame[j].cur_size = 0;
1097         }
1098         return s2255_start_acquire(vc);
1099 }
1100
1101 /* abort streaming and wait for last buffer */
1102 static void stop_streaming(struct vb2_queue *vq)
1103 {
1104         struct s2255_vc *vc = vb2_get_drv_priv(vq);
1105         struct s2255_buffer *buf, *node;
1106         unsigned long flags;
1107         (void) s2255_stop_acquire(vc);
1108         spin_lock_irqsave(&vc->qlock, flags);
1109         list_for_each_entry_safe(buf, node, &vc->buf_list, list) {
1110                 list_del(&buf->list);
1111                 vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
1112                 dprintk(vc->dev, 2, "[%p/%d] done\n",
1113                         buf, buf->vb.vb2_buf.index);
1114         }
1115         spin_unlock_irqrestore(&vc->qlock, flags);
1116 }
1117
1118 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id i)
1119 {
1120         struct s2255_vc *vc = video_drvdata(file);
1121         struct s2255_mode mode;
1122         struct vb2_queue *q = &vc->vb_vidq;
1123
1124         /*
1125          * Changing the standard implies a format change, which is not allowed
1126          * while buffers for use with streaming have already been allocated.
1127          */
1128         if (vb2_is_busy(q))
1129                 return -EBUSY;
1130
1131         mode = vc->mode;
1132         if (i & V4L2_STD_525_60) {
1133                 dprintk(vc->dev, 4, "%s 60 Hz\n", __func__);
1134                 /* if changing format, reset frame decimation/intervals */
1135                 if (mode.format != FORMAT_NTSC) {
1136                         mode.restart = 1;
1137                         mode.format = FORMAT_NTSC;
1138                         mode.fdec = FDEC_1;
1139                         vc->width = LINE_SZ_4CIFS_NTSC;
1140                         vc->height = NUM_LINES_4CIFS_NTSC * 2;
1141                 }
1142         } else if (i & V4L2_STD_625_50) {
1143                 dprintk(vc->dev, 4, "%s 50 Hz\n", __func__);
1144                 if (mode.format != FORMAT_PAL) {
1145                         mode.restart = 1;
1146                         mode.format = FORMAT_PAL;
1147                         mode.fdec = FDEC_1;
1148                         vc->width = LINE_SZ_4CIFS_PAL;
1149                         vc->height = NUM_LINES_4CIFS_PAL * 2;
1150                 }
1151         } else
1152                 return -EINVAL;
1153         vc->std = i;
1154         if (mode.restart)
1155                 s2255_set_mode(vc, &mode);
1156         return 0;
1157 }
1158
1159 static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *i)
1160 {
1161         struct s2255_vc *vc = video_drvdata(file);
1162
1163         *i = vc->std;
1164         return 0;
1165 }
1166
1167 /* Sensoray 2255 is a multiple channel capture device.
1168    It does not have a "crossbar" of inputs.
1169    We use one V4L device per channel. The user must
1170    be aware that certain combinations are not allowed.
1171    For instance, you cannot do full FPS on more than 2 channels(2 videodevs)
1172    at once in color(you can do full fps on 4 channels with greyscale.
1173 */
1174 static int vidioc_enum_input(struct file *file, void *priv,
1175                              struct v4l2_input *inp)
1176 {
1177         struct s2255_vc *vc = video_drvdata(file);
1178         struct s2255_dev *dev = vc->dev;
1179         u32 status = 0;
1180
1181         if (inp->index != 0)
1182                 return -EINVAL;
1183         inp->type = V4L2_INPUT_TYPE_CAMERA;
1184         inp->std = S2255_NORMS;
1185         inp->status = 0;
1186         if (dev->dsp_fw_ver >= S2255_MIN_DSP_STATUS) {
1187                 int rc;
1188                 rc = s2255_cmd_status(vc, &status);
1189                 dprintk(dev, 4, "s2255_cmd_status rc: %d status %x\n",
1190                         rc, status);
1191                 if (rc == 0)
1192                         inp->status =  (status & 0x01) ? 0
1193                                 : V4L2_IN_ST_NO_SIGNAL;
1194         }
1195         switch (dev->pid) {
1196         case 0x2255:
1197         default:
1198                 strscpy(inp->name, "Composite", sizeof(inp->name));
1199                 break;
1200         case 0x2257:
1201                 strscpy(inp->name, (vc->idx < 2) ? "Composite" : "S-Video",
1202                         sizeof(inp->name));
1203                 break;
1204         }
1205         return 0;
1206 }
1207
1208 static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1209 {
1210         *i = 0;
1211         return 0;
1212 }
1213 static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
1214 {
1215         if (i > 0)
1216                 return -EINVAL;
1217         return 0;
1218 }
1219
1220 static int s2255_s_ctrl(struct v4l2_ctrl *ctrl)
1221 {
1222         struct s2255_vc *vc =
1223                 container_of(ctrl->handler, struct s2255_vc, hdl);
1224         struct s2255_mode mode;
1225         mode = vc->mode;
1226         /* update the mode to the corresponding value */
1227         switch (ctrl->id) {
1228         case V4L2_CID_BRIGHTNESS:
1229                 mode.bright = ctrl->val;
1230                 break;
1231         case V4L2_CID_CONTRAST:
1232                 mode.contrast = ctrl->val;
1233                 break;
1234         case V4L2_CID_HUE:
1235                 mode.hue = ctrl->val;
1236                 break;
1237         case V4L2_CID_SATURATION:
1238                 mode.saturation = ctrl->val;
1239                 break;
1240         case V4L2_CID_S2255_COLORFILTER:
1241                 mode.color &= ~MASK_INPUT_TYPE;
1242                 mode.color |= !ctrl->val << 16;
1243                 break;
1244         case V4L2_CID_JPEG_COMPRESSION_QUALITY:
1245                 vc->jpegqual = ctrl->val;
1246                 return 0;
1247         default:
1248                 return -EINVAL;
1249         }
1250         mode.restart = 0;
1251         /* set mode here.  Note: stream does not need restarted.
1252            some V4L programs restart stream unnecessarily
1253            after a s_crtl.
1254         */
1255         s2255_set_mode(vc, &mode);
1256         return 0;
1257 }
1258
1259 static int vidioc_g_jpegcomp(struct file *file, void *priv,
1260                          struct v4l2_jpegcompression *jc)
1261 {
1262         struct s2255_vc *vc = video_drvdata(file);
1263
1264         memset(jc, 0, sizeof(*jc));
1265         jc->quality = vc->jpegqual;
1266         dprintk(vc->dev, 2, "%s: quality %d\n", __func__, jc->quality);
1267         return 0;
1268 }
1269
1270 static int vidioc_s_jpegcomp(struct file *file, void *priv,
1271                          const struct v4l2_jpegcompression *jc)
1272 {
1273         struct s2255_vc *vc = video_drvdata(file);
1274
1275         if (jc->quality < 0 || jc->quality > 100)
1276                 return -EINVAL;
1277         v4l2_ctrl_s_ctrl(vc->jpegqual_ctrl, jc->quality);
1278         dprintk(vc->dev, 2, "%s: quality %d\n", __func__, jc->quality);
1279         return 0;
1280 }
1281
1282 static int vidioc_g_parm(struct file *file, void *priv,
1283                          struct v4l2_streamparm *sp)
1284 {
1285         __u32 def_num, def_dem;
1286         struct s2255_vc *vc = video_drvdata(file);
1287
1288         if (sp->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1289                 return -EINVAL;
1290         sp->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
1291         sp->parm.capture.capturemode = vc->cap_parm.capturemode;
1292         sp->parm.capture.readbuffers = S2255_MIN_BUFS;
1293         def_num = (vc->mode.format == FORMAT_NTSC) ? 1001 : 1000;
1294         def_dem = (vc->mode.format == FORMAT_NTSC) ? 30000 : 25000;
1295         sp->parm.capture.timeperframe.denominator = def_dem;
1296         switch (vc->mode.fdec) {
1297         default:
1298         case FDEC_1:
1299                 sp->parm.capture.timeperframe.numerator = def_num;
1300                 break;
1301         case FDEC_2:
1302                 sp->parm.capture.timeperframe.numerator = def_num * 2;
1303                 break;
1304         case FDEC_3:
1305                 sp->parm.capture.timeperframe.numerator = def_num * 3;
1306                 break;
1307         case FDEC_5:
1308                 sp->parm.capture.timeperframe.numerator = def_num * 5;
1309                 break;
1310         }
1311         dprintk(vc->dev, 4, "%s capture mode, %d timeperframe %d/%d\n",
1312                 __func__,
1313                 sp->parm.capture.capturemode,
1314                 sp->parm.capture.timeperframe.numerator,
1315                 sp->parm.capture.timeperframe.denominator);
1316         return 0;
1317 }
1318
1319 static int vidioc_s_parm(struct file *file, void *priv,
1320                          struct v4l2_streamparm *sp)
1321 {
1322         struct s2255_vc *vc = video_drvdata(file);
1323         struct s2255_mode mode;
1324         int fdec = FDEC_1;
1325         __u32 def_num, def_dem;
1326         if (sp->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1327                 return -EINVAL;
1328         mode = vc->mode;
1329         /* high quality capture mode requires a stream restart */
1330         if ((vc->cap_parm.capturemode != sp->parm.capture.capturemode)
1331             && vb2_is_streaming(&vc->vb_vidq))
1332                 return -EBUSY;
1333         def_num = (mode.format == FORMAT_NTSC) ? 1001 : 1000;
1334         def_dem = (mode.format == FORMAT_NTSC) ? 30000 : 25000;
1335         if (def_dem != sp->parm.capture.timeperframe.denominator)
1336                 sp->parm.capture.timeperframe.numerator = def_num;
1337         else if (sp->parm.capture.timeperframe.numerator <= def_num)
1338                 sp->parm.capture.timeperframe.numerator = def_num;
1339         else if (sp->parm.capture.timeperframe.numerator <= (def_num * 2)) {
1340                 sp->parm.capture.timeperframe.numerator = def_num * 2;
1341                 fdec = FDEC_2;
1342         } else if (sp->parm.capture.timeperframe.numerator <= (def_num * 3)) {
1343                 sp->parm.capture.timeperframe.numerator = def_num * 3;
1344                 fdec = FDEC_3;
1345         } else {
1346                 sp->parm.capture.timeperframe.numerator = def_num * 5;
1347                 fdec = FDEC_5;
1348         }
1349         mode.fdec = fdec;
1350         sp->parm.capture.timeperframe.denominator = def_dem;
1351         sp->parm.capture.readbuffers = S2255_MIN_BUFS;
1352         s2255_set_mode(vc, &mode);
1353         dprintk(vc->dev, 4, "%s capture mode, %d timeperframe %d/%d, fdec %d\n",
1354                 __func__,
1355                 sp->parm.capture.capturemode,
1356                 sp->parm.capture.timeperframe.numerator,
1357                 sp->parm.capture.timeperframe.denominator, fdec);
1358         return 0;
1359 }
1360
1361 #define NUM_SIZE_ENUMS 3
1362 static const struct v4l2_frmsize_discrete ntsc_sizes[] = {
1363         { 640, 480 },
1364         { 640, 240 },
1365         { 320, 240 },
1366 };
1367 static const struct v4l2_frmsize_discrete pal_sizes[] = {
1368         { 704, 576 },
1369         { 704, 288 },
1370         { 352, 288 },
1371 };
1372
1373 static int vidioc_enum_framesizes(struct file *file, void *priv,
1374                             struct v4l2_frmsizeenum *fe)
1375 {
1376         struct s2255_vc *vc = video_drvdata(file);
1377         int is_ntsc = vc->std & V4L2_STD_525_60;
1378         const struct s2255_fmt *fmt;
1379
1380         if (fe->index >= NUM_SIZE_ENUMS)
1381                 return -EINVAL;
1382
1383         fmt = format_by_fourcc(fe->pixel_format);
1384         if (fmt == NULL)
1385                 return -EINVAL;
1386         fe->type = V4L2_FRMSIZE_TYPE_DISCRETE;
1387         fe->discrete = is_ntsc ?  ntsc_sizes[fe->index] : pal_sizes[fe->index];
1388         return 0;
1389 }
1390
1391 static int vidioc_enum_frameintervals(struct file *file, void *priv,
1392                             struct v4l2_frmivalenum *fe)
1393 {
1394         struct s2255_vc *vc = video_drvdata(file);
1395         const struct s2255_fmt *fmt;
1396         const struct v4l2_frmsize_discrete *sizes;
1397         int is_ntsc = vc->std & V4L2_STD_525_60;
1398 #define NUM_FRAME_ENUMS 4
1399         int frm_dec[NUM_FRAME_ENUMS] = {1, 2, 3, 5};
1400         int i;
1401
1402         if (fe->index >= NUM_FRAME_ENUMS)
1403                 return -EINVAL;
1404
1405         fmt = format_by_fourcc(fe->pixel_format);
1406         if (fmt == NULL)
1407                 return -EINVAL;
1408
1409         sizes = is_ntsc ? ntsc_sizes : pal_sizes;
1410         for (i = 0; i < NUM_SIZE_ENUMS; i++, sizes++)
1411                 if (fe->width == sizes->width &&
1412                     fe->height == sizes->height)
1413                         break;
1414         if (i == NUM_SIZE_ENUMS)
1415                 return -EINVAL;
1416
1417         fe->type = V4L2_FRMIVAL_TYPE_DISCRETE;
1418         fe->discrete.denominator = is_ntsc ? 30000 : 25000;
1419         fe->discrete.numerator = (is_ntsc ? 1001 : 1000) * frm_dec[fe->index];
1420         dprintk(vc->dev, 4, "%s discrete %d/%d\n", __func__,
1421                 fe->discrete.numerator,
1422                 fe->discrete.denominator);
1423         return 0;
1424 }
1425
1426 static int s2255_open(struct file *file)
1427 {
1428         struct s2255_vc *vc = video_drvdata(file);
1429         struct s2255_dev *dev = vc->dev;
1430         int state;
1431         int rc = 0;
1432
1433         rc = v4l2_fh_open(file);
1434         if (rc != 0)
1435                 return rc;
1436
1437         dprintk(dev, 1, "s2255: %s\n", __func__);
1438         state = atomic_read(&dev->fw_data->fw_state);
1439         switch (state) {
1440         case S2255_FW_DISCONNECTING:
1441                 return -ENODEV;
1442         case S2255_FW_FAILED:
1443                 s2255_dev_err(&dev->udev->dev,
1444                         "firmware load failed. retrying.\n");
1445                 s2255_fwload_start(dev);
1446                 wait_event_timeout(dev->fw_data->wait_fw,
1447                                    ((atomic_read(&dev->fw_data->fw_state)
1448                                      == S2255_FW_SUCCESS) ||
1449                                     (atomic_read(&dev->fw_data->fw_state)
1450                                      == S2255_FW_DISCONNECTING)),
1451                                    msecs_to_jiffies(S2255_LOAD_TIMEOUT));
1452                 /* state may have changed, re-read */
1453                 state = atomic_read(&dev->fw_data->fw_state);
1454                 break;
1455         case S2255_FW_NOTLOADED:
1456         case S2255_FW_LOADED_DSPWAIT:
1457                 /* give S2255_LOAD_TIMEOUT time for firmware to load in case
1458                    driver loaded and then device immediately opened */
1459                 pr_info("%s waiting for firmware load\n", __func__);
1460                 wait_event_timeout(dev->fw_data->wait_fw,
1461                                    ((atomic_read(&dev->fw_data->fw_state)
1462                                      == S2255_FW_SUCCESS) ||
1463                                     (atomic_read(&dev->fw_data->fw_state)
1464                                      == S2255_FW_DISCONNECTING)),
1465                                    msecs_to_jiffies(S2255_LOAD_TIMEOUT));
1466                 /* state may have changed, re-read */
1467                 state = atomic_read(&dev->fw_data->fw_state);
1468                 break;
1469         case S2255_FW_SUCCESS:
1470         default:
1471                 break;
1472         }
1473         /* state may have changed in above switch statement */
1474         switch (state) {
1475         case S2255_FW_SUCCESS:
1476                 break;
1477         case S2255_FW_FAILED:
1478                 pr_info("2255 firmware load failed.\n");
1479                 return -ENODEV;
1480         case S2255_FW_DISCONNECTING:
1481                 pr_info("%s: disconnecting\n", __func__);
1482                 return -ENODEV;
1483         case S2255_FW_LOADED_DSPWAIT:
1484         case S2255_FW_NOTLOADED:
1485                 pr_info("%s: firmware not loaded, please retry\n",
1486                         __func__);
1487                 /*
1488                  * Timeout on firmware load means device unusable.
1489                  * Set firmware failure state.
1490                  * On next s2255_open the firmware will be reloaded.
1491                  */
1492                 atomic_set(&dev->fw_data->fw_state,
1493                            S2255_FW_FAILED);
1494                 return -EAGAIN;
1495         default:
1496                 pr_info("%s: unknown state\n", __func__);
1497                 return -EFAULT;
1498         }
1499         if (!vc->configured) {
1500                 /* configure channel to default state */
1501                 vc->fmt = &formats[0];
1502                 s2255_set_mode(vc, &vc->mode);
1503                 vc->configured = 1;
1504         }
1505         return 0;
1506 }
1507
1508 static void s2255_destroy(struct s2255_dev *dev)
1509 {
1510         dprintk(dev, 1, "%s", __func__);
1511         /* board shutdown stops the read pipe if it is running */
1512         s2255_board_shutdown(dev);
1513         /* make sure firmware still not trying to load */
1514         del_timer_sync(&dev->timer);  /* only started in .probe and .open */
1515         if (dev->fw_data->fw_urb) {
1516                 usb_kill_urb(dev->fw_data->fw_urb);
1517                 usb_free_urb(dev->fw_data->fw_urb);
1518                 dev->fw_data->fw_urb = NULL;
1519         }
1520         release_firmware(dev->fw_data->fw);
1521         kfree(dev->fw_data->pfw_data);
1522         kfree(dev->fw_data);
1523         /* reset the DSP so firmware can be reloaded next time */
1524         s2255_reset_dsppower(dev);
1525         mutex_destroy(&dev->lock);
1526         usb_put_dev(dev->udev);
1527         v4l2_device_unregister(&dev->v4l2_dev);
1528         kfree(dev->cmdbuf);
1529         kfree(dev);
1530 }
1531
1532 static const struct v4l2_file_operations s2255_fops_v4l = {
1533         .owner = THIS_MODULE,
1534         .open = s2255_open,
1535         .release = vb2_fop_release,
1536         .poll = vb2_fop_poll,
1537         .unlocked_ioctl = video_ioctl2, /* V4L2 ioctl handler */
1538         .mmap = vb2_fop_mmap,
1539         .read = vb2_fop_read,
1540 };
1541
1542 static const struct v4l2_ioctl_ops s2255_ioctl_ops = {
1543         .vidioc_querycap = vidioc_querycap,
1544         .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap,
1545         .vidioc_g_fmt_vid_cap = vidioc_g_fmt_vid_cap,
1546         .vidioc_try_fmt_vid_cap = vidioc_try_fmt_vid_cap,
1547         .vidioc_s_fmt_vid_cap = vidioc_s_fmt_vid_cap,
1548         .vidioc_reqbufs = vb2_ioctl_reqbufs,
1549         .vidioc_querybuf = vb2_ioctl_querybuf,
1550         .vidioc_qbuf = vb2_ioctl_qbuf,
1551         .vidioc_dqbuf = vb2_ioctl_dqbuf,
1552         .vidioc_s_std = vidioc_s_std,
1553         .vidioc_g_std = vidioc_g_std,
1554         .vidioc_enum_input = vidioc_enum_input,
1555         .vidioc_g_input = vidioc_g_input,
1556         .vidioc_s_input = vidioc_s_input,
1557         .vidioc_streamon = vb2_ioctl_streamon,
1558         .vidioc_streamoff = vb2_ioctl_streamoff,
1559         .vidioc_s_jpegcomp = vidioc_s_jpegcomp,
1560         .vidioc_g_jpegcomp = vidioc_g_jpegcomp,
1561         .vidioc_s_parm = vidioc_s_parm,
1562         .vidioc_g_parm = vidioc_g_parm,
1563         .vidioc_enum_framesizes = vidioc_enum_framesizes,
1564         .vidioc_enum_frameintervals = vidioc_enum_frameintervals,
1565         .vidioc_log_status  = v4l2_ctrl_log_status,
1566         .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
1567         .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
1568 };
1569
1570 static void s2255_video_device_release(struct video_device *vdev)
1571 {
1572         struct s2255_dev *dev = to_s2255_dev(vdev->v4l2_dev);
1573         struct s2255_vc *vc =
1574                 container_of(vdev, struct s2255_vc, vdev);
1575
1576         dprintk(dev, 4, "%s, chnls: %d\n", __func__,
1577                 atomic_read(&dev->num_channels));
1578
1579         v4l2_ctrl_handler_free(&vc->hdl);
1580
1581         if (atomic_dec_and_test(&dev->num_channels))
1582                 s2255_destroy(dev);
1583         return;
1584 }
1585
1586 static const struct video_device template = {
1587         .name = "s2255v",
1588         .fops = &s2255_fops_v4l,
1589         .ioctl_ops = &s2255_ioctl_ops,
1590         .release = s2255_video_device_release,
1591         .tvnorms = S2255_NORMS,
1592 };
1593
1594 static const struct v4l2_ctrl_ops s2255_ctrl_ops = {
1595         .s_ctrl = s2255_s_ctrl,
1596 };
1597
1598 static const struct v4l2_ctrl_config color_filter_ctrl = {
1599         .ops = &s2255_ctrl_ops,
1600         .name = "Color Filter",
1601         .id = V4L2_CID_S2255_COLORFILTER,
1602         .type = V4L2_CTRL_TYPE_BOOLEAN,
1603         .max = 1,
1604         .step = 1,
1605         .def = 1,
1606 };
1607
1608 static int s2255_probe_v4l(struct s2255_dev *dev)
1609 {
1610         int ret;
1611         int i;
1612         int cur_nr = video_nr;
1613         struct s2255_vc *vc;
1614         struct vb2_queue *q;
1615
1616         ret = v4l2_device_register(&dev->interface->dev, &dev->v4l2_dev);
1617         if (ret)
1618                 return ret;
1619         /* initialize all video 4 linux */
1620         /* register 4 video devices */
1621         for (i = 0; i < MAX_CHANNELS; i++) {
1622                 vc = &dev->vc[i];
1623                 INIT_LIST_HEAD(&vc->buf_list);
1624
1625                 v4l2_ctrl_handler_init(&vc->hdl, 6);
1626                 v4l2_ctrl_new_std(&vc->hdl, &s2255_ctrl_ops,
1627                                 V4L2_CID_BRIGHTNESS, -127, 127, 1, DEF_BRIGHT);
1628                 v4l2_ctrl_new_std(&vc->hdl, &s2255_ctrl_ops,
1629                                 V4L2_CID_CONTRAST, 0, 255, 1, DEF_CONTRAST);
1630                 v4l2_ctrl_new_std(&vc->hdl, &s2255_ctrl_ops,
1631                                 V4L2_CID_SATURATION, 0, 255, 1, DEF_SATURATION);
1632                 v4l2_ctrl_new_std(&vc->hdl, &s2255_ctrl_ops,
1633                                 V4L2_CID_HUE, 0, 255, 1, DEF_HUE);
1634                 vc->jpegqual_ctrl = v4l2_ctrl_new_std(&vc->hdl,
1635                                 &s2255_ctrl_ops,
1636                                 V4L2_CID_JPEG_COMPRESSION_QUALITY,
1637                                 0, 100, 1, S2255_DEF_JPEG_QUAL);
1638                 if (dev->dsp_fw_ver >= S2255_MIN_DSP_COLORFILTER &&
1639                     (dev->pid != 0x2257 || vc->idx <= 1))
1640                         v4l2_ctrl_new_custom(&vc->hdl, &color_filter_ctrl,
1641                                              NULL);
1642                 if (vc->hdl.error) {
1643                         ret = vc->hdl.error;
1644                         v4l2_ctrl_handler_free(&vc->hdl);
1645                         dev_err(&dev->udev->dev, "couldn't register control\n");
1646                         break;
1647                 }
1648                 q = &vc->vb_vidq;
1649                 q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1650                 q->io_modes = VB2_MMAP | VB2_READ | VB2_USERPTR;
1651                 q->drv_priv = vc;
1652                 q->lock = &vc->vb_lock;
1653                 q->buf_struct_size = sizeof(struct s2255_buffer);
1654                 q->mem_ops = &vb2_vmalloc_memops;
1655                 q->ops = &s2255_video_qops;
1656                 q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1657                 ret = vb2_queue_init(q);
1658                 if (ret != 0) {
1659                         dev_err(&dev->udev->dev,
1660                                 "%s vb2_queue_init 0x%x\n", __func__, ret);
1661                         break;
1662                 }
1663                 /* register video devices */
1664                 vc->vdev = template;
1665                 vc->vdev.queue = q;
1666                 vc->vdev.ctrl_handler = &vc->hdl;
1667                 vc->vdev.lock = &dev->lock;
1668                 vc->vdev.v4l2_dev = &dev->v4l2_dev;
1669                 video_set_drvdata(&vc->vdev, vc);
1670                 if (video_nr == -1)
1671                         ret = video_register_device(&vc->vdev,
1672                                                     VFL_TYPE_GRABBER,
1673                                                     video_nr);
1674                 else
1675                         ret = video_register_device(&vc->vdev,
1676                                                     VFL_TYPE_GRABBER,
1677                                                     cur_nr + i);
1678
1679                 if (ret) {
1680                         dev_err(&dev->udev->dev,
1681                                 "failed to register video device!\n");
1682                         break;
1683                 }
1684                 atomic_inc(&dev->num_channels);
1685                 v4l2_info(&dev->v4l2_dev, "V4L2 device registered as %s\n",
1686                           video_device_node_name(&vc->vdev));
1687
1688         }
1689         pr_info("Sensoray 2255 V4L driver Revision: %s\n",
1690                 S2255_VERSION);
1691         /* if no channels registered, return error and probe will fail*/
1692         if (atomic_read(&dev->num_channels) == 0) {
1693                 v4l2_device_unregister(&dev->v4l2_dev);
1694                 return ret;
1695         }
1696         if (atomic_read(&dev->num_channels) != MAX_CHANNELS)
1697                 pr_warn("s2255: Not all channels available.\n");
1698         return 0;
1699 }
1700
1701 /* this function moves the usb stream read pipe data
1702  * into the system buffers.
1703  * returns 0 on success, EAGAIN if more data to process( call this
1704  * function again).
1705  *
1706  * Received frame structure:
1707  * bytes 0-3:  marker : 0x2255DA4AL (S2255_MARKER_FRAME)
1708  * bytes 4-7:  channel: 0-3
1709  * bytes 8-11: payload size:  size of the frame
1710  * bytes 12-payloadsize+12:  frame data
1711  */
1712 static int save_frame(struct s2255_dev *dev, struct s2255_pipeinfo *pipe_info)
1713 {
1714         char *pdest;
1715         u32 offset = 0;
1716         int bframe = 0;
1717         char *psrc;
1718         unsigned long copy_size;
1719         unsigned long size;
1720         s32 idx = -1;
1721         struct s2255_framei *frm;
1722         unsigned char *pdata;
1723         struct s2255_vc *vc;
1724         dprintk(dev, 100, "buffer to user\n");
1725         vc = &dev->vc[dev->cc];
1726         idx = vc->cur_frame;
1727         frm = &vc->buffer.frame[idx];
1728         if (frm->ulState == S2255_READ_IDLE) {
1729                 int jj;
1730                 unsigned int cc;
1731                 __le32 *pdword; /*data from dsp is little endian */
1732                 int payload;
1733                 /* search for marker codes */
1734                 pdata = (unsigned char *)pipe_info->transfer_buffer;
1735                 pdword = (__le32 *)pdata;
1736                 for (jj = 0; jj < (pipe_info->cur_transfer_size - 12); jj++) {
1737                         switch (*pdword) {
1738                         case S2255_MARKER_FRAME:
1739                                 dprintk(dev, 4, "marker @ offset: %d [%x %x]\n",
1740                                         jj, pdata[0], pdata[1]);
1741                                 offset = jj + PREFIX_SIZE;
1742                                 bframe = 1;
1743                                 cc = le32_to_cpu(pdword[1]);
1744                                 if (cc >= MAX_CHANNELS) {
1745                                         dprintk(dev, 0,
1746                                                 "bad channel\n");
1747                                         return -EINVAL;
1748                                 }
1749                                 /* reverse it */
1750                                 dev->cc = G_chnmap[cc];
1751                                 vc = &dev->vc[dev->cc];
1752                                 payload =  le32_to_cpu(pdword[3]);
1753                                 if (payload > vc->req_image_size) {
1754                                         vc->bad_payload++;
1755                                         /* discard the bad frame */
1756                                         return -EINVAL;
1757                                 }
1758                                 vc->pkt_size = payload;
1759                                 vc->jpg_size = le32_to_cpu(pdword[4]);
1760                                 break;
1761                         case S2255_MARKER_RESPONSE:
1762
1763                                 pdata += DEF_USB_BLOCK;
1764                                 jj += DEF_USB_BLOCK;
1765                                 if (le32_to_cpu(pdword[1]) >= MAX_CHANNELS)
1766                                         break;
1767                                 cc = G_chnmap[le32_to_cpu(pdword[1])];
1768                                 if (cc >= MAX_CHANNELS)
1769                                         break;
1770                                 vc = &dev->vc[cc];
1771                                 switch (pdword[2]) {
1772                                 case S2255_RESPONSE_SETMODE:
1773                                         /* check if channel valid */
1774                                         /* set mode ready */
1775                                         vc->setmode_ready = 1;
1776                                         wake_up(&vc->wait_setmode);
1777                                         dprintk(dev, 5, "setmode rdy %d\n", cc);
1778                                         break;
1779                                 case S2255_RESPONSE_FW:
1780                                         dev->chn_ready |= (1 << cc);
1781                                         if ((dev->chn_ready & 0x0f) != 0x0f)
1782                                                 break;
1783                                         /* all channels ready */
1784                                         pr_info("s2255: fw loaded\n");
1785                                         atomic_set(&dev->fw_data->fw_state,
1786                                                    S2255_FW_SUCCESS);
1787                                         wake_up(&dev->fw_data->wait_fw);
1788                                         break;
1789                                 case S2255_RESPONSE_STATUS:
1790                                         vc->vidstatus = le32_to_cpu(pdword[3]);
1791                                         vc->vidstatus_ready = 1;
1792                                         wake_up(&vc->wait_vidstatus);
1793                                         dprintk(dev, 5, "vstat %x chan %d\n",
1794                                                 le32_to_cpu(pdword[3]), cc);
1795                                         break;
1796                                 default:
1797                                         pr_info("s2255 unknown resp\n");
1798                                 }
1799                                 pdata++;
1800                                 break;
1801                         default:
1802                                 pdata++;
1803                                 break;
1804                         }
1805                         if (bframe)
1806                                 break;
1807                 } /* for */
1808                 if (!bframe)
1809                         return -EINVAL;
1810         }
1811         vc = &dev->vc[dev->cc];
1812         idx = vc->cur_frame;
1813         frm = &vc->buffer.frame[idx];
1814         /* search done.  now find out if should be acquiring on this channel */
1815         if (!vb2_is_streaming(&vc->vb_vidq)) {
1816                 /* we found a frame, but this channel is turned off */
1817                 frm->ulState = S2255_READ_IDLE;
1818                 return -EINVAL;
1819         }
1820
1821         if (frm->ulState == S2255_READ_IDLE) {
1822                 frm->ulState = S2255_READ_FRAME;
1823                 frm->cur_size = 0;
1824         }
1825
1826         /* skip the marker 512 bytes (and offset if out of sync) */
1827         psrc = (u8 *)pipe_info->transfer_buffer + offset;
1828
1829
1830         if (frm->lpvbits == NULL) {
1831                 dprintk(dev, 1, "s2255 frame buffer == NULL.%p %p %d %d",
1832                         frm, dev, dev->cc, idx);
1833                 return -ENOMEM;
1834         }
1835
1836         pdest = frm->lpvbits + frm->cur_size;
1837
1838         copy_size = (pipe_info->cur_transfer_size - offset);
1839
1840         size = vc->pkt_size - PREFIX_SIZE;
1841
1842         /* sanity check on pdest */
1843         if ((copy_size + frm->cur_size) < vc->req_image_size)
1844                 memcpy(pdest, psrc, copy_size);
1845
1846         frm->cur_size += copy_size;
1847         dprintk(dev, 4, "cur_size: %lu, size: %lu\n", frm->cur_size, size);
1848
1849         if (frm->cur_size >= size) {
1850                 dprintk(dev, 2, "******[%d]Buffer[%d]full*******\n",
1851                         dev->cc, idx);
1852                 vc->last_frame = vc->cur_frame;
1853                 vc->cur_frame++;
1854                 /* end of system frame ring buffer, start at zero */
1855                 if ((vc->cur_frame == SYS_FRAMES) ||
1856                     (vc->cur_frame == vc->buffer.dwFrames))
1857                         vc->cur_frame = 0;
1858                 /* frame ready */
1859                 if (vb2_is_streaming(&vc->vb_vidq))
1860                         s2255_got_frame(vc, vc->jpg_size);
1861                 vc->frame_count++;
1862                 frm->ulState = S2255_READ_IDLE;
1863                 frm->cur_size = 0;
1864
1865         }
1866         /* done successfully */
1867         return 0;
1868 }
1869
1870 static void s2255_read_video_callback(struct s2255_dev *dev,
1871                                       struct s2255_pipeinfo *pipe_info)
1872 {
1873         int res;
1874         dprintk(dev, 50, "callback read video\n");
1875
1876         if (dev->cc >= MAX_CHANNELS) {
1877                 dev->cc = 0;
1878                 dev_err(&dev->udev->dev, "invalid channel\n");
1879                 return;
1880         }
1881         /* otherwise copy to the system buffers */
1882         res = save_frame(dev, pipe_info);
1883         if (res != 0)
1884                 dprintk(dev, 4, "s2255: read callback failed\n");
1885
1886         dprintk(dev, 50, "callback read video done\n");
1887         return;
1888 }
1889
1890 static long s2255_vendor_req(struct s2255_dev *dev, unsigned char Request,
1891                              u16 Index, u16 Value, void *TransferBuffer,
1892                              s32 TransferBufferLength, int bOut)
1893 {
1894         int r;
1895         unsigned char *buf;
1896
1897         buf = kmalloc(TransferBufferLength, GFP_KERNEL);
1898         if (!buf)
1899                 return -ENOMEM;
1900
1901         if (!bOut) {
1902                 r = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0),
1903                                     Request,
1904                                     USB_TYPE_VENDOR | USB_RECIP_DEVICE |
1905                                     USB_DIR_IN,
1906                                     Value, Index, buf,
1907                                     TransferBufferLength, HZ * 5);
1908
1909                 if (r >= 0)
1910                         memcpy(TransferBuffer, buf, TransferBufferLength);
1911         } else {
1912                 memcpy(buf, TransferBuffer, TransferBufferLength);
1913                 r = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0),
1914                                     Request, USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1915                                     Value, Index, buf,
1916                                     TransferBufferLength, HZ * 5);
1917         }
1918         kfree(buf);
1919         return r;
1920 }
1921
1922 /*
1923  * retrieve FX2 firmware version. future use.
1924  * @param dev pointer to device extension
1925  * @return -1 for fail, else returns firmware version as an int(16 bits)
1926  */
1927 static int s2255_get_fx2fw(struct s2255_dev *dev)
1928 {
1929         int fw;
1930         int ret;
1931         unsigned char transBuffer[64];
1932         ret = s2255_vendor_req(dev, S2255_VR_FW, 0, 0, transBuffer, 2,
1933                                S2255_VR_IN);
1934         if (ret < 0)
1935                 dprintk(dev, 2, "get fw error: %x\n", ret);
1936         fw = transBuffer[0] + (transBuffer[1] << 8);
1937         dprintk(dev, 2, "Get FW %x %x\n", transBuffer[0], transBuffer[1]);
1938         return fw;
1939 }
1940
1941 /*
1942  * Create the system ring buffer to copy frames into from the
1943  * usb read pipe.
1944  */
1945 static int s2255_create_sys_buffers(struct s2255_vc *vc)
1946 {
1947         unsigned long i;
1948         unsigned long reqsize;
1949         vc->buffer.dwFrames = SYS_FRAMES;
1950         /* always allocate maximum size(PAL) for system buffers */
1951         reqsize = SYS_FRAMES_MAXSIZE;
1952
1953         if (reqsize > SYS_FRAMES_MAXSIZE)
1954                 reqsize = SYS_FRAMES_MAXSIZE;
1955
1956         for (i = 0; i < SYS_FRAMES; i++) {
1957                 /* allocate the frames */
1958                 vc->buffer.frame[i].lpvbits = vmalloc(reqsize);
1959                 vc->buffer.frame[i].size = reqsize;
1960                 if (vc->buffer.frame[i].lpvbits == NULL) {
1961                         pr_info("out of memory.  using less frames\n");
1962                         vc->buffer.dwFrames = i;
1963                         break;
1964                 }
1965         }
1966
1967         /* make sure internal states are set */
1968         for (i = 0; i < SYS_FRAMES; i++) {
1969                 vc->buffer.frame[i].ulState = 0;
1970                 vc->buffer.frame[i].cur_size = 0;
1971         }
1972
1973         vc->cur_frame = 0;
1974         vc->last_frame = -1;
1975         return 0;
1976 }
1977
1978 static int s2255_release_sys_buffers(struct s2255_vc *vc)
1979 {
1980         unsigned long i;
1981         for (i = 0; i < SYS_FRAMES; i++) {
1982                 vfree(vc->buffer.frame[i].lpvbits);
1983                 vc->buffer.frame[i].lpvbits = NULL;
1984         }
1985         return 0;
1986 }
1987
1988 static int s2255_board_init(struct s2255_dev *dev)
1989 {
1990         struct s2255_mode mode_def = DEF_MODEI_NTSC_CONT;
1991         int fw_ver;
1992         int j;
1993         struct s2255_pipeinfo *pipe = &dev->pipe;
1994         dprintk(dev, 4, "board init: %p", dev);
1995         memset(pipe, 0, sizeof(*pipe));
1996         pipe->dev = dev;
1997         pipe->cur_transfer_size = S2255_USB_XFER_SIZE;
1998         pipe->max_transfer_size = S2255_USB_XFER_SIZE;
1999
2000         pipe->transfer_buffer = kzalloc(pipe->max_transfer_size,
2001                                         GFP_KERNEL);
2002         if (pipe->transfer_buffer == NULL) {
2003                 dprintk(dev, 1, "out of memory!\n");
2004                 return -ENOMEM;
2005         }
2006         /* query the firmware */
2007         fw_ver = s2255_get_fx2fw(dev);
2008
2009         pr_info("s2255: usb firmware version %d.%d\n",
2010                 (fw_ver >> 8) & 0xff,
2011                 fw_ver & 0xff);
2012
2013         if (fw_ver < S2255_CUR_USB_FWVER)
2014                 pr_info("s2255: newer USB firmware available\n");
2015
2016         for (j = 0; j < MAX_CHANNELS; j++) {
2017                 struct s2255_vc *vc = &dev->vc[j];
2018                 vc->mode = mode_def;
2019                 if (dev->pid == 0x2257 && j > 1)
2020                         vc->mode.color |= (1 << 16);
2021                 vc->jpegqual = S2255_DEF_JPEG_QUAL;
2022                 vc->width = LINE_SZ_4CIFS_NTSC;
2023                 vc->height = NUM_LINES_4CIFS_NTSC * 2;
2024                 vc->std = V4L2_STD_NTSC_M;
2025                 vc->fmt = &formats[0];
2026                 vc->mode.restart = 1;
2027                 vc->req_image_size = get_transfer_size(&mode_def);
2028                 vc->frame_count = 0;
2029                 /* create the system buffers */
2030                 s2255_create_sys_buffers(vc);
2031         }
2032         /* start read pipe */
2033         s2255_start_readpipe(dev);
2034         dprintk(dev, 1, "%s: success\n", __func__);
2035         return 0;
2036 }
2037
2038 static int s2255_board_shutdown(struct s2255_dev *dev)
2039 {
2040         u32 i;
2041         dprintk(dev, 1, "%s: dev: %p", __func__,  dev);
2042
2043         for (i = 0; i < MAX_CHANNELS; i++) {
2044                 if (vb2_is_streaming(&dev->vc[i].vb_vidq))
2045                         s2255_stop_acquire(&dev->vc[i]);
2046         }
2047         s2255_stop_readpipe(dev);
2048         for (i = 0; i < MAX_CHANNELS; i++)
2049                 s2255_release_sys_buffers(&dev->vc[i]);
2050         /* release transfer buffer */
2051         kfree(dev->pipe.transfer_buffer);
2052         return 0;
2053 }
2054
2055 static void read_pipe_completion(struct urb *purb)
2056 {
2057         struct s2255_pipeinfo *pipe_info;
2058         struct s2255_dev *dev;
2059         int status;
2060         int pipe;
2061         pipe_info = purb->context;
2062         if (pipe_info == NULL) {
2063                 dev_err(&purb->dev->dev, "no context!\n");
2064                 return;
2065         }
2066         dev = pipe_info->dev;
2067         if (dev == NULL) {
2068                 dev_err(&purb->dev->dev, "no context!\n");
2069                 return;
2070         }
2071         status = purb->status;
2072         /* if shutting down, do not resubmit, exit immediately */
2073         if (status == -ESHUTDOWN) {
2074                 dprintk(dev, 2, "%s: err shutdown\n", __func__);
2075                 pipe_info->err_count++;
2076                 return;
2077         }
2078
2079         if (pipe_info->state == 0) {
2080                 dprintk(dev, 2, "%s: exiting USB pipe", __func__);
2081                 return;
2082         }
2083
2084         if (status == 0)
2085                 s2255_read_video_callback(dev, pipe_info);
2086         else {
2087                 pipe_info->err_count++;
2088                 dprintk(dev, 1, "%s: failed URB %d\n", __func__, status);
2089         }
2090
2091         pipe = usb_rcvbulkpipe(dev->udev, dev->read_endpoint);
2092         /* reuse urb */
2093         usb_fill_bulk_urb(pipe_info->stream_urb, dev->udev,
2094                           pipe,
2095                           pipe_info->transfer_buffer,
2096                           pipe_info->cur_transfer_size,
2097                           read_pipe_completion, pipe_info);
2098
2099         if (pipe_info->state != 0) {
2100                 if (usb_submit_urb(pipe_info->stream_urb, GFP_ATOMIC))
2101                         dev_err(&dev->udev->dev, "error submitting urb\n");
2102         } else {
2103                 dprintk(dev, 2, "%s :complete state 0\n", __func__);
2104         }
2105         return;
2106 }
2107
2108 static int s2255_start_readpipe(struct s2255_dev *dev)
2109 {
2110         int pipe;
2111         int retval;
2112         struct s2255_pipeinfo *pipe_info = &dev->pipe;
2113         pipe = usb_rcvbulkpipe(dev->udev, dev->read_endpoint);
2114         dprintk(dev, 2, "%s: IN %d\n", __func__, dev->read_endpoint);
2115         pipe_info->state = 1;
2116         pipe_info->err_count = 0;
2117         pipe_info->stream_urb = usb_alloc_urb(0, GFP_KERNEL);
2118         if (!pipe_info->stream_urb)
2119                 return -ENOMEM;
2120         /* transfer buffer allocated in board_init */
2121         usb_fill_bulk_urb(pipe_info->stream_urb, dev->udev,
2122                           pipe,
2123                           pipe_info->transfer_buffer,
2124                           pipe_info->cur_transfer_size,
2125                           read_pipe_completion, pipe_info);
2126         retval = usb_submit_urb(pipe_info->stream_urb, GFP_KERNEL);
2127         if (retval) {
2128                 pr_err("s2255: start read pipe failed\n");
2129                 return retval;
2130         }
2131         return 0;
2132 }
2133
2134 /* starts acquisition process */
2135 static int s2255_start_acquire(struct s2255_vc *vc)
2136 {
2137         int res;
2138         unsigned long chn_rev;
2139         int j;
2140         struct s2255_dev *dev = to_s2255_dev(vc->vdev.v4l2_dev);
2141         __le32 *buffer = dev->cmdbuf;
2142
2143         mutex_lock(&dev->cmdlock);
2144         chn_rev = G_chnmap[vc->idx];
2145         vc->last_frame = -1;
2146         vc->bad_payload = 0;
2147         vc->cur_frame = 0;
2148         for (j = 0; j < SYS_FRAMES; j++) {
2149                 vc->buffer.frame[j].ulState = 0;
2150                 vc->buffer.frame[j].cur_size = 0;
2151         }
2152
2153         /* send the start command */
2154         buffer[0] = IN_DATA_TOKEN;
2155         buffer[1] = (__le32) cpu_to_le32(chn_rev);
2156         buffer[2] = CMD_START;
2157         res = s2255_write_config(dev->udev, (unsigned char *)buffer, 512);
2158         if (res != 0)
2159                 dev_err(&dev->udev->dev, "CMD_START error\n");
2160
2161         dprintk(dev, 2, "start acquire exit[%d] %d\n", vc->idx, res);
2162         mutex_unlock(&dev->cmdlock);
2163         return res;
2164 }
2165
2166 static int s2255_stop_acquire(struct s2255_vc *vc)
2167 {
2168         int res;
2169         unsigned long chn_rev;
2170         struct s2255_dev *dev = to_s2255_dev(vc->vdev.v4l2_dev);
2171         __le32 *buffer = dev->cmdbuf;
2172
2173         mutex_lock(&dev->cmdlock);
2174         chn_rev = G_chnmap[vc->idx];
2175         /* send the stop command */
2176         buffer[0] = IN_DATA_TOKEN;
2177         buffer[1] = (__le32) cpu_to_le32(chn_rev);
2178         buffer[2] = CMD_STOP;
2179
2180         res = s2255_write_config(dev->udev, (unsigned char *)buffer, 512);
2181         if (res != 0)
2182                 dev_err(&dev->udev->dev, "CMD_STOP error\n");
2183
2184         dprintk(dev, 4, "%s: chn %d, res %d\n", __func__, vc->idx, res);
2185         mutex_unlock(&dev->cmdlock);
2186         return res;
2187 }
2188
2189 static void s2255_stop_readpipe(struct s2255_dev *dev)
2190 {
2191         struct s2255_pipeinfo *pipe = &dev->pipe;
2192
2193         pipe->state = 0;
2194         if (pipe->stream_urb) {
2195                 /* cancel urb */
2196                 usb_kill_urb(pipe->stream_urb);
2197                 usb_free_urb(pipe->stream_urb);
2198                 pipe->stream_urb = NULL;
2199         }
2200         dprintk(dev, 4, "%s", __func__);
2201         return;
2202 }
2203
2204 static void s2255_fwload_start(struct s2255_dev *dev)
2205 {
2206         s2255_reset_dsppower(dev);
2207         dev->fw_data->fw_size = dev->fw_data->fw->size;
2208         atomic_set(&dev->fw_data->fw_state, S2255_FW_NOTLOADED);
2209         memcpy(dev->fw_data->pfw_data,
2210                dev->fw_data->fw->data, CHUNK_SIZE);
2211         dev->fw_data->fw_loaded = CHUNK_SIZE;
2212         usb_fill_bulk_urb(dev->fw_data->fw_urb, dev->udev,
2213                           usb_sndbulkpipe(dev->udev, 2),
2214                           dev->fw_data->pfw_data,
2215                           CHUNK_SIZE, s2255_fwchunk_complete,
2216                           dev->fw_data);
2217         mod_timer(&dev->timer, jiffies + HZ);
2218 }
2219
2220 /* standard usb probe function */
2221 static int s2255_probe(struct usb_interface *interface,
2222                        const struct usb_device_id *id)
2223 {
2224         struct s2255_dev *dev = NULL;
2225         struct usb_host_interface *iface_desc;
2226         struct usb_endpoint_descriptor *endpoint;
2227         int i;
2228         int retval = -ENOMEM;
2229         __le32 *pdata;
2230         int fw_size;
2231
2232         /* allocate memory for our device state and initialize it to zero */
2233         dev = kzalloc(sizeof(struct s2255_dev), GFP_KERNEL);
2234         if (dev == NULL) {
2235                 s2255_dev_err(&interface->dev, "out of memory\n");
2236                 return -ENOMEM;
2237         }
2238
2239         dev->cmdbuf = kzalloc(S2255_CMDBUF_SIZE, GFP_KERNEL);
2240         if (dev->cmdbuf == NULL) {
2241                 s2255_dev_err(&interface->dev, "out of memory\n");
2242                 goto errorFWDATA1;
2243         }
2244
2245         atomic_set(&dev->num_channels, 0);
2246         dev->pid = id->idProduct;
2247         dev->fw_data = kzalloc(sizeof(struct s2255_fw), GFP_KERNEL);
2248         if (!dev->fw_data)
2249                 goto errorFWDATA1;
2250         mutex_init(&dev->lock);
2251         mutex_init(&dev->cmdlock);
2252         /* grab usb_device and save it */
2253         dev->udev = usb_get_dev(interface_to_usbdev(interface));
2254         if (dev->udev == NULL) {
2255                 dev_err(&interface->dev, "null usb device\n");
2256                 retval = -ENODEV;
2257                 goto errorUDEV;
2258         }
2259         dev_dbg(&interface->dev, "dev: %p, udev %p interface %p\n",
2260                 dev, dev->udev, interface);
2261         dev->interface = interface;
2262         /* set up the endpoint information  */
2263         iface_desc = interface->cur_altsetting;
2264         dev_dbg(&interface->dev, "num EP: %d\n",
2265                 iface_desc->desc.bNumEndpoints);
2266         for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
2267                 endpoint = &iface_desc->endpoint[i].desc;
2268                 if (!dev->read_endpoint && usb_endpoint_is_bulk_in(endpoint)) {
2269                         /* we found the bulk in endpoint */
2270                         dev->read_endpoint = endpoint->bEndpointAddress;
2271                 }
2272         }
2273
2274         if (!dev->read_endpoint) {
2275                 dev_err(&interface->dev, "Could not find bulk-in endpoint\n");
2276                 goto errorEP;
2277         }
2278         timer_setup(&dev->timer, s2255_timer, 0);
2279         init_waitqueue_head(&dev->fw_data->wait_fw);
2280         for (i = 0; i < MAX_CHANNELS; i++) {
2281                 struct s2255_vc *vc = &dev->vc[i];
2282                 vc->idx = i;
2283                 vc->dev = dev;
2284                 init_waitqueue_head(&vc->wait_setmode);
2285                 init_waitqueue_head(&vc->wait_vidstatus);
2286                 spin_lock_init(&vc->qlock);
2287                 mutex_init(&vc->vb_lock);
2288         }
2289
2290         dev->fw_data->fw_urb = usb_alloc_urb(0, GFP_KERNEL);
2291         if (!dev->fw_data->fw_urb)
2292                 goto errorFWURB;
2293
2294         dev->fw_data->pfw_data = kzalloc(CHUNK_SIZE, GFP_KERNEL);
2295         if (!dev->fw_data->pfw_data) {
2296                 dev_err(&interface->dev, "out of memory!\n");
2297                 goto errorFWDATA2;
2298         }
2299         /* load the first chunk */
2300         if (request_firmware(&dev->fw_data->fw,
2301                              FIRMWARE_FILE_NAME, &dev->udev->dev)) {
2302                 dev_err(&interface->dev, "sensoray 2255 failed to get firmware\n");
2303                 goto errorREQFW;
2304         }
2305         /* check the firmware is valid */
2306         fw_size = dev->fw_data->fw->size;
2307         pdata = (__le32 *) &dev->fw_data->fw->data[fw_size - 8];
2308
2309         if (*pdata != S2255_FW_MARKER) {
2310                 dev_err(&interface->dev, "Firmware invalid.\n");
2311                 retval = -ENODEV;
2312                 goto errorFWMARKER;
2313         } else {
2314                 /* make sure firmware is the latest */
2315                 __le32 *pRel;
2316                 pRel = (__le32 *) &dev->fw_data->fw->data[fw_size - 4];
2317                 pr_info("s2255 dsp fw version %x\n", le32_to_cpu(*pRel));
2318                 dev->dsp_fw_ver = le32_to_cpu(*pRel);
2319                 if (dev->dsp_fw_ver < S2255_CUR_DSP_FWVER)
2320                         pr_info("s2255: f2255usb.bin out of date.\n");
2321                 if (dev->pid == 0x2257 &&
2322                                 dev->dsp_fw_ver < S2255_MIN_DSP_COLORFILTER)
2323                         pr_warn("2257 needs firmware %d or above.\n",
2324                                 S2255_MIN_DSP_COLORFILTER);
2325         }
2326         usb_reset_device(dev->udev);
2327         /* load 2255 board specific */
2328         retval = s2255_board_init(dev);
2329         if (retval)
2330                 goto errorBOARDINIT;
2331         s2255_fwload_start(dev);
2332         /* loads v4l specific */
2333         retval = s2255_probe_v4l(dev);
2334         if (retval)
2335                 goto errorBOARDINIT;
2336         dev_info(&interface->dev, "Sensoray 2255 detected\n");
2337         return 0;
2338 errorBOARDINIT:
2339         s2255_board_shutdown(dev);
2340 errorFWMARKER:
2341         release_firmware(dev->fw_data->fw);
2342 errorREQFW:
2343         kfree(dev->fw_data->pfw_data);
2344 errorFWDATA2:
2345         usb_free_urb(dev->fw_data->fw_urb);
2346 errorFWURB:
2347         del_timer_sync(&dev->timer);
2348 errorEP:
2349         usb_put_dev(dev->udev);
2350 errorUDEV:
2351         kfree(dev->fw_data);
2352         mutex_destroy(&dev->lock);
2353 errorFWDATA1:
2354         kfree(dev->cmdbuf);
2355         kfree(dev);
2356         pr_warn("Sensoray 2255 driver load failed: 0x%x\n", retval);
2357         return retval;
2358 }
2359
2360 /* disconnect routine. when board is removed physically or with rmmod */
2361 static void s2255_disconnect(struct usb_interface *interface)
2362 {
2363         struct s2255_dev *dev = to_s2255_dev(usb_get_intfdata(interface));
2364         int i;
2365         int channels = atomic_read(&dev->num_channels);
2366         mutex_lock(&dev->lock);
2367         v4l2_device_disconnect(&dev->v4l2_dev);
2368         mutex_unlock(&dev->lock);
2369         /*see comments in the uvc_driver.c usb disconnect function */
2370         atomic_inc(&dev->num_channels);
2371         /* unregister each video device. */
2372         for (i = 0; i < channels; i++)
2373                 video_unregister_device(&dev->vc[i].vdev);
2374         /* wake up any of our timers */
2375         atomic_set(&dev->fw_data->fw_state, S2255_FW_DISCONNECTING);
2376         wake_up(&dev->fw_data->wait_fw);
2377         for (i = 0; i < MAX_CHANNELS; i++) {
2378                 dev->vc[i].setmode_ready = 1;
2379                 wake_up(&dev->vc[i].wait_setmode);
2380                 dev->vc[i].vidstatus_ready = 1;
2381                 wake_up(&dev->vc[i].wait_vidstatus);
2382         }
2383         if (atomic_dec_and_test(&dev->num_channels))
2384                 s2255_destroy(dev);
2385         dev_info(&interface->dev, "%s\n", __func__);
2386 }
2387
2388 static struct usb_driver s2255_driver = {
2389         .name = S2255_DRIVER_NAME,
2390         .probe = s2255_probe,
2391         .disconnect = s2255_disconnect,
2392         .id_table = s2255_table,
2393 };
2394
2395 module_usb_driver(s2255_driver);
2396
2397 MODULE_DESCRIPTION("Sensoray 2255 Video for Linux driver");
2398 MODULE_AUTHOR("Dean Anderson (Sensoray Company Inc.)");
2399 MODULE_LICENSE("GPL");
2400 MODULE_VERSION(S2255_VERSION);
2401 MODULE_FIRMWARE(FIRMWARE_FILE_NAME);