Commit caf276be authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab

media: v4l2-mc: add print messages when media graph fails

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: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent 9d6d20e6
......@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment