Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Hans Verkuil and committed by
Mauro Carvalho Chehab
e83ce300 7e98b7b5

+42 -73
+1 -2
drivers/media/radio/dsbr100.c
··· 177 177 strscpy(v->driver, "dsbr100", sizeof(v->driver)); 178 178 strscpy(v->card, "D-Link R-100 USB FM Radio", sizeof(v->card)); 179 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 180 return 0; 183 181 } 184 182 ··· 385 387 radio->videodev.release = video_device_release_empty; 386 388 radio->videodev.lock = &radio->v4l2_lock; 387 389 radio->videodev.ctrl_handler = &radio->hdl; 390 + radio->videodev.device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER; 388 391 389 392 radio->usbdev = interface_to_usbdev(intf); 390 393 radio->curfreq = FREQ_MIN * FREQ_MUL;
+2 -3
drivers/media/radio/radio-cadet.c
··· 357 357 strscpy(v->driver, "ADS Cadet", sizeof(v->driver)); 358 358 strscpy(v->card, "ADS Cadet", sizeof(v->card)); 359 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 360 return 0; 364 361 } 365 362 ··· 643 646 dev->vdev.ioctl_ops = &cadet_ioctl_ops; 644 647 dev->vdev.release = video_device_release_empty; 645 648 dev->vdev.lock = &dev->lock; 649 + dev->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO | 650 + V4L2_CAP_READWRITE | V4L2_CAP_RDS_CAPTURE; 646 651 video_set_drvdata(&dev->vdev, dev); 647 652 648 653 res = video_register_device(&dev->vdev, VFL_TYPE_RADIO, radio_nr);
+1 -3
drivers/media/radio/radio-isa.c
··· 45 45 strscpy(v->driver, isa->drv->driver.driver.name, sizeof(v->driver)); 46 46 strscpy(v->card, isa->drv->card, sizeof(v->card)); 47 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 48 return 0; 52 49 } 53 50 ··· 245 248 isa->vdev.fops = &radio_isa_fops; 246 249 isa->vdev.ioctl_ops = &radio_isa_ioctl_ops; 247 250 isa->vdev.release = video_device_release_empty; 251 + isa->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO; 248 252 video_set_drvdata(&isa->vdev, isa); 249 253 isa->freq = FREQ_LOW; 250 254 isa->stereo = drv->has_stereo;
+1 -2
drivers/media/radio/radio-keene.c
··· 177 177 strscpy(v->driver, "radio-keene", sizeof(v->driver)); 178 178 strscpy(v->card, "Keene FM Transmitter", sizeof(v->card)); 179 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 180 return 0; 183 181 } 184 182 ··· 368 370 radio->vdev.lock = &radio->lock; 369 371 radio->vdev.release = video_device_release_empty; 370 372 radio->vdev.vfl_dir = VFL_DIR_TX; 373 + radio->vdev.device_caps = V4L2_CAP_RADIO | V4L2_CAP_MODULATOR; 371 374 372 375 radio->usbdev = interface_to_usbdev(intf); 373 376 radio->intf = intf;
+1 -2
drivers/media/radio/radio-ma901.c
··· 200 200 strscpy(v->driver, "radio-ma901", sizeof(v->driver)); 201 201 strscpy(v->card, "Masterkit MA901 USB FM Radio", sizeof(v->card)); 202 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 203 return 0; 206 204 } 207 205 ··· 405 407 radio->vdev.ioctl_ops = &usb_ma901radio_ioctl_ops; 406 408 radio->vdev.release = video_device_release_empty; 407 409 radio->vdev.lock = &radio->lock; 410 + radio->vdev.device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER; 408 411 409 412 radio->usbdev = interface_to_usbdev(intf); 410 413 radio->intf = intf;
+2 -2
drivers/media/radio/radio-miropcm20.c
··· 204 204 strscpy(v->driver, "Miro PCM20", sizeof(v->driver)); 205 205 strscpy(v->card, "Miro PCM20", sizeof(v->card)); 206 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 207 return 0; 210 208 } 211 209 ··· 479 481 dev->vdev.ioctl_ops = &pcm20_ioctl_ops; 480 482 dev->vdev.release = video_device_release_empty; 481 483 dev->vdev.lock = &dev->lock; 484 + dev->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO | 485 + V4L2_CAP_RDS_CAPTURE; 482 486 video_set_drvdata(&dev->vdev, dev); 483 487 snd_aci_cmd(dev->aci, ACI_SET_TUNERMONO, 484 488 dev->audmode == V4L2_TUNER_MODE_MONO, -1);
+2 -3
drivers/media/radio/radio-mr800.c
··· 269 269 strscpy(v->driver, "radio-mr800", sizeof(v->driver)); 270 270 strscpy(v->card, "AverMedia MR 800 USB FM Radio", sizeof(v->card)); 271 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 272 return 0; 276 273 } 277 274 ··· 551 554 radio->vdev.ioctl_ops = &usb_amradio_ioctl_ops; 552 555 radio->vdev.release = video_device_release_empty; 553 556 radio->vdev.lock = &radio->lock; 557 + radio->vdev.device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER | 558 + V4L2_CAP_HW_FREQ_SEEK; 554 559 555 560 radio->usbdev = interface_to_usbdev(intf); 556 561 radio->intf = intf;
+1 -2
drivers/media/radio/radio-raremono.c
··· 184 184 strscpy(v->driver, "radio-raremono", sizeof(v->driver)); 185 185 strscpy(v->card, "Thanko's Raremono", sizeof(v->card)); 186 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 187 return 0; 190 188 } 191 189 ··· 343 345 radio->vdev.ioctl_ops = &usb_raremono_ioctl_ops; 344 346 radio->vdev.lock = &radio->lock; 345 347 radio->vdev.release = video_device_release_empty; 348 + radio->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO; 346 349 347 350 usb_set_intfdata(intf, &radio->v4l2_dev); 348 351
+1 -2
drivers/media/radio/radio-sf16fmi.c
··· 133 133 strscpy(v->driver, "radio-sf16fmi", sizeof(v->driver)); 134 134 strscpy(v->card, "SF16-FMI/FMP/FMD radio", sizeof(v->card)); 135 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 136 return 0; 139 137 } 140 138 ··· 343 345 fmi->vdev.fops = &fmi_fops; 344 346 fmi->vdev.ioctl_ops = &fmi_ioctl_ops; 345 347 fmi->vdev.release = video_device_release_empty; 348 + fmi->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO; 346 349 video_set_drvdata(&fmi->vdev, fmi); 347 350 348 351 mutex_init(&fmi->lock);
+8 -13
drivers/media/radio/radio-si476x.c
··· 345 345 strscpy(capability->card, DRIVER_CARD, sizeof(capability->card)); 346 346 snprintf(capability->bus_info, sizeof(capability->bus_info), 347 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 348 return 0; 362 349 } 363 350 ··· 1455 1468 1456 1469 radio->videodev.v4l2_dev = &radio->v4l2dev; 1457 1470 radio->videodev.ioctl_ops = &si4761_ioctl_ops; 1471 + radio->videodev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO | 1472 + V4L2_CAP_HW_FREQ_SEEK; 1473 + 1474 + si476x_core_lock(radio->core); 1475 + if (!si476x_core_is_a_secondary_tuner(radio->core)) 1476 + radio->videodev.device_caps |= V4L2_CAP_RDS_CAPTURE | 1477 + V4L2_CAP_READWRITE; 1478 + si476x_core_unlock(radio->core); 1458 1479 1459 1480 video_set_drvdata(&radio->videodev, radio); 1460 1481 platform_set_drvdata(pdev, radio);
+1 -2
drivers/media/radio/radio-tea5764.c
··· 291 291 strscpy(v->card, dev->name, sizeof(v->card)); 292 292 snprintf(v->bus_info, sizeof(v->bus_info), 293 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 294 return 0; 297 295 } 298 296 ··· 472 474 video_set_drvdata(&radio->vdev, radio); 473 475 radio->vdev.lock = &radio->mutex; 474 476 radio->vdev.v4l2_dev = v4l2_dev; 477 + radio->vdev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO; 475 478 476 479 /* initialize and power off the chip */ 477 480 tea5764_i2c_read(radio);
+2 -3
drivers/media/radio/radio-tea5777.c
··· 270 270 strscpy(v->card, tea->card, sizeof(v->card)); 271 271 strlcat(v->card, " TEA5777", sizeof(v->card)); 272 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 273 return 0; 277 274 } 278 275 ··· 560 563 strscpy(tea->vd.name, tea->v4l2_dev->name, sizeof(tea->vd.name)); 561 564 tea->vd.lock = &tea->mutex; 562 565 tea->vd.v4l2_dev = tea->v4l2_dev; 566 + tea->vd.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO | 567 + V4L2_CAP_HW_FREQ_SEEK; 563 568 tea->fops = tea575x_fops; 564 569 tea->fops.owner = owner; 565 570 tea->vd.fops = &tea->fops;
+1 -2
drivers/media/radio/radio-timb.c
··· 42 42 strscpy(v->driver, DRIVER_NAME, sizeof(v->driver)); 43 43 strscpy(v->card, "Timberdale Radio", sizeof(v->card)); 44 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 45 return 0; 48 46 } 49 47 ··· 120 122 tr->video_dev.release = video_device_release_empty; 121 123 tr->video_dev.minor = -1; 122 124 tr->video_dev.lock = &tr->lock; 125 + tr->video_dev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO; 123 126 124 127 strscpy(tr->v4l2_dev.name, DRIVER_NAME, sizeof(tr->v4l2_dev.name)); 125 128 err = v4l2_device_register(NULL, &tr->v4l2_dev);
+4 -8
drivers/media/radio/radio-wl1273.c
··· 1292 1292 sizeof(capability->card)); 1293 1293 strscpy(capability->bus_info, radio->bus_type, 1294 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 1295 return 0; 1304 1296 } 1305 1297 ··· 1980 1988 .name = WL1273_FM_DRIVER_NAME, 1981 1989 .release = wl1273_vdev_release, 1982 1990 .vfl_dir = VFL_DIR_TX, 1991 + .device_caps = V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_TUNER | 1992 + V4L2_CAP_RADIO | V4L2_CAP_AUDIO | 1993 + V4L2_CAP_RDS_CAPTURE | V4L2_CAP_MODULATOR | 1994 + V4L2_CAP_RDS_OUTPUT, 1983 1995 }; 1984 1996 1985 1997 static int wl1273_fm_radio_remove(struct platform_device *pdev)
+3 -4
drivers/media/radio/si470x/radio-si470x-i2c.c
··· 232 232 { 233 233 strscpy(capability->driver, DRIVER_NAME, sizeof(capability->driver)); 234 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 235 return 0; 240 236 } 241 237 ··· 387 391 radio->videodev.lock = &radio->lock; 388 392 radio->videodev.v4l2_dev = &radio->v4l2_dev; 389 393 radio->videodev.release = video_device_release_empty; 394 + radio->videodev.device_caps = 395 + V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_READWRITE | V4L2_CAP_TUNER | 396 + V4L2_CAP_RADIO | V4L2_CAP_RDS_CAPTURE; 390 397 video_set_drvdata(&radio->videodev, radio); 391 398 392 399 radio->gpio_reset = devm_gpiod_get_optional(&client->dev, "reset",
+3 -3
drivers/media/radio/si470x/radio-si470x-usb.c
··· 523 523 strscpy(capability->card, DRIVER_CARD, sizeof(capability->card)); 524 524 usb_make_path(radio->usbdev, capability->bus_info, 525 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 526 return 0; 530 527 } 531 528 ··· 676 679 radio->videodev.lock = &radio->lock; 677 680 radio->videodev.v4l2_dev = &radio->v4l2_dev; 678 681 radio->videodev.release = video_device_release_empty; 682 + radio->videodev.device_caps = 683 + V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_READWRITE | V4L2_CAP_TUNER | 684 + V4L2_CAP_RADIO | V4L2_CAP_RDS_CAPTURE; 679 685 video_set_drvdata(&radio->videodev, radio); 680 686 681 687 /* get device and chip versions */
+1 -3
drivers/media/radio/si4713/radio-platform-si4713.c
··· 72 72 sizeof(capability->card)); 73 73 strscpy(capability->bus_info, "platform:radio-si4713", 74 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 75 return 0; 79 76 } 80 77 ··· 181 184 rsdev->radio_dev.ctrl_handler = sd->ctrl_handler; 182 185 /* Serialize all access to the si4713 */ 183 186 rsdev->radio_dev.lock = &rsdev->lock; 187 + rsdev->radio_dev.device_caps = V4L2_CAP_MODULATOR | V4L2_CAP_RDS_OUTPUT; 184 188 video_set_drvdata(&rsdev->radio_dev, rsdev); 185 189 if (video_register_device(&rsdev->radio_dev, VFL_TYPE_RADIO, radio_nr)) { 186 190 dev_err(&pdev->dev, "Could not register video device.\n");
+1 -3
drivers/media/radio/si4713/radio-usb-si4713.c
··· 70 70 strscpy(v->driver, "radio-usb-si4713", sizeof(v->driver)); 71 71 strscpy(v->card, "Si4713 FM Transmitter", sizeof(v->card)); 72 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 73 return 0; 77 74 } 78 75 ··· 472 475 radio->vdev.lock = &radio->lock; 473 476 radio->vdev.release = video_device_release_empty; 474 477 radio->vdev.vfl_dir = VFL_DIR_TX; 478 + radio->vdev.device_caps = V4L2_CAP_MODULATOR | V4L2_CAP_RDS_OUTPUT; 475 479 476 480 video_set_drvdata(&radio->vdev, radio); 477 481
+3 -4
drivers/media/radio/tea575x.c
··· 237 237 strscpy(v->card, tea->card, sizeof(v->card)); 238 238 strlcat(v->card, tea->tea5759 ? " TEA5759" : " TEA5757", sizeof(v->card)); 239 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 240 return 0; 245 241 } 246 242 ··· 536 540 strscpy(tea->vd.name, tea->v4l2_dev->name, sizeof(tea->vd.name)); 537 541 tea->vd.lock = &tea->mutex; 538 542 tea->vd.v4l2_dev = tea->v4l2_dev; 543 + tea->vd.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO; 544 + if (!tea->cannot_read_data) 545 + tea->vd.device_caps |= V4L2_CAP_HW_FREQ_SEEK; 539 546 tea->fops = tea575x_fops; 540 547 tea->fops.owner = owner; 541 548 tea->vd.fops = &tea->fops;
+3 -7
drivers/media/radio/wl128x/fmdrv_v4l2.c
··· 194 194 strscpy(capability->card, FM_DRV_CARD_SHORT_NAME, 195 195 sizeof(capability->card)); 196 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 197 return 0; 205 198 } 206 199 ··· 517 524 * but that would affect applications using this driver. 518 525 */ 519 526 .vfl_dir = VFL_DIR_M2M, 527 + .device_caps = V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_TUNER | V4L2_CAP_RADIO | 528 + V4L2_CAP_MODULATOR | V4L2_CAP_AUDIO | 529 + V4L2_CAP_READWRITE | V4L2_CAP_RDS_CAPTURE, 520 530 }; 521 531 522 532 int fm_v4l2_init_video_device(struct fmdev *fmdev, int radio_nr)