From: Sakari Ailus <sakari.ai...@linux.intel.com>

The existing link format validation failure debug message in media-entity.c
helped to poinpoint the point of failure but provided no additional
information what's wrong. Tell the user exactly why the validation failed.

Signed-off-by: Sakari Ailus <sakari.ai...@linux.intel.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund+rene...@ragnatech.se>
---
 drivers/media/v4l2-core/v4l2-subdev.c | 40 ++++++++++++++++++++++-----
 1 file changed, 33 insertions(+), 7 deletions(-)

diff --git a/drivers/media/v4l2-core/v4l2-subdev.c 
b/drivers/media/v4l2-core/v4l2-subdev.c
index 9b4f3528a4da..6c96d6f4bdfc 100644
--- a/drivers/media/v4l2-core/v4l2-subdev.c
+++ b/drivers/media/v4l2-core/v4l2-subdev.c
@@ -629,21 +629,47 @@ int v4l2_subdev_link_validate_default(struct v4l2_subdev 
*sd,
                                      struct v4l2_subdev_format *source_fmt,
                                      struct v4l2_subdev_format *sink_fmt)
 {
+       bool pass = true;
+
        /* 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 -EPIPE;
+       if (source_fmt->format.width != sink_fmt->format.width) {
+               dev_dbg(sd->entity.graph_obj.mdev->dev,
+                       "%s: width does not match (source %u, sink %u)\n",
+                       __func__,
+                       source_fmt->format.width, sink_fmt->format.width);
+               pass = false;
+       }
+
+       if (source_fmt->format.height != sink_fmt->format.height) {
+               dev_dbg(sd->entity.graph_obj.mdev->dev,
+                       "%s: height does not match (source %u, sink %u)\n",
+                       __func__,
+                       source_fmt->format.height, sink_fmt->format.height);
+               pass = false;
+       }
+
+       if (source_fmt->format.code != sink_fmt->format.code) {
+               dev_dbg(sd->entity.graph_obj.mdev->dev,
+                       "%s: media bus code does not match (source 0x%8.8x, 
sink 0x%8.8x)\n",
+                       __func__,
+                       source_fmt->format.code, sink_fmt->format.code);
+               pass = false;
+       }
 
        /* 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 -EPIPE;
+           sink_fmt->format.field != V4L2_FIELD_NONE) {
+               dev_dbg(sd->entity.graph_obj.mdev->dev,
+                       "%s: field does not match (source %u, sink %u)\n",
+                       __func__,
+                       source_fmt->format.field, sink_fmt->format.field);
+               pass = false;
+       }
 
-       return 0;
+       return pass ? 0 : -EPIPE;
 }
 EXPORT_SYMBOL_GPL(v4l2_subdev_link_validate_default);
 
-- 
2.20.1

Reply via email to