media: ov2659: make S_FMT succeed even if requested format doesn't match
authorAkinobu Mita <akinobu.mita@gmail.com>
Sat, 30 Mar 2019 14:01:31 +0000 (10:01 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Mon, 22 Apr 2019 15:34:50 +0000 (11:34 -0400)
This driver returns an error if unsupported media bus pixel code is
requested by VIDIOC_SUBDEV_S_FMT.

But according to Documentation/media/uapi/v4l/vidioc-subdev-g-fmt.rst,

Drivers must not return an error solely because the requested format
doesn't match the device capabilities. They must instead modify the
format to match what the hardware can provide.

So select default format code and return success in that case.

This is detected by v4l2-compliance.

Cc: "Lad, Prabhakar" <prabhakar.csengg@gmail.com>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Acked-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/i2c/ov2659.c

index 799acce803fe5ee4d504a01a55fc20bae36b19a1..a1e9a980a44590dc0a0372649968e067dbdf7923 100644 (file)
@@ -1117,8 +1117,10 @@ static int ov2659_set_fmt(struct v4l2_subdev *sd,
                if (ov2659_formats[index].code == mf->code)
                        break;
 
-       if (index < 0)
-               return -EINVAL;
+       if (index < 0) {
+               index = 0;
+               mf->code = ov2659_formats[index].code;
+       }
 
        mf->colorspace = V4L2_COLORSPACE_SRGB;
        mf->field = V4L2_FIELD_NONE;