diff options
author | Hans Verkuil <hansverk@cisco.com> | 2017-05-08 11:35:05 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2017-06-23 09:20:42 -0300 |
commit | eaec420f530d376d6bb6e547a741203344619f47 (patch) | |
tree | 4c6c59919d8ded592f354aa725e7defe20bb9bda /drivers/media/platform/exynos4-is | |
parent | 0e8298e58839cb0bb6aafdbae38e5f8b03a8ff20 (diff) |
[media] v4l2-ioctl/exynos: fix G/S_SELECTION's type handling
The type field in struct v4l2_selection is supposed to never use the
_MPLANE variants. E.g. if the driver supports V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
then userspace should still pass V4L2_BUF_TYPE_VIDEO_CAPTURE.
The reasons for this are lost in the mists of time, but it is really
annoying. In addition, the exynos drivers didn't follow this rule and
instead expected the _MPLANE type.
To fix that code is added to the v4l2 core that maps the _MPLANE buffer
types to their regular equivalents before calling the driver.
Effectively this allows for userspace to use either _MPLANE or the regular
buffer type. This keeps backwards compatibility while making things easier
for userspace.
Since drivers now never see the _MPLANE buffer types the exynos drivers
had to be adapted as well.
Signed-off-by: Hans Verkuil <hansverk@cisco.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Acked-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'drivers/media/platform/exynos4-is')
-rw-r--r-- | drivers/media/platform/exynos4-is/fimc-capture.c | 4 | ||||
-rw-r--r-- | drivers/media/platform/exynos4-is/fimc-lite.c | 4 |
2 files changed, 4 insertions, 4 deletions
diff --git a/drivers/media/platform/exynos4-is/fimc-capture.c b/drivers/media/platform/exynos4-is/fimc-capture.c index db60a63c0768..948fe01f6c96 100644 --- a/drivers/media/platform/exynos4-is/fimc-capture.c +++ b/drivers/media/platform/exynos4-is/fimc-capture.c @@ -1270,7 +1270,7 @@ static int fimc_cap_g_selection(struct file *file, void *fh, struct fimc_ctx *ctx = fimc->vid_cap.ctx; struct fimc_frame *f = &ctx->s_frame; - if (s->type != V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) + if (s->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) return -EINVAL; switch (s->target) { @@ -1322,7 +1322,7 @@ static int fimc_cap_s_selection(struct file *file, void *fh, struct fimc_frame *f; unsigned long flags; - if (s->type != V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) + if (s->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) return -EINVAL; if (s->target == V4L2_SEL_TGT_COMPOSE) diff --git a/drivers/media/platform/exynos4-is/fimc-lite.c b/drivers/media/platform/exynos4-is/fimc-lite.c index b4c4a33784c4..7d3ec5cc6608 100644 --- a/drivers/media/platform/exynos4-is/fimc-lite.c +++ b/drivers/media/platform/exynos4-is/fimc-lite.c @@ -901,7 +901,7 @@ static int fimc_lite_g_selection(struct file *file, void *fh, struct fimc_lite *fimc = video_drvdata(file); struct flite_frame *f = &fimc->out_frame; - if (sel->type != V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) + if (sel->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) return -EINVAL; switch (sel->target) { @@ -929,7 +929,7 @@ static int fimc_lite_s_selection(struct file *file, void *fh, struct v4l2_rect rect = sel->r; unsigned long flags; - if (sel->type != V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE || + if (sel->type != V4L2_BUF_TYPE_VIDEO_CAPTURE || sel->target != V4L2_SEL_TGT_COMPOSE) return -EINVAL; |