| 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, |
| }; |