diff options
author | Hans Verkuil <hverkuil@xs4all.nl> | 2013-12-20 00:32:21 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <m.chehab@samsung.com> | 2014-03-05 12:16:00 -0500 |
commit | bfffd7431c6e7661d13c3fd141863fde55c9338b (patch) | |
tree | 78d39ebbb09b6af73f4df7425882a2130173ae89 /drivers/media/v4l2-core/v4l2-dev.c | |
parent | c9c54f72d4a8fe02a94c345dde45f42628325223 (diff) |
[media] v4l: do not allow modulator ioctls for non-radio devices
Modulator ioctls could be enabled mistakenly for non-radio devices.
Currently those ioctls are only valid for radio. Fix it.
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media/v4l2-core/v4l2-dev.c')
-rw-r--r-- | drivers/media/v4l2-core/v4l2-dev.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c index 98099e827614..95112f686ef0 100644 --- a/drivers/media/v4l2-core/v4l2-dev.c +++ b/drivers/media/v4l2-core/v4l2-dev.c | |||
@@ -553,6 +553,7 @@ static void determine_valid_ioctls(struct video_device *vdev) | |||
553 | const struct v4l2_ioctl_ops *ops = vdev->ioctl_ops; | 553 | const struct v4l2_ioctl_ops *ops = vdev->ioctl_ops; |
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_sdr = vdev->vfl_type == VFL_TYPE_SDR; | 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; |
@@ -726,8 +727,8 @@ static void determine_valid_ioctls(struct video_device *vdev) | |||
726 | SET_VALID_IOCTL(ops, VIDIOC_ENUM_DV_TIMINGS, vidioc_enum_dv_timings); | 727 | SET_VALID_IOCTL(ops, VIDIOC_ENUM_DV_TIMINGS, vidioc_enum_dv_timings); |
727 | SET_VALID_IOCTL(ops, VIDIOC_DV_TIMINGS_CAP, vidioc_dv_timings_cap); | 728 | SET_VALID_IOCTL(ops, VIDIOC_DV_TIMINGS_CAP, vidioc_dv_timings_cap); |
728 | } | 729 | } |
729 | if (is_tx) { | 730 | if (is_tx && (is_radio || is_sdr)) { |
730 | /* transmitter only ioctls */ | 731 | /* radio transmitter only ioctls */ |
731 | SET_VALID_IOCTL(ops, VIDIOC_G_MODULATOR, vidioc_g_modulator); | 732 | SET_VALID_IOCTL(ops, VIDIOC_G_MODULATOR, vidioc_g_modulator); |
732 | SET_VALID_IOCTL(ops, VIDIOC_S_MODULATOR, vidioc_s_modulator); | 733 | SET_VALID_IOCTL(ops, VIDIOC_S_MODULATOR, vidioc_s_modulator); |
733 | } | 734 | } |