Hi Laurent, On Wed, Jan 16, 2019 at 12:57:43AM +0200, Laurent Pinchart wrote: > Hi Sakari, > > Thank you for the patch. > > On Fri, Nov 02, 2018 at 12:31:23AM +0100, Niklas Söderlund wrote: > > From: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> > > > > This way the pads are always passed to the has_route() op sink pad first. > > Makes sense. > > Is there anything in the API that mandates one pad to be a sink and the > other pad to the a source ? I had designed the operation to allow > sink-sink and source-source connections to be checked too. Do you have a use case in mind for sink--sink or source--source routes? The routes are about flows of data, so I'd presume only source--sink or sink--source routes are meaningful. If you did, then the driver would have to handle that by itself. This still simplifies the implementation for drivers that do not. > > If your goal is to simplify the implementation of the .has_route() > operation in drivers, I would instead sort pad0 and pad1 by value. That'd be another option to make the order deterministic for the driver. I'm fine with that as well. > > > Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> > > Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@xxxxxxxxxxxx> > > --- > > drivers/media/media-entity.c | 4 ++++ > > 1 file changed, 4 insertions(+) > > > > diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c > > index 3c0e7425c8983b45..33f00e35ccd92c6f 100644 > > --- a/drivers/media/media-entity.c > > +++ b/drivers/media/media-entity.c > > @@ -249,6 +249,10 @@ bool media_entity_has_route(struct media_entity *entity, unsigned int pad0, > > if (!entity->ops || !entity->ops->has_route) > > return true; > > > > + if (entity->pads[pad0].flags & MEDIA_PAD_FL_SOURCE > > + && entity->pads[pad1].flags & MEDIA_PAD_FL_SINK) > > + swap(pad0, pad1); > > + > > return entity->ops->has_route(entity, pad0, pad1); > > } > > EXPORT_SYMBOL_GPL(media_entity_has_route); > > -- > Regards, > > Laurent Pinchart -- Sakari Ailus sakari.ailus@xxxxxxxxxxxxxxx