]> err.no Git - linux-2.6/commitdiff
V4L/DVB (6736): Fix some errors at the video_ioctl2 conversion
authorMauro Carvalho Chehab <mchehab@infradead.org>
Fri, 7 Dec 2007 20:34:48 +0000 (17:34 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Fri, 25 Jan 2008 21:03:15 +0000 (19:03 -0200)
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/video/saa7134/saa7134-core.c
drivers/media/video/saa7134/saa7134-video.c
drivers/media/video/saa7134/saa7134.h

index cbddd35f161864a5abaa2f1852cd6ec376536b55..92c48ee1591ba7338027efcdf4a0647c9b16d084 100644 (file)
@@ -834,6 +834,7 @@ static struct video_device *vdev_init(struct saa7134_dev *dev,
        vfd->minor   = -1;
        vfd->dev     = &dev->pci->dev;
        vfd->release = video_device_release;
+       vfd->debug   = video_debug;
        snprintf(vfd->name, sizeof(vfd->name), "%s %s (%s)",
                 dev->name, type, saa7134_boards[dev->board].name);
        return vfd;
index 76b841dd7ec0159410f47a58274a4163086f1a6c..043e1396857a72df39f8d59c90a5c0be270f286d 100644 (file)
@@ -38,7 +38,7 @@
 
 /* ------------------------------------------------------------------ */
 
-static unsigned int video_debug   = 0;
+unsigned int video_debug;
 static unsigned int gbuffers      = 8;
 static unsigned int noninterlaced = 0;
 static unsigned int gbufsize      = 720*576*4;
@@ -54,7 +54,7 @@ module_param_string(secam, secam, sizeof(secam), 0644);
 MODULE_PARM_DESC(secam, "force SECAM variant, either DK,L or Lc");
 
 
-#define dprintk(fmt, arg...)   if (video_debug) \
+#define dprintk(fmt, arg...)   if (video_debug&0x04) \
        printk(KERN_DEBUG "%s/video: " fmt, dev->name , ## arg)
 
 /* ------------------------------------------------------------------ */
@@ -217,6 +217,12 @@ static struct saa7134_format formats[] = {
                .vbi_v_start_1 = 273,   \
                .src_timing    = 7
 
+#define SAA7134_NORMS  \
+               V4L2_STD_PAL    | V4L2_STD_PAL_N | \
+               V4L2_STD_PAL_Nc | V4L2_STD_SECAM | \
+               V4L2_STD_NTSC   | V4L2_STD_PAL_M | \
+               V4L2_STD_PAL_60
+
 static struct saa7134_tvnorm tvnorms[] = {
        {
                .name          = "PAL", /* autodetect */
@@ -542,7 +548,6 @@ void res_free(struct saa7134_dev *dev, struct saa7134_fh *fh, unsigned int bits)
 
 static void set_tvnorm(struct saa7134_dev *dev, struct saa7134_tvnorm *norm)
 {
-
        dprintk("set tv norm = %s\n",norm->name);
        dev->tvnorm = norm;
 
@@ -561,7 +566,6 @@ static void set_tvnorm(struct saa7134_dev *dev, struct saa7134_tvnorm *norm)
        dev->crop_current = dev->crop_defrect;
 
        saa7134_set_tvnorm_hw(dev);
-
 }
 
 static void video_mux(struct saa7134_dev *dev, int input)
@@ -1177,11 +1181,18 @@ static int vidioc_s_ctrl(struct file *file, void *f,
        struct saa7134_dev *dev = fh->dev;
        unsigned long flags;
        int restart_overlay = 0;
+       int err = -EINVAL;
+
+       err = v4l2_prio_check(&dev->prio, &fh->prio);
+       if (0 != err)
+               return err;
 
        mutex_lock(&dev->lock);
+
        ctrl = ctrl_by_id(c->id);
        if (NULL == ctrl)
-               return -EINVAL;
+               goto error;
+
        dprintk("set_control name=%s val=%d\n",ctrl->name,c->value);
        switch (ctrl->type) {
        case V4L2_CTRL_TYPE_BOOLEAN:
@@ -1261,8 +1272,7 @@ static int vidioc_s_ctrl(struct file *file, void *f,
                break;
        }
        default:
-               mutex_unlock(&dev->lock);
-               return -EINVAL;
+               goto error;
        }
        if (restart_overlay && fh && res_check(fh, RESOURCE_OVERLAY)) {
                spin_lock_irqsave(&dev->slock,flags);
@@ -1270,8 +1280,11 @@ static int vidioc_s_ctrl(struct file *file, void *f,
                start_preview(dev,fh);
                spin_unlock_irqrestore(&dev->slock,flags);
        }
+       err = 0;
+
+error:
        mutex_unlock(&dev->lock);
-       return 0;
+       return err;
 }
 
 /* ------------------------------------------------------------------ */
@@ -1494,8 +1507,11 @@ static int video_mmap(struct file *file, struct vm_area_struct * vma)
 
 /* ------------------------------------------------------------------ */
 
-static void saa7134_vbi_fmt(struct saa7134_dev *dev, struct v4l2_format *f)
+static int vidioc_try_get_set_fmt_vbi(struct file *file, void *priv,
+                                               struct v4l2_format *f)
 {
+       struct saa7134_fh *fh = priv;
+       struct saa7134_dev *dev = fh->dev;
        struct saa7134_tvnorm *norm = dev->tvnorm;
 
        f->fmt.vbi.sampling_rate = 6750000 * 4;
@@ -1508,39 +1524,37 @@ static void saa7134_vbi_fmt(struct saa7134_dev *dev, struct v4l2_format *f)
        f->fmt.vbi.count[1] = f->fmt.vbi.count[0];
        f->fmt.vbi.flags = 0; /* VBI_UNSYNC VBI_INTERLACED */
 
+       return 0;
 }
 
 static int vidioc_g_fmt_cap(struct file *file, void *priv,
                                struct v4l2_format *f)
 {
        struct saa7134_fh *fh = priv;
-       struct saa7134_dev *dev = fh->dev;
 
-       switch (f->type) {
-       case V4L2_BUF_TYPE_VIDEO_CAPTURE:
-               memset(&f->fmt.pix,0,sizeof(f->fmt.pix));
-               f->fmt.pix.width        = fh->width;
-               f->fmt.pix.height       = fh->height;
-               f->fmt.pix.field        = fh->cap.field;
-               f->fmt.pix.pixelformat  = fh->fmt->fourcc;
-               f->fmt.pix.bytesperline =
-                       (f->fmt.pix.width * fh->fmt->depth) >> 3;
-               f->fmt.pix.sizeimage =
-                       f->fmt.pix.height * f->fmt.pix.bytesperline;
-               return 0;
-       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
-               if (saa7134_no_overlay > 0) {
-                       printk ("V4L2_BUF_TYPE_VIDEO_OVERLAY: no_overlay\n");
-                       return -EINVAL;
-               }
-               f->fmt.win = fh->win;
-               return 0;
-       case V4L2_BUF_TYPE_VBI_CAPTURE:
-               saa7134_vbi_fmt(dev,f);
-               return 0;
-       default:
+       f->fmt.pix.width        = fh->width;
+       f->fmt.pix.height       = fh->height;
+       f->fmt.pix.field        = fh->cap.field;
+       f->fmt.pix.pixelformat  = fh->fmt->fourcc;
+       f->fmt.pix.bytesperline =
+               (f->fmt.pix.width * fh->fmt->depth) >> 3;
+       f->fmt.pix.sizeimage =
+               f->fmt.pix.height * f->fmt.pix.bytesperline;
+       return 0;
+}
+
+static int vidioc_g_fmt_overlay(struct file *file, void *priv,
+                               struct v4l2_format *f)
+{
+       struct saa7134_fh *fh = priv;
+
+       if (saa7134_no_overlay > 0) {
+               printk(KERN_ERR "V4L2_BUF_TYPE_VIDEO_OVERLAY: no_overlay\n");
                return -EINVAL;
        }
+       f->fmt.win = fh->win;
+
+       return 0;
 }
 
 static int vidioc_try_fmt_cap(struct file *file, void *priv,
@@ -1548,126 +1562,122 @@ static int vidioc_try_fmt_cap(struct file *file, void *priv,
 {
        struct saa7134_fh *fh = priv;
        struct saa7134_dev *dev = fh->dev;
-       int err;
+       struct saa7134_format *fmt;
+       enum v4l2_field field;
+       unsigned int maxw, maxh;
 
-       switch (f->type) {
-       case V4L2_BUF_TYPE_VIDEO_CAPTURE:
-       {
-               struct saa7134_format *fmt;
-               enum v4l2_field field;
-               unsigned int maxw, maxh;
+       fmt = format_by_fourcc(f->fmt.pix.pixelformat);
+       if (NULL == fmt)
+               return -EINVAL;
 
-               fmt = format_by_fourcc(f->fmt.pix.pixelformat);
-               if (NULL == fmt)
-                       return -EINVAL;
+       field = f->fmt.pix.field;
+       maxw  = min(dev->crop_current.width*4,  dev->crop_bounds.width);
+       maxh  = min(dev->crop_current.height*4, dev->crop_bounds.height);
 
-               field = f->fmt.pix.field;
-               maxw  = min(dev->crop_current.width*4,  dev->crop_bounds.width);
-               maxh  = min(dev->crop_current.height*4, dev->crop_bounds.height);
+       if (V4L2_FIELD_ANY == field) {
+               field = (f->fmt.pix.height > maxh/2)
+                       ? V4L2_FIELD_INTERLACED
+                       : V4L2_FIELD_BOTTOM;
+       }
+       switch (field) {
+       case V4L2_FIELD_TOP:
+       case V4L2_FIELD_BOTTOM:
+               maxh = maxh / 2;
+               break;
+       case V4L2_FIELD_INTERLACED:
+               break;
+       default:
+               return -EINVAL;
+       }
 
-               if (V4L2_FIELD_ANY == field) {
-                       field = (f->fmt.pix.height > maxh/2)
-                               ? V4L2_FIELD_INTERLACED
-                               : V4L2_FIELD_BOTTOM;
-               }
-               switch (field) {
-               case V4L2_FIELD_TOP:
-               case V4L2_FIELD_BOTTOM:
-                       maxh = maxh / 2;
-                       break;
-               case V4L2_FIELD_INTERLACED:
-                       break;
-               default:
-                       return -EINVAL;
-               }
+       f->fmt.pix.field = field;
+       if (f->fmt.pix.width  < 48)
+               f->fmt.pix.width  = 48;
+       if (f->fmt.pix.height < 32)
+               f->fmt.pix.height = 32;
+       if (f->fmt.pix.width > maxw)
+               f->fmt.pix.width = maxw;
+       if (f->fmt.pix.height > maxh)
+               f->fmt.pix.height = maxh;
+       f->fmt.pix.width &= ~0x03;
+       f->fmt.pix.bytesperline =
+               (f->fmt.pix.width * fmt->depth) >> 3;
+       f->fmt.pix.sizeimage =
+               f->fmt.pix.height * f->fmt.pix.bytesperline;
 
-               f->fmt.pix.field = field;
-               if (f->fmt.pix.width  < 48)
-                       f->fmt.pix.width  = 48;
-               if (f->fmt.pix.height < 32)
-                       f->fmt.pix.height = 32;
-               if (f->fmt.pix.width > maxw)
-                       f->fmt.pix.width = maxw;
-               if (f->fmt.pix.height > maxh)
-                       f->fmt.pix.height = maxh;
-               f->fmt.pix.width &= ~0x03;
-               f->fmt.pix.bytesperline =
-                       (f->fmt.pix.width * fmt->depth) >> 3;
-               f->fmt.pix.sizeimage =
-                       f->fmt.pix.height * f->fmt.pix.bytesperline;
+       return 0;
+}
 
-               return 0;
-       }
-       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
-               if (saa7134_no_overlay > 0) {
-                       printk ("V4L2_BUF_TYPE_VIDEO_OVERLAY: no_overlay\n");
-                       return -EINVAL;
-               }
-               err = verify_preview(dev,&f->fmt.win);
-               if (0 != err)
-                       return err;
-               return 0;
-       case V4L2_BUF_TYPE_VBI_CAPTURE:
-               saa7134_vbi_fmt(dev,f);
-               return 0;
-       default:
+static int vidioc_try_fmt_overlay(struct file *file, void *priv,
+                                               struct v4l2_format *f)
+{
+       struct saa7134_fh *fh = priv;
+       struct saa7134_dev *dev = fh->dev;
+
+       if (saa7134_no_overlay > 0) {
+               printk(KERN_ERR "V4L2_BUF_TYPE_VIDEO_OVERLAY: no_overlay\n");
                return -EINVAL;
        }
+
+       return verify_preview(dev, &f->fmt.win);
 }
 
 static int vidioc_s_fmt_cap(struct file *file, void *priv,
                                        struct v4l2_format *f)
+{
+       struct saa7134_fh *fh = priv;
+       int err;
+
+       err = vidioc_try_fmt_cap(file, priv, f);
+       if (0 != err)
+               return err;
+
+       fh->fmt       = format_by_fourcc(f->fmt.pix.pixelformat);
+       fh->width     = f->fmt.pix.width;
+       fh->height    = f->fmt.pix.height;
+       fh->cap.field = f->fmt.pix.field;
+       return 0;
+}
+
+static int vidioc_s_fmt_overlay(struct file *file, void *priv,
+                                       struct v4l2_format *f)
 {
        struct saa7134_fh *fh = priv;
        struct saa7134_dev *dev = fh->dev;
-       unsigned long flags;
        int err;
+       unsigned int flags;
 
-       switch (f->type) {
-       case V4L2_BUF_TYPE_VIDEO_CAPTURE:
-               err = vidioc_try_fmt_cap(file, priv, f);
-               if (0 != err)
-                       return err;
-
-               fh->fmt       = format_by_fourcc(f->fmt.pix.pixelformat);
-               fh->width     = f->fmt.pix.width;
-               fh->height    = f->fmt.pix.height;
-               fh->cap.field = f->fmt.pix.field;
-               return 0;
-       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
-               if (saa7134_no_overlay > 0) {
-                       printk ("V4L2_BUF_TYPE_VIDEO_OVERLAY: no_overlay\n");
-                       return -EINVAL;
-               }
-               err = verify_preview(dev,&f->fmt.win);
-               if (0 != err)
-                       return err;
-
-               mutex_lock(&dev->lock);
-               fh->win    = f->fmt.win;
-               fh->nclips = f->fmt.win.clipcount;
-               if (fh->nclips > 8)
-                       fh->nclips = 8;
-               if (copy_from_user(fh->clips,f->fmt.win.clips,
-                                  sizeof(struct v4l2_clip)*fh->nclips)) {
-                       mutex_unlock(&dev->lock);
-                       return -EFAULT;
-               }
+       if (saa7134_no_overlay > 0) {
+               printk(KERN_ERR "V4L2_BUF_TYPE_VIDEO_OVERLAY: no_overlay\n");
+               return -EINVAL;
+       }
+       err = verify_preview(dev, &f->fmt.win);
+       if (0 != err)
+               return err;
 
-               if (res_check(fh, RESOURCE_OVERLAY)) {
-                       spin_lock_irqsave(&dev->slock,flags);
-                       stop_preview(dev,fh);
-                       start_preview(dev,fh);
-                       spin_unlock_irqrestore(&dev->slock,flags);
-               }
+       mutex_lock(&dev->lock);
+
+       fh->win    = f->fmt.win;
+       fh->nclips = f->fmt.win.clipcount;
+
+       if (fh->nclips > 8)
+               fh->nclips = 8;
+
+       if (copy_from_user(fh->clips, f->fmt.win.clips,
+                          sizeof(struct v4l2_clip)*fh->nclips)) {
                mutex_unlock(&dev->lock);
-               return 0;
-       case V4L2_BUF_TYPE_VBI_CAPTURE:
-               saa7134_vbi_fmt(dev,f);
-               return 0;
-       default:
-               return -EINVAL;
+               return -EFAULT;
        }
+
+       if (res_check(fh, RESOURCE_OVERLAY)) {
+               spin_lock_irqsave(&dev->slock, flags);
+               stop_preview(dev, fh);
+               start_preview(dev, fh);
+               spin_unlock_irqrestore(&dev->slock, flags);
+       }
+
+       mutex_unlock(&dev->lock);
+       return 0;
 }
 
 static int vidioc_queryctrl(struct file *file, void *priv,
@@ -1715,8 +1725,7 @@ static int vidioc_enum_input(struct file *file, void *priv,
                if (0 != (v2 & 0x0e))
                        i->status |= V4L2_IN_ST_MACROVISION;
        }
-       for (n = 0; n < TVNORMS; n++)
-               i->std |= tvnorms[n].id;
+       i->std = SAA7134_NORMS;
        return 0;
 }
 
@@ -1733,6 +1742,11 @@ static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
 {
        struct saa7134_fh *fh = priv;
        struct saa7134_dev *dev = fh->dev;
+       int err;
+
+       err = v4l2_prio_check(&dev->prio, &fh->prio);
+       if (0 != err)
+               return err;
 
        if (i < 0  ||  i >= SAA7134_INPUT_MAX)
                return -EINVAL;
@@ -1752,7 +1766,6 @@ static int vidioc_querycap(struct file *file, void  *priv,
 
        unsigned int tuner_type = dev->tuner_type;
 
-       memset(cap, 0, sizeof(*cap));
        strcpy(cap->driver, "saa7134");
        strlcpy(cap->card, saa7134_boards[dev->board].name,
                sizeof(cap->card));
@@ -1779,16 +1792,23 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id * id)
        unsigned long flags;
        unsigned int i;
        v4l2_std_id fixup;
+       int err;
+
+       err = v4l2_prio_check(&dev->prio, &fh->prio);
+       if (0 != err)
+               return err;
 
        for (i = 0; i < TVNORMS; i++)
                if (*id == tvnorms[i].id)
                        break;
+
        if (i == TVNORMS)
                for (i = 0; i < TVNORMS; i++)
                        if (*id & tvnorms[i].id)
                                break;
        if (i == TVNORMS)
                return -EINVAL;
+
        if ((*id & V4L2_STD_SECAM) && (secam[0] != '-')) {
                if (secam[0] == 'L' || secam[0] == 'l') {
                        if (secam[1] == 'C' || secam[1] == 'c')
@@ -1805,6 +1825,9 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id * id)
                        if (fixup == tvnorms[i].id)
                                break;
        }
+
+       *id = tvnorms[i].id;
+
        mutex_lock(&dev->lock);
        if (res_check(fh, RESOURCE_OVERLAY)) {
                spin_lock_irqsave(&dev->slock, flags);
@@ -1818,6 +1841,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id * id)
                spin_unlock_irqrestore(&dev->slock, flags);
        } else
                set_tvnorm(dev, &tvnorms[i]);
+
        saa7134_tvaudio_do_scan(dev);
        mutex_unlock(&dev->lock);
        return 0;
@@ -1930,7 +1954,11 @@ static int vidioc_s_tuner(struct file *file, void *priv,
 {
        struct saa7134_fh *fh = priv;
        struct saa7134_dev *dev = fh->dev;
-       int rx, mode;
+       int rx, mode, err;
+
+       err = v4l2_prio_check(&dev->prio, &fh->prio);
+       if (0 != err)
+               return err;
 
        mode = dev->thread.mode;
        if (UNSET == mode) {
@@ -1939,6 +1967,7 @@ static int vidioc_s_tuner(struct file *file, void *priv,
        }
        if (mode != t->audmode)
                dev->thread.mode = t->audmode;
+
        return 0;
 }
 
@@ -1948,9 +1977,9 @@ static int vidioc_g_frequency(struct file *file, void *priv,
        struct saa7134_fh *fh = priv;
        struct saa7134_dev *dev = fh->dev;
 
-       memset(f, 0, sizeof(*f));
        f->type = fh->radio ? V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV;
        f->frequency = dev->ctl_freq;
+
        return 0;
 }
 
@@ -1959,6 +1988,11 @@ static int vidioc_s_frequency(struct file *file, void *priv,
 {
        struct saa7134_fh *fh = priv;
        struct saa7134_dev *dev = fh->dev;
+       int err;
+
+       err = v4l2_prio_check(&dev->prio, &fh->prio);
+       if (0 != err)
+               return err;
 
        if (0 != f->tuner)
                return -EINVAL;
@@ -1978,7 +2012,6 @@ static int vidioc_s_frequency(struct file *file, void *priv,
 
 static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
 {
-       memset(a, 0, sizeof(*a));
        strcpy(a->name, "audio");
        return 0;
 }
@@ -2009,42 +2042,45 @@ static int vidioc_s_priority(struct file *file, void *f,
 static int vidioc_enum_fmt_cap(struct file *file, void  *priv,
                                        struct v4l2_fmtdesc *f)
 {
-       enum v4l2_buf_type type;
-       unsigned int index;
+       if (f->index >= FORMATS)
+               return -EINVAL;
 
-       index = f->index;
-       type  = f->type;
-       switch (type) {
-       case V4L2_BUF_TYPE_VIDEO_CAPTURE:
-       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
-               if (saa7134_no_overlay > 0)
-                       return -EINVAL;
+       strlcpy(f->description, formats[f->index].name,
+               sizeof(f->description));
 
-               if (index >= FORMATS)
-                       return -EINVAL;
+       f->pixelformat = formats[f->index].fourcc;
 
-               if (f->type == V4L2_BUF_TYPE_VIDEO_OVERLAY &&
-                   formats[index].planar)
-                       return -EINVAL;
-               memset(f, 0, sizeof(*f));
-               f->index = index;
-               f->type  = type;
-               strlcpy(f->description, formats[index].name,
-                               sizeof(f->description));
-               f->pixelformat = formats[index].fourcc;
-               break;
-       case V4L2_BUF_TYPE_VBI_CAPTURE:
-               if (0 != index)
-                       return -EINVAL;
-               memset(f, 0, sizeof(*f));
-               f->index = index;
-               f->type  = type;
-               f->pixelformat = V4L2_PIX_FMT_GREY;
-               strcpy(f->description, "vbi data");
-               break;
-       default:
+       return 0;
+}
+
+static int vidioc_enum_fmt_overlay(struct file *file, void  *priv,
+                                       struct v4l2_fmtdesc *f)
+{
+       if (saa7134_no_overlay > 0) {
+               printk(KERN_ERR "V4L2_BUF_TYPE_VIDEO_OVERLAY: no_overlay\n");
                return -EINVAL;
        }
+
+       if ((f->index >= FORMATS) || formats[f->index].planar)
+               return -EINVAL;
+
+       strlcpy(f->description, formats[f->index].name,
+               sizeof(f->description));
+
+       f->pixelformat = formats[f->index].fourcc;
+
+       return 0;
+}
+
+static int vidioc_enum_fmt_vbi(struct file *file, void  *priv,
+                                       struct v4l2_fmtdesc *f)
+{
+       if (0 != f->index)
+               return -EINVAL;
+
+       f->pixelformat = V4L2_PIX_FMT_GREY;
+       strcpy(f->description, "vbi data");
+
        return 0;
 }
 
@@ -2180,7 +2216,6 @@ static int vidioc_streamoff(struct file *file, void *priv,
 static int vidioc_g_parm(struct file *file, void *fh,
                                struct v4l2_streamparm *parm)
 {
-       memset(parm, 0, sizeof(*parm));
        return 0;
 }
 
@@ -2190,7 +2225,6 @@ static int radio_querycap(struct file *file, void *priv,
        struct saa7134_fh *fh = file->private_data;
        struct saa7134_dev *dev = fh->dev;
 
-       memset(cap, 0, sizeof(*cap));
        strcpy(cap->driver, "saa7134");
        strlcpy(cap->card, saa7134_boards[dev->board].name, sizeof(cap->card));
        sprintf(cap->bus_info, "PCI:%s", pci_name(dev->pci));
@@ -2329,6 +2363,14 @@ struct video_device saa7134_video_template =
        .vidioc_g_fmt_cap               = vidioc_g_fmt_cap,
        .vidioc_try_fmt_cap             = vidioc_try_fmt_cap,
        .vidioc_s_fmt_cap               = vidioc_s_fmt_cap,
+       .vidioc_enum_fmt_overlay        = vidioc_enum_fmt_overlay,
+       .vidioc_g_fmt_overlay           = vidioc_g_fmt_overlay,
+       .vidioc_try_fmt_overlay         = vidioc_try_fmt_overlay,
+       .vidioc_s_fmt_overlay           = vidioc_s_fmt_overlay,
+       .vidioc_enum_fmt_vbi            = vidioc_enum_fmt_vbi,
+       .vidioc_g_fmt_vbi               = vidioc_try_get_set_fmt_vbi,
+       .vidioc_try_fmt_vbi             = vidioc_try_get_set_fmt_vbi,
+       .vidioc_s_fmt_vbi               = vidioc_try_get_set_fmt_vbi,
        .vidioc_g_audio                 = vidioc_g_audio,
        .vidioc_s_audio                 = vidioc_s_audio,
        .vidioc_cropcap                 = vidioc_cropcap,
@@ -2360,6 +2402,8 @@ struct video_device saa7134_video_template =
        .vidioc_g_parm                  = vidioc_g_parm,
        .vidioc_g_frequency             = vidioc_g_frequency,
        .vidioc_s_frequency             = vidioc_s_frequency,
+       .tvnorms                        = SAA7134_NORMS,
+       .current_norm                   = V4L2_STD_PAL,
 };
 
 struct video_device saa7134_vbi_template =
index 5c5b074130769f7fc715c1b49b56476210304abb..8fb95094ba840d78dae57f814559c92468844960 100644 (file)
@@ -625,6 +625,7 @@ void saa7134_i2c_call_clients(struct saa7134_dev *dev,
 /* ----------------------------------------------------------- */
 /* saa7134-video.c                                             */
 
+extern unsigned int video_debug;
 extern struct video_device saa7134_video_template;
 extern struct video_device saa7134_radio_template;