Message ID | 1526654445-10702-7-git-send-email-jacopo+renesas@jmondi.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Jacopo, Thanks for your patch. On 2018-05-18 16:40:42 +0200, Jacopo Mondi wrote: > When running with media-controller link the parallel input > media entities with the VIN entities at 'complete' callback time. > > To create media links the v4l2_device should be registered first. > Check if the device is already registered, to avoid double registrations. > > Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org> Acked-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> > --- > drivers/media/platform/rcar-vin/rcar-core.c | 26 ++++++++++++++++++++++++-- > 1 file changed, 24 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c > index 745e8ee..d13bbcf 100644 > --- a/drivers/media/platform/rcar-vin/rcar-core.c > +++ b/drivers/media/platform/rcar-vin/rcar-core.c > @@ -478,6 +478,8 @@ static void rvin_parallel_subdevice_detach(struct rvin_dev *vin) > static int rvin_parallel_notify_complete(struct v4l2_async_notifier *notifier) > { > struct rvin_dev *vin = notifier_to_vin(notifier); > + struct media_entity *source; > + struct media_entity *sink; > int ret; > > ret = v4l2_device_register_subdev_nodes(&vin->v4l2_dev); > @@ -486,7 +488,26 @@ static int rvin_parallel_notify_complete(struct v4l2_async_notifier *notifier) > return ret; > } > > - return rvin_v4l2_register(vin); > + if (!video_is_registered(&vin->vdev)) { > + ret = rvin_v4l2_register(vin); > + if (ret < 0) > + return ret; > + } > + > + if (!vin->info->use_mc) > + return 0; > + > + /* If we're running with media-controller, link the subdevs. */ > + source = &vin->parallel->subdev->entity; > + sink = &vin->vdev.entity; > + > + ret = media_create_pad_link(source, vin->parallel->source_pad, > + sink, vin->parallel->sink_pad, 0); > + if (ret) > + vin_err(vin, "Error adding link from %s to %s: %d\n", > + source->name, sink->name, ret); > + > + return ret; > } > > static void rvin_parallel_notify_unbind(struct v4l2_async_notifier *notifier, > @@ -611,7 +632,8 @@ static int rvin_group_notify_complete(struct v4l2_async_notifier *notifier) > > /* Register all video nodes for the group. */ > for (i = 0; i < RCAR_VIN_NUM; i++) { > - if (vin->group->vin[i]) { > + if (vin->group->vin[i] && > + !video_is_registered(&vin->group->vin[i]->vdev)) { > ret = rvin_v4l2_register(vin->group->vin[i]); > if (ret) > return ret; > -- > 2.7.4 >
diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c index 745e8ee..d13bbcf 100644 --- a/drivers/media/platform/rcar-vin/rcar-core.c +++ b/drivers/media/platform/rcar-vin/rcar-core.c @@ -478,6 +478,8 @@ static void rvin_parallel_subdevice_detach(struct rvin_dev *vin) static int rvin_parallel_notify_complete(struct v4l2_async_notifier *notifier) { struct rvin_dev *vin = notifier_to_vin(notifier); + struct media_entity *source; + struct media_entity *sink; int ret; ret = v4l2_device_register_subdev_nodes(&vin->v4l2_dev); @@ -486,7 +488,26 @@ static int rvin_parallel_notify_complete(struct v4l2_async_notifier *notifier) return ret; } - return rvin_v4l2_register(vin); + if (!video_is_registered(&vin->vdev)) { + ret = rvin_v4l2_register(vin); + if (ret < 0) + return ret; + } + + if (!vin->info->use_mc) + return 0; + + /* If we're running with media-controller, link the subdevs. */ + source = &vin->parallel->subdev->entity; + sink = &vin->vdev.entity; + + ret = media_create_pad_link(source, vin->parallel->source_pad, + sink, vin->parallel->sink_pad, 0); + if (ret) + vin_err(vin, "Error adding link from %s to %s: %d\n", + source->name, sink->name, ret); + + return ret; } static void rvin_parallel_notify_unbind(struct v4l2_async_notifier *notifier, @@ -611,7 +632,8 @@ static int rvin_group_notify_complete(struct v4l2_async_notifier *notifier) /* Register all video nodes for the group. */ for (i = 0; i < RCAR_VIN_NUM; i++) { - if (vin->group->vin[i]) { + if (vin->group->vin[i] && + !video_is_registered(&vin->group->vin[i]->vdev)) { ret = rvin_v4l2_register(vin->group->vin[i]); if (ret) return ret;
When running with media-controller link the parallel input media entities with the VIN entities at 'complete' callback time. To create media links the v4l2_device should be registered first. Check if the device is already registered, to avoid double registrations. Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org> --- drivers/media/platform/rcar-vin/rcar-core.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-)