@@ -1743,7 +1743,6 @@ static int dcmi_graph_notify_bound(struct v4l2_async_notifier *notifier,
{
struct stm32_dcmi *dcmi = notifier_to_dcmi(notifier);
unsigned int ret;
- int src_pad;
dev_dbg(dcmi->dev, "Subdev \"%s\" bound\n", subdev->name);
@@ -1751,14 +1750,12 @@ static int dcmi_graph_notify_bound(struct v4l2_async_notifier *notifier,
* Link this sub-device to DCMI, it could be
* a parallel camera sensor or a bridge
*/
- src_pad = media_entity_get_fwnode_pad(&subdev->entity,
- subdev->fwnode,
- MEDIA_PAD_FL_SOURCE);
-
- ret = media_create_pad_link(&subdev->entity, src_pad,
- &dcmi->vdev->entity, 0,
- MEDIA_LNK_FL_IMMUTABLE |
- MEDIA_LNK_FL_ENABLED);
+ ret = media_create_fwnode_pad_links(&dcmi->vdev->entity.pads[0],
+ dev_fwnode(dcmi->dev),
+ &subdev->entity,
+ dev_fwnode(subdev->dev),
+ MEDIA_LNK_FL_IMMUTABLE |
+ MEDIA_LNK_FL_ENABLED);
if (ret)
dev_err(dcmi->dev, "Failed to create media pad link with subdev \"%s\"\n",
subdev->name);
dcmi_graph_notify_bound() passes the bound subdev's sd->fwnode to media_entity_get_fwnode_pad(). This is likely not an endpoint fwnode as required by media_entity_get_fwnode_pad(), for most subdevices it is the port parent of endpoint fwnode(s). This has only worked before because no entities have implemented the .get_fwnode_pad() op yet, and the default behavior of media_entity_get_fwnode_pad() was to ignore the passed fwnode and return the first pad that matches the given direction flags. Fix this by replacing the calls to media_entity_get_fwnode_pad() and media_create_pad_link() with a call to media_create_fwnode_pad_links(). Fixes: f4378baf07a2 ("media: stm32-dcmi: add support of several sub-devices") Signed-off-by: Steve Longerbeam <slongerbeam@gmail.com> --- drivers/media/platform/stm32/stm32-dcmi.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-)