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