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 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the BSD Licence, GNU General Public License
12 * as published by the Free Software Foundation; either version 2 of the
13 * License, or (at your option) any later version
15 #include <linux/module.h>
16 #include <linux/delay.h>
17 #include <linux/errno.h>
19 #include <linux/kernel.h>
20 #include <linux/slab.h>
22 #include <linux/ioport.h>
23 #include <linux/init.h>
24 #include <linux/sched.h>
25 #include <linux/pci.h>
26 #include <linux/random.h>
27 #include <linux/version.h>
28 #include <linux/mutex.h>
29 #include <linux/videodev2.h>
30 #include <linux/dma-mapping.h>
31 #ifdef CONFIG_VIDEO_V4L1_COMPAT
32 /* Include V4L1 specific functions. Should be removed soon */
33 #include <linux/videodev.h>
35 #include <linux/interrupt.h>
36 #include <media/videobuf-vmalloc.h>
37 #include <media/v4l2-common.h>
38 #include <media/v4l2-ioctl.h>
39 #include <linux/kthread.h>
40 #include <linux/highmem.h>
41 #include <linux/freezer.h>
43 #define VIVI_MODULE_NAME "vivi"
45 /* Wake up at about 30 fps */
46 #define WAKE_NUMERATOR 30
47 #define WAKE_DENOMINATOR 1001
48 #define BUFFER_TIMEOUT msecs_to_jiffies(500) /* 0.5 seconds */
52 #define VIVI_MAJOR_VERSION 0
53 #define VIVI_MINOR_VERSION 5
54 #define VIVI_RELEASE 0
55 #define VIVI_VERSION \
56 KERNEL_VERSION(VIVI_MAJOR_VERSION, VIVI_MINOR_VERSION, VIVI_RELEASE)
58 /* Declare static vars that will be used as parameters */
59 static unsigned int vid_limit = 16; /* Video memory limit, in Mb */
60 static int video_nr = -1; /* /dev/videoN, -1 for autodetect */
61 static int n_devs = 1; /* Number of virtual devices */
63 /* supported controls */
64 static struct v4l2_queryctrl vivi_qctrl[] = {
66 .id = V4L2_CID_AUDIO_VOLUME,
71 .default_value = 65535,
73 .type = V4L2_CTRL_TYPE_INTEGER,
75 .id = V4L2_CID_BRIGHTNESS,
76 .type = V4L2_CTRL_TYPE_INTEGER,
84 .id = V4L2_CID_CONTRAST,
85 .type = V4L2_CTRL_TYPE_INTEGER,
90 .default_value = 0x10,
93 .id = V4L2_CID_SATURATION,
94 .type = V4L2_CTRL_TYPE_INTEGER,
103 .type = V4L2_CTRL_TYPE_INTEGER,
113 static int qctl_regs[ARRAY_SIZE(vivi_qctrl)];
115 #define dprintk(dev, level, fmt, arg...) \
117 if (dev->vfd->debug >= (level)) \
118 printk(KERN_DEBUG "vivi: " fmt , ## arg); \
121 /* ------------------------------------------------------------------
123 ------------------------------------------------------------------*/
127 u32 fourcc; /* v4l2 format id */
131 static struct vivi_fmt formats[] = {
133 .name = "4:2:2, packed, YUYV",
134 .fourcc = V4L2_PIX_FMT_YUYV,
138 .name = "4:2:2, packed, UYVY",
139 .fourcc = V4L2_PIX_FMT_UYVY,
143 .name = "RGB565 (LE)",
144 .fourcc = V4L2_PIX_FMT_RGB565, /* gggbbbbb rrrrrggg */
148 .name = "RGB565 (BE)",
149 .fourcc = V4L2_PIX_FMT_RGB565X, /* rrrrrggg gggbbbbb */
153 .name = "RGB555 (LE)",
154 .fourcc = V4L2_PIX_FMT_RGB555, /* gggbbbbb arrrrrgg */
158 .name = "RGB555 (BE)",
159 .fourcc = V4L2_PIX_FMT_RGB555X, /* arrrrrgg gggbbbbb */
164 static struct vivi_fmt *get_format(struct v4l2_format *f)
166 struct vivi_fmt *fmt;
169 for (k = 0; k < ARRAY_SIZE(formats); k++) {
171 if (fmt->fourcc == f->fmt.pix.pixelformat)
175 if (k == ARRAY_SIZE(formats))
183 struct scatterlist *sg;
186 /* buffer for one video frame */
188 /* common v4l buffer stuff -- must be first */
189 struct videobuf_buffer vb;
191 struct vivi_fmt *fmt;
194 struct vivi_dmaqueue {
195 struct list_head active;
197 /* thread for generating video stream*/
198 struct task_struct *kthread;
199 wait_queue_head_t wq;
200 /* Counters to control fps rate */
205 static LIST_HEAD(vivi_devlist);
208 struct list_head vivi_devlist;
215 /* various device info */
216 struct video_device *vfd;
218 struct vivi_dmaqueue vidq;
220 /* Several counters */
222 unsigned long jiffies;
225 int mv_count; /* Controls bars movement */
232 struct vivi_dev *dev;
235 struct vivi_fmt *fmt;
236 unsigned int width, height;
237 struct videobuf_queue vb_vidq;
239 enum v4l2_buf_type type;
240 unsigned char bars[8][3];
241 int input; /* Input Number on bars */
244 /* ------------------------------------------------------------------
245 DMA and thread functions
246 ------------------------------------------------------------------*/
248 /* Bars and Colors should match positions */
262 #define COLOR_WHITE {204, 204, 204}
263 #define COLOR_AMBAR {208, 208, 0}
264 #define COLOR_CIAN { 0, 206, 206}
265 #define COLOR_GREEN { 0, 239, 0}
266 #define COLOR_MAGENTA {239, 0, 239}
267 #define COLOR_RED {205, 0, 0}
268 #define COLOR_BLUE { 0, 0, 255}
269 #define COLOR_BLACK { 0, 0, 0}
275 /* Maximum number of bars are 10 - otherwise, the input print code
276 should be modified */
277 static struct bar_std bars[] = {
278 { /* Standard ITU-R color bar sequence */
325 #define NUM_INPUTS ARRAY_SIZE(bars)
327 #define TO_Y(r, g, b) \
328 (((16829 * r + 33039 * g + 6416 * b + 32768) >> 16) + 16)
329 /* RGB to V(Cr) Color transform */
330 #define TO_V(r, g, b) \
331 (((28784 * r - 24103 * g - 4681 * b + 32768) >> 16) + 128)
332 /* RGB to U(Cb) Color transform */
333 #define TO_U(r, g, b) \
334 (((-9714 * r - 19070 * g + 28784 * b + 32768) >> 16) + 128)
336 #define TSTAMP_MIN_Y 24
337 #define TSTAMP_MAX_Y (TSTAMP_MIN_Y + 15)
338 #define TSTAMP_INPUT_X 10
339 #define TSTAMP_MIN_X (54 + TSTAMP_INPUT_X)
341 static void gen_twopix(struct vivi_fh *fh, unsigned char *buf, int colorpos)
343 unsigned char r_y, g_u, b_v;
347 r_y = fh->bars[colorpos][0]; /* R or precalculated Y */
348 g_u = fh->bars[colorpos][1]; /* G or precalculated U */
349 b_v = fh->bars[colorpos][2]; /* B or precalculated V */
351 for (color = 0; color < 4; color++) {
354 switch (fh->fmt->fourcc) {
355 case V4L2_PIX_FMT_YUYV:
369 case V4L2_PIX_FMT_UYVY:
383 case V4L2_PIX_FMT_RGB565:
387 *p = (g_u << 5) | b_v;
391 *p = (r_y << 3) | (g_u >> 3);
395 case V4L2_PIX_FMT_RGB565X:
399 *p = (r_y << 3) | (g_u >> 3);
403 *p = (g_u << 5) | b_v;
407 case V4L2_PIX_FMT_RGB555:
411 *p = (g_u << 5) | b_v;
415 *p = (r_y << 2) | (g_u >> 3);
419 case V4L2_PIX_FMT_RGB555X:
423 *p = (r_y << 2) | (g_u >> 3);
427 *p = (g_u << 5) | b_v;
435 static void gen_line(struct vivi_fh *fh, char *basep, int inipos, int wmax,
436 int hmax, int line, int count, char *timestr)
443 /* We will just duplicate the second pixel at the packet */
446 /* Generate a standard color bar pattern */
447 for (w = 0; w < wmax; w++) {
448 int colorpos = ((w + count) * 8/(wmax + 1)) % 8;
450 gen_twopix(fh, basep + pos, colorpos);
451 pos += 4; /* only 16 bpp supported for now */
454 /* Prints input entry number */
456 /* Checks if it is possible to input number */
457 if (TSTAMP_MAX_Y >= hmax)
460 if (TSTAMP_INPUT_X + strlen(timestr) >= wmax)
463 if (line >= TSTAMP_MIN_Y && line <= TSTAMP_MAX_Y) {
464 chr = rom8x16_bits[fh->input * 16 + line - TSTAMP_MIN_Y];
465 pos = TSTAMP_INPUT_X;
466 for (i = 0; i < 7; i++) {
467 /* Draw white font on black background */
468 if (chr & 1 << (7 - i))
469 gen_twopix(fh, basep + pos, WHITE);
471 gen_twopix(fh, basep + pos, BLACK);
476 /* Checks if it is possible to show timestamp */
477 if (TSTAMP_MIN_X + strlen(timestr) >= wmax)
480 /* Print stream time */
481 if (line >= TSTAMP_MIN_Y && line <= TSTAMP_MAX_Y) {
483 for (s = timestr; *s; s++) {
484 chr = rom8x16_bits[(*s-0x30)*16+line-TSTAMP_MIN_Y];
485 for (i = 0; i < 7; i++) {
486 pos = inipos + j * 2;
487 /* Draw white font on black background */
488 if (chr & 1 << (7 - i))
489 gen_twopix(fh, basep + pos, WHITE);
491 gen_twopix(fh, basep + pos, BLACK);
501 static void vivi_fillbuff(struct vivi_fh *fh, struct vivi_buffer *buf)
503 struct vivi_dev *dev = fh->dev;
505 int hmax = buf->vb.height;
506 int wmax = buf->vb.width;
509 void *vbuf = videobuf_to_vmalloc(&buf->vb);
514 tmpbuf = kmalloc(wmax * 2, GFP_ATOMIC);
518 for (h = 0; h < hmax; h++) {
519 gen_line(fh, tmpbuf, 0, wmax, hmax, h, dev->mv_count,
521 memcpy(vbuf + pos, tmpbuf, wmax * 2);
529 /* Updates stream time */
531 dev->ms += jiffies_to_msecs(jiffies-dev->jiffies);
532 dev->jiffies = jiffies;
533 if (dev->ms >= 1000) {
547 sprintf(dev->timestr, "%02d:%02d:%02d:%03d",
548 dev->h, dev->m, dev->s, dev->ms);
550 dprintk(dev, 2, "vivifill at %s: Buffer 0x%08lx size= %d\n",
551 dev->timestr, (unsigned long)tmpbuf, pos);
553 /* Advice that buffer was filled */
554 buf->vb.field_count++;
555 do_gettimeofday(&ts);
557 buf->vb.state = VIDEOBUF_DONE;
560 static void vivi_thread_tick(struct vivi_fh *fh)
562 struct vivi_buffer *buf;
563 struct vivi_dev *dev = fh->dev;
564 struct vivi_dmaqueue *dma_q = &dev->vidq;
566 unsigned long flags = 0;
568 dprintk(dev, 1, "Thread tick\n");
570 spin_lock_irqsave(&dev->slock, flags);
571 if (list_empty(&dma_q->active)) {
572 dprintk(dev, 1, "No active queue to serve\n");
576 buf = list_entry(dma_q->active.next,
577 struct vivi_buffer, vb.queue);
579 /* Nobody is waiting on this buffer, return */
580 if (!waitqueue_active(&buf->vb.done))
583 list_del(&buf->vb.queue);
585 do_gettimeofday(&buf->vb.ts);
588 vivi_fillbuff(fh, buf);
589 dprintk(dev, 1, "filled buffer %p\n", buf);
591 wake_up(&buf->vb.done);
592 dprintk(dev, 2, "[%p/%d] wakeup\n", buf, buf->vb. i);
594 spin_unlock_irqrestore(&dev->slock, flags);
598 #define frames_to_ms(frames) \
599 ((frames * WAKE_NUMERATOR * 1000) / WAKE_DENOMINATOR)
601 static void vivi_sleep(struct vivi_fh *fh)
603 struct vivi_dev *dev = fh->dev;
604 struct vivi_dmaqueue *dma_q = &dev->vidq;
606 DECLARE_WAITQUEUE(wait, current);
608 dprintk(dev, 1, "%s dma_q=0x%08lx\n", __func__,
609 (unsigned long)dma_q);
611 add_wait_queue(&dma_q->wq, &wait);
612 if (kthread_should_stop())
615 /* Calculate time to wake up */
616 timeout = msecs_to_jiffies(frames_to_ms(1));
618 vivi_thread_tick(fh);
620 schedule_timeout_interruptible(timeout);
623 remove_wait_queue(&dma_q->wq, &wait);
627 static int vivi_thread(void *data)
629 struct vivi_fh *fh = data;
630 struct vivi_dev *dev = fh->dev;
632 dprintk(dev, 1, "thread started\n");
639 if (kthread_should_stop())
642 dprintk(dev, 1, "thread: exit\n");
646 static int vivi_start_thread(struct vivi_fh *fh)
648 struct vivi_dev *dev = fh->dev;
649 struct vivi_dmaqueue *dma_q = &dev->vidq;
652 dma_q->ini_jiffies = jiffies;
654 dprintk(dev, 1, "%s\n", __func__);
656 dma_q->kthread = kthread_run(vivi_thread, fh, "vivi");
658 if (IS_ERR(dma_q->kthread)) {
659 printk(KERN_ERR "vivi: kernel_thread() failed\n");
660 return PTR_ERR(dma_q->kthread);
663 wake_up_interruptible(&dma_q->wq);
665 dprintk(dev, 1, "returning from %s\n", __func__);
669 static void vivi_stop_thread(struct vivi_dmaqueue *dma_q)
671 struct vivi_dev *dev = container_of(dma_q, struct vivi_dev, vidq);
673 dprintk(dev, 1, "%s\n", __func__);
674 /* shutdown control thread */
675 if (dma_q->kthread) {
676 kthread_stop(dma_q->kthread);
677 dma_q->kthread = NULL;
681 /* ------------------------------------------------------------------
683 ------------------------------------------------------------------*/
685 buffer_setup(struct videobuf_queue *vq, unsigned int *count, unsigned int *size)
687 struct vivi_fh *fh = vq->priv_data;
688 struct vivi_dev *dev = fh->dev;
690 *size = fh->width*fh->height*2;
695 while (*size * *count > vid_limit * 1024 * 1024)
698 dprintk(dev, 1, "%s, count=%d, size=%d\n", __func__,
704 static void free_buffer(struct videobuf_queue *vq, struct vivi_buffer *buf)
706 struct vivi_fh *fh = vq->priv_data;
707 struct vivi_dev *dev = fh->dev;
709 dprintk(dev, 1, "%s, state: %i\n", __func__, buf->vb.state);
714 videobuf_vmalloc_free(&buf->vb);
715 dprintk(dev, 1, "free_buffer: freed\n");
716 buf->vb.state = VIDEOBUF_NEEDS_INIT;
719 #define norm_maxw() 1024
720 #define norm_maxh() 768
722 buffer_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb,
723 enum v4l2_field field)
725 struct vivi_fh *fh = vq->priv_data;
726 struct vivi_dev *dev = fh->dev;
727 struct vivi_buffer *buf = container_of(vb, struct vivi_buffer, vb);
730 dprintk(dev, 1, "%s, field=%d\n", __func__, field);
732 BUG_ON(NULL == fh->fmt);
734 if (fh->width < 48 || fh->width > norm_maxw() ||
735 fh->height < 32 || fh->height > norm_maxh())
738 buf->vb.size = fh->width*fh->height*2;
739 if (0 != buf->vb.baddr && buf->vb.bsize < buf->vb.size)
742 /* These properties only change when queue is idle, see s_fmt */
744 buf->vb.width = fh->width;
745 buf->vb.height = fh->height;
746 buf->vb.field = field;
748 if (VIDEOBUF_NEEDS_INIT == buf->vb.state) {
749 rc = videobuf_iolock(vq, &buf->vb, NULL);
754 buf->vb.state = VIDEOBUF_PREPARED;
759 free_buffer(vq, buf);
764 buffer_queue(struct videobuf_queue *vq, struct videobuf_buffer *vb)
766 struct vivi_buffer *buf = container_of(vb, struct vivi_buffer, vb);
767 struct vivi_fh *fh = vq->priv_data;
768 struct vivi_dev *dev = fh->dev;
769 struct vivi_dmaqueue *vidq = &dev->vidq;
771 dprintk(dev, 1, "%s\n", __func__);
773 buf->vb.state = VIDEOBUF_QUEUED;
774 list_add_tail(&buf->vb.queue, &vidq->active);
777 static void buffer_release(struct videobuf_queue *vq,
778 struct videobuf_buffer *vb)
780 struct vivi_buffer *buf = container_of(vb, struct vivi_buffer, vb);
781 struct vivi_fh *fh = vq->priv_data;
782 struct vivi_dev *dev = (struct vivi_dev *)fh->dev;
784 dprintk(dev, 1, "%s\n", __func__);
786 free_buffer(vq, buf);
789 static struct videobuf_queue_ops vivi_video_qops = {
790 .buf_setup = buffer_setup,
791 .buf_prepare = buffer_prepare,
792 .buf_queue = buffer_queue,
793 .buf_release = buffer_release,
796 /* ------------------------------------------------------------------
797 IOCTL vidioc handling
798 ------------------------------------------------------------------*/
799 static int vidioc_querycap(struct file *file, void *priv,
800 struct v4l2_capability *cap)
802 strcpy(cap->driver, "vivi");
803 strcpy(cap->card, "vivi");
804 cap->version = VIVI_VERSION;
805 cap->capabilities = V4L2_CAP_VIDEO_CAPTURE |
811 static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv,
812 struct v4l2_fmtdesc *f)
814 struct vivi_fmt *fmt;
816 if (f->index >= ARRAY_SIZE(formats))
819 fmt = &formats[f->index];
821 strlcpy(f->description, fmt->name, sizeof(f->description));
822 f->pixelformat = fmt->fourcc;
826 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
827 struct v4l2_format *f)
829 struct vivi_fh *fh = priv;
831 f->fmt.pix.width = fh->width;
832 f->fmt.pix.height = fh->height;
833 f->fmt.pix.field = fh->vb_vidq.field;
834 f->fmt.pix.pixelformat = fh->fmt->fourcc;
835 f->fmt.pix.bytesperline =
836 (f->fmt.pix.width * fh->fmt->depth) >> 3;
837 f->fmt.pix.sizeimage =
838 f->fmt.pix.height * f->fmt.pix.bytesperline;
843 static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
844 struct v4l2_format *f)
846 struct vivi_fh *fh = priv;
847 struct vivi_dev *dev = fh->dev;
848 struct vivi_fmt *fmt;
849 enum v4l2_field field;
850 unsigned int maxw, maxh;
854 dprintk(dev, 1, "Fourcc format (0x%08x) invalid.\n",
855 f->fmt.pix.pixelformat);
859 field = f->fmt.pix.field;
861 if (field == V4L2_FIELD_ANY) {
862 field = V4L2_FIELD_INTERLACED;
863 } else if (V4L2_FIELD_INTERLACED != field) {
864 dprintk(dev, 1, "Field type invalid.\n");
871 f->fmt.pix.field = field;
872 if (f->fmt.pix.height < 32)
873 f->fmt.pix.height = 32;
874 if (f->fmt.pix.height > maxh)
875 f->fmt.pix.height = maxh;
876 if (f->fmt.pix.width < 48)
877 f->fmt.pix.width = 48;
878 if (f->fmt.pix.width > maxw)
879 f->fmt.pix.width = maxw;
880 f->fmt.pix.width &= ~0x03;
881 f->fmt.pix.bytesperline =
882 (f->fmt.pix.width * fmt->depth) >> 3;
883 f->fmt.pix.sizeimage =
884 f->fmt.pix.height * f->fmt.pix.bytesperline;
889 /* precalculate color bar values to speed up rendering */
890 static void precalculate_bars(struct vivi_fh *fh)
892 struct vivi_dev *dev = fh->dev;
893 unsigned char r, g, b;
896 fh->input = dev->input;
898 for (k = 0; k < 8; k++) {
899 r = bars[fh->input].bar[k][0];
900 g = bars[fh->input].bar[k][1];
901 b = bars[fh->input].bar[k][2];
904 switch (fh->fmt->fourcc) {
905 case V4L2_PIX_FMT_YUYV:
906 case V4L2_PIX_FMT_UYVY:
909 case V4L2_PIX_FMT_RGB565:
910 case V4L2_PIX_FMT_RGB565X:
915 case V4L2_PIX_FMT_RGB555:
916 case V4L2_PIX_FMT_RGB555X:
924 fh->bars[k][0] = TO_Y(r, g, b); /* Luma */
925 fh->bars[k][1] = TO_U(r, g, b); /* Cb */
926 fh->bars[k][2] = TO_V(r, g, b); /* Cr */
936 /*FIXME: This seems to be generic enough to be at videodev2 */
937 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
938 struct v4l2_format *f)
940 struct vivi_fh *fh = priv;
941 struct videobuf_queue *q = &fh->vb_vidq;
943 int ret = vidioc_try_fmt_vid_cap(file, fh, f);
947 mutex_lock(&q->vb_lock);
949 if (videobuf_queue_is_busy(&fh->vb_vidq)) {
950 dprintk(fh->dev, 1, "%s queue busy\n", __func__);
955 fh->fmt = get_format(f);
956 fh->width = f->fmt.pix.width;
957 fh->height = f->fmt.pix.height;
958 fh->vb_vidq.field = f->fmt.pix.field;
961 precalculate_bars(fh);
965 mutex_unlock(&q->vb_lock);
970 static int vidioc_reqbufs(struct file *file, void *priv,
971 struct v4l2_requestbuffers *p)
973 struct vivi_fh *fh = priv;
975 return (videobuf_reqbufs(&fh->vb_vidq, p));
978 static int vidioc_querybuf(struct file *file, void *priv, struct v4l2_buffer *p)
980 struct vivi_fh *fh = priv;
982 return (videobuf_querybuf(&fh->vb_vidq, p));
985 static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *p)
987 struct vivi_fh *fh = priv;
989 return (videobuf_qbuf(&fh->vb_vidq, p));
992 static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p)
994 struct vivi_fh *fh = priv;
996 return (videobuf_dqbuf(&fh->vb_vidq, p,
997 file->f_flags & O_NONBLOCK));
1000 #ifdef CONFIG_VIDEO_V4L1_COMPAT
1001 static int vidiocgmbuf(struct file *file, void *priv, struct video_mbuf *mbuf)
1003 struct vivi_fh *fh = priv;
1005 return videobuf_cgmbuf(&fh->vb_vidq, mbuf, 8);
1009 static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i)
1011 struct vivi_fh *fh = priv;
1013 if (fh->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1018 return videobuf_streamon(&fh->vb_vidq);
1021 static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type i)
1023 struct vivi_fh *fh = priv;
1025 if (fh->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1030 return videobuf_streamoff(&fh->vb_vidq);
1033 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *i)
1038 /* only one input in this sample driver */
1039 static int vidioc_enum_input(struct file *file, void *priv,
1040 struct v4l2_input *inp)
1042 if (inp->index >= NUM_INPUTS)
1045 inp->type = V4L2_INPUT_TYPE_CAMERA;
1046 inp->std = V4L2_STD_525_60;
1047 sprintf(inp->name, "Camera %u", inp->index);
1052 static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1054 struct vivi_fh *fh = priv;
1055 struct vivi_dev *dev = fh->dev;
1061 static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
1063 struct vivi_fh *fh = priv;
1064 struct vivi_dev *dev = fh->dev;
1066 if (i >= NUM_INPUTS)
1070 precalculate_bars(fh);
1075 /* --- controls ---------------------------------------------- */
1076 static int vidioc_queryctrl(struct file *file, void *priv,
1077 struct v4l2_queryctrl *qc)
1081 for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
1082 if (qc->id && qc->id == vivi_qctrl[i].id) {
1083 memcpy(qc, &(vivi_qctrl[i]),
1091 static int vidioc_g_ctrl(struct file *file, void *priv,
1092 struct v4l2_control *ctrl)
1096 for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
1097 if (ctrl->id == vivi_qctrl[i].id) {
1098 ctrl->value = qctl_regs[i];
1104 static int vidioc_s_ctrl(struct file *file, void *priv,
1105 struct v4l2_control *ctrl)
1109 for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
1110 if (ctrl->id == vivi_qctrl[i].id) {
1111 if (ctrl->value < vivi_qctrl[i].minimum
1112 || ctrl->value > vivi_qctrl[i].maximum) {
1115 qctl_regs[i] = ctrl->value;
1121 /* ------------------------------------------------------------------
1122 File operations for the device
1123 ------------------------------------------------------------------*/
1125 static int vivi_open(struct file *file)
1127 int minor = video_devdata(file)->minor;
1128 struct vivi_dev *dev;
1129 struct vivi_fh *fh = NULL;
1133 printk(KERN_DEBUG "vivi: open called (minor=%d)\n", minor);
1136 list_for_each_entry(dev, &vivi_devlist, vivi_devlist)
1137 if (dev->vfd->minor == minor)
1143 mutex_lock(&dev->mutex);
1146 if (dev->users > 1) {
1152 dprintk(dev, 1, "open minor=%d type=%s users=%d\n", minor,
1153 v4l2_type_names[V4L2_BUF_TYPE_VIDEO_CAPTURE], dev->users);
1155 /* allocate + initialize per filehandle data */
1156 fh = kzalloc(sizeof(*fh), GFP_KERNEL);
1163 mutex_unlock(&dev->mutex);
1169 file->private_data = fh;
1172 fh->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1173 fh->fmt = &formats[0];
1177 /* Put all controls at a sane state */
1178 for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
1179 qctl_regs[i] = vivi_qctrl[i].default_value;
1181 /* Resets frame counters */
1187 dev->jiffies = jiffies;
1188 sprintf(dev->timestr, "%02d:%02d:%02d:%03d",
1189 dev->h, dev->m, dev->s, dev->ms);
1191 videobuf_queue_vmalloc_init(&fh->vb_vidq, &vivi_video_qops,
1192 NULL, &dev->slock, fh->type, V4L2_FIELD_INTERLACED,
1193 sizeof(struct vivi_buffer), fh);
1195 vivi_start_thread(fh);
1202 vivi_read(struct file *file, char __user *data, size_t count, loff_t *ppos)
1204 struct vivi_fh *fh = file->private_data;
1206 if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
1207 return videobuf_read_stream(&fh->vb_vidq, data, count, ppos, 0,
1208 file->f_flags & O_NONBLOCK);
1214 vivi_poll(struct file *file, struct poll_table_struct *wait)
1216 struct vivi_fh *fh = file->private_data;
1217 struct vivi_dev *dev = fh->dev;
1218 struct videobuf_queue *q = &fh->vb_vidq;
1220 dprintk(dev, 1, "%s\n", __func__);
1222 if (V4L2_BUF_TYPE_VIDEO_CAPTURE != fh->type)
1225 return videobuf_poll_stream(file, q, wait);
1228 static int vivi_close(struct file *file)
1230 struct vivi_fh *fh = file->private_data;
1231 struct vivi_dev *dev = fh->dev;
1232 struct vivi_dmaqueue *vidq = &dev->vidq;
1234 int minor = video_devdata(file)->minor;
1236 vivi_stop_thread(vidq);
1237 videobuf_stop(&fh->vb_vidq);
1238 videobuf_mmap_free(&fh->vb_vidq);
1242 mutex_lock(&dev->mutex);
1244 mutex_unlock(&dev->mutex);
1246 dprintk(dev, 1, "close called (minor=%d, users=%d)\n",
1252 static int vivi_release(void)
1254 struct vivi_dev *dev;
1255 struct list_head *list;
1257 while (!list_empty(&vivi_devlist)) {
1258 list = vivi_devlist.next;
1260 dev = list_entry(list, struct vivi_dev, vivi_devlist);
1262 if (-1 != dev->vfd->minor) {
1263 printk(KERN_INFO "%s: unregistering /dev/video%d\n",
1264 VIVI_MODULE_NAME, dev->vfd->num);
1265 video_unregister_device(dev->vfd);
1267 printk(KERN_INFO "%s: releasing /dev/video%d\n",
1268 VIVI_MODULE_NAME, dev->vfd->num);
1269 video_device_release(dev->vfd);
1278 static int vivi_mmap(struct file *file, struct vm_area_struct *vma)
1280 struct vivi_fh *fh = file->private_data;
1281 struct vivi_dev *dev = fh->dev;
1284 dprintk(dev, 1, "mmap called, vma=0x%08lx\n", (unsigned long)vma);
1286 ret = videobuf_mmap_mapper(&fh->vb_vidq, vma);
1288 dprintk(dev, 1, "vma start=0x%08lx, size=%ld, ret=%d\n",
1289 (unsigned long)vma->vm_start,
1290 (unsigned long)vma->vm_end-(unsigned long)vma->vm_start,
1296 static const struct v4l2_file_operations vivi_fops = {
1297 .owner = THIS_MODULE,
1299 .release = vivi_close,
1302 .ioctl = video_ioctl2, /* V4L2 ioctl handler */
1306 static const struct v4l2_ioctl_ops vivi_ioctl_ops = {
1307 .vidioc_querycap = vidioc_querycap,
1308 .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap,
1309 .vidioc_g_fmt_vid_cap = vidioc_g_fmt_vid_cap,
1310 .vidioc_try_fmt_vid_cap = vidioc_try_fmt_vid_cap,
1311 .vidioc_s_fmt_vid_cap = vidioc_s_fmt_vid_cap,
1312 .vidioc_reqbufs = vidioc_reqbufs,
1313 .vidioc_querybuf = vidioc_querybuf,
1314 .vidioc_qbuf = vidioc_qbuf,
1315 .vidioc_dqbuf = vidioc_dqbuf,
1316 .vidioc_s_std = vidioc_s_std,
1317 .vidioc_enum_input = vidioc_enum_input,
1318 .vidioc_g_input = vidioc_g_input,
1319 .vidioc_s_input = vidioc_s_input,
1320 .vidioc_queryctrl = vidioc_queryctrl,
1321 .vidioc_g_ctrl = vidioc_g_ctrl,
1322 .vidioc_s_ctrl = vidioc_s_ctrl,
1323 .vidioc_streamon = vidioc_streamon,
1324 .vidioc_streamoff = vidioc_streamoff,
1325 #ifdef CONFIG_VIDEO_V4L1_COMPAT
1326 .vidiocgmbuf = vidiocgmbuf,
1330 static struct video_device vivi_template = {
1333 .ioctl_ops = &vivi_ioctl_ops,
1335 .release = video_device_release,
1337 .tvnorms = V4L2_STD_525_60,
1338 .current_norm = V4L2_STD_NTSC_M,
1340 /* -----------------------------------------------------------------
1341 Initialization and module stuff
1342 ------------------------------------------------------------------*/
1344 /* This routine allocates from 1 to n_devs virtual drivers.
1346 The real maximum number of virtual drivers will depend on how many drivers
1347 will succeed. This is limited to the maximum number of devices that
1348 videodev supports. Since there are 64 minors for video grabbers, this is
1349 currently the theoretical maximum limit. However, a further limit does
1350 exist at videodev that forbids any driver to register more than 32 video
1353 static int __init vivi_init(void)
1355 int ret = -ENOMEM, i;
1356 struct vivi_dev *dev;
1357 struct video_device *vfd;
1362 for (i = 0; i < n_devs; i++) {
1363 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1367 /* init video dma queues */
1368 INIT_LIST_HEAD(&dev->vidq.active);
1369 init_waitqueue_head(&dev->vidq.wq);
1371 /* initialize locks */
1372 spin_lock_init(&dev->slock);
1373 mutex_init(&dev->mutex);
1375 vfd = video_device_alloc();
1381 *vfd = vivi_template;
1383 ret = video_register_device(vfd, VFL_TYPE_GRABBER, video_nr);
1385 video_device_release(vfd);
1388 /* If some registers succeeded, keep driver */
1395 /* Now that everything is fine, let's add it to device list */
1396 list_add_tail(&dev->vivi_devlist, &vivi_devlist);
1398 snprintf(vfd->name, sizeof(vfd->name), "%s (%i)",
1399 vivi_template.name, vfd->minor);
1405 printk(KERN_INFO "%s: V4L2 device registered as /dev/video%d\n",
1406 VIVI_MODULE_NAME, vfd->num);
1411 printk(KERN_INFO "Error %d while loading vivi driver\n", ret);
1413 printk(KERN_INFO "Video Technology Magazine Virtual Video "
1414 "Capture Board ver %u.%u.%u successfully loaded.\n",
1415 (VIVI_VERSION >> 16) & 0xFF, (VIVI_VERSION >> 8) & 0xFF,
1416 VIVI_VERSION & 0xFF);
1418 /* n_devs will reflect the actual number of allocated devices */
1425 static void __exit vivi_exit(void)
1430 module_init(vivi_init);
1431 module_exit(vivi_exit);
1433 MODULE_DESCRIPTION("Video Technology Magazine Virtual Video Capture Board");
1434 MODULE_AUTHOR("Mauro Carvalho Chehab, Ted Walther and John Sokol");
1435 MODULE_LICENSE("Dual BSD/GPL");
1437 module_param(video_nr, uint, 0444);
1438 MODULE_PARM_DESC(video_nr, "video iminor start number");
1440 module_param(n_devs, uint, 0444);
1441 MODULE_PARM_DESC(n_devs, "number of video devices to create");
1443 module_param_named(debug, vivi_template.debug, int, 0444);
1444 MODULE_PARM_DESC(debug, "activates debug info");
1446 module_param(vid_limit, int, 0644);
1447 MODULE_PARM_DESC(vid_limit, "capture memory limit in megabytes");