Hi Niklas, Jacopo cc: Steve Apologize for reviving this old thread. Just one question below. On 2018-05-24 10:14:52, Niklas Söderlund wrote: > Hi Jacopo, > Thanks for your patch. > > On 2018-05-18 16:40:39 +0200, Jacopo Mondi wrote: >> As CSI-2 subdevices are shared between several VIN instances, a shared >> notifier to collect the CSI-2 async subdevices is required. So far, the >> rcar-vin driver used the notifier of the last VIN instance to probe but >> with the forth-coming introduction of parallel input subdevices support >> in mc-compliant code path, each VIN may register its own notifier if any >> parallel subdevice is connected there. >> >> To avoid registering a notifier twice (once for parallel subdev and one >> for the CSI-2 subdevs) create a group notifier, shared by all the VIN >> instances. >> >> Signed-off-by: Jacopo Mondi <jacopo+renesas@xxxxxxxxxx> >> --- >> drivers/media/platform/rcar-vin/rcar-core.c | 39 +++++++++++------------------ >> drivers/media/platform/rcar-vin/rcar-vin.h | 7 +++--- >> 2 files changed, 18 insertions(+), 28 deletions(-) [..] >> + >> #define vin_to_source(vin) ((vin)->parallel->subdev) > This in particular I hate and at some point I hope to remove it or > move it to rcar-v4l2.c. :-) But that is a task for later and not > related to your patch-set. What about below patch excerpt (courtesy of Steve) which is currently under review in our tree? If we are on the same page here, we would happily contribute a patch to you based on below. Subject: [PATCH] media: rcar-vin: Generalize vin_to_source() Change the vin_to_source() macro to an inline function that will retrieve the source subdevice for both media-control and non media-control mode. Signed-off-by: Steve Longerbeam <steve_longerbeam@xxxxxxxxxx> --- [..] diff --git a/drivers/media/platform/rcar-vin/rcar-vin.h b/drivers/media/platform/rcar-vin/rcar-vin.h index 0b13b34d03e3..29d8c4a80c35 100644 --- a/drivers/media/platform/rcar-vin/rcar-vin.h +++ b/drivers/media/platform/rcar-vin/rcar-vin.h @@ -217,7 +217,21 @@ struct rvin_dev { v4l2_std_id std; }; -#define vin_to_source(vin) ((vin)->parallel->subdev) +static inline struct v4l2_subdev * +vin_to_source(struct rvin_dev *vin) +{ + if (vin->info->use_mc) { + struct media_pad *pad; + + pad = media_entity_remote_pad(&vin->pad); + if (!pad) + return NULL; + + return media_entity_to_v4l2_subdev(pad->entity); + } + + return vin->parallel->subdev; +} /* Debug */ #define vin_dbg(d, fmt, arg...) dev_dbg(d->dev, fmt, ##arg) Best regards, Eugeniu.