summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil-cisco@xs4all.nl>2019-06-04 07:19:52 -0400
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>2019-06-05 08:19:12 -0400
commite83ce3005db16243e1085925251fd0776bb60d09 (patch)
tree69ae7135fa6c50a7fbdefa3d66aca32933a3921d
parent7e98b7b542a456582ea3029be857cc99a3b19bd5 (diff)
media: media/radio: set device_caps in struct video_device
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>
-rw-r--r--drivers/media/radio/dsbr100.c3
-rw-r--r--drivers/media/radio/radio-cadet.c5
-rw-r--r--drivers/media/radio/radio-isa.c4
-rw-r--r--drivers/media/radio/radio-keene.c3
-rw-r--r--drivers/media/radio/radio-ma901.c3
-rw-r--r--drivers/media/radio/radio-miropcm20.c4
-rw-r--r--drivers/media/radio/radio-mr800.c5
-rw-r--r--drivers/media/radio/radio-raremono.c3
-rw-r--r--drivers/media/radio/radio-sf16fmi.c3
-rw-r--r--drivers/media/radio/radio-si476x.c21
-rw-r--r--drivers/media/radio/radio-tea5764.c3
-rw-r--r--drivers/media/radio/radio-tea5777.c5
-rw-r--r--drivers/media/radio/radio-timb.c3
-rw-r--r--drivers/media/radio/radio-wl1273.c12
-rw-r--r--drivers/media/radio/si470x/radio-si470x-i2c.c7
-rw-r--r--drivers/media/radio/si470x/radio-si470x-usb.c6
-rw-r--r--drivers/media/radio/si4713/radio-platform-si4713.c4
-rw-r--r--drivers/media/radio/si4713/radio-usb-si4713.c4
-rw-r--r--drivers/media/radio/tea575x.c7
-rw-r--r--drivers/media/radio/wl128x/fmdrv_v4l2.c10
20 files changed, 42 insertions, 73 deletions
diff --git a/drivers/media/radio/dsbr100.c b/drivers/media/radio/dsbr100.c
index c9d51a5f2838..76a21b9d9ad6 100644
--- a/drivers/media/radio/dsbr100.c
+++ b/drivers/media/radio/dsbr100.c
@@ -177,8 +177,6 @@ static int vidioc_querycap(struct file *file, void *priv,
177 strscpy(v->driver, "dsbr100", sizeof(v->driver)); 177 strscpy(v->driver, "dsbr100", sizeof(v->driver));
178 strscpy(v->card, "D-Link R-100 USB FM Radio", sizeof(v->card)); 178 strscpy(v->card, "D-Link R-100 USB FM Radio", sizeof(v->card));
179 usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info)); 179 usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info));
180 v->device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER;
181 v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
182 return 0; 180 return 0;
183} 181}
184 182
@@ -387,6 +385,7 @@ static int usb_dsbr100_probe(struct usb_interface *intf,
387 radio->videodev.release = video_device_release_empty; 385 radio->videodev.release = video_device_release_empty;
388 radio->videodev.lock = &radio->v4l2_lock; 386 radio->videodev.lock = &radio->v4l2_lock;
389 radio->videodev.ctrl_handler = &radio->hdl; 387 radio->videodev.ctrl_handler = &radio->hdl;
388 radio->videodev.device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER;
390 389
391 radio->usbdev = interface_to_usbdev(intf); 390 radio->usbdev = interface_to_usbdev(intf);
392 radio->curfreq = FREQ_MIN * FREQ_MUL; 391 radio->curfreq = FREQ_MIN * FREQ_MUL;
diff --git a/drivers/media/radio/radio-cadet.c b/drivers/media/radio/radio-cadet.c
index 12160894839c..a5db9b4dc3de 100644
--- a/drivers/media/radio/radio-cadet.c
+++ b/drivers/media/radio/radio-cadet.c
@@ -357,9 +357,6 @@ static int vidioc_querycap(struct file *file, void *priv,
357 strscpy(v->driver, "ADS Cadet", sizeof(v->driver)); 357 strscpy(v->driver, "ADS Cadet", sizeof(v->driver));
358 strscpy(v->card, "ADS Cadet", sizeof(v->card)); 358 strscpy(v->card, "ADS Cadet", sizeof(v->card));
359 strscpy(v->bus_info, "ISA:radio-cadet", sizeof(v->bus_info)); 359 strscpy(v->bus_info, "ISA:radio-cadet", sizeof(v->bus_info));
360 v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO |
361 V4L2_CAP_READWRITE | V4L2_CAP_RDS_CAPTURE;
362 v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
363 return 0; 360 return 0;
364} 361}
365 362
@@ -646,6 +643,8 @@ static int __init cadet_init(void)
646 dev->vdev.ioctl_ops = &cadet_ioctl_ops; 643 dev->vdev.ioctl_ops = &cadet_ioctl_ops;
647 dev->vdev.release = video_device_release_empty; 644 dev->vdev.release = video_device_release_empty;
648 dev->vdev.lock = &dev->lock; 645 dev->vdev.lock = &dev->lock;
646 dev->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO |
647 V4L2_CAP_READWRITE | V4L2_CAP_RDS_CAPTURE;
649 video_set_drvdata(&dev->vdev, dev); 648 video_set_drvdata(&dev->vdev, dev);
650 649
651 res = video_register_device(&dev->vdev, VFL_TYPE_RADIO, radio_nr); 650 res = video_register_device(&dev->vdev, VFL_TYPE_RADIO, radio_nr);
diff --git a/drivers/media/radio/radio-isa.c b/drivers/media/radio/radio-isa.c
index 551de8a45b95..f9255ada9d87 100644
--- a/drivers/media/radio/radio-isa.c
+++ b/drivers/media/radio/radio-isa.c
@@ -45,9 +45,6 @@ static int radio_isa_querycap(struct file *file, void *priv,
45 strscpy(v->driver, isa->drv->driver.driver.name, sizeof(v->driver)); 45 strscpy(v->driver, isa->drv->driver.driver.name, sizeof(v->driver));
46 strscpy(v->card, isa->drv->card, sizeof(v->card)); 46 strscpy(v->card, isa->drv->card, sizeof(v->card));
47 snprintf(v->bus_info, sizeof(v->bus_info), "ISA:%s", isa->v4l2_dev.name); 47 snprintf(v->bus_info, sizeof(v->bus_info), "ISA:%s", isa->v4l2_dev.name);
48
49 v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
50 v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
51 return 0; 48 return 0;
52} 49}
53 50
@@ -248,6 +245,7 @@ static int radio_isa_common_probe(struct radio_isa_card *isa,
248 isa->vdev.fops = &radio_isa_fops; 245 isa->vdev.fops = &radio_isa_fops;
249 isa->vdev.ioctl_ops = &radio_isa_ioctl_ops; 246 isa->vdev.ioctl_ops = &radio_isa_ioctl_ops;
250 isa->vdev.release = video_device_release_empty; 247 isa->vdev.release = video_device_release_empty;
248 isa->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
251 video_set_drvdata(&isa->vdev, isa); 249 video_set_drvdata(&isa->vdev, isa);
252 isa->freq = FREQ_LOW; 250 isa->freq = FREQ_LOW;
253 isa->stereo = drv->has_stereo; 251 isa->stereo = drv->has_stereo;
diff --git a/drivers/media/radio/radio-keene.c b/drivers/media/radio/radio-keene.c
index e9484b013073..40a051fcd761 100644
--- a/drivers/media/radio/radio-keene.c
+++ b/drivers/media/radio/radio-keene.c
@@ -177,8 +177,6 @@ static int vidioc_querycap(struct file *file, void *priv,
177 strscpy(v->driver, "radio-keene", sizeof(v->driver)); 177 strscpy(v->driver, "radio-keene", sizeof(v->driver));
178 strscpy(v->card, "Keene FM Transmitter", sizeof(v->card)); 178 strscpy(v->card, "Keene FM Transmitter", sizeof(v->card));
179 usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info)); 179 usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info));
180 v->device_caps = V4L2_CAP_RADIO | V4L2_CAP_MODULATOR;
181 v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
182 return 0; 180 return 0;
183} 181}
184 182
@@ -370,6 +368,7 @@ static int usb_keene_probe(struct usb_interface *intf,
370 radio->vdev.lock = &radio->lock; 368 radio->vdev.lock = &radio->lock;
371 radio->vdev.release = video_device_release_empty; 369 radio->vdev.release = video_device_release_empty;
372 radio->vdev.vfl_dir = VFL_DIR_TX; 370 radio->vdev.vfl_dir = VFL_DIR_TX;
371 radio->vdev.device_caps = V4L2_CAP_RADIO | V4L2_CAP_MODULATOR;
373 372
374 radio->usbdev = interface_to_usbdev(intf); 373 radio->usbdev = interface_to_usbdev(intf);
375 radio->intf = intf; 374 radio->intf = intf;
diff --git a/drivers/media/radio/radio-ma901.c b/drivers/media/radio/radio-ma901.c
index 5cb153727841..33aa29748dbb 100644
--- a/drivers/media/radio/radio-ma901.c
+++ b/drivers/media/radio/radio-ma901.c
@@ -200,8 +200,6 @@ static int vidioc_querycap(struct file *file, void *priv,
200 strscpy(v->driver, "radio-ma901", sizeof(v->driver)); 200 strscpy(v->driver, "radio-ma901", sizeof(v->driver));
201 strscpy(v->card, "Masterkit MA901 USB FM Radio", sizeof(v->card)); 201 strscpy(v->card, "Masterkit MA901 USB FM Radio", sizeof(v->card));
202 usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info)); 202 usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info));
203 v->device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER;
204 v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
205 return 0; 203 return 0;
206} 204}
207 205
@@ -407,6 +405,7 @@ static int usb_ma901radio_probe(struct usb_interface *intf,
407 radio->vdev.ioctl_ops = &usb_ma901radio_ioctl_ops; 405 radio->vdev.ioctl_ops = &usb_ma901radio_ioctl_ops;
408 radio->vdev.release = video_device_release_empty; 406 radio->vdev.release = video_device_release_empty;
409 radio->vdev.lock = &radio->lock; 407 radio->vdev.lock = &radio->lock;
408 radio->vdev.device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER;
410 409
411 radio->usbdev = interface_to_usbdev(intf); 410 radio->usbdev = interface_to_usbdev(intf);
412 radio->intf = intf; 411 radio->intf = intf;
diff --git a/drivers/media/radio/radio-miropcm20.c b/drivers/media/radio/radio-miropcm20.c
index 95d12cbff5c9..99788834c646 100644
--- a/drivers/media/radio/radio-miropcm20.c
+++ b/drivers/media/radio/radio-miropcm20.c
@@ -204,8 +204,6 @@ static int vidioc_querycap(struct file *file, void *priv,
204 strscpy(v->driver, "Miro PCM20", sizeof(v->driver)); 204 strscpy(v->driver, "Miro PCM20", sizeof(v->driver));
205 strscpy(v->card, "Miro PCM20", sizeof(v->card)); 205 strscpy(v->card, "Miro PCM20", sizeof(v->card));
206 snprintf(v->bus_info, sizeof(v->bus_info), "ISA:%s", dev->v4l2_dev.name); 206 snprintf(v->bus_info, sizeof(v->bus_info), "ISA:%s", dev->v4l2_dev.name);
207 v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO | V4L2_CAP_RDS_CAPTURE;
208 v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
209 return 0; 207 return 0;
210} 208}
211 209
@@ -481,6 +479,8 @@ static int __init pcm20_init(void)
481 dev->vdev.ioctl_ops = &pcm20_ioctl_ops; 479 dev->vdev.ioctl_ops = &pcm20_ioctl_ops;
482 dev->vdev.release = video_device_release_empty; 480 dev->vdev.release = video_device_release_empty;
483 dev->vdev.lock = &dev->lock; 481 dev->vdev.lock = &dev->lock;
482 dev->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO |
483 V4L2_CAP_RDS_CAPTURE;
484 video_set_drvdata(&dev->vdev, dev); 484 video_set_drvdata(&dev->vdev, dev);
485 snd_aci_cmd(dev->aci, ACI_SET_TUNERMONO, 485 snd_aci_cmd(dev->aci, ACI_SET_TUNERMONO,
486 dev->audmode == V4L2_TUNER_MODE_MONO, -1); 486 dev->audmode == V4L2_TUNER_MODE_MONO, -1);
diff --git a/drivers/media/radio/radio-mr800.c b/drivers/media/radio/radio-mr800.c
index ab1324f68199..f090a3f56d86 100644
--- a/drivers/media/radio/radio-mr800.c
+++ b/drivers/media/radio/radio-mr800.c
@@ -269,9 +269,6 @@ static int vidioc_querycap(struct file *file, void *priv,
269 strscpy(v->driver, "radio-mr800", sizeof(v->driver)); 269 strscpy(v->driver, "radio-mr800", sizeof(v->driver));
270 strscpy(v->card, "AverMedia MR 800 USB FM Radio", sizeof(v->card)); 270 strscpy(v->card, "AverMedia MR 800 USB FM Radio", sizeof(v->card));
271 usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info)); 271 usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info));
272 v->device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER |
273 V4L2_CAP_HW_FREQ_SEEK;
274 v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
275 return 0; 272 return 0;
276} 273}
277 274
@@ -554,6 +551,8 @@ static int usb_amradio_probe(struct usb_interface *intf,
554 radio->vdev.ioctl_ops = &usb_amradio_ioctl_ops; 551 radio->vdev.ioctl_ops = &usb_amradio_ioctl_ops;
555 radio->vdev.release = video_device_release_empty; 552 radio->vdev.release = video_device_release_empty;
556 radio->vdev.lock = &radio->lock; 553 radio->vdev.lock = &radio->lock;
554 radio->vdev.device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER |
555 V4L2_CAP_HW_FREQ_SEEK;
557 556
558 radio->usbdev = interface_to_usbdev(intf); 557 radio->usbdev = interface_to_usbdev(intf);
559 radio->intf = intf; 558 radio->intf = intf;
diff --git a/drivers/media/radio/radio-raremono.c b/drivers/media/radio/radio-raremono.c
index 5e782b3c2fa9..606f588e1edf 100644
--- a/drivers/media/radio/radio-raremono.c
+++ b/drivers/media/radio/radio-raremono.c
@@ -184,8 +184,6 @@ static int vidioc_querycap(struct file *file, void *priv,
184 strscpy(v->driver, "radio-raremono", sizeof(v->driver)); 184 strscpy(v->driver, "radio-raremono", sizeof(v->driver));
185 strscpy(v->card, "Thanko's Raremono", sizeof(v->card)); 185 strscpy(v->card, "Thanko's Raremono", sizeof(v->card));
186 usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info)); 186 usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info));
187 v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
188 v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
189 return 0; 187 return 0;
190} 188}
191 189
@@ -345,6 +343,7 @@ static int usb_raremono_probe(struct usb_interface *intf,
345 radio->vdev.ioctl_ops = &usb_raremono_ioctl_ops; 343 radio->vdev.ioctl_ops = &usb_raremono_ioctl_ops;
346 radio->vdev.lock = &radio->lock; 344 radio->vdev.lock = &radio->lock;
347 radio->vdev.release = video_device_release_empty; 345 radio->vdev.release = video_device_release_empty;
346 radio->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
348 347
349 usb_set_intfdata(intf, &radio->v4l2_dev); 348 usb_set_intfdata(intf, &radio->v4l2_dev);
350 349
diff --git a/drivers/media/radio/radio-sf16fmi.c b/drivers/media/radio/radio-sf16fmi.c
index 434c03338d7f..54a40d60e4fd 100644
--- a/drivers/media/radio/radio-sf16fmi.c
+++ b/drivers/media/radio/radio-sf16fmi.c
@@ -133,8 +133,6 @@ static int vidioc_querycap(struct file *file, void *priv,
133 strscpy(v->driver, "radio-sf16fmi", sizeof(v->driver)); 133 strscpy(v->driver, "radio-sf16fmi", sizeof(v->driver));
134 strscpy(v->card, "SF16-FMI/FMP/FMD radio", sizeof(v->card)); 134 strscpy(v->card, "SF16-FMI/FMP/FMD radio", sizeof(v->card));
135 strscpy(v->bus_info, "ISA:radio-sf16fmi", sizeof(v->bus_info)); 135 strscpy(v->bus_info, "ISA:radio-sf16fmi", sizeof(v->bus_info));
136 v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
137 v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
138 return 0; 136 return 0;
139} 137}
140 138
@@ -345,6 +343,7 @@ static int __init fmi_init(void)
345 fmi->vdev.fops = &fmi_fops; 343 fmi->vdev.fops = &fmi_fops;
346 fmi->vdev.ioctl_ops = &fmi_ioctl_ops; 344 fmi->vdev.ioctl_ops = &fmi_ioctl_ops;
347 fmi->vdev.release = video_device_release_empty; 345 fmi->vdev.release = video_device_release_empty;
346 fmi->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
348 video_set_drvdata(&fmi->vdev, fmi); 347 video_set_drvdata(&fmi->vdev, fmi);
349 348
350 mutex_init(&fmi->lock); 349 mutex_init(&fmi->lock);
diff --git a/drivers/media/radio/radio-si476x.c b/drivers/media/radio/radio-si476x.c
index 0261f4d28f16..0d5187410853 100644
--- a/drivers/media/radio/radio-si476x.c
+++ b/drivers/media/radio/radio-si476x.c
@@ -345,19 +345,6 @@ static int si476x_radio_querycap(struct file *file, void *priv,
345 strscpy(capability->card, DRIVER_CARD, sizeof(capability->card)); 345 strscpy(capability->card, DRIVER_CARD, sizeof(capability->card));
346 snprintf(capability->bus_info, sizeof(capability->bus_info), 346 snprintf(capability->bus_info, sizeof(capability->bus_info),
347 "platform:%s", radio->v4l2dev.name); 347 "platform:%s", radio->v4l2dev.name);
348
349 capability->device_caps = V4L2_CAP_TUNER
350 | V4L2_CAP_RADIO
351 | V4L2_CAP_HW_FREQ_SEEK;
352
353 si476x_core_lock(radio->core);
354 if (!si476x_core_is_a_secondary_tuner(radio->core))
355 capability->device_caps |= V4L2_CAP_RDS_CAPTURE
356 | V4L2_CAP_READWRITE;
357 si476x_core_unlock(radio->core);
358
359 capability->capabilities = capability->device_caps
360 | V4L2_CAP_DEVICE_CAPS;
361 return 0; 348 return 0;
362} 349}
363 350
@@ -1468,6 +1455,14 @@ static int si476x_radio_probe(struct platform_device *pdev)
1468 1455
1469 radio->videodev.v4l2_dev = &radio->v4l2dev; 1456 radio->videodev.v4l2_dev = &radio->v4l2dev;
1470 radio->videodev.ioctl_ops = &si4761_ioctl_ops; 1457 radio->videodev.ioctl_ops = &si4761_ioctl_ops;
1458 radio->videodev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO |
1459 V4L2_CAP_HW_FREQ_SEEK;
1460
1461 si476x_core_lock(radio->core);
1462 if (!si476x_core_is_a_secondary_tuner(radio->core))
1463 radio->videodev.device_caps |= V4L2_CAP_RDS_CAPTURE |
1464 V4L2_CAP_READWRITE;
1465 si476x_core_unlock(radio->core);
1471 1466
1472 video_set_drvdata(&radio->videodev, radio); 1467 video_set_drvdata(&radio->videodev, radio);
1473 platform_set_drvdata(pdev, radio); 1468 platform_set_drvdata(pdev, radio);
diff --git a/drivers/media/radio/radio-tea5764.c b/drivers/media/radio/radio-tea5764.c
index 6632be648cea..fc8afbc0fb22 100644
--- a/drivers/media/radio/radio-tea5764.c
+++ b/drivers/media/radio/radio-tea5764.c
@@ -291,8 +291,6 @@ static int vidioc_querycap(struct file *file, void *priv,
291 strscpy(v->card, dev->name, sizeof(v->card)); 291 strscpy(v->card, dev->name, sizeof(v->card));
292 snprintf(v->bus_info, sizeof(v->bus_info), 292 snprintf(v->bus_info, sizeof(v->bus_info),
293 "I2C:%s", dev_name(&dev->dev)); 293 "I2C:%s", dev_name(&dev->dev));
294 v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
295 v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
296 return 0; 294 return 0;
297} 295}
298 296
@@ -474,6 +472,7 @@ static int tea5764_i2c_probe(struct i2c_client *client,
474 video_set_drvdata(&radio->vdev, radio); 472 video_set_drvdata(&radio->vdev, radio);
475 radio->vdev.lock = &radio->mutex; 473 radio->vdev.lock = &radio->mutex;
476 radio->vdev.v4l2_dev = v4l2_dev; 474 radio->vdev.v4l2_dev = v4l2_dev;
475 radio->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
477 476
478 /* initialize and power off the chip */ 477 /* initialize and power off the chip */
479 tea5764_i2c_read(radio); 478 tea5764_i2c_read(radio);
diff --git a/drivers/media/radio/radio-tea5777.c b/drivers/media/radio/radio-tea5777.c
index 61f751cf1aa4..17f9e21ff3c5 100644
--- a/drivers/media/radio/radio-tea5777.c
+++ b/drivers/media/radio/radio-tea5777.c
@@ -270,9 +270,6 @@ static int vidioc_querycap(struct file *file, void *priv,
270 strscpy(v->card, tea->card, sizeof(v->card)); 270 strscpy(v->card, tea->card, sizeof(v->card));
271 strlcat(v->card, " TEA5777", sizeof(v->card)); 271 strlcat(v->card, " TEA5777", sizeof(v->card));
272 strscpy(v->bus_info, tea->bus_info, sizeof(v->bus_info)); 272 strscpy(v->bus_info, tea->bus_info, sizeof(v->bus_info));
273 v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
274 v->device_caps |= V4L2_CAP_HW_FREQ_SEEK;
275 v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
276 return 0; 273 return 0;
277} 274}
278 275
@@ -563,6 +560,8 @@ int radio_tea5777_init(struct radio_tea5777 *tea, struct module *owner)
563 strscpy(tea->vd.name, tea->v4l2_dev->name, sizeof(tea->vd.name)); 560 strscpy(tea->vd.name, tea->v4l2_dev->name, sizeof(tea->vd.name));
564 tea->vd.lock = &tea->mutex; 561 tea->vd.lock = &tea->mutex;
565 tea->vd.v4l2_dev = tea->v4l2_dev; 562 tea->vd.v4l2_dev = tea->v4l2_dev;
563 tea->vd.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO |
564 V4L2_CAP_HW_FREQ_SEEK;
566 tea->fops = tea575x_fops; 565 tea->fops = tea575x_fops;
567 tea->fops.owner = owner; 566 tea->fops.owner = owner;
568 tea->vd.fops = &tea->fops; 567 tea->vd.fops = &tea->fops;
diff --git a/drivers/media/radio/radio-timb.c b/drivers/media/radio/radio-timb.c
index 0eda863124e9..d92352005d3d 100644
--- a/drivers/media/radio/radio-timb.c
+++ b/drivers/media/radio/radio-timb.c
@@ -42,8 +42,6 @@ static int timbradio_vidioc_querycap(struct file *file, void *priv,
42 strscpy(v->driver, DRIVER_NAME, sizeof(v->driver)); 42 strscpy(v->driver, DRIVER_NAME, sizeof(v->driver));
43 strscpy(v->card, "Timberdale Radio", sizeof(v->card)); 43 strscpy(v->card, "Timberdale Radio", sizeof(v->card));
44 snprintf(v->bus_info, sizeof(v->bus_info), "platform:"DRIVER_NAME); 44 snprintf(v->bus_info, sizeof(v->bus_info), "platform:"DRIVER_NAME);
45 v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
46 v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
47 return 0; 45 return 0;
48} 46}
49 47
@@ -122,6 +120,7 @@ static int timbradio_probe(struct platform_device *pdev)
122 tr->video_dev.release = video_device_release_empty; 120 tr->video_dev.release = video_device_release_empty;
123 tr->video_dev.minor = -1; 121 tr->video_dev.minor = -1;
124 tr->video_dev.lock = &tr->lock; 122 tr->video_dev.lock = &tr->lock;
123 tr->video_dev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
125 124
126 strscpy(tr->v4l2_dev.name, DRIVER_NAME, sizeof(tr->v4l2_dev.name)); 125 strscpy(tr->v4l2_dev.name, DRIVER_NAME, sizeof(tr->v4l2_dev.name));
127 err = v4l2_device_register(NULL, &tr->v4l2_dev); 126 err = v4l2_device_register(NULL, &tr->v4l2_dev);
diff --git a/drivers/media/radio/radio-wl1273.c b/drivers/media/radio/radio-wl1273.c
index b95704f3cb8b..a1a36ce396ee 100644
--- a/drivers/media/radio/radio-wl1273.c
+++ b/drivers/media/radio/radio-wl1273.c
@@ -1292,14 +1292,6 @@ static int wl1273_fm_vidioc_querycap(struct file *file, void *priv,
1292 sizeof(capability->card)); 1292 sizeof(capability->card));
1293 strscpy(capability->bus_info, radio->bus_type, 1293 strscpy(capability->bus_info, radio->bus_type,
1294 sizeof(capability->bus_info)); 1294 sizeof(capability->bus_info));
1295
1296 capability->device_caps = V4L2_CAP_HW_FREQ_SEEK |
1297 V4L2_CAP_TUNER | V4L2_CAP_RADIO | V4L2_CAP_AUDIO |
1298 V4L2_CAP_RDS_CAPTURE | V4L2_CAP_MODULATOR |
1299 V4L2_CAP_RDS_OUTPUT;
1300 capability->capabilities = capability->device_caps |
1301 V4L2_CAP_DEVICE_CAPS;
1302
1303 return 0; 1295 return 0;
1304} 1296}
1305 1297
@@ -1988,6 +1980,10 @@ static const struct video_device wl1273_viddev_template = {
1988 .name = WL1273_FM_DRIVER_NAME, 1980 .name = WL1273_FM_DRIVER_NAME,
1989 .release = wl1273_vdev_release, 1981 .release = wl1273_vdev_release,
1990 .vfl_dir = VFL_DIR_TX, 1982 .vfl_dir = VFL_DIR_TX,
1983 .device_caps = V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_TUNER |
1984 V4L2_CAP_RADIO | V4L2_CAP_AUDIO |
1985 V4L2_CAP_RDS_CAPTURE | V4L2_CAP_MODULATOR |
1986 V4L2_CAP_RDS_OUTPUT,
1991}; 1987};
1992 1988
1993static int wl1273_fm_radio_remove(struct platform_device *pdev) 1989static int wl1273_fm_radio_remove(struct platform_device *pdev)
diff --git a/drivers/media/radio/si470x/radio-si470x-i2c.c b/drivers/media/radio/si470x/radio-si470x-i2c.c
index 15eea2b2c90f..6b42a189b271 100644
--- a/drivers/media/radio/si470x/radio-si470x-i2c.c
+++ b/drivers/media/radio/si470x/radio-si470x-i2c.c
@@ -232,10 +232,6 @@ static int si470x_vidioc_querycap(struct file *file, void *priv,
232{ 232{
233 strscpy(capability->driver, DRIVER_NAME, sizeof(capability->driver)); 233 strscpy(capability->driver, DRIVER_NAME, sizeof(capability->driver));
234 strscpy(capability->card, DRIVER_CARD, sizeof(capability->card)); 234 strscpy(capability->card, DRIVER_CARD, sizeof(capability->card));
235 capability->device_caps = V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_READWRITE |
236 V4L2_CAP_TUNER | V4L2_CAP_RADIO | V4L2_CAP_RDS_CAPTURE;
237 capability->capabilities = capability->device_caps | V4L2_CAP_DEVICE_CAPS;
238
239 return 0; 235 return 0;
240} 236}
241 237
@@ -391,6 +387,9 @@ static int si470x_i2c_probe(struct i2c_client *client,
391 radio->videodev.lock = &radio->lock; 387 radio->videodev.lock = &radio->lock;
392 radio->videodev.v4l2_dev = &radio->v4l2_dev; 388 radio->videodev.v4l2_dev = &radio->v4l2_dev;
393 radio->videodev.release = video_device_release_empty; 389 radio->videodev.release = video_device_release_empty;
390 radio->videodev.device_caps =
391 V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_READWRITE | V4L2_CAP_TUNER |
392 V4L2_CAP_RADIO | V4L2_CAP_RDS_CAPTURE;
394 video_set_drvdata(&radio->videodev, radio); 393 video_set_drvdata(&radio->videodev, radio);
395 394
396 radio->gpio_reset = devm_gpiod_get_optional(&client->dev, "reset", 395 radio->gpio_reset = devm_gpiod_get_optional(&client->dev, "reset",
diff --git a/drivers/media/radio/si470x/radio-si470x-usb.c b/drivers/media/radio/si470x/radio-si470x-usb.c
index 91d6ef5579f7..398e4149f219 100644
--- a/drivers/media/radio/si470x/radio-si470x-usb.c
+++ b/drivers/media/radio/si470x/radio-si470x-usb.c
@@ -523,9 +523,6 @@ static int si470x_vidioc_querycap(struct file *file, void *priv,
523 strscpy(capability->card, DRIVER_CARD, sizeof(capability->card)); 523 strscpy(capability->card, DRIVER_CARD, sizeof(capability->card));
524 usb_make_path(radio->usbdev, capability->bus_info, 524 usb_make_path(radio->usbdev, capability->bus_info,
525 sizeof(capability->bus_info)); 525 sizeof(capability->bus_info));
526 capability->device_caps = V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_READWRITE |
527 V4L2_CAP_TUNER | V4L2_CAP_RADIO | V4L2_CAP_RDS_CAPTURE;
528 capability->capabilities = capability->device_caps | V4L2_CAP_DEVICE_CAPS;
529 return 0; 526 return 0;
530} 527}
531 528
@@ -679,6 +676,9 @@ static int si470x_usb_driver_probe(struct usb_interface *intf,
679 radio->videodev.lock = &radio->lock; 676 radio->videodev.lock = &radio->lock;
680 radio->videodev.v4l2_dev = &radio->v4l2_dev; 677 radio->videodev.v4l2_dev = &radio->v4l2_dev;
681 radio->videodev.release = video_device_release_empty; 678 radio->videodev.release = video_device_release_empty;
679 radio->videodev.device_caps =
680 V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_READWRITE | V4L2_CAP_TUNER |
681 V4L2_CAP_RADIO | V4L2_CAP_RDS_CAPTURE;
682 video_set_drvdata(&radio->videodev, radio); 682 video_set_drvdata(&radio->videodev, radio);
683 683
684 /* get device and chip versions */ 684 /* get device and chip versions */
diff --git a/drivers/media/radio/si4713/radio-platform-si4713.c b/drivers/media/radio/si4713/radio-platform-si4713.c
index 733fcf3933e4..9a012a2012c8 100644
--- a/drivers/media/radio/si4713/radio-platform-si4713.c
+++ b/drivers/media/radio/si4713/radio-platform-si4713.c
@@ -72,9 +72,6 @@ static int radio_si4713_querycap(struct file *file, void *priv,
72 sizeof(capability->card)); 72 sizeof(capability->card));
73 strscpy(capability->bus_info, "platform:radio-si4713", 73 strscpy(capability->bus_info, "platform:radio-si4713",
74 sizeof(capability->bus_info)); 74 sizeof(capability->bus_info));
75 capability->device_caps = V4L2_CAP_MODULATOR | V4L2_CAP_RDS_OUTPUT;
76 capability->capabilities = capability->device_caps | V4L2_CAP_DEVICE_CAPS;
77
78 return 0; 75 return 0;
79} 76}
80 77
@@ -184,6 +181,7 @@ static int radio_si4713_pdriver_probe(struct platform_device *pdev)
184 rsdev->radio_dev.ctrl_handler = sd->ctrl_handler; 181 rsdev->radio_dev.ctrl_handler = sd->ctrl_handler;
185 /* Serialize all access to the si4713 */ 182 /* Serialize all access to the si4713 */
186 rsdev->radio_dev.lock = &rsdev->lock; 183 rsdev->radio_dev.lock = &rsdev->lock;
184 rsdev->radio_dev.device_caps = V4L2_CAP_MODULATOR | V4L2_CAP_RDS_OUTPUT;
187 video_set_drvdata(&rsdev->radio_dev, rsdev); 185 video_set_drvdata(&rsdev->radio_dev, rsdev);
188 if (video_register_device(&rsdev->radio_dev, VFL_TYPE_RADIO, radio_nr)) { 186 if (video_register_device(&rsdev->radio_dev, VFL_TYPE_RADIO, radio_nr)) {
189 dev_err(&pdev->dev, "Could not register video device.\n"); 187 dev_err(&pdev->dev, "Could not register video device.\n");
diff --git a/drivers/media/radio/si4713/radio-usb-si4713.c b/drivers/media/radio/si4713/radio-usb-si4713.c
index 23065ecce979..33274189c83c 100644
--- a/drivers/media/radio/si4713/radio-usb-si4713.c
+++ b/drivers/media/radio/si4713/radio-usb-si4713.c
@@ -70,9 +70,6 @@ static int vidioc_querycap(struct file *file, void *priv,
70 strscpy(v->driver, "radio-usb-si4713", sizeof(v->driver)); 70 strscpy(v->driver, "radio-usb-si4713", sizeof(v->driver));
71 strscpy(v->card, "Si4713 FM Transmitter", sizeof(v->card)); 71 strscpy(v->card, "Si4713 FM Transmitter", sizeof(v->card));
72 usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info)); 72 usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info));
73 v->device_caps = V4L2_CAP_MODULATOR | V4L2_CAP_RDS_OUTPUT;
74 v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
75
76 return 0; 73 return 0;
77} 74}
78 75
@@ -475,6 +472,7 @@ static int usb_si4713_probe(struct usb_interface *intf,
475 radio->vdev.lock = &radio->lock; 472 radio->vdev.lock = &radio->lock;
476 radio->vdev.release = video_device_release_empty; 473 radio->vdev.release = video_device_release_empty;
477 radio->vdev.vfl_dir = VFL_DIR_TX; 474 radio->vdev.vfl_dir = VFL_DIR_TX;
475 radio->vdev.device_caps = V4L2_CAP_MODULATOR | V4L2_CAP_RDS_OUTPUT;
478 476
479 video_set_drvdata(&radio->vdev, radio); 477 video_set_drvdata(&radio->vdev, radio);
480 478
diff --git a/drivers/media/radio/tea575x.c b/drivers/media/radio/tea575x.c
index f89f83e04741..1cfae4646e45 100644
--- a/drivers/media/radio/tea575x.c
+++ b/drivers/media/radio/tea575x.c
@@ -237,10 +237,6 @@ static int vidioc_querycap(struct file *file, void *priv,
237 strscpy(v->card, tea->card, sizeof(v->card)); 237 strscpy(v->card, tea->card, sizeof(v->card));
238 strlcat(v->card, tea->tea5759 ? " TEA5759" : " TEA5757", sizeof(v->card)); 238 strlcat(v->card, tea->tea5759 ? " TEA5759" : " TEA5757", sizeof(v->card));
239 strscpy(v->bus_info, tea->bus_info, sizeof(v->bus_info)); 239 strscpy(v->bus_info, tea->bus_info, sizeof(v->bus_info));
240 v->device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
241 if (!tea->cannot_read_data)
242 v->device_caps |= V4L2_CAP_HW_FREQ_SEEK;
243 v->capabilities = v->device_caps | V4L2_CAP_DEVICE_CAPS;
244 return 0; 240 return 0;
245} 241}
246 242
@@ -540,6 +536,9 @@ int snd_tea575x_init(struct snd_tea575x *tea, struct module *owner)
540 strscpy(tea->vd.name, tea->v4l2_dev->name, sizeof(tea->vd.name)); 536 strscpy(tea->vd.name, tea->v4l2_dev->name, sizeof(tea->vd.name));
541 tea->vd.lock = &tea->mutex; 537 tea->vd.lock = &tea->mutex;
542 tea->vd.v4l2_dev = tea->v4l2_dev; 538 tea->vd.v4l2_dev = tea->v4l2_dev;
539 tea->vd.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
540 if (!tea->cannot_read_data)
541 tea->vd.device_caps |= V4L2_CAP_HW_FREQ_SEEK;
543 tea->fops = tea575x_fops; 542 tea->fops = tea575x_fops;
544 tea->fops.owner = owner; 543 tea->fops.owner = owner;
545 tea->vd.fops = &tea->fops; 544 tea->vd.fops = &tea->fops;
diff --git a/drivers/media/radio/wl128x/fmdrv_v4l2.c b/drivers/media/radio/wl128x/fmdrv_v4l2.c
index a1eaea19a81c..6ed48e498989 100644
--- a/drivers/media/radio/wl128x/fmdrv_v4l2.c
+++ b/drivers/media/radio/wl128x/fmdrv_v4l2.c
@@ -194,13 +194,6 @@ static int fm_v4l2_vidioc_querycap(struct file *file, void *priv,
194 strscpy(capability->card, FM_DRV_CARD_SHORT_NAME, 194 strscpy(capability->card, FM_DRV_CARD_SHORT_NAME,
195 sizeof(capability->card)); 195 sizeof(capability->card));
196 sprintf(capability->bus_info, "UART"); 196 sprintf(capability->bus_info, "UART");
197 capability->device_caps = V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_TUNER |
198 V4L2_CAP_RADIO | V4L2_CAP_MODULATOR |
199 V4L2_CAP_AUDIO | V4L2_CAP_READWRITE |
200 V4L2_CAP_RDS_CAPTURE;
201 capability->capabilities = capability->device_caps |
202 V4L2_CAP_DEVICE_CAPS;
203
204 return 0; 197 return 0;
205} 198}
206 199
@@ -524,6 +517,9 @@ static const struct video_device fm_viddev_template = {
524 * but that would affect applications using this driver. 517 * but that would affect applications using this driver.
525 */ 518 */
526 .vfl_dir = VFL_DIR_M2M, 519 .vfl_dir = VFL_DIR_M2M,
520 .device_caps = V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_TUNER | V4L2_CAP_RADIO |
521 V4L2_CAP_MODULATOR | V4L2_CAP_AUDIO |
522 V4L2_CAP_READWRITE | V4L2_CAP_RDS_CAPTURE,
527}; 523};
528 524
529int fm_v4l2_init_video_device(struct fmdev *fmdev, int radio_nr) 525int fm_v4l2_init_video_device(struct fmdev *fmdev, int radio_nr)