2 * Virtual Video driver - This code emulates a real video device with v4l2 api
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/
10 * Conversion to videobuf2 by Pawel Osciak & Marek Szyprowski
11 * Copyright (c) 2010 Samsung Electronics
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
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>
37 #define VIVI_MODULE_NAME "vivi"
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 */
44 #define MAX_WIDTH 1920
45 #define MAX_HEIGHT 1200
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)
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");
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");
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");
65 static unsigned debug
;
66 module_param(debug
, uint
, 0644);
67 MODULE_PARM_DESC(debug
, "activates debug info");
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");
73 /* Global font descriptor */
74 static const u8
*font8x16
;
76 #define dprintk(dev, level, fmt, arg...) \
77 v4l2_dbg(level, debug, &dev->v4l2_dev, fmt, ## arg)
79 /* ------------------------------------------------------------------
81 ------------------------------------------------------------------*/
85 u32 fourcc
; /* v4l2 format id */
89 static struct vivi_fmt formats
[] = {
91 .name
= "4:2:2, packed, YUYV",
92 .fourcc
= V4L2_PIX_FMT_YUYV
,
96 .name
= "4:2:2, packed, UYVY",
97 .fourcc
= V4L2_PIX_FMT_UYVY
,
101 .name
= "RGB565 (LE)",
102 .fourcc
= V4L2_PIX_FMT_RGB565
, /* gggbbbbb rrrrrggg */
106 .name
= "RGB565 (BE)",
107 .fourcc
= V4L2_PIX_FMT_RGB565X
, /* rrrrrggg gggbbbbb */
111 .name
= "RGB555 (LE)",
112 .fourcc
= V4L2_PIX_FMT_RGB555
, /* gggbbbbb arrrrrgg */
116 .name
= "RGB555 (BE)",
117 .fourcc
= V4L2_PIX_FMT_RGB555X
, /* arrrrrgg gggbbbbb */
122 static struct vivi_fmt
*get_format(struct v4l2_format
*f
)
124 struct vivi_fmt
*fmt
;
127 for (k
= 0; k
< ARRAY_SIZE(formats
); k
++) {
129 if (fmt
->fourcc
== f
->fmt
.pix
.pixelformat
)
133 if (k
== ARRAY_SIZE(formats
))
139 /* buffer for one video frame */
141 /* common v4l buffer stuff -- must be first */
142 struct vb2_buffer vb
;
143 struct list_head list
;
144 struct vivi_fmt
*fmt
;
147 struct vivi_dmaqueue
{
148 struct list_head active
;
150 /* thread for generating video stream*/
151 struct task_struct
*kthread
;
152 wait_queue_head_t wq
;
153 /* Counters to control fps rate */
158 static LIST_HEAD(vivi_devlist
);
161 struct list_head vivi_devlist
;
162 struct v4l2_device v4l2_dev
;
163 struct v4l2_ctrl_handler ctrl_handler
;
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
;
181 /* various device info */
182 struct video_device
*vfd
;
184 struct vivi_dmaqueue vidq
;
186 /* Several counters */
188 unsigned long jiffies
;
189 unsigned button_pressed
;
191 int mv_count
; /* Controls bars movement */
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
;
204 u8 line
[MAX_WIDTH
* 4];
207 /* ------------------------------------------------------------------
208 DMA and thread functions
209 ------------------------------------------------------------------*/
211 /* Bars and Colors should match positions */
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}
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
}
246 { COLOR_WHITE
, COLOR_AMBER
, COLOR_BLACK
, COLOR_WHITE
,
247 COLOR_AMBER
, COLOR_BLACK
, COLOR_WHITE
, COLOR_AMBER
, COLOR_BLACK
}
249 { COLOR_WHITE
, COLOR_CYAN
, COLOR_BLACK
, COLOR_WHITE
,
250 COLOR_CYAN
, COLOR_BLACK
, COLOR_WHITE
, COLOR_CYAN
, COLOR_BLACK
}
252 { COLOR_WHITE
, COLOR_GREEN
, COLOR_BLACK
, COLOR_WHITE
,
253 COLOR_GREEN
, COLOR_BLACK
, COLOR_WHITE
, COLOR_GREEN
, COLOR_BLACK
}
257 #define NUM_INPUTS ARRAY_SIZE(bars)
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)
268 /* precalculate color bar values to speed up rendering */
269 static void precalculate_bars(struct vivi_dev
*dev
)
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];
280 switch (dev
->fmt
->fourcc
) {
281 case V4L2_PIX_FMT_YUYV
:
282 case V4L2_PIX_FMT_UYVY
:
285 case V4L2_PIX_FMT_RGB565
:
286 case V4L2_PIX_FMT_RGB565X
:
291 case V4L2_PIX_FMT_RGB555
:
292 case V4L2_PIX_FMT_RGB555X
:
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 */
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)
316 static void gen_twopix(struct vivi_dev
*dev
, u8
*buf
, int colorpos
)
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 */
326 for (color
= 0; color
< 4; color
++) {
329 switch (dev
->fmt
->fourcc
) {
330 case V4L2_PIX_FMT_YUYV
:
344 case V4L2_PIX_FMT_UYVY
:
358 case V4L2_PIX_FMT_RGB565
:
362 *p
= (g_u
<< 5) | b_v
;
366 *p
= (r_y
<< 3) | (g_u
>> 3);
370 case V4L2_PIX_FMT_RGB565X
:
374 *p
= (r_y
<< 3) | (g_u
>> 3);
378 *p
= (g_u
<< 5) | b_v
;
382 case V4L2_PIX_FMT_RGB555
:
386 *p
= (g_u
<< 5) | b_v
;
390 *p
= (r_y
<< 2) | (g_u
>> 3);
394 case V4L2_PIX_FMT_RGB555X
:
398 *p
= (r_y
<< 2) | (g_u
>> 3);
402 *p
= (g_u
<< 5) | b_v
;
410 static void precalculate_line(struct vivi_dev
*dev
)
414 for (w
= 0; w
< dev
->width
* 2; w
+= 2) {
415 int colorpos
= (w
/ (dev
->width
/ 8) % 8);
417 gen_twopix(dev
, dev
->line
+ w
* 2, colorpos
);
421 static void gen_text(struct vivi_dev
*dev
, char *basep
,
422 int y
, int x
, char *text
)
426 /* Checks if it is possible to show string */
427 if (y
+ 16 >= dev
->height
|| x
+ strlen(text
) * 8 >= dev
->width
)
430 /* Print stream time */
431 for (line
= y
; line
< y
+ 16; line
++) {
433 char *pos
= basep
+ line
* dev
->width
* 2 + x
* 2;
436 for (s
= text
; *s
; s
++) {
437 u8 chr
= font8x16
[*s
* 16 + line
- y
];
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
);
445 gen_twopix(dev
, pos
+ j
* 2, TEXT_BLACK
);
451 static void vivi_fillbuff(struct vivi_dev
*dev
, struct vivi_buffer
*buf
)
453 int wmax
= dev
->width
;
454 int hmax
= dev
->height
;
456 void *vbuf
= vb2_plane_vaddr(&buf
->vb
, 0);
464 for (h
= 0; h
< hmax
; h
++)
465 memcpy(vbuf
+ h
* wmax
* 2, dev
->line
+ (dev
->mv_count
% wmax
) * 2, wmax
* 2);
467 /* Updates stream time */
469 dev
->ms
+= jiffies_to_msecs(jiffies
- dev
->jiffies
);
470 dev
->jiffies
= jiffies
;
472 snprintf(str
, sizeof(str
), " %02d:%02d:%02d:%03d ",
473 (ms
/ (60 * 60 * 1000)) % 24,
474 (ms
/ (60 * 1000)) % 60,
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
);
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
,
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 ",
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
);
509 buf
->vb
.v4l2_buf
.field
= dev
->field
;
511 buf
->vb
.v4l2_buf
.sequence
= dev
->field_count
>> 1;
512 do_gettimeofday(&ts
);
513 buf
->vb
.v4l2_buf
.timestamp
= ts
;
516 static void vivi_thread_tick(struct vivi_dev
*dev
)
518 struct vivi_dmaqueue
*dma_q
= &dev
->vidq
;
519 struct vivi_buffer
*buf
;
520 unsigned long flags
= 0;
522 dprintk(dev
, 1, "Thread tick\n");
524 spin_lock_irqsave(&dev
->slock
, flags
);
525 if (list_empty(&dma_q
->active
)) {
526 dprintk(dev
, 1, "No active queue to serve\n");
530 buf
= list_entry(dma_q
->active
.next
, struct vivi_buffer
, list
);
531 list_del(&buf
->list
);
533 do_gettimeofday(&buf
->vb
.v4l2_buf
.timestamp
);
536 vivi_fillbuff(dev
, buf
);
537 dprintk(dev
, 1, "filled buffer %p\n", buf
);
539 vb2_buffer_done(&buf
->vb
, VB2_BUF_STATE_DONE
);
540 dprintk(dev
, 2, "[%p/%d] done\n", buf
, buf
->vb
.v4l2_buf
.index
);
542 spin_unlock_irqrestore(&dev
->slock
, flags
);
545 #define frames_to_ms(frames) \
546 ((frames * WAKE_NUMERATOR * 1000) / WAKE_DENOMINATOR)
548 static void vivi_sleep(struct vivi_dev
*dev
)
550 struct vivi_dmaqueue
*dma_q
= &dev
->vidq
;
552 DECLARE_WAITQUEUE(wait
, current
);
554 dprintk(dev
, 1, "%s dma_q=0x%08lx\n", __func__
,
555 (unsigned long)dma_q
);
557 add_wait_queue(&dma_q
->wq
, &wait
);
558 if (kthread_should_stop())
561 /* Calculate time to wake up */
562 timeout
= msecs_to_jiffies(frames_to_ms(1));
564 vivi_thread_tick(dev
);
566 schedule_timeout_interruptible(timeout
);
569 remove_wait_queue(&dma_q
->wq
, &wait
);
573 static int vivi_thread(void *data
)
575 struct vivi_dev
*dev
= data
;
577 dprintk(dev
, 1, "thread started\n");
584 if (kthread_should_stop())
587 dprintk(dev
, 1, "thread: exit\n");
591 static int vivi_start_generating(struct vivi_dev
*dev
)
593 struct vivi_dmaqueue
*dma_q
= &dev
->vidq
;
595 dprintk(dev
, 1, "%s\n", __func__
);
597 /* Resets frame counters */
600 dev
->jiffies
= jiffies
;
603 dma_q
->ini_jiffies
= jiffies
;
604 dma_q
->kthread
= kthread_run(vivi_thread
, dev
, dev
->v4l2_dev
.name
);
606 if (IS_ERR(dma_q
->kthread
)) {
607 v4l2_err(&dev
->v4l2_dev
, "kernel_thread() failed\n");
608 return PTR_ERR(dma_q
->kthread
);
611 wake_up_interruptible(&dma_q
->wq
);
613 dprintk(dev
, 1, "returning from %s\n", __func__
);
617 static void vivi_stop_generating(struct vivi_dev
*dev
)
619 struct vivi_dmaqueue
*dma_q
= &dev
->vidq
;
621 dprintk(dev
, 1, "%s\n", __func__
);
623 /* shutdown control thread */
624 if (dma_q
->kthread
) {
625 kthread_stop(dma_q
->kthread
);
626 dma_q
->kthread
= NULL
;
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.
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
);
643 /* ------------------------------------------------------------------
645 ------------------------------------------------------------------*/
646 static int queue_setup(struct vb2_queue
*vq
, unsigned int *nbuffers
,
647 unsigned int *nplanes
, unsigned long sizes
[],
650 struct vivi_dev
*dev
= vb2_get_drv_priv(vq
);
653 size
= dev
->width
* dev
->height
* 2;
658 while (size
* *nbuffers
> vid_limit
* 1024 * 1024)
666 * videobuf2-vmalloc allocator is context-less so no need to set
670 dprintk(dev
, 1, "%s, count=%d, size=%ld\n", __func__
,
676 static int buffer_init(struct vb2_buffer
*vb
)
678 struct vivi_dev
*dev
= vb2_get_drv_priv(vb
->vb2_queue
);
680 BUG_ON(NULL
== dev
->fmt
);
683 * This callback is called once per buffer, after its allocation.
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
690 * It would be best to move verification code here to buf_init and
697 static int buffer_prepare(struct vb2_buffer
*vb
)
699 struct vivi_dev
*dev
= vb2_get_drv_priv(vb
->vb2_queue
);
700 struct vivi_buffer
*buf
= container_of(vb
, struct vivi_buffer
, vb
);
703 dprintk(dev
, 1, "%s, field=%d\n", __func__
, vb
->v4l2_buf
.field
);
705 BUG_ON(NULL
== dev
->fmt
);
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.
713 if (dev
->width
< 48 || dev
->width
> MAX_WIDTH
||
714 dev
->height
< 32 || dev
->height
> MAX_HEIGHT
)
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
);
724 vb2_set_plane_payload(&buf
->vb
, 0, size
);
728 precalculate_bars(dev
);
729 precalculate_line(dev
);
734 static int buffer_finish(struct vb2_buffer
*vb
)
736 struct vivi_dev
*dev
= vb2_get_drv_priv(vb
->vb2_queue
);
737 dprintk(dev
, 1, "%s\n", __func__
);
741 static void buffer_cleanup(struct vb2_buffer
*vb
)
743 struct vivi_dev
*dev
= vb2_get_drv_priv(vb
->vb2_queue
);
744 dprintk(dev
, 1, "%s\n", __func__
);
748 static void buffer_queue(struct vb2_buffer
*vb
)
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;
755 dprintk(dev
, 1, "%s\n", __func__
);
757 spin_lock_irqsave(&dev
->slock
, flags
);
758 list_add_tail(&buf
->list
, &vidq
->active
);
759 spin_unlock_irqrestore(&dev
->slock
, flags
);
762 static int start_streaming(struct vb2_queue
*vq
)
764 struct vivi_dev
*dev
= vb2_get_drv_priv(vq
);
765 dprintk(dev
, 1, "%s\n", __func__
);
766 return vivi_start_generating(dev
);
769 /* abort streaming and wait for last buffer */
770 static int stop_streaming(struct vb2_queue
*vq
)
772 struct vivi_dev
*dev
= vb2_get_drv_priv(vq
);
773 dprintk(dev
, 1, "%s\n", __func__
);
774 vivi_stop_generating(dev
);
778 static void vivi_lock(struct vb2_queue
*vq
)
780 struct vivi_dev
*dev
= vb2_get_drv_priv(vq
);
781 mutex_lock(&dev
->mutex
);
784 static void vivi_unlock(struct vb2_queue
*vq
)
786 struct vivi_dev
*dev
= vb2_get_drv_priv(vq
);
787 mutex_unlock(&dev
->mutex
);
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
,
804 /* ------------------------------------------------------------------
805 IOCTL vidioc handling
806 ------------------------------------------------------------------*/
807 static int vidioc_querycap(struct file
*file
, void *priv
,
808 struct v4l2_capability
*cap
)
810 struct vivi_dev
*dev
= video_drvdata(file
);
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
| \
821 static int vidioc_enum_fmt_vid_cap(struct file
*file
, void *priv
,
822 struct v4l2_fmtdesc
*f
)
824 struct vivi_fmt
*fmt
;
826 if (f
->index
>= ARRAY_SIZE(formats
))
829 fmt
= &formats
[f
->index
];
831 strlcpy(f
->description
, fmt
->name
, sizeof(f
->description
));
832 f
->pixelformat
= fmt
->fourcc
;
836 static int vidioc_g_fmt_vid_cap(struct file
*file
, void *priv
,
837 struct v4l2_format
*f
)
839 struct vivi_dev
*dev
= video_drvdata(file
);
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
;
852 static int vidioc_try_fmt_vid_cap(struct file
*file
, void *priv
,
853 struct v4l2_format
*f
)
855 struct vivi_dev
*dev
= video_drvdata(file
);
856 struct vivi_fmt
*fmt
;
857 enum v4l2_field field
;
861 dprintk(dev
, 1, "Fourcc format (0x%08x) invalid.\n",
862 f
->fmt
.pix
.pixelformat
);
866 field
= f
->fmt
.pix
.field
;
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");
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
;
885 static int vidioc_s_fmt_vid_cap(struct file
*file
, void *priv
,
886 struct v4l2_format
*f
)
888 struct vivi_dev
*dev
= video_drvdata(file
);
889 struct vb2_queue
*q
= &dev
->vb_vidq
;
891 int ret
= vidioc_try_fmt_vid_cap(file
, priv
, f
);
895 if (vb2_is_streaming(q
)) {
896 dprintk(dev
, 1, "%s device busy\n", __func__
);
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
;
908 static int vidioc_reqbufs(struct file
*file
, void *priv
,
909 struct v4l2_requestbuffers
*p
)
911 struct vivi_dev
*dev
= video_drvdata(file
);
912 return vb2_reqbufs(&dev
->vb_vidq
, p
);
915 static int vidioc_querybuf(struct file
*file
, void *priv
, struct v4l2_buffer
*p
)
917 struct vivi_dev
*dev
= video_drvdata(file
);
918 return vb2_querybuf(&dev
->vb_vidq
, p
);
921 static int vidioc_qbuf(struct file
*file
, void *priv
, struct v4l2_buffer
*p
)
923 struct vivi_dev
*dev
= video_drvdata(file
);
924 return vb2_qbuf(&dev
->vb_vidq
, p
);
927 static int vidioc_dqbuf(struct file
*file
, void *priv
, struct v4l2_buffer
*p
)
929 struct vivi_dev
*dev
= video_drvdata(file
);
930 return vb2_dqbuf(&dev
->vb_vidq
, p
, file
->f_flags
& O_NONBLOCK
);
933 static int vidioc_streamon(struct file
*file
, void *priv
, enum v4l2_buf_type i
)
935 struct vivi_dev
*dev
= video_drvdata(file
);
936 return vb2_streamon(&dev
->vb_vidq
, i
);
939 static int vidioc_streamoff(struct file
*file
, void *priv
, enum v4l2_buf_type i
)
941 struct vivi_dev
*dev
= video_drvdata(file
);
942 return vb2_streamoff(&dev
->vb_vidq
, i
);
945 static int vidioc_s_std(struct file
*file
, void *priv
, v4l2_std_id
*i
)
950 /* only one input in this sample driver */
951 static int vidioc_enum_input(struct file
*file
, void *priv
,
952 struct v4l2_input
*inp
)
954 if (inp
->index
>= NUM_INPUTS
)
957 inp
->type
= V4L2_INPUT_TYPE_CAMERA
;
958 inp
->std
= V4L2_STD_525_60
;
959 sprintf(inp
->name
, "Camera %u", inp
->index
);
963 static int vidioc_g_input(struct file
*file
, void *priv
, unsigned int *i
)
965 struct vivi_dev
*dev
= video_drvdata(file
);
971 static int vidioc_s_input(struct file
*file
, void *priv
, unsigned int i
)
973 struct vivi_dev
*dev
= video_drvdata(file
);
979 precalculate_bars(dev
);
980 precalculate_line(dev
);
984 /* --- controls ---------------------------------------------- */
986 static int vivi_s_ctrl(struct v4l2_ctrl
*ctrl
)
988 struct vivi_dev
*dev
= container_of(ctrl
->handler
, struct vivi_dev
, ctrl_handler
);
990 if (ctrl
== dev
->button
)
991 dev
->button_pressed
= 30;
995 /* ------------------------------------------------------------------
996 File operations for the device
997 ------------------------------------------------------------------*/
1000 vivi_read(struct file
*file
, char __user
*data
, size_t count
, loff_t
*ppos
)
1002 struct vivi_dev
*dev
= video_drvdata(file
);
1004 dprintk(dev
, 1, "read called\n");
1005 return vb2_read(&dev
->vb_vidq
, data
, count
, ppos
,
1006 file
->f_flags
& O_NONBLOCK
);
1010 vivi_poll(struct file
*file
, struct poll_table_struct
*wait
)
1012 struct vivi_dev
*dev
= video_drvdata(file
);
1013 struct vb2_queue
*q
= &dev
->vb_vidq
;
1015 dprintk(dev
, 1, "%s\n", __func__
);
1016 return vb2_poll(q
, file
, wait
);
1019 static int vivi_close(struct file
*file
)
1021 struct video_device
*vdev
= video_devdata(file
);
1022 struct vivi_dev
*dev
= video_drvdata(file
);
1024 dprintk(dev
, 1, "close called (dev=%s), file %p\n",
1025 video_device_node_name(vdev
), file
);
1027 if (v4l2_fh_is_singular_file(file
))
1028 vb2_queue_release(&dev
->vb_vidq
);
1029 return v4l2_fh_release(file
);
1032 static int vivi_mmap(struct file
*file
, struct vm_area_struct
*vma
)
1034 struct vivi_dev
*dev
= video_drvdata(file
);
1037 dprintk(dev
, 1, "mmap called, vma=0x%08lx\n", (unsigned long)vma
);
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
,
1047 static const struct v4l2_ctrl_ops vivi_ctrl_ops
= {
1048 .s_ctrl
= vivi_s_ctrl
,
1051 #define VIVI_CID_CUSTOM_BASE (V4L2_CID_USER_BASE | 0xf000)
1053 static const struct v4l2_ctrl_config vivi_ctrl_button
= {
1054 .ops
= &vivi_ctrl_ops
,
1055 .id
= VIVI_CID_CUSTOM_BASE
+ 0,
1057 .type
= V4L2_CTRL_TYPE_BUTTON
,
1060 static const struct v4l2_ctrl_config vivi_ctrl_boolean
= {
1061 .ops
= &vivi_ctrl_ops
,
1062 .id
= VIVI_CID_CUSTOM_BASE
+ 1,
1064 .type
= V4L2_CTRL_TYPE_BOOLEAN
,
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
,
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
,
1088 static const char * const vivi_ctrl_menu_strings
[] = {
1089 "Menu Item 0 (Skipped)",
1091 "Menu Item 2 (Skipped)",
1094 "Menu Item 5 (Skipped)",
1098 static const struct v4l2_ctrl_config vivi_ctrl_menu
= {
1099 .ops
= &vivi_ctrl_ops
,
1100 .id
= VIVI_CID_CUSTOM_BASE
+ 4,
1102 .type
= V4L2_CTRL_TYPE_MENU
,
1106 .menu_skip_mask
= 0x04,
1107 .qmenu
= vivi_ctrl_menu_strings
,
1110 static const struct v4l2_ctrl_config vivi_ctrl_string
= {
1111 .ops
= &vivi_ctrl_ops
,
1112 .id
= VIVI_CID_CUSTOM_BASE
+ 5,
1114 .type
= V4L2_CTRL_TYPE_STRING
,
1120 static const struct v4l2_file_operations vivi_fops
= {
1121 .owner
= THIS_MODULE
,
1122 .open
= v4l2_fh_open
,
1123 .release
= vivi_close
,
1126 .unlocked_ioctl
= video_ioctl2
, /* V4L2 ioctl handler */
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
,
1148 static struct video_device vivi_template
= {
1151 .ioctl_ops
= &vivi_ioctl_ops
,
1152 .release
= video_device_release
,
1154 .tvnorms
= V4L2_STD_525_60
,
1155 .current_norm
= V4L2_STD_NTSC_M
,
1158 /* -----------------------------------------------------------------
1159 Initialization and module stuff
1160 ------------------------------------------------------------------*/
1162 static int vivi_release(void)
1164 struct vivi_dev
*dev
;
1165 struct list_head
*list
;
1167 while (!list_empty(&vivi_devlist
)) {
1168 list
= vivi_devlist
.next
;
1170 dev
= list_entry(list
, struct vivi_dev
, vivi_devlist
);
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
);
1183 static int __init
vivi_create_instance(int inst
)
1185 struct vivi_dev
*dev
;
1186 struct video_device
*vfd
;
1187 struct v4l2_ctrl_handler
*hdl
;
1188 struct vb2_queue
*q
;
1191 dev
= kzalloc(sizeof(*dev
), GFP_KERNEL
);
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
);
1201 dev
->fmt
= &formats
[0];
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
);
1226 dev
->v4l2_dev
.ctrl_handler
= hdl
;
1228 /* initialize locks */
1229 spin_lock_init(&dev
->slock
);
1231 /* initialize queue */
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
;
1237 q
->buf_struct_size
= sizeof(struct vivi_buffer
);
1238 q
->ops
= &vivi_video_qops
;
1239 q
->mem_ops
= &vb2_vmalloc_memops
;
1243 mutex_init(&dev
->mutex
);
1245 /* init video dma queues */
1246 INIT_LIST_HEAD(&dev
->vidq
.active
);
1247 init_waitqueue_head(&dev
->vidq
.wq
);
1250 vfd
= video_device_alloc();
1254 *vfd
= vivi_template
;
1256 vfd
->v4l2_dev
= &dev
->v4l2_dev
;
1257 set_bit(V4L2_FL_USE_FH_PRIO
, &vfd
->flags
);
1260 * Provide a mutex to v4l2 core. It will be used to protect
1261 * all fops and v4l2 ioctls.
1263 vfd
->lock
= &dev
->mutex
;
1265 ret
= video_register_device(vfd
, VFL_TYPE_GRABBER
, video_nr
);
1269 video_set_drvdata(vfd
, dev
);
1271 /* Now that everything is fine, let's add it to device list */
1272 list_add_tail(&dev
->vivi_devlist
, &vivi_devlist
);
1278 v4l2_info(&dev
->v4l2_dev
, "V4L2 device registered as %s\n",
1279 video_device_node_name(vfd
));
1283 video_device_release(vfd
);
1285 v4l2_ctrl_handler_free(hdl
);
1286 v4l2_device_unregister(&dev
->v4l2_dev
);
1292 /* This routine allocates from 1 to n_devs virtual drivers.
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.
1298 static int __init
vivi_init(void)
1300 const struct font_desc
*font
= find_font("VGA8x16");
1304 printk(KERN_ERR
"vivi: could not find font\n");
1307 font8x16
= font
->data
;
1312 for (i
= 0; i
< n_devs
; i
++) {
1313 ret
= vivi_create_instance(i
);
1315 /* If some instantiations succeeded, keep driver */
1323 printk(KERN_ERR
"vivi: error %d while loading driver\n", ret
);
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);
1332 /* n_devs will reflect the actual number of allocated devices */
1338 static void __exit
vivi_exit(void)
1343 module_init(vivi_init
);
1344 module_exit(vivi_exit
);