aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/v4l2-core/v4l2-subdev.c
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2014-05-19 10:36:23 -0400
committerMauro Carvalho Chehab <m.chehab@samsung.com>2014-08-21 16:25:12 -0400
commit24acf8b211e25414cb288305292a1fda136c0bd8 (patch)
treed036eba3e9a760826b4b3e8b14fca7edc3c32fe7 /drivers/media/v4l2-core/v4l2-subdev.c
parent0e2a6b7f2b9303410c93fd4724f9d36ebc7be1c3 (diff)
[media] v4l: subdev: Extend default link validation to cover field order
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>
Diffstat (limited to 'drivers/media/v4l2-core/v4l2-subdev.c')
-rw-r--r--drivers/media/v4l2-core/v4l2-subdev.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/media/v4l2-core/v4l2-subdev.c
index b4d235c13fbf..543631c3557a 100644
--- a/drivers/media/v4l2-core/v4l2-subdev.c
+++ b/drivers/media/v4l2-core/v4l2-subdev.c
@@ -501,11 +501,20 @@ int v4l2_subdev_link_validate_default(struct v4l2_subdev *sd,
501 struct v4l2_subdev_format *source_fmt, 501 struct v4l2_subdev_format *source_fmt,
502 struct v4l2_subdev_format *sink_fmt) 502 struct v4l2_subdev_format *sink_fmt)
503{ 503{
504 /* The width, height and code must match. */
504 if (source_fmt->format.width != sink_fmt->format.width 505 if (source_fmt->format.width != sink_fmt->format.width
505 || source_fmt->format.height != sink_fmt->format.height 506 || source_fmt->format.height != sink_fmt->format.height
506 || source_fmt->format.code != sink_fmt->format.code) 507 || source_fmt->format.code != sink_fmt->format.code)
507 return -EINVAL; 508 return -EINVAL;
508 509
510 /* The field order must match, or the sink field order must be NONE
511 * to support interlaced hardware connected to bridges that support
512 * progressive formats only.
513 */
514 if (source_fmt->format.field != sink_fmt->format.field &&
515 sink_fmt->format.field != V4L2_FIELD_NONE)
516 return -EINVAL;
517
509 return 0; 518 return 0;
510} 519}
511EXPORT_SYMBOL_GPL(v4l2_subdev_link_validate_default); 520EXPORT_SYMBOL_GPL(v4l2_subdev_link_validate_default);