aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/v4l2-core/v4l2-dev.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-04-04 12:50:07 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-04-04 12:50:07 -0400
commit3c83e61e67256e0bb08c46cc2db43b58fd617251 (patch)
tree0233e1e04e6449c60b01ff5dea8bea85bcf22f08 /drivers/media/v4l2-core/v4l2-dev.c
parent4a4389abdd9822fdf3cc2ac6ed87eb811fd43acc (diff)
parenta83b93a7480441a47856dc9104bea970e84cda87 (diff)
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
Pull media updates from Mauro Carvalho Chehab: "The main set of series of patches for media subsystem, including: - document RC sysfs class - added an API to setup scancode to allow waking up systems using the Remote Controller - add API for SDR devices. Drivers are still on staging - some API improvements for getting EDID data from media inputs/outputs - new DVB frontend driver for drx-j (ATSC) - one driver (it913x/it9137) got removed, in favor of an improvement on another driver (af9035) - added a skeleton V4L2 PCI driver at documentation - added a dual flash driver (lm3646) - added a new IR driver (img-ir) - added an IR scancode decoder for the Sharp protocol - some improvements at the usbtv driver, to allow its core to be reused. - added a new SDR driver (rtl2832u_sdr) - added a new tuner driver (msi001) - several improvements at em28xx driver to fix PM support, device removal and to split the V4L2 specific bits into a separate sub-driver - one driver got converted to videobuf2 (s2255drv) - the e4000 tuner driver now follows an improved binding model - some fixes at V4L2 compat32 code - several fixes and enhancements at videobuf2 code - some cleanups at V4L2 API documentation - usual driver enhancements, new board additions and misc fixups" [ NOTE! This merge effective drops commit 4329b93b283c ("of: Reduce indentation in of_graph_get_next_endpoint"). The of_graph_get_next_endpoint() function was moved and renamed by commit fd9fdb78a9bf ("[media] of: move graph helpers from drivers/media/v4l2-core to drivers/of"). It was originally called v4l2_of_get_next_endpoint() and lived in the file drivers/media/v4l2-core/v4l2-of.c. In that original location, it was then fixed to support empty port nodes by commit b9db140c1e46 ("[media] v4l: of: Support empty port nodes"), and that commit clashes badly with the dropped "Reduce intendation" commit. I had to choose one or the other, and decided that the "Support empty port nodes" commit was more important ] * 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (426 commits) [media] em28xx-dvb: fix PCTV 461e tuner I2C binding Revert "[media] em28xx-dvb: fix PCTV 461e tuner I2C binding" [media] em28xx: fix PCTV 290e LNA oops [media] em28xx-dvb: fix PCTV 461e tuner I2C binding [media] m88ds3103: fix bug on .set_tone() [media] saa7134: fix WARN_ON during resume [media] v4l2-dv-timings: add module name, description, license [media] videodev2.h: add parenthesis around macro arguments [media] saa6752hs: depends on CRC32 [media] si4713: fix Kconfig dependencies [media] Sensoray 2255 uses videobuf2 [media] adv7180: free an interrupt on failure paths in init_device() [media] e4000: make VIDEO_V4L2 dependency optional [media] af9033: Don't export functions for the hardware filter [media] af9035: use af9033 PID filters [media] af9033: implement PID filter [media] rtl2832_sdr: do not use dynamic stack allocation [media] e4000: fix 32-bit build error [media] em28xx-audio: make sure audio is unmuted on open() [media] DocBook media: v4l2_format_sdr was renamed to v4l2_sdr_format ...
Diffstat (limited to 'drivers/media/v4l2-core/v4l2-dev.c')
-rw-r--r--drivers/media/v4l2-core/v4l2-dev.c32
1 files changed, 28 insertions, 4 deletions
diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c
index 0a30dbf3d05c..634d863c05b4 100644
--- a/drivers/media/v4l2-core/v4l2-dev.c
+++ b/drivers/media/v4l2-core/v4l2-dev.c
@@ -554,6 +554,7 @@ static void determine_valid_ioctls(struct video_device *vdev)
554 bool is_vid = vdev->vfl_type == VFL_TYPE_GRABBER; 554 bool is_vid = vdev->vfl_type == VFL_TYPE_GRABBER;
555 bool is_vbi = vdev->vfl_type == VFL_TYPE_VBI; 555 bool is_vbi = vdev->vfl_type == VFL_TYPE_VBI;
556 bool is_radio = vdev->vfl_type == VFL_TYPE_RADIO; 556 bool is_radio = vdev->vfl_type == VFL_TYPE_RADIO;
557 bool is_sdr = vdev->vfl_type == VFL_TYPE_SDR;
557 bool is_rx = vdev->vfl_dir != VFL_DIR_TX; 558 bool is_rx = vdev->vfl_dir != VFL_DIR_TX;
558 bool is_tx = vdev->vfl_dir != VFL_DIR_RX; 559 bool is_tx = vdev->vfl_dir != VFL_DIR_RX;
559 560
@@ -662,9 +663,20 @@ static void determine_valid_ioctls(struct video_device *vdev)
662 ops->vidioc_try_fmt_sliced_vbi_out))) 663 ops->vidioc_try_fmt_sliced_vbi_out)))
663 set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls); 664 set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
664 SET_VALID_IOCTL(ops, VIDIOC_G_SLICED_VBI_CAP, vidioc_g_sliced_vbi_cap); 665 SET_VALID_IOCTL(ops, VIDIOC_G_SLICED_VBI_CAP, vidioc_g_sliced_vbi_cap);
666 } else if (is_sdr) {
667 /* SDR specific ioctls */
668 if (ops->vidioc_enum_fmt_sdr_cap)
669 set_bit(_IOC_NR(VIDIOC_ENUM_FMT), valid_ioctls);
670 if (ops->vidioc_g_fmt_sdr_cap)
671 set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
672 if (ops->vidioc_s_fmt_sdr_cap)
673 set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
674 if (ops->vidioc_try_fmt_sdr_cap)
675 set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
665 } 676 }
666 if (!is_radio) { 677
667 /* ioctls valid for video or vbi */ 678 if (is_vid || is_vbi || is_sdr) {
679 /* ioctls valid for video, vbi or sdr */
668 SET_VALID_IOCTL(ops, VIDIOC_REQBUFS, vidioc_reqbufs); 680 SET_VALID_IOCTL(ops, VIDIOC_REQBUFS, vidioc_reqbufs);
669 SET_VALID_IOCTL(ops, VIDIOC_QUERYBUF, vidioc_querybuf); 681 SET_VALID_IOCTL(ops, VIDIOC_QUERYBUF, vidioc_querybuf);
670 SET_VALID_IOCTL(ops, VIDIOC_QBUF, vidioc_qbuf); 682 SET_VALID_IOCTL(ops, VIDIOC_QBUF, vidioc_qbuf);
@@ -672,6 +684,10 @@ static void determine_valid_ioctls(struct video_device *vdev)
672 SET_VALID_IOCTL(ops, VIDIOC_DQBUF, vidioc_dqbuf); 684 SET_VALID_IOCTL(ops, VIDIOC_DQBUF, vidioc_dqbuf);
673 SET_VALID_IOCTL(ops, VIDIOC_CREATE_BUFS, vidioc_create_bufs); 685 SET_VALID_IOCTL(ops, VIDIOC_CREATE_BUFS, vidioc_create_bufs);
674 SET_VALID_IOCTL(ops, VIDIOC_PREPARE_BUF, vidioc_prepare_buf); 686 SET_VALID_IOCTL(ops, VIDIOC_PREPARE_BUF, vidioc_prepare_buf);
687 }
688
689 if (is_vid || is_vbi) {
690 /* ioctls valid for video or vbi */
675 if (ops->vidioc_s_std) 691 if (ops->vidioc_s_std)
676 set_bit(_IOC_NR(VIDIOC_ENUMSTD), valid_ioctls); 692 set_bit(_IOC_NR(VIDIOC_ENUMSTD), valid_ioctls);
677 SET_VALID_IOCTL(ops, VIDIOC_S_STD, vidioc_s_std); 693 SET_VALID_IOCTL(ops, VIDIOC_S_STD, vidioc_s_std);
@@ -685,6 +701,7 @@ static void determine_valid_ioctls(struct video_device *vdev)
685 SET_VALID_IOCTL(ops, VIDIOC_G_AUDIO, vidioc_g_audio); 701 SET_VALID_IOCTL(ops, VIDIOC_G_AUDIO, vidioc_g_audio);
686 SET_VALID_IOCTL(ops, VIDIOC_S_AUDIO, vidioc_s_audio); 702 SET_VALID_IOCTL(ops, VIDIOC_S_AUDIO, vidioc_s_audio);
687 SET_VALID_IOCTL(ops, VIDIOC_QUERY_DV_TIMINGS, vidioc_query_dv_timings); 703 SET_VALID_IOCTL(ops, VIDIOC_QUERY_DV_TIMINGS, vidioc_query_dv_timings);
704 SET_VALID_IOCTL(ops, VIDIOC_S_EDID, vidioc_s_edid);
688 } 705 }
689 if (is_tx) { 706 if (is_tx) {
690 SET_VALID_IOCTL(ops, VIDIOC_ENUMOUTPUT, vidioc_enum_output); 707 SET_VALID_IOCTL(ops, VIDIOC_ENUMOUTPUT, vidioc_enum_output);
@@ -710,9 +727,10 @@ static void determine_valid_ioctls(struct video_device *vdev)
710 SET_VALID_IOCTL(ops, VIDIOC_G_DV_TIMINGS, vidioc_g_dv_timings); 727 SET_VALID_IOCTL(ops, VIDIOC_G_DV_TIMINGS, vidioc_g_dv_timings);
711 SET_VALID_IOCTL(ops, VIDIOC_ENUM_DV_TIMINGS, vidioc_enum_dv_timings); 728 SET_VALID_IOCTL(ops, VIDIOC_ENUM_DV_TIMINGS, vidioc_enum_dv_timings);
712 SET_VALID_IOCTL(ops, VIDIOC_DV_TIMINGS_CAP, vidioc_dv_timings_cap); 729 SET_VALID_IOCTL(ops, VIDIOC_DV_TIMINGS_CAP, vidioc_dv_timings_cap);
730 SET_VALID_IOCTL(ops, VIDIOC_G_EDID, vidioc_g_edid);
713 } 731 }
714 if (is_tx) { 732 if (is_tx && (is_radio || is_sdr)) {
715 /* transmitter only ioctls */ 733 /* radio transmitter only ioctls */
716 SET_VALID_IOCTL(ops, VIDIOC_G_MODULATOR, vidioc_g_modulator); 734 SET_VALID_IOCTL(ops, VIDIOC_G_MODULATOR, vidioc_g_modulator);
717 SET_VALID_IOCTL(ops, VIDIOC_S_MODULATOR, vidioc_s_modulator); 735 SET_VALID_IOCTL(ops, VIDIOC_S_MODULATOR, vidioc_s_modulator);
718 } 736 }
@@ -758,6 +776,8 @@ static void determine_valid_ioctls(struct video_device *vdev)
758 * %VFL_TYPE_RADIO - A radio card 776 * %VFL_TYPE_RADIO - A radio card
759 * 777 *
760 * %VFL_TYPE_SUBDEV - A subdevice 778 * %VFL_TYPE_SUBDEV - A subdevice
779 *
780 * %VFL_TYPE_SDR - Software Defined Radio
761 */ 781 */
762int __video_register_device(struct video_device *vdev, int type, int nr, 782int __video_register_device(struct video_device *vdev, int type, int nr,
763 int warn_if_nr_in_use, struct module *owner) 783 int warn_if_nr_in_use, struct module *owner)
@@ -797,6 +817,10 @@ int __video_register_device(struct video_device *vdev, int type, int nr,
797 case VFL_TYPE_SUBDEV: 817 case VFL_TYPE_SUBDEV:
798 name_base = "v4l-subdev"; 818 name_base = "v4l-subdev";
799 break; 819 break;
820 case VFL_TYPE_SDR:
821 /* Use device name 'swradio' because 'sdr' was already taken. */
822 name_base = "swradio";
823 break;
800 default: 824 default:
801 printk(KERN_ERR "%s called with unknown type: %d\n", 825 printk(KERN_ERR "%s called with unknown type: %d\n",
802 __func__, type); 826 __func__, type);