| From 05ab8d1536d1a29dc0c9ff2285343df2ef3b9a69 Mon Sep 17 00:00:00 2001 |
| From: Janusz Krzysztofik <jmkrzyszt@gmail.com> |
| Date: Tue, 3 Sep 2019 17:11:39 -0300 |
| Subject: [PATCH] media: ov6650: Fix incorrect use of JPEG colorspace |
| |
| commit 12500731895ef09afc5b66b86b76c0884fb9c7bf upstream. |
| |
| Since its initial submission, the driver selects V4L2_COLORSPACE_JPEG |
| for supported formats other than V4L2_MBUS_FMT_SBGGR8_1X8. According |
| to v4l2-compliance test program, V4L2_COLORSPACE_JPEG applies |
| exclusively to V4L2_PIX_FMT_JPEG. Since the sensor does not support |
| JPEG format, fix it to always select V4L2_COLORSPACE_SRGB. |
| |
| Fixes: 2f6e2404799a ("[media] SoC Camera: add driver for OV6650 sensor") |
| Signed-off-by: Janusz Krzysztofik <jmkrzyszt@gmail.com> |
| Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> |
| Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/media/i2c/ov6650.c b/drivers/media/i2c/ov6650.c |
| index ba37c8331c65..33cd59309c88 100644 |
| --- a/drivers/media/i2c/ov6650.c |
| +++ b/drivers/media/i2c/ov6650.c |
| @@ -201,7 +201,6 @@ struct ov6650 { |
| unsigned long pclk_max; /* from resolution and format */ |
| struct v4l2_fract tpf; /* as requested with s_frame_interval */ |
| u32 code; |
| - enum v4l2_colorspace colorspace; |
| }; |
| |
| |
| @@ -517,7 +516,7 @@ static int ov6650_get_fmt(struct v4l2_subdev *sd, |
| mf->width = priv->rect.width >> priv->half_scale; |
| mf->height = priv->rect.height >> priv->half_scale; |
| mf->code = priv->code; |
| - mf->colorspace = priv->colorspace; |
| + mf->colorspace = V4L2_COLORSPACE_SRGB; |
| mf->field = V4L2_FIELD_NONE; |
| |
| return 0; |
| @@ -624,11 +623,6 @@ static int ov6650_s_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf) |
| priv->pclk_max = 8000000; |
| } |
| |
| - if (code == MEDIA_BUS_FMT_SBGGR8_1X8) |
| - priv->colorspace = V4L2_COLORSPACE_SRGB; |
| - else if (code != 0) |
| - priv->colorspace = V4L2_COLORSPACE_JPEG; |
| - |
| if (half_scale) { |
| dev_dbg(&client->dev, "max resolution: QCIF\n"); |
| coma_set |= COMA_QCIF; |
| @@ -663,7 +657,6 @@ static int ov6650_s_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf) |
| priv->code = code; |
| |
| if (!ret) { |
| - mf->colorspace = priv->colorspace; |
| mf->width = priv->rect.width >> half_scale; |
| mf->height = priv->rect.height >> half_scale; |
| } |
| @@ -686,6 +679,7 @@ static int ov6650_set_fmt(struct v4l2_subdev *sd, |
| &mf->height, 2, H_CIF, 1, 0); |
| |
| mf->field = V4L2_FIELD_NONE; |
| + mf->colorspace = V4L2_COLORSPACE_SRGB; |
| |
| switch (mf->code) { |
| case MEDIA_BUS_FMT_Y10_1X10: |
| @@ -696,13 +690,11 @@ static int ov6650_set_fmt(struct v4l2_subdev *sd, |
| case MEDIA_BUS_FMT_YUYV8_2X8: |
| case MEDIA_BUS_FMT_VYUY8_2X8: |
| case MEDIA_BUS_FMT_UYVY8_2X8: |
| - mf->colorspace = V4L2_COLORSPACE_JPEG; |
| break; |
| default: |
| mf->code = MEDIA_BUS_FMT_SBGGR8_1X8; |
| /* fall through */ |
| case MEDIA_BUS_FMT_SBGGR8_1X8: |
| - mf->colorspace = V4L2_COLORSPACE_SRGB; |
| break; |
| } |
| |
| @@ -1008,7 +1000,6 @@ static int ov6650_probe(struct i2c_client *client, |
| priv->rect.height = H_CIF; |
| priv->half_scale = false; |
| priv->code = MEDIA_BUS_FMT_YUYV8_2X8; |
| - priv->colorspace = V4L2_COLORSPACE_JPEG; |
| |
| /* Hardware default frame interval */ |
| priv->tpf.numerator = GET_CLKRC_DIV(DEF_CLKRC); |
| -- |
| 2.7.4 |
| |