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