[media] v4l: subdev: Extend default link validation to cover field order
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Mon, 19 May 2014 14:36:23 +0000 (11:36 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Thu, 21 Aug 2014 20:25:12 +0000 (15:25 -0500)
The field order must match between the source and sink pads, or the sink
pad field order must be NONE. This allows connecting an interlaced
source to a bridge that has no hardware support for interlaced formats.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Tested-by: Enrico Butera <ebutera@users.sourceforge.net>
Acked-by: Sakari Ailus <sakari.ailus@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
drivers/media/v4l2-core/v4l2-subdev.c

index b4d235c13fbfc43d12decce919e9dc367e094ea5..543631c3557ab94ec264164532403d33b0eb5497 100644 (file)
@@ -501,11 +501,20 @@ int v4l2_subdev_link_validate_default(struct v4l2_subdev *sd,
                                      struct v4l2_subdev_format *source_fmt,
                                      struct v4l2_subdev_format *sink_fmt)
 {
+       /* The width, height and code must match. */
        if (source_fmt->format.width != sink_fmt->format.width
            || source_fmt->format.height != sink_fmt->format.height
            || source_fmt->format.code != sink_fmt->format.code)
                return -EINVAL;
 
+       /* The field order must match, or the sink field order must be NONE
+        * to support interlaced hardware connected to bridges that support
+        * progressive formats only.
+        */
+       if (source_fmt->format.field != sink_fmt->format.field &&
+           sink_fmt->format.field != V4L2_FIELD_NONE)
+               return -EINVAL;
+
        return 0;
 }
 EXPORT_SYMBOL_GPL(v4l2_subdev_link_validate_default);