1 /*
2  * Virtual Video driver - This code emulates a real video device with v4l2 api
3  *
4  * Copyright (c) 2006 by:
5  *      Mauro Carvalho Chehab <mchehab--a.t--infradead.org>
6  *      Ted Walther <ted--a.t--enumera.com>
7  *      John Sokol <sokol--a.t--videotechnology.com>
8  *      http://v4l.videotechnology.com/
9  *
10  *      Conversion to videobuf2 by Pawel Osciak & Marek Szyprowski
11  *      Copyright (c) 2010 Samsung Electronics
12  *
13  * This program is free software; you can redistribute it and/or modify
14  * it under the terms of the BSD Licence, GNU General Public License
15  * as published by the Free Software Foundation; either version 2 of the
16  * License, or (at your option) any later version
17  */
18 #include <linux/module.h>
19 #include <linux/errno.h>
20 #include <linux/kernel.h>
21 #include <linux/init.h>
22 #include <linux/sched.h>
23 #include <linux/slab.h>
24 #include <linux/font.h>
25 #include <linux/version.h>
26 #include <linux/mutex.h>
27 #include <linux/videodev2.h>
28 #include <linux/kthread.h>
29 #include <linux/freezer.h>
30 #include <media/videobuf2-vmalloc.h>
31 #include <media/v4l2-device.h>
32 #include <media/v4l2-ioctl.h>
33 #include <media/v4l2-ctrls.h>
34 #include <media/v4l2-fh.h>
35 #include <media/v4l2-common.h>
36 
37 #define VIVI_MODULE_NAME "vivi"
38 
39 /* Wake up at about 30 fps */
40 #define WAKE_NUMERATOR 30
41 #define WAKE_DENOMINATOR 1001
42 #define BUFFER_TIMEOUT     msecs_to_jiffies(500)  /* 0.5 seconds */
43 
44 #define MAX_WIDTH 1920
45 #define MAX_HEIGHT 1200
46 
47 #define VIVI_MAJOR_VERSION 0
48 #define VIVI_MINOR_VERSION 8
49 #define VIVI_RELEASE 0
50 #define VIVI_VERSION \
51 	KERNEL_VERSION(VIVI_MAJOR_VERSION, VIVI_MINOR_VERSION, VIVI_RELEASE)
52 
53 MODULE_DESCRIPTION("Video Technology Magazine Virtual Video Capture Board");
54 MODULE_AUTHOR("Mauro Carvalho Chehab, Ted Walther and John Sokol");
55 MODULE_LICENSE("Dual BSD/GPL");
56 
57 static unsigned video_nr = -1;
58 module_param(video_nr, uint, 0644);
59 MODULE_PARM_DESC(video_nr, "videoX start number, -1 is autodetect");
60 
61 static unsigned n_devs = 1;
62 module_param(n_devs, uint, 0644);
63 MODULE_PARM_DESC(n_devs, "number of video devices to create");
64 
65 static unsigned debug;
66 module_param(debug, uint, 0644);
67 MODULE_PARM_DESC(debug, "activates debug info");
68 
69 static unsigned int vid_limit = 16;
70 module_param(vid_limit, uint, 0644);
71 MODULE_PARM_DESC(vid_limit, "capture memory limit in megabytes");
72 
73 /* Global font descriptor */
74 static const u8 *font8x16;
75 
76 #define dprintk(dev, level, fmt, arg...) \
77 	v4l2_dbg(level, debug, &dev->v4l2_dev, fmt, ## arg)
78 
79 /* ------------------------------------------------------------------
80 	Basic structures
81    ------------------------------------------------------------------*/
82 
83 struct vivi_fmt {
84 	char  *name;
85 	u32   fourcc;          /* v4l2 format id */
86 	int   depth;
87 };
88 
89 static struct vivi_fmt formats[] = {
90 	{
91 		.name     = "4:2:2, packed, YUYV",
92 		.fourcc   = V4L2_PIX_FMT_YUYV,
93 		.depth    = 16,
94 	},
95 	{
96 		.name     = "4:2:2, packed, UYVY",
97 		.fourcc   = V4L2_PIX_FMT_UYVY,
98 		.depth    = 16,
99 	},
100 	{
101 		.name     = "RGB565 (LE)",
102 		.fourcc   = V4L2_PIX_FMT_RGB565, /* gggbbbbb rrrrrggg */
103 		.depth    = 16,
104 	},
105 	{
106 		.name     = "RGB565 (BE)",
107 		.fourcc   = V4L2_PIX_FMT_RGB565X, /* rrrrrggg gggbbbbb */
108 		.depth    = 16,
109 	},
110 	{
111 		.name     = "RGB555 (LE)",
112 		.fourcc   = V4L2_PIX_FMT_RGB555, /* gggbbbbb arrrrrgg */
113 		.depth    = 16,
114 	},
115 	{
116 		.name     = "RGB555 (BE)",
117 		.fourcc   = V4L2_PIX_FMT_RGB555X, /* arrrrrgg gggbbbbb */
118 		.depth    = 16,
119 	},
120 };
121 
get_format(struct v4l2_format * f)122 static struct vivi_fmt *get_format(struct v4l2_format *f)
123 {
124 	struct vivi_fmt *fmt;
125 	unsigned int k;
126 
127 	for (k = 0; k < ARRAY_SIZE(formats); k++) {
128 		fmt = &formats[k];
129 		if (fmt->fourcc == f->fmt.pix.pixelformat)
130 			break;
131 	}
132 
133 	if (k == ARRAY_SIZE(formats))
134 		return NULL;
135 
136 	return &formats[k];
137 }
138 
139 /* buffer for one video frame */
140 struct vivi_buffer {
141 	/* common v4l buffer stuff -- must be first */
142 	struct vb2_buffer	vb;
143 	struct list_head	list;
144 	struct vivi_fmt        *fmt;
145 };
146 
147 struct vivi_dmaqueue {
148 	struct list_head       active;
149 
150 	/* thread for generating video stream*/
151 	struct task_struct         *kthread;
152 	wait_queue_head_t          wq;
153 	/* Counters to control fps rate */
154 	int                        frame;
155 	int                        ini_jiffies;
156 };
157 
158 static LIST_HEAD(vivi_devlist);
159 
160 struct vivi_dev {
161 	struct list_head           vivi_devlist;
162 	struct v4l2_device 	   v4l2_dev;
163 	struct v4l2_ctrl_handler   ctrl_handler;
164 
165 	/* controls */
166 	struct v4l2_ctrl	   *brightness;
167 	struct v4l2_ctrl	   *contrast;
168 	struct v4l2_ctrl	   *saturation;
169 	struct v4l2_ctrl	   *hue;
170 	struct v4l2_ctrl	   *volume;
171 	struct v4l2_ctrl	   *button;
172 	struct v4l2_ctrl	   *boolean;
173 	struct v4l2_ctrl	   *int32;
174 	struct v4l2_ctrl	   *int64;
175 	struct v4l2_ctrl	   *menu;
176 	struct v4l2_ctrl	   *string;
177 
178 	spinlock_t                 slock;
179 	struct mutex		   mutex;
180 
181 	/* various device info */
182 	struct video_device        *vfd;
183 
184 	struct vivi_dmaqueue       vidq;
185 
186 	/* Several counters */
187 	unsigned 		   ms;
188 	unsigned long              jiffies;
189 	unsigned		   button_pressed;
190 
191 	int			   mv_count;	/* Controls bars movement */
192 
193 	/* Input Number */
194 	int			   input;
195 
196 	/* video capture */
197 	struct vivi_fmt            *fmt;
198 	unsigned int               width, height;
199 	struct vb2_queue	   vb_vidq;
200 	enum v4l2_field		   field;
201 	unsigned int		   field_count;
202 
203 	u8 			   bars[9][3];
204 	u8 			   line[MAX_WIDTH * 4];
205 };
206 
207 /* ------------------------------------------------------------------
208 	DMA and thread functions
209    ------------------------------------------------------------------*/
210 
211 /* Bars and Colors should match positions */
212 
213 enum colors {
214 	WHITE,
215 	AMBER,
216 	CYAN,
217 	GREEN,
218 	MAGENTA,
219 	RED,
220 	BLUE,
221 	BLACK,
222 	TEXT_BLACK,
223 };
224 
225 /* R   G   B */
226 #define COLOR_WHITE	{204, 204, 204}
227 #define COLOR_AMBER	{208, 208,   0}
228 #define COLOR_CYAN	{  0, 206, 206}
229 #define	COLOR_GREEN	{  0, 239,   0}
230 #define COLOR_MAGENTA	{239,   0, 239}
231 #define COLOR_RED	{205,   0,   0}
232 #define COLOR_BLUE	{  0,   0, 255}
233 #define COLOR_BLACK	{  0,   0,   0}
234 
235 struct bar_std {
236 	u8 bar[9][3];
237 };
238 
239 /* Maximum number of bars are 10 - otherwise, the input print code
240    should be modified */
241 static struct bar_std bars[] = {
242 	{	/* Standard ITU-R color bar sequence */
243 		{ COLOR_WHITE, COLOR_AMBER, COLOR_CYAN, COLOR_GREEN,
244 		  COLOR_MAGENTA, COLOR_RED, COLOR_BLUE, COLOR_BLACK, COLOR_BLACK }
245 	}, {
246 		{ COLOR_WHITE, COLOR_AMBER, COLOR_BLACK, COLOR_WHITE,
247 		  COLOR_AMBER, COLOR_BLACK, COLOR_WHITE, COLOR_AMBER, COLOR_BLACK }
248 	}, {
249 		{ COLOR_WHITE, COLOR_CYAN, COLOR_BLACK, COLOR_WHITE,
250 		  COLOR_CYAN, COLOR_BLACK, COLOR_WHITE, COLOR_CYAN, COLOR_BLACK }
251 	}, {
252 		{ COLOR_WHITE, COLOR_GREEN, COLOR_BLACK, COLOR_WHITE,
253 		  COLOR_GREEN, COLOR_BLACK, COLOR_WHITE, COLOR_GREEN, COLOR_BLACK }
254 	},
255 };
256 
257 #define NUM_INPUTS ARRAY_SIZE(bars)
258 
259 #define TO_Y(r, g, b) \
260 	(((16829 * r + 33039 * g + 6416 * b  + 32768) >> 16) + 16)
261 /* RGB to  V(Cr) Color transform */
262 #define TO_V(r, g, b) \
263 	(((28784 * r - 24103 * g - 4681 * b  + 32768) >> 16) + 128)
264 /* RGB to  U(Cb) Color transform */
265 #define TO_U(r, g, b) \
266 	(((-9714 * r - 19070 * g + 28784 * b + 32768) >> 16) + 128)
267 
268 /* precalculate color bar values to speed up rendering */
precalculate_bars(struct vivi_dev * dev)269 static void precalculate_bars(struct vivi_dev *dev)
270 {
271 	u8 r, g, b;
272 	int k, is_yuv;
273 
274 	for (k = 0; k < 9; k++) {
275 		r = bars[dev->input].bar[k][0];
276 		g = bars[dev->input].bar[k][1];
277 		b = bars[dev->input].bar[k][2];
278 		is_yuv = 0;
279 
280 		switch (dev->fmt->fourcc) {
281 		case V4L2_PIX_FMT_YUYV:
282 		case V4L2_PIX_FMT_UYVY:
283 			is_yuv = 1;
284 			break;
285 		case V4L2_PIX_FMT_RGB565:
286 		case V4L2_PIX_FMT_RGB565X:
287 			r >>= 3;
288 			g >>= 2;
289 			b >>= 3;
290 			break;
291 		case V4L2_PIX_FMT_RGB555:
292 		case V4L2_PIX_FMT_RGB555X:
293 			r >>= 3;
294 			g >>= 3;
295 			b >>= 3;
296 			break;
297 		}
298 
299 		if (is_yuv) {
300 			dev->bars[k][0] = TO_Y(r, g, b);	/* Luma */
301 			dev->bars[k][1] = TO_U(r, g, b);	/* Cb */
302 			dev->bars[k][2] = TO_V(r, g, b);	/* Cr */
303 		} else {
304 			dev->bars[k][0] = r;
305 			dev->bars[k][1] = g;
306 			dev->bars[k][2] = b;
307 		}
308 	}
309 }
310 
311 #define TSTAMP_MIN_Y	24
312 #define TSTAMP_MAX_Y	(TSTAMP_MIN_Y + 15)
313 #define TSTAMP_INPUT_X	10
314 #define TSTAMP_MIN_X	(54 + TSTAMP_INPUT_X)
315 
gen_twopix(struct vivi_dev * dev,u8 * buf,int colorpos)316 static void gen_twopix(struct vivi_dev *dev, u8 *buf, int colorpos)
317 {
318 	u8 r_y, g_u, b_v;
319 	int color;
320 	u8 *p;
321 
322 	r_y = dev->bars[colorpos][0]; /* R or precalculated Y */
323 	g_u = dev->bars[colorpos][1]; /* G or precalculated U */
324 	b_v = dev->bars[colorpos][2]; /* B or precalculated V */
325 
326 	for (color = 0; color < 4; color++) {
327 		p = buf + color;
328 
329 		switch (dev->fmt->fourcc) {
330 		case V4L2_PIX_FMT_YUYV:
331 			switch (color) {
332 			case 0:
333 			case 2:
334 				*p = r_y;
335 				break;
336 			case 1:
337 				*p = g_u;
338 				break;
339 			case 3:
340 				*p = b_v;
341 				break;
342 			}
343 			break;
344 		case V4L2_PIX_FMT_UYVY:
345 			switch (color) {
346 			case 1:
347 			case 3:
348 				*p = r_y;
349 				break;
350 			case 0:
351 				*p = g_u;
352 				break;
353 			case 2:
354 				*p = b_v;
355 				break;
356 			}
357 			break;
358 		case V4L2_PIX_FMT_RGB565:
359 			switch (color) {
360 			case 0:
361 			case 2:
362 				*p = (g_u << 5) | b_v;
363 				break;
364 			case 1:
365 			case 3:
366 				*p = (r_y << 3) | (g_u >> 3);
367 				break;
368 			}
369 			break;
370 		case V4L2_PIX_FMT_RGB565X:
371 			switch (color) {
372 			case 0:
373 			case 2:
374 				*p = (r_y << 3) | (g_u >> 3);
375 				break;
376 			case 1:
377 			case 3:
378 				*p = (g_u << 5) | b_v;
379 				break;
380 			}
381 			break;
382 		case V4L2_PIX_FMT_RGB555:
383 			switch (color) {
384 			case 0:
385 			case 2:
386 				*p = (g_u << 5) | b_v;
387 				break;
388 			case 1:
389 			case 3:
390 				*p = (r_y << 2) | (g_u >> 3);
391 				break;
392 			}
393 			break;
394 		case V4L2_PIX_FMT_RGB555X:
395 			switch (color) {
396 			case 0:
397 			case 2:
398 				*p = (r_y << 2) | (g_u >> 3);
399 				break;
400 			case 1:
401 			case 3:
402 				*p = (g_u << 5) | b_v;
403 				break;
404 			}
405 			break;
406 		}
407 	}
408 }
409 
precalculate_line(struct vivi_dev * dev)410 static void precalculate_line(struct vivi_dev *dev)
411 {
412 	int w;
413 
414 	for (w = 0; w < dev->width * 2; w += 2) {
415 		int colorpos = (w / (dev->width / 8) % 8);
416 
417 		gen_twopix(dev, dev->line + w * 2, colorpos);
418 	}
419 }
420 
gen_text(struct vivi_dev * dev,char * basep,int y,int x,char * text)421 static void gen_text(struct vivi_dev *dev, char *basep,
422 					int y, int x, char *text)
423 {
424 	int line;
425 
426 	/* Checks if it is possible to show string */
427 	if (y + 16 >= dev->height || x + strlen(text) * 8 >= dev->width)
428 		return;
429 
430 	/* Print stream time */
431 	for (line = y; line < y + 16; line++) {
432 		int j = 0;
433 		char *pos = basep + line * dev->width * 2 + x * 2;
434 		char *s;
435 
436 		for (s = text; *s; s++) {
437 			u8 chr = font8x16[*s * 16 + line - y];
438 			int i;
439 
440 			for (i = 0; i < 7; i++, j++) {
441 				/* Draw white font on black background */
442 				if (chr & (1 << (7 - i)))
443 					gen_twopix(dev, pos + j * 2, WHITE);
444 				else
445 					gen_twopix(dev, pos + j * 2, TEXT_BLACK);
446 			}
447 		}
448 	}
449 }
450 
vivi_fillbuff(struct vivi_dev * dev,struct vivi_buffer * buf)451 static void vivi_fillbuff(struct vivi_dev *dev, struct vivi_buffer *buf)
452 {
453 	int wmax = dev->width;
454 	int hmax = dev->height;
455 	struct timeval ts;
456 	void *vbuf = vb2_plane_vaddr(&buf->vb, 0);
457 	unsigned ms;
458 	char str[100];
459 	int h, line = 1;
460 
461 	if (!vbuf)
462 		return;
463 
464 	for (h = 0; h < hmax; h++)
465 		memcpy(vbuf + h * wmax * 2, dev->line + (dev->mv_count % wmax) * 2, wmax * 2);
466 
467 	/* Updates stream time */
468 
469 	dev->ms += jiffies_to_msecs(jiffies - dev->jiffies);
470 	dev->jiffies = jiffies;
471 	ms = dev->ms;
472 	snprintf(str, sizeof(str), " %02d:%02d:%02d:%03d ",
473 			(ms / (60 * 60 * 1000)) % 24,
474 			(ms / (60 * 1000)) % 60,
475 			(ms / 1000) % 60,
476 			ms % 1000);
477 	gen_text(dev, vbuf, line++ * 16, 16, str);
478 	snprintf(str, sizeof(str), " %dx%d, input %d ",
479 			dev->width, dev->height, dev->input);
480 	gen_text(dev, vbuf, line++ * 16, 16, str);
481 
482 	mutex_lock(&dev->ctrl_handler.lock);
483 	snprintf(str, sizeof(str), " brightness %3d, contrast %3d, saturation %3d, hue %d ",
484 			dev->brightness->cur.val,
485 			dev->contrast->cur.val,
486 			dev->saturation->cur.val,
487 			dev->hue->cur.val);
488 	gen_text(dev, vbuf, line++ * 16, 16, str);
489 	snprintf(str, sizeof(str), " volume %3d ", dev->volume->cur.val);
490 	gen_text(dev, vbuf, line++ * 16, 16, str);
491 	snprintf(str, sizeof(str), " int32 %d, int64 %lld ",
492 			dev->int32->cur.val,
493 			dev->int64->cur.val64);
494 	gen_text(dev, vbuf, line++ * 16, 16, str);
495 	snprintf(str, sizeof(str), " boolean %d, menu %s, string \"%s\" ",
496 			dev->boolean->cur.val,
497 			dev->menu->qmenu[dev->menu->cur.val],
498 			dev->string->cur.string);
499 	mutex_unlock(&dev->ctrl_handler.lock);
500 	gen_text(dev, vbuf, line++ * 16, 16, str);
501 	if (dev->button_pressed) {
502 		dev->button_pressed--;
503 		snprintf(str, sizeof(str), " button pressed!");
504 		gen_text(dev, vbuf, line++ * 16, 16, str);
505 	}
506 
507 	dev->mv_count += 2;
508 
509 	buf->vb.v4l2_buf.field = dev->field;
510 	dev->field_count++;
511 	buf->vb.v4l2_buf.sequence = dev->field_count >> 1;
512 	do_gettimeofday(&ts);
513 	buf->vb.v4l2_buf.timestamp = ts;
514 }
515 
vivi_thread_tick(struct vivi_dev * dev)516 static void vivi_thread_tick(struct vivi_dev *dev)
517 {
518 	struct vivi_dmaqueue *dma_q = &dev->vidq;
519 	struct vivi_buffer *buf;
520 	unsigned long flags = 0;
521 
522 	dprintk(dev, 1, "Thread tick\n");
523 
524 	spin_lock_irqsave(&dev->slock, flags);
525 	if (list_empty(&dma_q->active)) {
526 		dprintk(dev, 1, "No active queue to serve\n");
527 		goto unlock;
528 	}
529 
530 	buf = list_entry(dma_q->active.next, struct vivi_buffer, list);
531 	list_del(&buf->list);
532 
533 	do_gettimeofday(&buf->vb.v4l2_buf.timestamp);
534 
535 	/* Fill buffer */
536 	vivi_fillbuff(dev, buf);
537 	dprintk(dev, 1, "filled buffer %p\n", buf);
538 
539 	vb2_buffer_done(&buf->vb, VB2_BUF_STATE_DONE);
540 	dprintk(dev, 2, "[%p/%d] done\n", buf, buf->vb.v4l2_buf.index);
541 unlock:
542 	spin_unlock_irqrestore(&dev->slock, flags);
543 }
544 
545 #define frames_to_ms(frames)					\
546 	((frames * WAKE_NUMERATOR * 1000) / WAKE_DENOMINATOR)
547 
vivi_sleep(struct vivi_dev * dev)548 static void vivi_sleep(struct vivi_dev *dev)
549 {
550 	struct vivi_dmaqueue *dma_q = &dev->vidq;
551 	int timeout;
552 	DECLARE_WAITQUEUE(wait, current);
553 
554 	dprintk(dev, 1, "%s dma_q=0x%08lx\n", __func__,
555 		(unsigned long)dma_q);
556 
557 	add_wait_queue(&dma_q->wq, &wait);
558 	if (kthread_should_stop())
559 		goto stop_task;
560 
561 	/* Calculate time to wake up */
562 	timeout = msecs_to_jiffies(frames_to_ms(1));
563 
564 	vivi_thread_tick(dev);
565 
566 	schedule_timeout_interruptible(timeout);
567 
568 stop_task:
569 	remove_wait_queue(&dma_q->wq, &wait);
570 	try_to_freeze();
571 }
572 
vivi_thread(void * data)573 static int vivi_thread(void *data)
574 {
575 	struct vivi_dev *dev = data;
576 
577 	dprintk(dev, 1, "thread started\n");
578 
579 	set_freezable();
580 
581 	for (;;) {
582 		vivi_sleep(dev);
583 
584 		if (kthread_should_stop())
585 			break;
586 	}
587 	dprintk(dev, 1, "thread: exit\n");
588 	return 0;
589 }
590 
vivi_start_generating(struct vivi_dev * dev)591 static int vivi_start_generating(struct vivi_dev *dev)
592 {
593 	struct vivi_dmaqueue *dma_q = &dev->vidq;
594 
595 	dprintk(dev, 1, "%s\n", __func__);
596 
597 	/* Resets frame counters */
598 	dev->ms = 0;
599 	dev->mv_count = 0;
600 	dev->jiffies = jiffies;
601 
602 	dma_q->frame = 0;
603 	dma_q->ini_jiffies = jiffies;
604 	dma_q->kthread = kthread_run(vivi_thread, dev, dev->v4l2_dev.name);
605 
606 	if (IS_ERR(dma_q->kthread)) {
607 		v4l2_err(&dev->v4l2_dev, "kernel_thread() failed\n");
608 		return PTR_ERR(dma_q->kthread);
609 	}
610 	/* Wakes thread */
611 	wake_up_interruptible(&dma_q->wq);
612 
613 	dprintk(dev, 1, "returning from %s\n", __func__);
614 	return 0;
615 }
616 
vivi_stop_generating(struct vivi_dev * dev)617 static void vivi_stop_generating(struct vivi_dev *dev)
618 {
619 	struct vivi_dmaqueue *dma_q = &dev->vidq;
620 
621 	dprintk(dev, 1, "%s\n", __func__);
622 
623 	/* shutdown control thread */
624 	if (dma_q->kthread) {
625 		kthread_stop(dma_q->kthread);
626 		dma_q->kthread = NULL;
627 	}
628 
629 	/*
630 	 * Typical driver might need to wait here until dma engine stops.
631 	 * In this case we can abort imiedetly, so it's just a noop.
632 	 */
633 
634 	/* Release all active buffers */
635 	while (!list_empty(&dma_q->active)) {
636 		struct vivi_buffer *buf;
637 		buf = list_entry(dma_q->active.next, struct vivi_buffer, list);
638 		list_del(&buf->list);
639 		vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
640 		dprintk(dev, 2, "[%p/%d] done\n", buf, buf->vb.v4l2_buf.index);
641 	}
642 }
643 /* ------------------------------------------------------------------
644 	Videobuf operations
645    ------------------------------------------------------------------*/
queue_setup(struct vb2_queue * vq,unsigned int * nbuffers,unsigned int * nplanes,unsigned long sizes[],void * alloc_ctxs[])646 static int queue_setup(struct vb2_queue *vq, unsigned int *nbuffers,
647 				unsigned int *nplanes, unsigned long sizes[],
648 				void *alloc_ctxs[])
649 {
650 	struct vivi_dev *dev = vb2_get_drv_priv(vq);
651 	unsigned long size;
652 
653 	size = dev->width * dev->height * 2;
654 
655 	if (0 == *nbuffers)
656 		*nbuffers = 32;
657 
658 	while (size * *nbuffers > vid_limit * 1024 * 1024)
659 		(*nbuffers)--;
660 
661 	*nplanes = 1;
662 
663 	sizes[0] = size;
664 
665 	/*
666 	 * videobuf2-vmalloc allocator is context-less so no need to set
667 	 * alloc_ctxs array.
668 	 */
669 
670 	dprintk(dev, 1, "%s, count=%d, size=%ld\n", __func__,
671 		*nbuffers, size);
672 
673 	return 0;
674 }
675 
buffer_init(struct vb2_buffer * vb)676 static int buffer_init(struct vb2_buffer *vb)
677 {
678 	struct vivi_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
679 
680 	BUG_ON(NULL == dev->fmt);
681 
682 	/*
683 	 * This callback is called once per buffer, after its allocation.
684 	 *
685 	 * Vivi does not allow changing format during streaming, but it is
686 	 * possible to do so when streaming is paused (i.e. in streamoff state).
687 	 * Buffers however are not freed when going into streamoff and so
688 	 * buffer size verification has to be done in buffer_prepare, on each
689 	 * qbuf.
690 	 * It would be best to move verification code here to buf_init and
691 	 * s_fmt though.
692 	 */
693 
694 	return 0;
695 }
696 
buffer_prepare(struct vb2_buffer * vb)697 static int buffer_prepare(struct vb2_buffer *vb)
698 {
699 	struct vivi_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
700 	struct vivi_buffer *buf = container_of(vb, struct vivi_buffer, vb);
701 	unsigned long size;
702 
703 	dprintk(dev, 1, "%s, field=%d\n", __func__, vb->v4l2_buf.field);
704 
705 	BUG_ON(NULL == dev->fmt);
706 
707 	/*
708 	 * Theses properties only change when queue is idle, see s_fmt.
709 	 * The below checks should not be performed here, on each
710 	 * buffer_prepare (i.e. on each qbuf). Most of the code in this function
711 	 * should thus be moved to buffer_init and s_fmt.
712 	 */
713 	if (dev->width  < 48 || dev->width  > MAX_WIDTH ||
714 	    dev->height < 32 || dev->height > MAX_HEIGHT)
715 		return -EINVAL;
716 
717 	size = dev->width * dev->height * 2;
718 	if (vb2_plane_size(vb, 0) < size) {
719 		dprintk(dev, 1, "%s data will not fit into plane (%lu < %lu)\n",
720 				__func__, vb2_plane_size(vb, 0), size);
721 		return -EINVAL;
722 	}
723 
724 	vb2_set_plane_payload(&buf->vb, 0, size);
725 
726 	buf->fmt = dev->fmt;
727 
728 	precalculate_bars(dev);
729 	precalculate_line(dev);
730 
731 	return 0;
732 }
733 
buffer_finish(struct vb2_buffer * vb)734 static int buffer_finish(struct vb2_buffer *vb)
735 {
736 	struct vivi_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
737 	dprintk(dev, 1, "%s\n", __func__);
738 	return 0;
739 }
740 
buffer_cleanup(struct vb2_buffer * vb)741 static void buffer_cleanup(struct vb2_buffer *vb)
742 {
743 	struct vivi_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
744 	dprintk(dev, 1, "%s\n", __func__);
745 
746 }
747 
buffer_queue(struct vb2_buffer * vb)748 static void buffer_queue(struct vb2_buffer *vb)
749 {
750 	struct vivi_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
751 	struct vivi_buffer *buf = container_of(vb, struct vivi_buffer, vb);
752 	struct vivi_dmaqueue *vidq = &dev->vidq;
753 	unsigned long flags = 0;
754 
755 	dprintk(dev, 1, "%s\n", __func__);
756 
757 	spin_lock_irqsave(&dev->slock, flags);
758 	list_add_tail(&buf->list, &vidq->active);
759 	spin_unlock_irqrestore(&dev->slock, flags);
760 }
761 
start_streaming(struct vb2_queue * vq)762 static int start_streaming(struct vb2_queue *vq)
763 {
764 	struct vivi_dev *dev = vb2_get_drv_priv(vq);
765 	dprintk(dev, 1, "%s\n", __func__);
766 	return vivi_start_generating(dev);
767 }
768 
769 /* abort streaming and wait for last buffer */
stop_streaming(struct vb2_queue * vq)770 static int stop_streaming(struct vb2_queue *vq)
771 {
772 	struct vivi_dev *dev = vb2_get_drv_priv(vq);
773 	dprintk(dev, 1, "%s\n", __func__);
774 	vivi_stop_generating(dev);
775 	return 0;
776 }
777 
vivi_lock(struct vb2_queue * vq)778 static void vivi_lock(struct vb2_queue *vq)
779 {
780 	struct vivi_dev *dev = vb2_get_drv_priv(vq);
781 	mutex_lock(&dev->mutex);
782 }
783 
vivi_unlock(struct vb2_queue * vq)784 static void vivi_unlock(struct vb2_queue *vq)
785 {
786 	struct vivi_dev *dev = vb2_get_drv_priv(vq);
787 	mutex_unlock(&dev->mutex);
788 }
789 
790 
791 static struct vb2_ops vivi_video_qops = {
792 	.queue_setup		= queue_setup,
793 	.buf_init		= buffer_init,
794 	.buf_prepare		= buffer_prepare,
795 	.buf_finish		= buffer_finish,
796 	.buf_cleanup		= buffer_cleanup,
797 	.buf_queue		= buffer_queue,
798 	.start_streaming	= start_streaming,
799 	.stop_streaming		= stop_streaming,
800 	.wait_prepare		= vivi_unlock,
801 	.wait_finish		= vivi_lock,
802 };
803 
804 /* ------------------------------------------------------------------
805 	IOCTL vidioc handling
806    ------------------------------------------------------------------*/
vidioc_querycap(struct file * file,void * priv,struct v4l2_capability * cap)807 static int vidioc_querycap(struct file *file, void  *priv,
808 					struct v4l2_capability *cap)
809 {
810 	struct vivi_dev *dev = video_drvdata(file);
811 
812 	strcpy(cap->driver, "vivi");
813 	strcpy(cap->card, "vivi");
814 	strlcpy(cap->bus_info, dev->v4l2_dev.name, sizeof(cap->bus_info));
815 	cap->version = VIVI_VERSION;
816 	cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING | \
817 			    V4L2_CAP_READWRITE;
818 	return 0;
819 }
820 
vidioc_enum_fmt_vid_cap(struct file * file,void * priv,struct v4l2_fmtdesc * f)821 static int vidioc_enum_fmt_vid_cap(struct file *file, void  *priv,
822 					struct v4l2_fmtdesc *f)
823 {
824 	struct vivi_fmt *fmt;
825 
826 	if (f->index >= ARRAY_SIZE(formats))
827 		return -EINVAL;
828 
829 	fmt = &formats[f->index];
830 
831 	strlcpy(f->description, fmt->name, sizeof(f->description));
832 	f->pixelformat = fmt->fourcc;
833 	return 0;
834 }
835 
vidioc_g_fmt_vid_cap(struct file * file,void * priv,struct v4l2_format * f)836 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
837 					struct v4l2_format *f)
838 {
839 	struct vivi_dev *dev = video_drvdata(file);
840 
841 	f->fmt.pix.width        = dev->width;
842 	f->fmt.pix.height       = dev->height;
843 	f->fmt.pix.field        = dev->field;
844 	f->fmt.pix.pixelformat  = dev->fmt->fourcc;
845 	f->fmt.pix.bytesperline =
846 		(f->fmt.pix.width * dev->fmt->depth) >> 3;
847 	f->fmt.pix.sizeimage =
848 		f->fmt.pix.height * f->fmt.pix.bytesperline;
849 	return 0;
850 }
851 
vidioc_try_fmt_vid_cap(struct file * file,void * priv,struct v4l2_format * f)852 static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
853 			struct v4l2_format *f)
854 {
855 	struct vivi_dev *dev = video_drvdata(file);
856 	struct vivi_fmt *fmt;
857 	enum v4l2_field field;
858 
859 	fmt = get_format(f);
860 	if (!fmt) {
861 		dprintk(dev, 1, "Fourcc format (0x%08x) invalid.\n",
862 			f->fmt.pix.pixelformat);
863 		return -EINVAL;
864 	}
865 
866 	field = f->fmt.pix.field;
867 
868 	if (field == V4L2_FIELD_ANY) {
869 		field = V4L2_FIELD_INTERLACED;
870 	} else if (V4L2_FIELD_INTERLACED != field) {
871 		dprintk(dev, 1, "Field type invalid.\n");
872 		return -EINVAL;
873 	}
874 
875 	f->fmt.pix.field = field;
876 	v4l_bound_align_image(&f->fmt.pix.width, 48, MAX_WIDTH, 2,
877 			      &f->fmt.pix.height, 32, MAX_HEIGHT, 0, 0);
878 	f->fmt.pix.bytesperline =
879 		(f->fmt.pix.width * fmt->depth) >> 3;
880 	f->fmt.pix.sizeimage =
881 		f->fmt.pix.height * f->fmt.pix.bytesperline;
882 	return 0;
883 }
884 
vidioc_s_fmt_vid_cap(struct file * file,void * priv,struct v4l2_format * f)885 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
886 					struct v4l2_format *f)
887 {
888 	struct vivi_dev *dev = video_drvdata(file);
889 	struct vb2_queue *q = &dev->vb_vidq;
890 
891 	int ret = vidioc_try_fmt_vid_cap(file, priv, f);
892 	if (ret < 0)
893 		return ret;
894 
895 	if (vb2_is_streaming(q)) {
896 		dprintk(dev, 1, "%s device busy\n", __func__);
897 		return -EBUSY;
898 	}
899 
900 	dev->fmt = get_format(f);
901 	dev->width = f->fmt.pix.width;
902 	dev->height = f->fmt.pix.height;
903 	dev->field = f->fmt.pix.field;
904 
905 	return 0;
906 }
907 
vidioc_reqbufs(struct file * file,void * priv,struct v4l2_requestbuffers * p)908 static int vidioc_reqbufs(struct file *file, void *priv,
909 			  struct v4l2_requestbuffers *p)
910 {
911 	struct vivi_dev *dev = video_drvdata(file);
912 	return vb2_reqbufs(&dev->vb_vidq, p);
913 }
914 
vidioc_querybuf(struct file * file,void * priv,struct v4l2_buffer * p)915 static int vidioc_querybuf(struct file *file, void *priv, struct v4l2_buffer *p)
916 {
917 	struct vivi_dev *dev = video_drvdata(file);
918 	return vb2_querybuf(&dev->vb_vidq, p);
919 }
920 
vidioc_qbuf(struct file * file,void * priv,struct v4l2_buffer * p)921 static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *p)
922 {
923 	struct vivi_dev *dev = video_drvdata(file);
924 	return vb2_qbuf(&dev->vb_vidq, p);
925 }
926 
vidioc_dqbuf(struct file * file,void * priv,struct v4l2_buffer * p)927 static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p)
928 {
929 	struct vivi_dev *dev = video_drvdata(file);
930 	return vb2_dqbuf(&dev->vb_vidq, p, file->f_flags & O_NONBLOCK);
931 }
932 
vidioc_streamon(struct file * file,void * priv,enum v4l2_buf_type i)933 static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i)
934 {
935 	struct vivi_dev *dev = video_drvdata(file);
936 	return vb2_streamon(&dev->vb_vidq, i);
937 }
938 
vidioc_streamoff(struct file * file,void * priv,enum v4l2_buf_type i)939 static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type i)
940 {
941 	struct vivi_dev *dev = video_drvdata(file);
942 	return vb2_streamoff(&dev->vb_vidq, i);
943 }
944 
vidioc_s_std(struct file * file,void * priv,v4l2_std_id * i)945 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *i)
946 {
947 	return 0;
948 }
949 
950 /* only one input in this sample driver */
vidioc_enum_input(struct file * file,void * priv,struct v4l2_input * inp)951 static int vidioc_enum_input(struct file *file, void *priv,
952 				struct v4l2_input *inp)
953 {
954 	if (inp->index >= NUM_INPUTS)
955 		return -EINVAL;
956 
957 	inp->type = V4L2_INPUT_TYPE_CAMERA;
958 	inp->std = V4L2_STD_525_60;
959 	sprintf(inp->name, "Camera %u", inp->index);
960 	return 0;
961 }
962 
vidioc_g_input(struct file * file,void * priv,unsigned int * i)963 static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
964 {
965 	struct vivi_dev *dev = video_drvdata(file);
966 
967 	*i = dev->input;
968 	return 0;
969 }
970 
vidioc_s_input(struct file * file,void * priv,unsigned int i)971 static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
972 {
973 	struct vivi_dev *dev = video_drvdata(file);
974 
975 	if (i >= NUM_INPUTS)
976 		return -EINVAL;
977 
978 	dev->input = i;
979 	precalculate_bars(dev);
980 	precalculate_line(dev);
981 	return 0;
982 }
983 
984 /* --- controls ---------------------------------------------- */
985 
vivi_s_ctrl(struct v4l2_ctrl * ctrl)986 static int vivi_s_ctrl(struct v4l2_ctrl *ctrl)
987 {
988 	struct vivi_dev *dev = container_of(ctrl->handler, struct vivi_dev, ctrl_handler);
989 
990 	if (ctrl == dev->button)
991 		dev->button_pressed = 30;
992 	return 0;
993 }
994 
995 /* ------------------------------------------------------------------
996 	File operations for the device
997    ------------------------------------------------------------------*/
998 
999 static ssize_t
vivi_read(struct file * file,char __user * data,size_t count,loff_t * ppos)1000 vivi_read(struct file *file, char __user *data, size_t count, loff_t *ppos)
1001 {
1002 	struct vivi_dev *dev = video_drvdata(file);
1003 
1004 	dprintk(dev, 1, "read called\n");
1005 	return vb2_read(&dev->vb_vidq, data, count, ppos,
1006 		       file->f_flags & O_NONBLOCK);
1007 }
1008 
1009 static unsigned int
vivi_poll(struct file * file,struct poll_table_struct * wait)1010 vivi_poll(struct file *file, struct poll_table_struct *wait)
1011 {
1012 	struct vivi_dev *dev = video_drvdata(file);
1013 	struct vb2_queue *q = &dev->vb_vidq;
1014 
1015 	dprintk(dev, 1, "%s\n", __func__);
1016 	return vb2_poll(q, file, wait);
1017 }
1018 
vivi_close(struct file * file)1019 static int vivi_close(struct file *file)
1020 {
1021 	struct video_device  *vdev = video_devdata(file);
1022 	struct vivi_dev *dev = video_drvdata(file);
1023 
1024 	dprintk(dev, 1, "close called (dev=%s), file %p\n",
1025 		video_device_node_name(vdev), file);
1026 
1027 	if (v4l2_fh_is_singular_file(file))
1028 		vb2_queue_release(&dev->vb_vidq);
1029 	return v4l2_fh_release(file);
1030 }
1031 
vivi_mmap(struct file * file,struct vm_area_struct * vma)1032 static int vivi_mmap(struct file *file, struct vm_area_struct *vma)
1033 {
1034 	struct vivi_dev *dev = video_drvdata(file);
1035 	int ret;
1036 
1037 	dprintk(dev, 1, "mmap called, vma=0x%08lx\n", (unsigned long)vma);
1038 
1039 	ret = vb2_mmap(&dev->vb_vidq, vma);
1040 	dprintk(dev, 1, "vma start=0x%08lx, size=%ld, ret=%d\n",
1041 		(unsigned long)vma->vm_start,
1042 		(unsigned long)vma->vm_end - (unsigned long)vma->vm_start,
1043 		ret);
1044 	return ret;
1045 }
1046 
1047 static const struct v4l2_ctrl_ops vivi_ctrl_ops = {
1048 	.s_ctrl = vivi_s_ctrl,
1049 };
1050 
1051 #define VIVI_CID_CUSTOM_BASE	(V4L2_CID_USER_BASE | 0xf000)
1052 
1053 static const struct v4l2_ctrl_config vivi_ctrl_button = {
1054 	.ops = &vivi_ctrl_ops,
1055 	.id = VIVI_CID_CUSTOM_BASE + 0,
1056 	.name = "Button",
1057 	.type = V4L2_CTRL_TYPE_BUTTON,
1058 };
1059 
1060 static const struct v4l2_ctrl_config vivi_ctrl_boolean = {
1061 	.ops = &vivi_ctrl_ops,
1062 	.id = VIVI_CID_CUSTOM_BASE + 1,
1063 	.name = "Boolean",
1064 	.type = V4L2_CTRL_TYPE_BOOLEAN,
1065 	.min = 0,
1066 	.max = 1,
1067 	.step = 1,
1068 	.def = 1,
1069 };
1070 
1071 static const struct v4l2_ctrl_config vivi_ctrl_int32 = {
1072 	.ops = &vivi_ctrl_ops,
1073 	.id = VIVI_CID_CUSTOM_BASE + 2,
1074 	.name = "Integer 32 Bits",
1075 	.type = V4L2_CTRL_TYPE_INTEGER,
1076 	.min = 0x80000000,
1077 	.max = 0x7fffffff,
1078 	.step = 1,
1079 };
1080 
1081 static const struct v4l2_ctrl_config vivi_ctrl_int64 = {
1082 	.ops = &vivi_ctrl_ops,
1083 	.id = VIVI_CID_CUSTOM_BASE + 3,
1084 	.name = "Integer 64 Bits",
1085 	.type = V4L2_CTRL_TYPE_INTEGER64,
1086 };
1087 
1088 static const char * const vivi_ctrl_menu_strings[] = {
1089 	"Menu Item 0 (Skipped)",
1090 	"Menu Item 1",
1091 	"Menu Item 2 (Skipped)",
1092 	"Menu Item 3",
1093 	"Menu Item 4",
1094 	"Menu Item 5 (Skipped)",
1095 	NULL,
1096 };
1097 
1098 static const struct v4l2_ctrl_config vivi_ctrl_menu = {
1099 	.ops = &vivi_ctrl_ops,
1100 	.id = VIVI_CID_CUSTOM_BASE + 4,
1101 	.name = "Menu",
1102 	.type = V4L2_CTRL_TYPE_MENU,
1103 	.min = 1,
1104 	.max = 4,
1105 	.def = 3,
1106 	.menu_skip_mask = 0x04,
1107 	.qmenu = vivi_ctrl_menu_strings,
1108 };
1109 
1110 static const struct v4l2_ctrl_config vivi_ctrl_string = {
1111 	.ops = &vivi_ctrl_ops,
1112 	.id = VIVI_CID_CUSTOM_BASE + 5,
1113 	.name = "String",
1114 	.type = V4L2_CTRL_TYPE_STRING,
1115 	.min = 2,
1116 	.max = 4,
1117 	.step = 1,
1118 };
1119 
1120 static const struct v4l2_file_operations vivi_fops = {
1121 	.owner		= THIS_MODULE,
1122 	.open		= v4l2_fh_open,
1123 	.release        = vivi_close,
1124 	.read           = vivi_read,
1125 	.poll		= vivi_poll,
1126 	.unlocked_ioctl = video_ioctl2, /* V4L2 ioctl handler */
1127 	.mmap           = vivi_mmap,
1128 };
1129 
1130 static const struct v4l2_ioctl_ops vivi_ioctl_ops = {
1131 	.vidioc_querycap      = vidioc_querycap,
1132 	.vidioc_enum_fmt_vid_cap  = vidioc_enum_fmt_vid_cap,
1133 	.vidioc_g_fmt_vid_cap     = vidioc_g_fmt_vid_cap,
1134 	.vidioc_try_fmt_vid_cap   = vidioc_try_fmt_vid_cap,
1135 	.vidioc_s_fmt_vid_cap     = vidioc_s_fmt_vid_cap,
1136 	.vidioc_reqbufs       = vidioc_reqbufs,
1137 	.vidioc_querybuf      = vidioc_querybuf,
1138 	.vidioc_qbuf          = vidioc_qbuf,
1139 	.vidioc_dqbuf         = vidioc_dqbuf,
1140 	.vidioc_s_std         = vidioc_s_std,
1141 	.vidioc_enum_input    = vidioc_enum_input,
1142 	.vidioc_g_input       = vidioc_g_input,
1143 	.vidioc_s_input       = vidioc_s_input,
1144 	.vidioc_streamon      = vidioc_streamon,
1145 	.vidioc_streamoff     = vidioc_streamoff,
1146 };
1147 
1148 static struct video_device vivi_template = {
1149 	.name		= "vivi",
1150 	.fops           = &vivi_fops,
1151 	.ioctl_ops 	= &vivi_ioctl_ops,
1152 	.release	= video_device_release,
1153 
1154 	.tvnorms              = V4L2_STD_525_60,
1155 	.current_norm         = V4L2_STD_NTSC_M,
1156 };
1157 
1158 /* -----------------------------------------------------------------
1159 	Initialization and module stuff
1160    ------------------------------------------------------------------*/
1161 
vivi_release(void)1162 static int vivi_release(void)
1163 {
1164 	struct vivi_dev *dev;
1165 	struct list_head *list;
1166 
1167 	while (!list_empty(&vivi_devlist)) {
1168 		list = vivi_devlist.next;
1169 		list_del(list);
1170 		dev = list_entry(list, struct vivi_dev, vivi_devlist);
1171 
1172 		v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
1173 			video_device_node_name(dev->vfd));
1174 		video_unregister_device(dev->vfd);
1175 		v4l2_device_unregister(&dev->v4l2_dev);
1176 		v4l2_ctrl_handler_free(&dev->ctrl_handler);
1177 		kfree(dev);
1178 	}
1179 
1180 	return 0;
1181 }
1182 
vivi_create_instance(int inst)1183 static int __init vivi_create_instance(int inst)
1184 {
1185 	struct vivi_dev *dev;
1186 	struct video_device *vfd;
1187 	struct v4l2_ctrl_handler *hdl;
1188 	struct vb2_queue *q;
1189 	int ret;
1190 
1191 	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1192 	if (!dev)
1193 		return -ENOMEM;
1194 
1195 	snprintf(dev->v4l2_dev.name, sizeof(dev->v4l2_dev.name),
1196 			"%s-%03d", VIVI_MODULE_NAME, inst);
1197 	ret = v4l2_device_register(NULL, &dev->v4l2_dev);
1198 	if (ret)
1199 		goto free_dev;
1200 
1201 	dev->fmt = &formats[0];
1202 	dev->width = 640;
1203 	dev->height = 480;
1204 	hdl = &dev->ctrl_handler;
1205 	v4l2_ctrl_handler_init(hdl, 11);
1206 	dev->volume = v4l2_ctrl_new_std(hdl, &vivi_ctrl_ops,
1207 			V4L2_CID_AUDIO_VOLUME, 0, 255, 1, 200);
1208 	dev->brightness = v4l2_ctrl_new_std(hdl, &vivi_ctrl_ops,
1209 			V4L2_CID_BRIGHTNESS, 0, 255, 1, 127);
1210 	dev->contrast = v4l2_ctrl_new_std(hdl, &vivi_ctrl_ops,
1211 			V4L2_CID_CONTRAST, 0, 255, 1, 16);
1212 	dev->saturation = v4l2_ctrl_new_std(hdl, &vivi_ctrl_ops,
1213 			V4L2_CID_SATURATION, 0, 255, 1, 127);
1214 	dev->hue = v4l2_ctrl_new_std(hdl, &vivi_ctrl_ops,
1215 			V4L2_CID_HUE, -128, 127, 1, 0);
1216 	dev->button = v4l2_ctrl_new_custom(hdl, &vivi_ctrl_button, NULL);
1217 	dev->int32 = v4l2_ctrl_new_custom(hdl, &vivi_ctrl_int32, NULL);
1218 	dev->int64 = v4l2_ctrl_new_custom(hdl, &vivi_ctrl_int64, NULL);
1219 	dev->boolean = v4l2_ctrl_new_custom(hdl, &vivi_ctrl_boolean, NULL);
1220 	dev->menu = v4l2_ctrl_new_custom(hdl, &vivi_ctrl_menu, NULL);
1221 	dev->string = v4l2_ctrl_new_custom(hdl, &vivi_ctrl_string, NULL);
1222 	if (hdl->error) {
1223 		ret = hdl->error;
1224 		goto unreg_dev;
1225 	}
1226 	dev->v4l2_dev.ctrl_handler = hdl;
1227 
1228 	/* initialize locks */
1229 	spin_lock_init(&dev->slock);
1230 
1231 	/* initialize queue */
1232 	q = &dev->vb_vidq;
1233 	memset(q, 0, sizeof(dev->vb_vidq));
1234 	q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1235 	q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ;
1236 	q->drv_priv = dev;
1237 	q->buf_struct_size = sizeof(struct vivi_buffer);
1238 	q->ops = &vivi_video_qops;
1239 	q->mem_ops = &vb2_vmalloc_memops;
1240 
1241 	vb2_queue_init(q);
1242 
1243 	mutex_init(&dev->mutex);
1244 
1245 	/* init video dma queues */
1246 	INIT_LIST_HEAD(&dev->vidq.active);
1247 	init_waitqueue_head(&dev->vidq.wq);
1248 
1249 	ret = -ENOMEM;
1250 	vfd = video_device_alloc();
1251 	if (!vfd)
1252 		goto unreg_dev;
1253 
1254 	*vfd = vivi_template;
1255 	vfd->debug = debug;
1256 	vfd->v4l2_dev = &dev->v4l2_dev;
1257 	set_bit(V4L2_FL_USE_FH_PRIO, &vfd->flags);
1258 
1259 	/*
1260 	 * Provide a mutex to v4l2 core. It will be used to protect
1261 	 * all fops and v4l2 ioctls.
1262 	 */
1263 	vfd->lock = &dev->mutex;
1264 
1265 	ret = video_register_device(vfd, VFL_TYPE_GRABBER, video_nr);
1266 	if (ret < 0)
1267 		goto rel_vdev;
1268 
1269 	video_set_drvdata(vfd, dev);
1270 
1271 	/* Now that everything is fine, let's add it to device list */
1272 	list_add_tail(&dev->vivi_devlist, &vivi_devlist);
1273 
1274 	if (video_nr != -1)
1275 		video_nr++;
1276 
1277 	dev->vfd = vfd;
1278 	v4l2_info(&dev->v4l2_dev, "V4L2 device registered as %s\n",
1279 		  video_device_node_name(vfd));
1280 	return 0;
1281 
1282 rel_vdev:
1283 	video_device_release(vfd);
1284 unreg_dev:
1285 	v4l2_ctrl_handler_free(hdl);
1286 	v4l2_device_unregister(&dev->v4l2_dev);
1287 free_dev:
1288 	kfree(dev);
1289 	return ret;
1290 }
1291 
1292 /* This routine allocates from 1 to n_devs virtual drivers.
1293 
1294    The real maximum number of virtual drivers will depend on how many drivers
1295    will succeed. This is limited to the maximum number of devices that
1296    videodev supports, which is equal to VIDEO_NUM_DEVICES.
1297  */
vivi_init(void)1298 static int __init vivi_init(void)
1299 {
1300 	const struct font_desc *font = find_font("VGA8x16");
1301 	int ret = 0, i;
1302 
1303 	if (font == NULL) {
1304 		printk(KERN_ERR "vivi: could not find font\n");
1305 		return -ENODEV;
1306 	}
1307 	font8x16 = font->data;
1308 
1309 	if (n_devs <= 0)
1310 		n_devs = 1;
1311 
1312 	for (i = 0; i < n_devs; i++) {
1313 		ret = vivi_create_instance(i);
1314 		if (ret) {
1315 			/* If some instantiations succeeded, keep driver */
1316 			if (i)
1317 				ret = 0;
1318 			break;
1319 		}
1320 	}
1321 
1322 	if (ret < 0) {
1323 		printk(KERN_ERR "vivi: error %d while loading driver\n", ret);
1324 		return ret;
1325 	}
1326 
1327 	printk(KERN_INFO "Video Technology Magazine Virtual Video "
1328 			"Capture Board ver %u.%u.%u successfully loaded.\n",
1329 			(VIVI_VERSION >> 16) & 0xFF, (VIVI_VERSION >> 8) & 0xFF,
1330 			VIVI_VERSION & 0xFF);
1331 
1332 	/* n_devs will reflect the actual number of allocated devices */
1333 	n_devs = i;
1334 
1335 	return ret;
1336 }
1337 
vivi_exit(void)1338 static void __exit vivi_exit(void)
1339 {
1340 	vivi_release();
1341 }
1342 
1343 module_init(vivi_init);
1344 module_exit(vivi_exit);
1345