media: media/radio: set device_caps in struct video_device
authorHans Verkuil <hverkuil-cisco@xs4all.nl>
Tue, 4 Jun 2019 11:19:52 +0000 (07:19 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Wed, 5 Jun 2019 12:19:12 +0000 (08:19 -0400)
Instead of filling in the struct v4l2_capability device_caps
field, fill in the struct video_device device_caps field.

That way the V4L2 core knows what the capabilities of the
video device are.

But this only really works if all drivers use this, so convert
all radio drivers in this patch.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
20 files changed:
drivers/media/radio/dsbr100.c
drivers/media/radio/radio-cadet.c
drivers/media/radio/radio-isa.c
drivers/media/radio/radio-keene.c
drivers/media/radio/radio-ma901.c
drivers/media/radio/radio-miropcm20.c
drivers/media/radio/radio-mr800.c
drivers/media/radio/radio-raremono.c
drivers/media/radio/radio-sf16fmi.c
drivers/media/radio/radio-si476x.c
drivers/media/radio/radio-tea5764.c
drivers/media/radio/radio-tea5777.c
drivers/media/radio/radio-timb.c
drivers/media/radio/radio-wl1273.c
drivers/media/radio/si470x/radio-si470x-i2c.c
drivers/media/radio/si470x/radio-si470x-usb.c
drivers/media/radio/si4713/radio-platform-si4713.c
drivers/media/radio/si4713/radio-usb-si4713.c
drivers/media/radio/tea575x.c
drivers/media/radio/wl128x/fmdrv_v4l2.c

index c9d51a5f28389b21b6a7d3d8503d000612ce9cf6..76a21b9d9ad6dc31101b959b8f792795a461eea3 100644 (file)
@@ -177,8 +177,6 @@ static int vidioc_querycap(struct file *file, void *priv,
        strscpy(v->driver, "dsbr100", sizeof(v->driver));
        strscpy(v->card, "D-Link R-100 USB FM Radio", sizeof(v->card));
        usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info));
-       v->device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER;
-       v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
        return 0;
 }
 
@@ -387,6 +385,7 @@ static int usb_dsbr100_probe(struct usb_interface *intf,
        radio->videodev.release = video_device_release_empty;
        radio->videodev.lock = &radio->v4l2_lock;
        radio->videodev.ctrl_handler = &radio->hdl;
+       radio->videodev.device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER;
 
        radio->usbdev = interface_to_usbdev(intf);
        radio->curfreq = FREQ_MIN * FREQ_MUL;
index 12160894839ca47645c7a2781857f9388b625e4c..a5db9b4dc3de914a48636da942e8249f46ef1d8e 100644 (file)
@@ -357,9 +357,6 @@ static int vidioc_querycap(struct file *file, void *priv,
        strscpy(v->driver, "ADS Cadet", sizeof(v->driver));
        strscpy(v->card, "ADS Cadet", sizeof(v->card));
        strscpy(v->bus_info, "ISA:radio-cadet", sizeof(v->bus_info));
-       v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO |
-                         V4L2_CAP_READWRITE | V4L2_CAP_RDS_CAPTURE;
-       v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
        return 0;
 }
 
@@ -646,6 +643,8 @@ static int __init cadet_init(void)
        dev->vdev.ioctl_ops = &cadet_ioctl_ops;
        dev->vdev.release = video_device_release_empty;
        dev->vdev.lock = &dev->lock;
+       dev->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO |
+                               V4L2_CAP_READWRITE | V4L2_CAP_RDS_CAPTURE;
        video_set_drvdata(&dev->vdev, dev);
 
        res = video_register_device(&dev->vdev, VFL_TYPE_RADIO, radio_nr);
index 551de8a45b95445fb78bea9e461649f1d595fee6..f9255ada9d87f4196dc4f57de79f9a795d5cf1b2 100644 (file)
@@ -45,9 +45,6 @@ static int radio_isa_querycap(struct file *file, void  *priv,
        strscpy(v->driver, isa->drv->driver.driver.name, sizeof(v->driver));
        strscpy(v->card, isa->drv->card, sizeof(v->card));
        snprintf(v->bus_info, sizeof(v->bus_info), "ISA:%s", isa->v4l2_dev.name);
-
-       v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
-       v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
        return 0;
 }
 
@@ -248,6 +245,7 @@ static int radio_isa_common_probe(struct radio_isa_card *isa,
        isa->vdev.fops = &radio_isa_fops;
        isa->vdev.ioctl_ops = &radio_isa_ioctl_ops;
        isa->vdev.release = video_device_release_empty;
+       isa->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
        video_set_drvdata(&isa->vdev, isa);
        isa->freq = FREQ_LOW;
        isa->stereo = drv->has_stereo;
index e9484b01307347feda1c36a817554024be204874..40a051fcd761e1307e27d6329b74d031373e7889 100644 (file)
@@ -177,8 +177,6 @@ static int vidioc_querycap(struct file *file, void *priv,
        strscpy(v->driver, "radio-keene", sizeof(v->driver));
        strscpy(v->card, "Keene FM Transmitter", sizeof(v->card));
        usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info));
-       v->device_caps = V4L2_CAP_RADIO | V4L2_CAP_MODULATOR;
-       v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
        return 0;
 }
 
@@ -370,6 +368,7 @@ static int usb_keene_probe(struct usb_interface *intf,
        radio->vdev.lock = &radio->lock;
        radio->vdev.release = video_device_release_empty;
        radio->vdev.vfl_dir = VFL_DIR_TX;
+       radio->vdev.device_caps = V4L2_CAP_RADIO | V4L2_CAP_MODULATOR;
 
        radio->usbdev = interface_to_usbdev(intf);
        radio->intf = intf;
index 5cb153727841b72e42f0bcc8c8e563b95b6e8bba..33aa29748dbbb2f4f591cea278d93704e89d300b 100644 (file)
@@ -200,8 +200,6 @@ static int vidioc_querycap(struct file *file, void *priv,
        strscpy(v->driver, "radio-ma901", sizeof(v->driver));
        strscpy(v->card, "Masterkit MA901 USB FM Radio", sizeof(v->card));
        usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info));
-       v->device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER;
-       v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
        return 0;
 }
 
@@ -407,6 +405,7 @@ static int usb_ma901radio_probe(struct usb_interface *intf,
        radio->vdev.ioctl_ops = &usb_ma901radio_ioctl_ops;
        radio->vdev.release = video_device_release_empty;
        radio->vdev.lock = &radio->lock;
+       radio->vdev.device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER;
 
        radio->usbdev = interface_to_usbdev(intf);
        radio->intf = intf;
index 95d12cbff5c9a91e1ae6c39ac9c82cea5ee6d2c6..99788834c6461915f27e1c791712e53ef5937897 100644 (file)
@@ -204,8 +204,6 @@ static int vidioc_querycap(struct file *file, void *priv,
        strscpy(v->driver, "Miro PCM20", sizeof(v->driver));
        strscpy(v->card, "Miro PCM20", sizeof(v->card));
        snprintf(v->bus_info, sizeof(v->bus_info), "ISA:%s", dev->v4l2_dev.name);
-       v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO | V4L2_CAP_RDS_CAPTURE;
-       v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
        return 0;
 }
 
@@ -481,6 +479,8 @@ static int __init pcm20_init(void)
        dev->vdev.ioctl_ops = &pcm20_ioctl_ops;
        dev->vdev.release = video_device_release_empty;
        dev->vdev.lock = &dev->lock;
+       dev->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO |
+                               V4L2_CAP_RDS_CAPTURE;
        video_set_drvdata(&dev->vdev, dev);
        snd_aci_cmd(dev->aci, ACI_SET_TUNERMONO,
                        dev->audmode == V4L2_TUNER_MODE_MONO, -1);
index ab1324f681995663440e5e8453819175ef118064..f090a3f56d86bbf170bd1ccc9ff955e71f4fd56d 100644 (file)
@@ -269,9 +269,6 @@ static int vidioc_querycap(struct file *file, void *priv,
        strscpy(v->driver, "radio-mr800", sizeof(v->driver));
        strscpy(v->card, "AverMedia MR 800 USB FM Radio", sizeof(v->card));
        usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info));
-       v->device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER |
-                                       V4L2_CAP_HW_FREQ_SEEK;
-       v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
        return 0;
 }
 
@@ -554,6 +551,8 @@ static int usb_amradio_probe(struct usb_interface *intf,
        radio->vdev.ioctl_ops = &usb_amradio_ioctl_ops;
        radio->vdev.release = video_device_release_empty;
        radio->vdev.lock = &radio->lock;
+       radio->vdev.device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER |
+                                 V4L2_CAP_HW_FREQ_SEEK;
 
        radio->usbdev = interface_to_usbdev(intf);
        radio->intf = intf;
index 5e782b3c2fa92a5658392652af56e1c6120d9d31..606f588e1edf4ec1065eefc0d2d4f50c38840f5c 100644 (file)
@@ -184,8 +184,6 @@ static int vidioc_querycap(struct file *file, void *priv,
        strscpy(v->driver, "radio-raremono", sizeof(v->driver));
        strscpy(v->card, "Thanko's Raremono", sizeof(v->card));
        usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info));
-       v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
-       v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
        return 0;
 }
 
@@ -345,6 +343,7 @@ static int usb_raremono_probe(struct usb_interface *intf,
        radio->vdev.ioctl_ops = &usb_raremono_ioctl_ops;
        radio->vdev.lock = &radio->lock;
        radio->vdev.release = video_device_release_empty;
+       radio->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
 
        usb_set_intfdata(intf, &radio->v4l2_dev);
 
index 434c03338d7f5f6b541dd42a5ddbc52fab16e374..54a40d60e4fdbf8bf3a30a306d636e56f462cde3 100644 (file)
@@ -133,8 +133,6 @@ static int vidioc_querycap(struct file *file, void  *priv,
        strscpy(v->driver, "radio-sf16fmi", sizeof(v->driver));
        strscpy(v->card, "SF16-FMI/FMP/FMD radio", sizeof(v->card));
        strscpy(v->bus_info, "ISA:radio-sf16fmi", sizeof(v->bus_info));
-       v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
-       v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
        return 0;
 }
 
@@ -345,6 +343,7 @@ static int __init fmi_init(void)
        fmi->vdev.fops = &fmi_fops;
        fmi->vdev.ioctl_ops = &fmi_ioctl_ops;
        fmi->vdev.release = video_device_release_empty;
+       fmi->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
        video_set_drvdata(&fmi->vdev, fmi);
 
        mutex_init(&fmi->lock);
index 0261f4d28f163c6bccc75d4b2eee2bc6b5610115..0d51874108535e6239b40c1bc3dc74444bb456ef 100644 (file)
@@ -345,19 +345,6 @@ static int si476x_radio_querycap(struct file *file, void *priv,
        strscpy(capability->card,   DRIVER_CARD, sizeof(capability->card));
        snprintf(capability->bus_info, sizeof(capability->bus_info),
                 "platform:%s", radio->v4l2dev.name);
-
-       capability->device_caps = V4L2_CAP_TUNER
-               | V4L2_CAP_RADIO
-               | V4L2_CAP_HW_FREQ_SEEK;
-
-       si476x_core_lock(radio->core);
-       if (!si476x_core_is_a_secondary_tuner(radio->core))
-               capability->device_caps |= V4L2_CAP_RDS_CAPTURE
-                       | V4L2_CAP_READWRITE;
-       si476x_core_unlock(radio->core);
-
-       capability->capabilities = capability->device_caps
-               | V4L2_CAP_DEVICE_CAPS;
        return 0;
 }
 
@@ -1468,6 +1455,14 @@ static int si476x_radio_probe(struct platform_device *pdev)
 
        radio->videodev.v4l2_dev  = &radio->v4l2dev;
        radio->videodev.ioctl_ops = &si4761_ioctl_ops;
+       radio->videodev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO |
+                                     V4L2_CAP_HW_FREQ_SEEK;
+
+       si476x_core_lock(radio->core);
+       if (!si476x_core_is_a_secondary_tuner(radio->core))
+               radio->videodev.device_caps |= V4L2_CAP_RDS_CAPTURE |
+                                              V4L2_CAP_READWRITE;
+       si476x_core_unlock(radio->core);
 
        video_set_drvdata(&radio->videodev, radio);
        platform_set_drvdata(pdev, radio);
index 6632be648cea5e15264a9c5420326dec2b1e9920..fc8afbc0fb2264691d8377d3ec504d3c1e72f62d 100644 (file)
@@ -291,8 +291,6 @@ static int vidioc_querycap(struct file *file, void  *priv,
        strscpy(v->card, dev->name, sizeof(v->card));
        snprintf(v->bus_info, sizeof(v->bus_info),
                 "I2C:%s", dev_name(&dev->dev));
-       v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
-       v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
        return 0;
 }
 
@@ -474,6 +472,7 @@ static int tea5764_i2c_probe(struct i2c_client *client,
        video_set_drvdata(&radio->vdev, radio);
        radio->vdev.lock = &radio->mutex;
        radio->vdev.v4l2_dev = v4l2_dev;
+       radio->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
 
        /* initialize and power off the chip */
        tea5764_i2c_read(radio);
index 61f751cf1aa4cf575f132ed49f1f13bf9d687702..17f9e21ff3c509935ec84b69276a7540ad4d19ea 100644 (file)
@@ -270,9 +270,6 @@ static int vidioc_querycap(struct file *file, void  *priv,
        strscpy(v->card, tea->card, sizeof(v->card));
        strlcat(v->card, " TEA5777", sizeof(v->card));
        strscpy(v->bus_info, tea->bus_info, sizeof(v->bus_info));
-       v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
-       v->device_caps |= V4L2_CAP_HW_FREQ_SEEK;
-       v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
        return 0;
 }
 
@@ -563,6 +560,8 @@ int radio_tea5777_init(struct radio_tea5777 *tea, struct module *owner)
        strscpy(tea->vd.name, tea->v4l2_dev->name, sizeof(tea->vd.name));
        tea->vd.lock = &tea->mutex;
        tea->vd.v4l2_dev = tea->v4l2_dev;
+       tea->vd.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO |
+                             V4L2_CAP_HW_FREQ_SEEK;
        tea->fops = tea575x_fops;
        tea->fops.owner = owner;
        tea->vd.fops = &tea->fops;
index 0eda863124e9358bf594b12c897a824c6eed8b19..d92352005d3dc5e42a1d275a0e5032a8d28e4ed5 100644 (file)
@@ -42,8 +42,6 @@ static int timbradio_vidioc_querycap(struct file *file, void  *priv,
        strscpy(v->driver, DRIVER_NAME, sizeof(v->driver));
        strscpy(v->card, "Timberdale Radio", sizeof(v->card));
        snprintf(v->bus_info, sizeof(v->bus_info), "platform:"DRIVER_NAME);
-       v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
-       v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
        return 0;
 }
 
@@ -122,6 +120,7 @@ static int timbradio_probe(struct platform_device *pdev)
        tr->video_dev.release = video_device_release_empty;
        tr->video_dev.minor = -1;
        tr->video_dev.lock = &tr->lock;
+       tr->video_dev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
 
        strscpy(tr->v4l2_dev.name, DRIVER_NAME, sizeof(tr->v4l2_dev.name));
        err = v4l2_device_register(NULL, &tr->v4l2_dev);
index b95704f3cb8bb3e40fdb195c0b747dfdfe5a5e13..a1a36ce396eee104728f2941950479cb8a7eec8e 100644 (file)
@@ -1292,14 +1292,6 @@ static int wl1273_fm_vidioc_querycap(struct file *file, void *priv,
                sizeof(capability->card));
        strscpy(capability->bus_info, radio->bus_type,
                sizeof(capability->bus_info));
-
-       capability->device_caps = V4L2_CAP_HW_FREQ_SEEK |
-               V4L2_CAP_TUNER | V4L2_CAP_RADIO | V4L2_CAP_AUDIO |
-               V4L2_CAP_RDS_CAPTURE | V4L2_CAP_MODULATOR |
-               V4L2_CAP_RDS_OUTPUT;
-       capability->capabilities = capability->device_caps |
-               V4L2_CAP_DEVICE_CAPS;
-
        return 0;
 }
 
@@ -1988,6 +1980,10 @@ static const struct video_device wl1273_viddev_template = {
        .name                   = WL1273_FM_DRIVER_NAME,
        .release                = wl1273_vdev_release,
        .vfl_dir                = VFL_DIR_TX,
+       .device_caps            = V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_TUNER |
+                                 V4L2_CAP_RADIO | V4L2_CAP_AUDIO |
+                                 V4L2_CAP_RDS_CAPTURE | V4L2_CAP_MODULATOR |
+                                 V4L2_CAP_RDS_OUTPUT,
 };
 
 static int wl1273_fm_radio_remove(struct platform_device *pdev)
index 15eea2b2c90fecdb4bd6125e5afa4c18df9ef006..6b42a189b2711014f21e8887fcae5bc51110a928 100644 (file)
@@ -232,10 +232,6 @@ static int si470x_vidioc_querycap(struct file *file, void *priv,
 {
        strscpy(capability->driver, DRIVER_NAME, sizeof(capability->driver));
        strscpy(capability->card, DRIVER_CARD, sizeof(capability->card));
-       capability->device_caps = V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_READWRITE |
-               V4L2_CAP_TUNER | V4L2_CAP_RADIO | V4L2_CAP_RDS_CAPTURE;
-       capability->capabilities = capability->device_caps | V4L2_CAP_DEVICE_CAPS;
-
        return 0;
 }
 
@@ -391,6 +387,9 @@ static int si470x_i2c_probe(struct i2c_client *client,
        radio->videodev.lock = &radio->lock;
        radio->videodev.v4l2_dev = &radio->v4l2_dev;
        radio->videodev.release = video_device_release_empty;
+       radio->videodev.device_caps =
+               V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_READWRITE | V4L2_CAP_TUNER |
+               V4L2_CAP_RADIO | V4L2_CAP_RDS_CAPTURE;
        video_set_drvdata(&radio->videodev, radio);
 
        radio->gpio_reset = devm_gpiod_get_optional(&client->dev, "reset",
index 91d6ef5579f7950cee08d16eed0e075ecc97f422..398e4149f21929ac8921fe4bb47b177a0f4a314c 100644 (file)
@@ -523,9 +523,6 @@ static int si470x_vidioc_querycap(struct file *file, void *priv,
        strscpy(capability->card, DRIVER_CARD, sizeof(capability->card));
        usb_make_path(radio->usbdev, capability->bus_info,
                        sizeof(capability->bus_info));
-       capability->device_caps = V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_READWRITE |
-               V4L2_CAP_TUNER | V4L2_CAP_RADIO | V4L2_CAP_RDS_CAPTURE;
-       capability->capabilities = capability->device_caps | V4L2_CAP_DEVICE_CAPS;
        return 0;
 }
 
@@ -679,6 +676,9 @@ static int si470x_usb_driver_probe(struct usb_interface *intf,
        radio->videodev.lock = &radio->lock;
        radio->videodev.v4l2_dev = &radio->v4l2_dev;
        radio->videodev.release = video_device_release_empty;
+       radio->videodev.device_caps =
+               V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_READWRITE | V4L2_CAP_TUNER |
+               V4L2_CAP_RADIO | V4L2_CAP_RDS_CAPTURE;
        video_set_drvdata(&radio->videodev, radio);
 
        /* get device and chip versions */
index 733fcf3933e44c60bdc452534989cbd8c8b525bb..9a012a2012c8d2c9646bc9e81e2f31a7326d5b81 100644 (file)
@@ -72,9 +72,6 @@ static int radio_si4713_querycap(struct file *file, void *priv,
                sizeof(capability->card));
        strscpy(capability->bus_info, "platform:radio-si4713",
                sizeof(capability->bus_info));
-       capability->device_caps = V4L2_CAP_MODULATOR | V4L2_CAP_RDS_OUTPUT;
-       capability->capabilities = capability->device_caps | V4L2_CAP_DEVICE_CAPS;
-
        return 0;
 }
 
@@ -184,6 +181,7 @@ static int radio_si4713_pdriver_probe(struct platform_device *pdev)
        rsdev->radio_dev.ctrl_handler = sd->ctrl_handler;
        /* Serialize all access to the si4713 */
        rsdev->radio_dev.lock = &rsdev->lock;
+       rsdev->radio_dev.device_caps = V4L2_CAP_MODULATOR | V4L2_CAP_RDS_OUTPUT;
        video_set_drvdata(&rsdev->radio_dev, rsdev);
        if (video_register_device(&rsdev->radio_dev, VFL_TYPE_RADIO, radio_nr)) {
                dev_err(&pdev->dev, "Could not register video device.\n");
index 23065ecce9796c2fe2f473c271e59a4d576d018c..33274189c83c363dc94a65d5d8080d0923331480 100644 (file)
@@ -70,9 +70,6 @@ static int vidioc_querycap(struct file *file, void *priv,
        strscpy(v->driver, "radio-usb-si4713", sizeof(v->driver));
        strscpy(v->card, "Si4713 FM Transmitter", sizeof(v->card));
        usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info));
-       v->device_caps = V4L2_CAP_MODULATOR | V4L2_CAP_RDS_OUTPUT;
-       v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
-
        return 0;
 }
 
@@ -475,6 +472,7 @@ static int usb_si4713_probe(struct usb_interface *intf,
        radio->vdev.lock = &radio->lock;
        radio->vdev.release = video_device_release_empty;
        radio->vdev.vfl_dir = VFL_DIR_TX;
+       radio->vdev.device_caps = V4L2_CAP_MODULATOR | V4L2_CAP_RDS_OUTPUT;
 
        video_set_drvdata(&radio->vdev, radio);
 
index f89f83e047416e03387a502797200c2154f6b25b..1cfae4646e45cc6e65d904e4a956ffdc5db9141e 100644 (file)
@@ -237,10 +237,6 @@ static int vidioc_querycap(struct file *file, void  *priv,
        strscpy(v->card, tea->card, sizeof(v->card));
        strlcat(v->card, tea->tea5759 ? " TEA5759" : " TEA5757", sizeof(v->card));
        strscpy(v->bus_info, tea->bus_info, sizeof(v->bus_info));
-       v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
-       if (!tea->cannot_read_data)
-               v->device_caps |= V4L2_CAP_HW_FREQ_SEEK;
-       v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
        return 0;
 }
 
@@ -540,6 +536,9 @@ int snd_tea575x_init(struct snd_tea575x *tea, struct module *owner)
        strscpy(tea->vd.name, tea->v4l2_dev->name, sizeof(tea->vd.name));
        tea->vd.lock = &tea->mutex;
        tea->vd.v4l2_dev = tea->v4l2_dev;
+       tea->vd.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
+       if (!tea->cannot_read_data)
+               tea->vd.device_caps |= V4L2_CAP_HW_FREQ_SEEK;
        tea->fops = tea575x_fops;
        tea->fops.owner = owner;
        tea->vd.fops = &tea->fops;
index a1eaea19a81cb49216835b56834d1914cd97531f..6ed48e4989896ea0fd1dca04ba715d054def5104 100644 (file)
@@ -194,13 +194,6 @@ static int fm_v4l2_vidioc_querycap(struct file *file, void *priv,
        strscpy(capability->card, FM_DRV_CARD_SHORT_NAME,
                sizeof(capability->card));
        sprintf(capability->bus_info, "UART");
-       capability->device_caps = V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_TUNER |
-               V4L2_CAP_RADIO | V4L2_CAP_MODULATOR |
-               V4L2_CAP_AUDIO | V4L2_CAP_READWRITE |
-               V4L2_CAP_RDS_CAPTURE;
-       capability->capabilities = capability->device_caps |
-               V4L2_CAP_DEVICE_CAPS;
-
        return 0;
 }
 
@@ -524,6 +517,9 @@ static const struct video_device fm_viddev_template = {
         * but that would affect applications using this driver.
         */
        .vfl_dir = VFL_DIR_M2M,
+       .device_caps = V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_TUNER | V4L2_CAP_RADIO |
+                      V4L2_CAP_MODULATOR | V4L2_CAP_AUDIO |
+                      V4L2_CAP_READWRITE | V4L2_CAP_RDS_CAPTURE,
 };
 
 int fm_v4l2_init_video_device(struct fmdev *fmdev, int radio_nr)