aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.4/950-0824-media-i2c-imx290-Add-support-to-enumerate-all-frame-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-5.4/950-0824-media-i2c-imx290-Add-support-to-enumerate-all-frame-.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.4/950-0824-media-i2c-imx290-Add-support-to-enumerate-all-frame-.patch58
1 files changed, 58 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.4/950-0824-media-i2c-imx290-Add-support-to-enumerate-all-frame-.patch b/target/linux/bcm27xx/patches-5.4/950-0824-media-i2c-imx290-Add-support-to-enumerate-all-frame-.patch
new file mode 100644
index 0000000000..8ae528a423
--- /dev/null
+++ b/target/linux/bcm27xx/patches-5.4/950-0824-media-i2c-imx290-Add-support-to-enumerate-all-frame-.patch
@@ -0,0 +1,58 @@
+From 9ca04663315302f1556798e9da29eabf08aecd59 Mon Sep 17 00:00:00 2001
+From: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
+Date: Fri, 12 Jun 2020 15:53:53 +0200
+Subject: [PATCH] media: i2c: imx290: Add support to enumerate all
+ frame sizes
+
+Commit 3b867fb641d884b714fba390ae866714ba475f29 upstream.
+
+Add support to enumerate all frame sizes supported by IMX290. This is
+required for using with userspace tools such as libcamera.
+
+Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
+Signed-off-by: Andrey Konovalov <andrey.konovalov@linaro.org>
+Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
+---
+ drivers/media/i2c/imx290.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+--- a/drivers/media/i2c/imx290.c
++++ b/drivers/media/i2c/imx290.c
+@@ -528,6 +528,28 @@ static int imx290_enum_mbus_code(struct
+ return 0;
+ }
+
++static int imx290_enum_frame_size(struct v4l2_subdev *sd,
++ struct v4l2_subdev_pad_config *cfg,
++ struct v4l2_subdev_frame_size_enum *fse)
++{
++ const struct imx290 *imx290 = to_imx290(sd);
++ const struct imx290_mode *imx290_modes = imx290_modes_ptr(imx290);
++
++ if ((fse->code != imx290_formats[0].code) &&
++ (fse->code != imx290_formats[1].code))
++ return -EINVAL;
++
++ if (fse->index >= imx290_modes_num(imx290))
++ return -EINVAL;
++
++ fse->min_width = imx290_modes[fse->index].width;
++ fse->max_width = imx290_modes[fse->index].width;
++ fse->min_height = imx290_modes[fse->index].height;
++ fse->max_height = imx290_modes[fse->index].height;
++
++ return 0;
++}
++
+ static int imx290_get_fmt(struct v4l2_subdev *sd,
+ struct v4l2_subdev_pad_config *cfg,
+ struct v4l2_subdev_format *fmt)
+@@ -873,6 +895,7 @@ static const struct v4l2_subdev_video_op
+ static const struct v4l2_subdev_pad_ops imx290_pad_ops = {
+ .init_cfg = imx290_entity_init_cfg,
+ .enum_mbus_code = imx290_enum_mbus_code,
++ .enum_frame_size = imx290_enum_frame_size,
+ .get_fmt = imx290_get_fmt,
+ .set_fmt = imx290_set_fmt,
+ };