aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/v4l2-core/v4l2-ioctl.c
diff options
context:
space:
mode:
authorBoris Brezillon <boris.brezillon@collabora.com>2019-06-05 12:46:25 -0400
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>2019-06-10 14:52:03 -0400
commitf0d2b7a8915a00917207dd23aaf8554d7bf777b0 (patch)
tree0a9d03fe3a3134d7296bfd1249a63e749615f1b7 /drivers/media/v4l2-core/v4l2-ioctl.c
parentmedia: MAINTAINERS: update email address (diff)
downloadlinux-dev-f0d2b7a8915a00917207dd23aaf8554d7bf777b0.tar.xz
linux-dev-f0d2b7a8915a00917207dd23aaf8554d7bf777b0.zip
media: v4l2: Fix the _MPLANE format check in v4l_enum_fmt()
CAP_M2M_MPLANE means the device supports _MPLANE formats for both capture and output. Adjust the check to avoid EINVAL errors on such devices. Reported-by: Maxime Jourdan <mjourdan@baylibre.com> Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Tomasz Figa <tfiga@chromium.org> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Diffstat (limited to 'drivers/media/v4l2-core/v4l2-ioctl.c')
-rw-r--r--drivers/media/v4l2-core/v4l2-ioctl.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index 14596e8ad2c6..21e7ecf491c3 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -1385,6 +1385,7 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
struct video_device *vdev = video_devdata(file);
struct v4l2_fmtdesc *p = arg;
int ret = check_fmt(file, p->type);
+ u32 cap_mask;
if (ret)
return ret;
@@ -1393,7 +1394,9 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
switch (p->type) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
- if (!!(vdev->device_caps & V4L2_CAP_VIDEO_CAPTURE_MPLANE) !=
+ cap_mask = V4L2_CAP_VIDEO_CAPTURE_MPLANE |
+ V4L2_CAP_VIDEO_M2M_MPLANE;
+ if (!!(vdev->device_caps & cap_mask) !=
(p->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE))
break;
@@ -1408,7 +1411,9 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
break;
case V4L2_BUF_TYPE_VIDEO_OUTPUT:
case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
- if (!!(vdev->device_caps & V4L2_CAP_VIDEO_OUTPUT_MPLANE) !=
+ cap_mask = V4L2_CAP_VIDEO_OUTPUT_MPLANE |
+ V4L2_CAP_VIDEO_M2M_MPLANE;
+ if (!!(vdev->device_caps & cap_mask) !=
(p->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE))
break;