[media] usbvision: the radio device node has wrong caps
authorHans Verkuil <hans.verkuil@cisco.com>
Mon, 20 Jul 2015 12:59:32 +0000 (09:59 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Tue, 11 Aug 2015 09:51:00 +0000 (06:51 -0300)
The radio device node had the same caps as the video node. Fix this.

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

index 15a1ebf336e2baa5541ec45c09a32e6989f4eb05..f526712a64351acbcac783c8dfa3b99d56b5c83c 100644 (file)
@@ -487,17 +487,24 @@ static int vidioc_querycap(struct file *file, void  *priv,
                                        struct v4l2_capability *vc)
 {
        struct usb_usbvision *usbvision = video_drvdata(file);
+       struct video_device *vdev = video_devdata(file);
 
        strlcpy(vc->driver, "USBVision", sizeof(vc->driver));
        strlcpy(vc->card,
                usbvision_device_data[usbvision->dev_model].model_string,
                sizeof(vc->card));
        usb_make_path(usbvision->dev, vc->bus_info, sizeof(vc->bus_info));
-       vc->device_caps = V4L2_CAP_VIDEO_CAPTURE |
-               V4L2_CAP_READWRITE |
-               V4L2_CAP_STREAMING |
-               (usbvision->have_tuner ? V4L2_CAP_TUNER : 0);
-       vc->capabilities = vc->device_caps | V4L2_CAP_DEVICE_CAPS;
+       vc->device_caps = usbvision->have_tuner ? V4L2_CAP_TUNER : 0;
+       if (vdev->vfl_type == VFL_TYPE_GRABBER)
+               vc->device_caps |= V4L2_CAP_VIDEO_CAPTURE |
+                       V4L2_CAP_READWRITE | V4L2_CAP_STREAMING;
+       else
+               vc->device_caps |= V4L2_CAP_RADIO;
+
+       vc->capabilities = vc->device_caps | V4L2_CAP_VIDEO_CAPTURE |
+               V4L2_CAP_READWRITE | V4L2_CAP_STREAMING | V4L2_CAP_DEVICE_CAPS;
+       if (usbvision_device_data[usbvision->dev_model].radio)
+               vc->capabilities |= V4L2_CAP_RADIO;
        return 0;
 }