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 */
229 struct vivi_dev *dev;
232 struct vivi_fmt *fmt;
233 unsigned int width, height;
234 struct videobuf_queue vb_vidq;
236 enum v4l2_buf_type type;
237 unsigned char bars[8][3];
240 /* ------------------------------------------------------------------
241 DMA and thread functions
242 ------------------------------------------------------------------*/
244 /* Bars and Colors should match positions */
257 static u8 bars[8][3] = {
259 {204, 204, 204}, /* white */
260 {208, 208, 0}, /* ambar */
261 { 0, 206, 206}, /* cyan */
262 { 0, 239, 0}, /* green */
263 {239, 0, 239}, /* magenta */
264 {205, 0, 0}, /* red */
265 { 0, 0, 255}, /* blue */
266 { 0, 0, 0}, /* black */
269 #define TO_Y(r, g, b) \
270 (((16829 * r + 33039 * g + 6416 * b + 32768) >> 16) + 16)
271 /* RGB to V(Cr) Color transform */
272 #define TO_V(r, g, b) \
273 (((28784 * r - 24103 * g - 4681 * b + 32768) >> 16) + 128)
274 /* RGB to U(Cb) Color transform */
275 #define TO_U(r, g, b) \
276 (((-9714 * r - 19070 * g + 28784 * b + 32768) >> 16) + 128)
278 #define TSTAMP_MIN_Y 24
279 #define TSTAMP_MAX_Y TSTAMP_MIN_Y+15
280 #define TSTAMP_MIN_X 64
282 static void gen_twopix(struct vivi_fh *fh, unsigned char *buf, int colorpos)
284 unsigned char r_y, g_u, b_v;
288 r_y = fh->bars[colorpos][0]; /* R or precalculated Y */
289 g_u = fh->bars[colorpos][1]; /* G or precalculated U */
290 b_v = fh->bars[colorpos][2]; /* B or precalculated V */
292 for (color = 0; color < 4; color++) {
295 switch (fh->fmt->fourcc) {
296 case V4L2_PIX_FMT_YUYV:
310 case V4L2_PIX_FMT_UYVY:
324 case V4L2_PIX_FMT_RGB565:
328 *p = (g_u << 5) | b_v;
332 *p = (r_y << 3) | (g_u >> 3);
336 case V4L2_PIX_FMT_RGB565X:
340 *p = (r_y << 3) | (g_u >> 3);
344 *p = (g_u << 5) | b_v;
348 case V4L2_PIX_FMT_RGB555:
352 *p = (g_u << 5) | b_v;
356 *p = (r_y << 2) | (g_u >> 3);
360 case V4L2_PIX_FMT_RGB555X:
364 *p = (r_y << 2) | (g_u >> 3);
368 *p = (g_u << 5) | b_v;
376 static void gen_line(struct vivi_fh *fh, char *basep, int inipos, int wmax,
377 int hmax, int line, int count, char *timestr)
384 /* We will just duplicate the second pixel at the packet */
387 /* Generate a standard color bar pattern */
388 for (w = 0; w < wmax; w++) {
389 int colorpos = ((w + count) * 8/(wmax + 1)) % 8;
391 gen_twopix(fh, basep + pos, colorpos);
392 pos += 4; /* only 16 bpp supported for now */
395 /* Checks if it is possible to show timestamp */
396 if (TSTAMP_MAX_Y >= hmax)
398 if (TSTAMP_MIN_X + strlen(timestr) >= wmax)
401 /* Print stream time */
402 if (line >= TSTAMP_MIN_Y && line <= TSTAMP_MAX_Y) {
404 for (s = timestr; *s; s++) {
405 chr = rom8x16_bits[(*s-0x30)*16+line-TSTAMP_MIN_Y];
406 for (i = 0; i < 7; i++) {
407 pos = inipos + j * 2;
408 /* Draw white font on black background */
409 if (chr & 1 << (7 - i))
410 gen_twopix(fh, basep + pos, WHITE);
412 gen_twopix(fh, basep + pos, BLACK);
422 static void vivi_fillbuff(struct vivi_fh *fh, struct vivi_buffer *buf)
424 struct vivi_dev *dev = fh->dev;
426 int hmax = buf->vb.height;
427 int wmax = buf->vb.width;
430 void *vbuf = videobuf_to_vmalloc(&buf->vb);
435 tmpbuf = kmalloc(wmax * 2, GFP_ATOMIC);
439 for (h = 0; h < hmax; h++) {
440 gen_line(fh, tmpbuf, 0, wmax, hmax, h, dev->mv_count,
442 memcpy(vbuf + pos, tmpbuf, wmax * 2);
450 /* Updates stream time */
452 dev->ms += jiffies_to_msecs(jiffies-dev->jiffies);
453 dev->jiffies = jiffies;
454 if (dev->ms >= 1000) {
468 sprintf(dev->timestr, "%02d:%02d:%02d:%03d",
469 dev->h, dev->m, dev->s, dev->ms);
471 dprintk(dev, 2, "vivifill at %s: Buffer 0x%08lx size= %d\n",
472 dev->timestr, (unsigned long)tmpbuf, pos);
474 /* Advice that buffer was filled */
475 buf->vb.field_count++;
476 do_gettimeofday(&ts);
478 buf->vb.state = VIDEOBUF_DONE;
481 static void vivi_thread_tick(struct vivi_fh *fh)
483 struct vivi_buffer *buf;
484 struct vivi_dev *dev = fh->dev;
485 struct vivi_dmaqueue *dma_q = &dev->vidq;
487 unsigned long flags = 0;
489 dprintk(dev, 1, "Thread tick\n");
491 spin_lock_irqsave(&dev->slock, flags);
492 if (list_empty(&dma_q->active)) {
493 dprintk(dev, 1, "No active queue to serve\n");
497 buf = list_entry(dma_q->active.next,
498 struct vivi_buffer, vb.queue);
500 /* Nobody is waiting on this buffer, return */
501 if (!waitqueue_active(&buf->vb.done))
504 list_del(&buf->vb.queue);
506 do_gettimeofday(&buf->vb.ts);
509 vivi_fillbuff(fh, buf);
510 dprintk(dev, 1, "filled buffer %p\n", buf);
512 wake_up(&buf->vb.done);
513 dprintk(dev, 2, "[%p/%d] wakeup\n", buf, buf->vb. i);
515 spin_unlock_irqrestore(&dev->slock, flags);
519 #define frames_to_ms(frames) \
520 ((frames * WAKE_NUMERATOR * 1000) / WAKE_DENOMINATOR)
522 static void vivi_sleep(struct vivi_fh *fh)
524 struct vivi_dev *dev = fh->dev;
525 struct vivi_dmaqueue *dma_q = &dev->vidq;
527 DECLARE_WAITQUEUE(wait, current);
529 dprintk(dev, 1, "%s dma_q=0x%08lx\n", __func__,
530 (unsigned long)dma_q);
532 add_wait_queue(&dma_q->wq, &wait);
533 if (kthread_should_stop())
536 /* Calculate time to wake up */
537 timeout = msecs_to_jiffies(frames_to_ms(1));
539 vivi_thread_tick(fh);
541 schedule_timeout_interruptible(timeout);
544 remove_wait_queue(&dma_q->wq, &wait);
548 static int vivi_thread(void *data)
550 struct vivi_fh *fh = data;
551 struct vivi_dev *dev = fh->dev;
553 dprintk(dev, 1, "thread started\n");
560 if (kthread_should_stop())
563 dprintk(dev, 1, "thread: exit\n");
567 static int vivi_start_thread(struct vivi_fh *fh)
569 struct vivi_dev *dev = fh->dev;
570 struct vivi_dmaqueue *dma_q = &dev->vidq;
573 dma_q->ini_jiffies = jiffies;
575 dprintk(dev, 1, "%s\n", __func__);
577 dma_q->kthread = kthread_run(vivi_thread, fh, "vivi");
579 if (IS_ERR(dma_q->kthread)) {
580 printk(KERN_ERR "vivi: kernel_thread() failed\n");
581 return PTR_ERR(dma_q->kthread);
584 wake_up_interruptible(&dma_q->wq);
586 dprintk(dev, 1, "returning from %s\n", __func__);
590 static void vivi_stop_thread(struct vivi_dmaqueue *dma_q)
592 struct vivi_dev *dev = container_of(dma_q, struct vivi_dev, vidq);
594 dprintk(dev, 1, "%s\n", __func__);
595 /* shutdown control thread */
596 if (dma_q->kthread) {
597 kthread_stop(dma_q->kthread);
598 dma_q->kthread = NULL;
602 /* ------------------------------------------------------------------
604 ------------------------------------------------------------------*/
606 buffer_setup(struct videobuf_queue *vq, unsigned int *count, unsigned int *size)
608 struct vivi_fh *fh = vq->priv_data;
609 struct vivi_dev *dev = fh->dev;
611 *size = fh->width*fh->height*2;
616 while (*size * *count > vid_limit * 1024 * 1024)
619 dprintk(dev, 1, "%s, count=%d, size=%d\n", __func__,
625 static void free_buffer(struct videobuf_queue *vq, struct vivi_buffer *buf)
627 struct vivi_fh *fh = vq->priv_data;
628 struct vivi_dev *dev = fh->dev;
630 dprintk(dev, 1, "%s, state: %i\n", __func__, buf->vb.state);
635 videobuf_vmalloc_free(&buf->vb);
636 dprintk(dev, 1, "free_buffer: freed\n");
637 buf->vb.state = VIDEOBUF_NEEDS_INIT;
640 #define norm_maxw() 1024
641 #define norm_maxh() 768
643 buffer_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb,
644 enum v4l2_field field)
646 struct vivi_fh *fh = vq->priv_data;
647 struct vivi_dev *dev = fh->dev;
648 struct vivi_buffer *buf = container_of(vb, struct vivi_buffer, vb);
651 dprintk(dev, 1, "%s, field=%d\n", __func__, field);
653 BUG_ON(NULL == fh->fmt);
655 if (fh->width < 48 || fh->width > norm_maxw() ||
656 fh->height < 32 || fh->height > norm_maxh())
659 buf->vb.size = fh->width*fh->height*2;
660 if (0 != buf->vb.baddr && buf->vb.bsize < buf->vb.size)
663 /* These properties only change when queue is idle, see s_fmt */
665 buf->vb.width = fh->width;
666 buf->vb.height = fh->height;
667 buf->vb.field = field;
669 if (VIDEOBUF_NEEDS_INIT == buf->vb.state) {
670 rc = videobuf_iolock(vq, &buf->vb, NULL);
675 buf->vb.state = VIDEOBUF_PREPARED;
680 free_buffer(vq, buf);
685 buffer_queue(struct videobuf_queue *vq, struct videobuf_buffer *vb)
687 struct vivi_buffer *buf = container_of(vb, struct vivi_buffer, vb);
688 struct vivi_fh *fh = vq->priv_data;
689 struct vivi_dev *dev = fh->dev;
690 struct vivi_dmaqueue *vidq = &dev->vidq;
692 dprintk(dev, 1, "%s\n", __func__);
694 buf->vb.state = VIDEOBUF_QUEUED;
695 list_add_tail(&buf->vb.queue, &vidq->active);
698 static void buffer_release(struct videobuf_queue *vq,
699 struct videobuf_buffer *vb)
701 struct vivi_buffer *buf = container_of(vb, struct vivi_buffer, vb);
702 struct vivi_fh *fh = vq->priv_data;
703 struct vivi_dev *dev = (struct vivi_dev *)fh->dev;
705 dprintk(dev, 1, "%s\n", __func__);
707 free_buffer(vq, buf);
710 static struct videobuf_queue_ops vivi_video_qops = {
711 .buf_setup = buffer_setup,
712 .buf_prepare = buffer_prepare,
713 .buf_queue = buffer_queue,
714 .buf_release = buffer_release,
717 /* ------------------------------------------------------------------
718 IOCTL vidioc handling
719 ------------------------------------------------------------------*/
720 static int vidioc_querycap(struct file *file, void *priv,
721 struct v4l2_capability *cap)
723 strcpy(cap->driver, "vivi");
724 strcpy(cap->card, "vivi");
725 cap->version = VIVI_VERSION;
726 cap->capabilities = V4L2_CAP_VIDEO_CAPTURE |
732 static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv,
733 struct v4l2_fmtdesc *f)
735 struct vivi_fmt *fmt;
737 if (f->index >= ARRAY_SIZE(formats))
740 fmt = &formats[f->index];
742 strlcpy(f->description, fmt->name, sizeof(f->description));
743 f->pixelformat = fmt->fourcc;
747 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
748 struct v4l2_format *f)
750 struct vivi_fh *fh = priv;
752 f->fmt.pix.width = fh->width;
753 f->fmt.pix.height = fh->height;
754 f->fmt.pix.field = fh->vb_vidq.field;
755 f->fmt.pix.pixelformat = fh->fmt->fourcc;
756 f->fmt.pix.bytesperline =
757 (f->fmt.pix.width * fh->fmt->depth) >> 3;
758 f->fmt.pix.sizeimage =
759 f->fmt.pix.height * f->fmt.pix.bytesperline;
764 static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
765 struct v4l2_format *f)
767 struct vivi_fh *fh = priv;
768 struct vivi_dev *dev = fh->dev;
769 struct vivi_fmt *fmt;
770 enum v4l2_field field;
771 unsigned int maxw, maxh;
775 dprintk(dev, 1, "Fourcc format (0x%08x) invalid.\n",
776 f->fmt.pix.pixelformat);
780 field = f->fmt.pix.field;
782 if (field == V4L2_FIELD_ANY) {
783 field = V4L2_FIELD_INTERLACED;
784 } else if (V4L2_FIELD_INTERLACED != field) {
785 dprintk(dev, 1, "Field type invalid.\n");
792 f->fmt.pix.field = field;
793 if (f->fmt.pix.height < 32)
794 f->fmt.pix.height = 32;
795 if (f->fmt.pix.height > maxh)
796 f->fmt.pix.height = maxh;
797 if (f->fmt.pix.width < 48)
798 f->fmt.pix.width = 48;
799 if (f->fmt.pix.width > maxw)
800 f->fmt.pix.width = maxw;
801 f->fmt.pix.width &= ~0x03;
802 f->fmt.pix.bytesperline =
803 (f->fmt.pix.width * fmt->depth) >> 3;
804 f->fmt.pix.sizeimage =
805 f->fmt.pix.height * f->fmt.pix.bytesperline;
810 /*FIXME: This seems to be generic enough to be at videodev2 */
811 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
812 struct v4l2_format *f)
814 struct vivi_fh *fh = priv;
815 struct videobuf_queue *q = &fh->vb_vidq;
816 unsigned char r, g, b;
819 int ret = vidioc_try_fmt_vid_cap(file, fh, f);
823 mutex_lock(&q->vb_lock);
825 if (videobuf_queue_is_busy(&fh->vb_vidq)) {
826 dprintk(fh->dev, 1, "%s queue busy\n", __func__);
831 fh->fmt = get_format(f);
832 fh->width = f->fmt.pix.width;
833 fh->height = f->fmt.pix.height;
834 fh->vb_vidq.field = f->fmt.pix.field;
837 /* precalculate color bar values to speed up rendering */
838 for (k = 0; k < 8; k++) {
844 switch (fh->fmt->fourcc) {
845 case V4L2_PIX_FMT_YUYV:
846 case V4L2_PIX_FMT_UYVY:
849 case V4L2_PIX_FMT_RGB565:
850 case V4L2_PIX_FMT_RGB565X:
855 case V4L2_PIX_FMT_RGB555:
856 case V4L2_PIX_FMT_RGB555X:
864 fh->bars[k][0] = TO_Y(r, g, b); /* Luma */
865 fh->bars[k][1] = TO_U(r, g, b); /* Cb */
866 fh->bars[k][2] = TO_V(r, g, b); /* Cr */
876 mutex_unlock(&q->vb_lock);
881 static int vidioc_reqbufs(struct file *file, void *priv,
882 struct v4l2_requestbuffers *p)
884 struct vivi_fh *fh = priv;
886 return (videobuf_reqbufs(&fh->vb_vidq, p));
889 static int vidioc_querybuf(struct file *file, void *priv, struct v4l2_buffer *p)
891 struct vivi_fh *fh = priv;
893 return (videobuf_querybuf(&fh->vb_vidq, p));
896 static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *p)
898 struct vivi_fh *fh = priv;
900 return (videobuf_qbuf(&fh->vb_vidq, p));
903 static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p)
905 struct vivi_fh *fh = priv;
907 return (videobuf_dqbuf(&fh->vb_vidq, p,
908 file->f_flags & O_NONBLOCK));
911 #ifdef CONFIG_VIDEO_V4L1_COMPAT
912 static int vidiocgmbuf(struct file *file, void *priv, struct video_mbuf *mbuf)
914 struct vivi_fh *fh = priv;
916 return videobuf_cgmbuf(&fh->vb_vidq, mbuf, 8);
920 static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i)
922 struct vivi_fh *fh = priv;
924 if (fh->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
929 return videobuf_streamon(&fh->vb_vidq);
932 static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type i)
934 struct vivi_fh *fh = priv;
936 if (fh->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
941 return videobuf_streamoff(&fh->vb_vidq);
944 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *i)
949 /* only one input in this sample driver */
950 static int vidioc_enum_input(struct file *file, void *priv,
951 struct v4l2_input *inp)
956 inp->type = V4L2_INPUT_TYPE_CAMERA;
957 inp->std = V4L2_STD_525_60;
958 strcpy(inp->name, "Camera");
963 static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
969 static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
977 /* --- controls ---------------------------------------------- */
978 static int vidioc_queryctrl(struct file *file, void *priv,
979 struct v4l2_queryctrl *qc)
983 for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
984 if (qc->id && qc->id == vivi_qctrl[i].id) {
985 memcpy(qc, &(vivi_qctrl[i]),
993 static int vidioc_g_ctrl(struct file *file, void *priv,
994 struct v4l2_control *ctrl)
998 for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
999 if (ctrl->id == vivi_qctrl[i].id) {
1000 ctrl->value = qctl_regs[i];
1006 static int vidioc_s_ctrl(struct file *file, void *priv,
1007 struct v4l2_control *ctrl)
1011 for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
1012 if (ctrl->id == vivi_qctrl[i].id) {
1013 if (ctrl->value < vivi_qctrl[i].minimum
1014 || ctrl->value > vivi_qctrl[i].maximum) {
1017 qctl_regs[i] = ctrl->value;
1023 /* ------------------------------------------------------------------
1024 File operations for the device
1025 ------------------------------------------------------------------*/
1027 static int vivi_open(struct file *file)
1029 int minor = video_devdata(file)->minor;
1030 struct vivi_dev *dev;
1031 struct vivi_fh *fh = NULL;
1035 printk(KERN_DEBUG "vivi: open called (minor=%d)\n", minor);
1038 list_for_each_entry(dev, &vivi_devlist, vivi_devlist)
1039 if (dev->vfd->minor == minor)
1045 mutex_lock(&dev->mutex);
1048 if (dev->users > 1) {
1054 dprintk(dev, 1, "open minor=%d type=%s users=%d\n", minor,
1055 v4l2_type_names[V4L2_BUF_TYPE_VIDEO_CAPTURE], dev->users);
1057 /* allocate + initialize per filehandle data */
1058 fh = kzalloc(sizeof(*fh), GFP_KERNEL);
1065 mutex_unlock(&dev->mutex);
1071 file->private_data = fh;
1074 fh->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1075 fh->fmt = &formats[0];
1079 /* Put all controls at a sane state */
1080 for (i = 0; i < ARRAY_SIZE(vivi_qctrl); i++)
1081 qctl_regs[i] = vivi_qctrl[i].default_value;
1083 /* Resets frame counters */
1089 dev->jiffies = jiffies;
1090 sprintf(dev->timestr, "%02d:%02d:%02d:%03d",
1091 dev->h, dev->m, dev->s, dev->ms);
1093 videobuf_queue_vmalloc_init(&fh->vb_vidq, &vivi_video_qops,
1094 NULL, &dev->slock, fh->type, V4L2_FIELD_INTERLACED,
1095 sizeof(struct vivi_buffer), fh);
1097 vivi_start_thread(fh);
1104 vivi_read(struct file *file, char __user *data, size_t count, loff_t *ppos)
1106 struct vivi_fh *fh = file->private_data;
1108 if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
1109 return videobuf_read_stream(&fh->vb_vidq, data, count, ppos, 0,
1110 file->f_flags & O_NONBLOCK);
1116 vivi_poll(struct file *file, struct poll_table_struct *wait)
1118 struct vivi_fh *fh = file->private_data;
1119 struct vivi_dev *dev = fh->dev;
1120 struct videobuf_queue *q = &fh->vb_vidq;
1122 dprintk(dev, 1, "%s\n", __func__);
1124 if (V4L2_BUF_TYPE_VIDEO_CAPTURE != fh->type)
1127 return videobuf_poll_stream(file, q, wait);
1130 static int vivi_close(struct file *file)
1132 struct vivi_fh *fh = file->private_data;
1133 struct vivi_dev *dev = fh->dev;
1134 struct vivi_dmaqueue *vidq = &dev->vidq;
1136 int minor = video_devdata(file)->minor;
1138 vivi_stop_thread(vidq);
1139 videobuf_stop(&fh->vb_vidq);
1140 videobuf_mmap_free(&fh->vb_vidq);
1144 mutex_lock(&dev->mutex);
1146 mutex_unlock(&dev->mutex);
1148 dprintk(dev, 1, "close called (minor=%d, users=%d)\n",
1154 static int vivi_release(void)
1156 struct vivi_dev *dev;
1157 struct list_head *list;
1159 while (!list_empty(&vivi_devlist)) {
1160 list = vivi_devlist.next;
1162 dev = list_entry(list, struct vivi_dev, vivi_devlist);
1164 if (-1 != dev->vfd->minor) {
1165 printk(KERN_INFO "%s: unregistering /dev/video%d\n",
1166 VIVI_MODULE_NAME, dev->vfd->num);
1167 video_unregister_device(dev->vfd);
1169 printk(KERN_INFO "%s: releasing /dev/video%d\n",
1170 VIVI_MODULE_NAME, dev->vfd->num);
1171 video_device_release(dev->vfd);
1180 static int vivi_mmap(struct file *file, struct vm_area_struct *vma)
1182 struct vivi_fh *fh = file->private_data;
1183 struct vivi_dev *dev = fh->dev;
1186 dprintk(dev, 1, "mmap called, vma=0x%08lx\n", (unsigned long)vma);
1188 ret = videobuf_mmap_mapper(&fh->vb_vidq, vma);
1190 dprintk(dev, 1, "vma start=0x%08lx, size=%ld, ret=%d\n",
1191 (unsigned long)vma->vm_start,
1192 (unsigned long)vma->vm_end-(unsigned long)vma->vm_start,
1198 static const struct v4l2_file_operations vivi_fops = {
1199 .owner = THIS_MODULE,
1201 .release = vivi_close,
1204 .ioctl = video_ioctl2, /* V4L2 ioctl handler */
1208 static const struct v4l2_ioctl_ops vivi_ioctl_ops = {
1209 .vidioc_querycap = vidioc_querycap,
1210 .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap,
1211 .vidioc_g_fmt_vid_cap = vidioc_g_fmt_vid_cap,
1212 .vidioc_try_fmt_vid_cap = vidioc_try_fmt_vid_cap,
1213 .vidioc_s_fmt_vid_cap = vidioc_s_fmt_vid_cap,
1214 .vidioc_reqbufs = vidioc_reqbufs,
1215 .vidioc_querybuf = vidioc_querybuf,
1216 .vidioc_qbuf = vidioc_qbuf,
1217 .vidioc_dqbuf = vidioc_dqbuf,
1218 .vidioc_s_std = vidioc_s_std,
1219 .vidioc_enum_input = vidioc_enum_input,
1220 .vidioc_g_input = vidioc_g_input,
1221 .vidioc_s_input = vidioc_s_input,
1222 .vidioc_queryctrl = vidioc_queryctrl,
1223 .vidioc_g_ctrl = vidioc_g_ctrl,
1224 .vidioc_s_ctrl = vidioc_s_ctrl,
1225 .vidioc_streamon = vidioc_streamon,
1226 .vidioc_streamoff = vidioc_streamoff,
1227 #ifdef CONFIG_VIDEO_V4L1_COMPAT
1228 .vidiocgmbuf = vidiocgmbuf,
1232 static struct video_device vivi_template = {
1235 .ioctl_ops = &vivi_ioctl_ops,
1237 .release = video_device_release,
1239 .tvnorms = V4L2_STD_525_60,
1240 .current_norm = V4L2_STD_NTSC_M,
1242 /* -----------------------------------------------------------------
1243 Initialization and module stuff
1244 ------------------------------------------------------------------*/
1246 /* This routine allocates from 1 to n_devs virtual drivers.
1248 The real maximum number of virtual drivers will depend on how many drivers
1249 will succeed. This is limited to the maximum number of devices that
1250 videodev supports. Since there are 64 minors for video grabbers, this is
1251 currently the theoretical maximum limit. However, a further limit does
1252 exist at videodev that forbids any driver to register more than 32 video
1255 static int __init vivi_init(void)
1257 int ret = -ENOMEM, i;
1258 struct vivi_dev *dev;
1259 struct video_device *vfd;
1264 for (i = 0; i < n_devs; i++) {
1265 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1269 /* init video dma queues */
1270 INIT_LIST_HEAD(&dev->vidq.active);
1271 init_waitqueue_head(&dev->vidq.wq);
1273 /* initialize locks */
1274 spin_lock_init(&dev->slock);
1275 mutex_init(&dev->mutex);
1277 vfd = video_device_alloc();
1283 *vfd = vivi_template;
1285 ret = video_register_device(vfd, VFL_TYPE_GRABBER, video_nr);
1287 video_device_release(vfd);
1290 /* If some registers succeeded, keep driver */
1297 /* Now that everything is fine, let's add it to device list */
1298 list_add_tail(&dev->vivi_devlist, &vivi_devlist);
1300 snprintf(vfd->name, sizeof(vfd->name), "%s (%i)",
1301 vivi_template.name, vfd->minor);
1307 printk(KERN_INFO "%s: V4L2 device registered as /dev/video%d\n",
1308 VIVI_MODULE_NAME, vfd->num);
1313 printk(KERN_INFO "Error %d while loading vivi driver\n", ret);
1315 printk(KERN_INFO "Video Technology Magazine Virtual Video "
1316 "Capture Board ver %u.%u.%u successfully loaded.\n",
1317 (VIVI_VERSION >> 16) & 0xFF, (VIVI_VERSION >> 8) & 0xFF,
1318 VIVI_VERSION & 0xFF);
1320 /* n_devs will reflect the actual number of allocated devices */
1327 static void __exit vivi_exit(void)
1332 module_init(vivi_init);
1333 module_exit(vivi_exit);
1335 MODULE_DESCRIPTION("Video Technology Magazine Virtual Video Capture Board");
1336 MODULE_AUTHOR("Mauro Carvalho Chehab, Ted Walther and John Sokol");
1337 MODULE_LICENSE("Dual BSD/GPL");
1339 module_param(video_nr, uint, 0444);
1340 MODULE_PARM_DESC(video_nr, "video iminor start number");
1342 module_param(n_devs, uint, 0444);
1343 MODULE_PARM_DESC(n_devs, "number of video devices to create");
1345 module_param_named(debug, vivi_template.debug, int, 0444);
1346 MODULE_PARM_DESC(debug, "activates debug info");
1348 module_param(vid_limit, int, 0644);
1349 MODULE_PARM_DESC(vid_limit, "capture memory limit in megabytes");