From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Date: Fri, 12 Jul 2013 14:25:36 +0000 (-0300)
Subject: [media] v4l: omap4iss: Add enum_fmt_vid_cap ioctl support
X-Git-Tag: firefly_0821_release~176^2~3573^2~1053
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0b1d4249660fbb0c558a096ce72914b7f5fa82a8;p=firefly-linux-kernel-4.4.55.git

[media] v4l: omap4iss: Add enum_fmt_vid_cap ioctl support

List the pixel formats compatible with the active format currently
configured on the connected pad.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
---

diff --git a/drivers/staging/media/omap4iss/iss_video.c b/drivers/staging/media/omap4iss/iss_video.c
index 5dbd774aaa0a..68eab6e6dc36 100644
--- a/drivers/staging/media/omap4iss/iss_video.c
+++ b/drivers/staging/media/omap4iss/iss_video.c
@@ -495,6 +495,41 @@ iss_video_querycap(struct file *file, void *fh, struct v4l2_capability *cap)
 	return 0;
 }
 
+static int
+iss_video_enum_format(struct file *file, void *fh, struct v4l2_fmtdesc *f)
+{
+	struct iss_video *video = video_drvdata(file);
+	struct v4l2_mbus_framefmt format;
+	unsigned int index = f->index;
+	unsigned int i;
+	int ret;
+
+	if (f->type != video->type)
+		return -EINVAL;
+
+	ret = __iss_video_get_format(video, &format);
+	if (ret < 0)
+		return ret;
+
+	for (i = 0; i < ARRAY_SIZE(formats); ++i) {
+		const struct iss_format_info *info = &formats[i];
+
+		if (format.code != info->code)
+			continue;
+
+		if (index == 0) {
+			f->pixelformat = info->pixelformat;
+			strlcpy(f->description, info->description,
+				sizeof(f->description));
+			return 0;
+		}
+
+		index--;
+	}
+
+	return -EINVAL;
+}
+
 static int
 iss_video_get_format(struct file *file, void *fh, struct v4l2_format *format)
 {
@@ -918,6 +953,7 @@ iss_video_s_input(struct file *file, void *fh, unsigned int input)
 
 static const struct v4l2_ioctl_ops iss_video_ioctl_ops = {
 	.vidioc_querycap		= iss_video_querycap,
+	.vidioc_enum_fmt_vid_cap        = iss_video_enum_format,
 	.vidioc_g_fmt_vid_cap		= iss_video_get_format,
 	.vidioc_s_fmt_vid_cap		= iss_video_set_format,
 	.vidioc_try_fmt_vid_cap		= iss_video_try_format,