| From 9cd8a26051c89c2b43ef670ab4228fb70166f6e8 Mon Sep 17 00:00:00 2001 |
| From: Eugen Hristev <eugen.hristev@microchip.com> |
| Date: Thu, 21 Nov 2019 08:55:24 +0100 |
| Subject: [PATCH] media: i2c: mt9v032: fix enum mbus codes and frame sizes |
| |
| commit 1451d5ae351d938a0ab1677498c893f17b9ee21d upstream. |
| |
| This driver supports both the mt9v032 (color) and the mt9v022 (mono) |
| sensors. Depending on which sensor is used, the format from the sensor is |
| different. The format.code inside the dev struct holds this information. |
| The enum mbus and enum frame sizes need to take into account both type of |
| sensors, not just the color one. To solve this, use the format.code in |
| these functions instead of the hardcoded bayer color format (which is only |
| used for mt9v032). |
| |
| [Sakari Ailus: rewrapped commit message] |
| |
| Suggested-by: Wenyou Yang <wenyou.yang@microchip.com> |
| Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com> |
| Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> |
| Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> |
| Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/media/i2c/mt9v032.c b/drivers/media/i2c/mt9v032.c |
| index 4b9b98cf6674..5bd3ae82992f 100644 |
| --- a/drivers/media/i2c/mt9v032.c |
| +++ b/drivers/media/i2c/mt9v032.c |
| @@ -428,10 +428,12 @@ static int mt9v032_enum_mbus_code(struct v4l2_subdev *subdev, |
| struct v4l2_subdev_pad_config *cfg, |
| struct v4l2_subdev_mbus_code_enum *code) |
| { |
| + struct mt9v032 *mt9v032 = to_mt9v032(subdev); |
| + |
| if (code->index > 0) |
| return -EINVAL; |
| |
| - code->code = MEDIA_BUS_FMT_SGRBG10_1X10; |
| + code->code = mt9v032->format.code; |
| return 0; |
| } |
| |
| @@ -439,7 +441,11 @@ static int mt9v032_enum_frame_size(struct v4l2_subdev *subdev, |
| struct v4l2_subdev_pad_config *cfg, |
| struct v4l2_subdev_frame_size_enum *fse) |
| { |
| - if (fse->index >= 3 || fse->code != MEDIA_BUS_FMT_SGRBG10_1X10) |
| + struct mt9v032 *mt9v032 = to_mt9v032(subdev); |
| + |
| + if (fse->index >= 3) |
| + return -EINVAL; |
| + if (mt9v032->format.code != fse->code) |
| return -EINVAL; |
| |
| fse->min_width = MT9V032_WINDOW_WIDTH_DEF / (1 << fse->index); |
| -- |
| 2.7.4 |
| |