[media] cx231xx: clean up radio support
authorHans Verkuil <hans.verkuil@cisco.com>
Tue, 29 Jan 2013 15:32:20 +0000 (12:32 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 5 Mar 2013 17:25:57 +0000 (14:25 -0300)
Radio should not use video or audio inputs.
In addition, fix a bug in radio_g_tuner where s_tuner was called in the tuner
subdev instead of g_tuner.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/usb/cx231xx/cx231xx-video.c

index 1b29158bbbe25be8c423b87257c65e60612eaf29..2cd31129de86ae87423dd453b3a33004b96da43f 100644 (file)
@@ -1875,20 +1875,24 @@ static int vidioc_querycap(struct file *file, void *priv,
        strlcpy(cap->card, cx231xx_boards[dev->model].name, sizeof(cap->card));
        usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info));
 
-       cap->device_caps =
-               V4L2_CAP_AUDIO          |
-               V4L2_CAP_READWRITE      |
-               V4L2_CAP_STREAMING;
-
-       if (vdev->vfl_type == VFL_TYPE_VBI)
-               cap->device_caps |= V4L2_CAP_VBI_CAPTURE;
-       else
-               cap->device_caps |= V4L2_CAP_VIDEO_CAPTURE;
+       if (vdev->vfl_type == VFL_TYPE_RADIO)
+               cap->device_caps = V4L2_CAP_RADIO;
+       else {
+               cap->device_caps = V4L2_CAP_AUDIO | V4L2_CAP_READWRITE |
+                       V4L2_CAP_STREAMING;
+               if (vdev->vfl_type == VFL_TYPE_VBI)
+                       cap->device_caps |= V4L2_CAP_VBI_CAPTURE;
+               else
+                       cap->device_caps |= V4L2_CAP_VIDEO_CAPTURE;
+       }
        if (dev->tuner_type != TUNER_ABSENT)
                cap->device_caps |= V4L2_CAP_TUNER;
        cap->capabilities = cap->device_caps |
                V4L2_CAP_VBI_CAPTURE | V4L2_CAP_VIDEO_CAPTURE |
-               V4L2_CAP_DEVICE_CAPS;
+               V4L2_CAP_AUDIO | V4L2_CAP_READWRITE |
+               V4L2_CAP_STREAMING | V4L2_CAP_DEVICE_CAPS;
+       if (dev->radio_dev)
+               cap->capabilities |= V4L2_CAP_RADIO;
 
        return 0;
 }
@@ -2055,53 +2059,19 @@ static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *b)
 /* RADIO ESPECIFIC IOCTLS                                      */
 /* ----------------------------------------------------------- */
 
-static int radio_querycap(struct file *file, void *priv,
-                         struct v4l2_capability *cap)
-{
-       struct cx231xx *dev = ((struct cx231xx_fh *)priv)->dev;
-
-       strlcpy(cap->driver, "cx231xx", sizeof(cap->driver));
-       strlcpy(cap->card, cx231xx_boards[dev->model].name, sizeof(cap->card));
-       usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info));
-
-       cap->capabilities = V4L2_CAP_TUNER;
-       return 0;
-}
-
 static int radio_g_tuner(struct file *file, void *priv, struct v4l2_tuner *t)
 {
        struct cx231xx *dev = ((struct cx231xx_fh *)priv)->dev;
 
-       if (unlikely(t->index > 0))
+       if (t->index)
                return -EINVAL;
 
        strcpy(t->name, "Radio");
-       t->type = V4L2_TUNER_RADIO;
-
-       call_all(dev, tuner, s_tuner, t);
-
-       return 0;
-}
 
-static int radio_enum_input(struct file *file, void *priv, struct v4l2_input *i)
-{
-       if (i->index != 0)
-               return -EINVAL;
-       strcpy(i->name, "Radio");
-       i->type = V4L2_INPUT_TYPE_TUNER;
-
-       return 0;
-}
-
-static int radio_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
-{
-       if (unlikely(a->index))
-               return -EINVAL;
+       call_all(dev, tuner, g_tuner, t);
 
-       strcpy(a->name, "Radio");
        return 0;
 }
-
 static int radio_s_tuner(struct file *file, void *priv, struct v4l2_tuner *t)
 {
        struct cx231xx *dev = ((struct cx231xx_fh *)priv)->dev;
@@ -2114,16 +2084,6 @@ static int radio_s_tuner(struct file *file, void *priv, struct v4l2_tuner *t)
        return 0;
 }
 
-static int radio_s_audio(struct file *file, void *fh, const struct v4l2_audio *a)
-{
-       return 0;
-}
-
-static int radio_s_input(struct file *file, void *fh, unsigned int i)
-{
-       return 0;
-}
-
 static int radio_queryctrl(struct file *file, void *priv,
                           struct v4l2_queryctrl *c)
 {
@@ -2552,18 +2512,15 @@ static const struct v4l2_file_operations radio_fops = {
 };
 
 static const struct v4l2_ioctl_ops radio_ioctl_ops = {
-       .vidioc_querycap    = radio_querycap,
+       .vidioc_querycap    = vidioc_querycap,
        .vidioc_g_tuner     = radio_g_tuner,
-       .vidioc_enum_input  = radio_enum_input,
-       .vidioc_g_audio     = radio_g_audio,
        .vidioc_s_tuner     = radio_s_tuner,
-       .vidioc_s_audio     = radio_s_audio,
-       .vidioc_s_input     = radio_s_input,
        .vidioc_queryctrl   = radio_queryctrl,
        .vidioc_g_ctrl      = vidioc_g_ctrl,
        .vidioc_s_ctrl      = vidioc_s_ctrl,
        .vidioc_g_frequency = vidioc_g_frequency,
        .vidioc_s_frequency = vidioc_s_frequency,
+       .vidioc_g_chip_ident = vidioc_g_chip_ident,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
        .vidioc_g_register  = vidioc_g_register,
        .vidioc_s_register  = vidioc_s_register,