It is not trivial to debug troubles at media graph build.
So, add print messages to help debug what's happening,
in the case of an error occurs.

Signed-off-by: Mauro Carvalho Chehab <mchehab+sams...@kernel.org>
---
 drivers/media/v4l2-core/v4l2-mc.c | 80 +++++++++++++++++++++++--------
 1 file changed, 61 insertions(+), 19 deletions(-)

diff --git a/drivers/media/v4l2-core/v4l2-mc.c 
b/drivers/media/v4l2-core/v4l2-mc.c
index 3d868f071dd7..03f41c3fb8ec 100644
--- a/drivers/media/v4l2-core/v4l2-mc.c
+++ b/drivers/media/v4l2-core/v4l2-mc.c
@@ -63,8 +63,10 @@ int v4l2_mc_create_media_graph(struct media_device *mdev)
        }
 
        /* It should have at least one I/O entity */
-       if (!io_v4l && !io_vbi && !io_swradio)
+       if (!io_v4l && !io_vbi && !io_swradio) {
+               dev_warn(mdev->dev, "Didn't find any I/O entity\n");
                return -EINVAL;
+       }
 
        /*
         * Here, webcams are modelled on a very simple way: the sensor is
@@ -74,8 +76,10 @@ int v4l2_mc_create_media_graph(struct media_device *mdev)
         * PC-consumer's hardware.
         */
        if (is_webcam) {
-               if (!io_v4l)
+               if (!io_v4l) {
+                       dev_warn(mdev->dev, "Didn't find a 
MEDIA_ENT_F_IO_V4L\n");
                        return -EINVAL;
+               }
 
                media_device_for_each_entity(entity, mdev) {
                        if (entity->function != MEDIA_ENT_F_CAM_SENSOR)
@@ -83,16 +87,20 @@ int v4l2_mc_create_media_graph(struct media_device *mdev)
                        ret = media_create_pad_link(entity, 0,
                                                    io_v4l, 0,
                                                    MEDIA_LNK_FL_ENABLED);
-                       if (ret)
+                       if (ret) {
+                               dev_warn(mdev->dev, "Failed to create a sensor 
link\n");
                                return ret;
+                       }
                }
                if (!decoder)
                        return 0;
        }
 
        /* The device isn't a webcam. So, it should have a decoder */
-       if (!decoder)
+       if (!decoder) {
+               dev_warn(mdev->dev, "Decoder not found\n");
                return -EINVAL;
+       }
 
        /* Link the tuner and IF video output pads */
        if (tuner) {
@@ -101,32 +109,45 @@ int v4l2_mc_create_media_graph(struct media_device *mdev)
                                                         PAD_SIGNAL_ANALOG);
                        pad_sink = media_get_pad_index(if_vid, true,
                                                       PAD_SIGNAL_ANALOG);
-                       if (pad_source < 0 || pad_sink < 0)
+                       if (pad_source < 0 || pad_sink < 0) {
+                               dev_warn(mdev->dev, "Couldn't get tuner and/or 
PLL pad(s): (%d, %d)\n",
+                                        pad_source, pad_sink);
                                return -EINVAL;
+                       }
                        ret = media_create_pad_link(tuner, pad_source,
                                                    if_vid, pad_sink,
                                                    MEDIA_LNK_FL_ENABLED);
-                       if (ret)
+                       if (ret) {
+                               dev_warn(mdev->dev, "Couldn't create tuner->PLL 
link)\n");
                                return ret;
+                       }
 
                        pad_source = media_get_pad_index(if_vid, false,
                                                         PAD_SIGNAL_ANALOG);
                        pad_sink = media_get_pad_index(decoder, true,
                                                       PAD_SIGNAL_ANALOG);
-                       if (pad_source < 0 || pad_sink < 0)
+                       if (pad_source < 0 || pad_sink < 0) {
+                               dev_warn(mdev->dev, "get decoder and/or PLL 
pad(s): (%d, %d)\n",
+                                        pad_source, pad_sink);
                                return -EINVAL;
+                       }
                        ret = media_create_pad_link(if_vid, pad_source,
                                                decoder, pad_sink,
                                                MEDIA_LNK_FL_ENABLED);
-                       if (ret)
+                       if (ret) {
+                               dev_warn(mdev->dev, "couldn't link PLL to 
decoder\n");
                                return ret;
+                       }
                } else {
                        pad_source = media_get_pad_index(tuner, false,
                                                         PAD_SIGNAL_ANALOG);
                        pad_sink = media_get_pad_index(decoder, true,
                                                       PAD_SIGNAL_ANALOG);
-                       if (pad_source < 0 || pad_sink < 0)
+                       if (pad_source < 0 || pad_sink < 0) {
+                               dev_warn(mdev->dev, "couldn't get tuner and/or 
decoder pad(s): (%d, %d)\n",
+                                        pad_source, pad_sink);
                                return -EINVAL;
+                       }
                        ret = media_create_pad_link(tuner, pad_source,
                                                decoder, pad_sink,
                                                MEDIA_LNK_FL_ENABLED);
@@ -139,13 +160,18 @@ int v4l2_mc_create_media_graph(struct media_device *mdev)
                                                         PAD_SIGNAL_AUDIO);
                        pad_sink = media_get_pad_index(if_aud, true,
                                                       PAD_SIGNAL_AUDIO);
-                       if (pad_source < 0 || pad_sink < 0)
+                       if (pad_source < 0 || pad_sink < 0) {
+                               dev_warn(mdev->dev, "couldn't get tuner and/or 
decoder pad(s) for audio: (%d, %d)\n",
+                                        pad_source, pad_sink);
                                return -EINVAL;
+                       }
                        ret = media_create_pad_link(tuner, pad_source,
                                                    if_aud, pad_sink,
                                                    MEDIA_LNK_FL_ENABLED);
-                       if (ret)
+                       if (ret) {
+                               dev_warn(mdev->dev, "couldn't link tuner->audio 
PLL\n");
                                return ret;
+                       }
                } else {
                        if_aud = tuner;
                }
@@ -155,35 +181,47 @@ int v4l2_mc_create_media_graph(struct media_device *mdev)
        /* Create demod to V4L, VBI and SDR radio links */
        if (io_v4l) {
                pad_source = media_get_pad_index(decoder, false, PAD_SIGNAL_DV);
-               if (pad_source < 0)
+               if (pad_source < 0) {
+                       dev_warn(mdev->dev, "couldn't get decoder output pad 
for V4L I/O\n");
                        return -EINVAL;
+               }
                ret = media_create_pad_link(decoder, pad_source,
                                        io_v4l, 0,
                                        MEDIA_LNK_FL_ENABLED);
-               if (ret)
+               if (ret) {
+                       dev_warn(mdev->dev, "couldn't link decoder output to 
V4L I/O\n");
                        return ret;
+               }
        }
 
        if (io_swradio) {
                pad_source = media_get_pad_index(decoder, false, PAD_SIGNAL_DV);
-               if (pad_source < 0)
+               if (pad_source < 0) {
+                       dev_warn(mdev->dev, "couldn't get decoder output pad 
for SDR\n");
                        return -EINVAL;
+               }
                ret = media_create_pad_link(decoder, pad_source,
                                        io_swradio, 0,
                                        MEDIA_LNK_FL_ENABLED);
-               if (ret)
+               if (ret) {
+                       dev_warn(mdev->dev, "couldn't link decoder output to 
SDR\n");
                        return ret;
+               }
        }
 
        if (io_vbi) {
                pad_source = media_get_pad_index(decoder, false, PAD_SIGNAL_DV);
-               if (pad_source < 0)
+               if (pad_source < 0) {
+                       dev_warn(mdev->dev, "couldn't get decoder output pad 
for VBI\n");
                        return -EINVAL;
+               }
                ret = media_create_pad_link(decoder, pad_source,
                                            io_vbi, 0,
                                            MEDIA_LNK_FL_ENABLED);
-               if (ret)
+               if (ret) {
+                       dev_warn(mdev->dev, "couldn't link decoder output to 
VBI\n");
                        return ret;
+               }
        }
 
        /* Create links for the media connectors */
@@ -195,8 +233,10 @@ int v4l2_mc_create_media_graph(struct media_device *mdev)
                                continue;
                        pad_sink = media_get_pad_index(tuner, true,
                                                         PAD_SIGNAL_ANALOG);
-                       if (pad_sink < 0)
+                       if (pad_sink < 0) {
+                               dev_warn(mdev->dev, "couldn't get tuner analog 
pad sink\n");
                                return -EINVAL;
+                       }
                        ret = media_create_pad_link(entity, 0, tuner,
                                                    pad_sink,
                                                    flags);
@@ -205,8 +245,10 @@ int v4l2_mc_create_media_graph(struct media_device *mdev)
                case MEDIA_ENT_F_CONN_COMPOSITE:
                        pad_sink = media_get_pad_index(decoder, true,
                                                       PAD_SIGNAL_ANALOG);
-                       if (pad_sink < 0)
+                       if (pad_sink < 0) {
+                               dev_warn(mdev->dev, "couldn't get tuner analog 
pad sink\n");
                                return -EINVAL;
+                       }
                        ret = media_create_pad_link(entity, 0, decoder,
                                                    pad_sink,
                                                    flags);
-- 
2.17.1

Reply via email to