Message ID | 1497891889-8038-10-git-send-email-jacopo+renesas@jmondi.org (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Geert Uytterhoeven |
Headers | show |
Hi Jacopo, On 2017-06-19 19:04:46 +0200, Jacopo Mondi wrote: > Install async notifier for digital input on Gen3 when no other CSI-2 > input has been found connected. > > Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org> > --- > drivers/media/platform/rcar-vin/rcar-core.c | 23 +++++++++++++++++------ > 1 file changed, 17 insertions(+), 6 deletions(-) > > diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c > index 78ca232..6e5d84a 100644 > --- a/drivers/media/platform/rcar-vin/rcar-core.c > +++ b/drivers/media/platform/rcar-vin/rcar-core.c > @@ -866,17 +866,28 @@ static int rvin_group_graph_init(struct rvin_dev *vin) > } > > i = 0; > - for_each_set_bit(bit, &bitmap, RVIN_CSI_MAX) { > - subdevs[i++] = &vin->group->csi[bit].asd; > + for_each_set_bit(bit, &bitmap, RVIN_INPUT_MAX) { > + if (bit < RVIN_CSI_MAX) > + subdevs[i++] = &vin->group->csi[bit].asd; > + else if (bit == RVIN_PARALLEL_IN) { > + subdevs[0] = &vin->digital.asd; > + vin->notifier.num_subdevs = 1; > + } > } > > vin_dbg(vin, "Claimed %d subdevices for group\n", count); > > - vin->notifier.num_subdevs = count; > vin->notifier.subdevs = subdevs; > - vin->notifier.bound = rvin_group_notify_bound; > - vin->notifier.unbind = rvin_group_notify_unbind; > - vin->notifier.complete = rvin_group_notify_complete; > + if (!vin->notifier.num_subdevs) { > + vin->notifier.num_subdevs = count; > + vin->notifier.bound = rvin_group_notify_bound; > + vin->notifier.unbind = rvin_group_notify_unbind; > + vin->notifier.complete = rvin_group_notify_complete; > + } else { > + vin->notifier.bound = rvin_digital_notify_bound; > + vin->notifier.unbind = rvin_digital_notify_unbind; > + vin->notifier.complete = rvin_digital_notify_complete; > + } Hum, if there is a digital subdevice you ignore to look for CSI-2 devices? This feels wrong, it probably works (for now) since all CSI-2 subdevs are found by VIN0 since it's probed first and the digital input is only valid for VIN4 and VIN5 right? I hope to remedy this before the VIN Gen3 code is ready for upstream and the goal is that each VIN should look for the subdevices that effects it self. With that change this will break :-( > > mutex_unlock(&vin->group->lock); > > -- > 2.7.4 >
Hi Niklas, On Mon, Jun 19, 2017 at 09:51:15PM +0200, Niklas Söderlund wrote: > Hi Jacopo, > > On 2017-06-19 19:04:46 +0200, Jacopo Mondi wrote: > > Install async notifier for digital input on Gen3 when no other CSI-2 > > input has been found connected. > > > > Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org> > > --- > > drivers/media/platform/rcar-vin/rcar-core.c | 23 +++++++++++++++++------ > > 1 file changed, 17 insertions(+), 6 deletions(-) > > > > diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c > > index 78ca232..6e5d84a 100644 > > --- a/drivers/media/platform/rcar-vin/rcar-core.c > > +++ b/drivers/media/platform/rcar-vin/rcar-core.c > > @@ -866,17 +866,28 @@ static int rvin_group_graph_init(struct rvin_dev *vin) > > } > > > > i = 0; > > - for_each_set_bit(bit, &bitmap, RVIN_CSI_MAX) { > > - subdevs[i++] = &vin->group->csi[bit].asd; > > + for_each_set_bit(bit, &bitmap, RVIN_INPUT_MAX) { > > + if (bit < RVIN_CSI_MAX) > > + subdevs[i++] = &vin->group->csi[bit].asd; > > + else if (bit == RVIN_PARALLEL_IN) { > > + subdevs[0] = &vin->digital.asd; > > + vin->notifier.num_subdevs = 1; > > + } > > } > > > > vin_dbg(vin, "Claimed %d subdevices for group\n", count); > > > > - vin->notifier.num_subdevs = count; > > vin->notifier.subdevs = subdevs; > > - vin->notifier.bound = rvin_group_notify_bound; > > - vin->notifier.unbind = rvin_group_notify_unbind; > > - vin->notifier.complete = rvin_group_notify_complete; > > + if (!vin->notifier.num_subdevs) { > > + vin->notifier.num_subdevs = count; > > + vin->notifier.bound = rvin_group_notify_bound; > > + vin->notifier.unbind = rvin_group_notify_unbind; > > + vin->notifier.complete = rvin_group_notify_complete; > > + } else { > > + vin->notifier.bound = rvin_digital_notify_bound; > > + vin->notifier.unbind = rvin_digital_notify_unbind; > > + vin->notifier.complete = rvin_digital_notify_complete; > > + } > > Hum, if there is a digital subdevice you ignore to look for CSI-2 > devices? This feels wrong, it probably works (for now) since all CSI-2 > subdevs are found by VIN0 since it's probed first and the digital input > is only valid for VIN4 and VIN5 right? I hope to remedy this before the > VIN Gen3 code is ready for upstream and the goal is that each VIN should > look for the subdevices that effects it self. With that change this will > break :-( This is something I probably did not get: I thought parallel input and CSI-2 input where mutually exclusive. In particular, looking at chsel tables (from Table 26.14 on), where routing between CSI inputs and VIN channel is described, I did not get how parallel input fit in that picture. My best assumption now is that when a channel is NC it means it can be used for digital input? > > > > > mutex_unlock(&vin->group->lock); > > > > -- > > 2.7.4 > > > > -- > Regards, > Niklas Söderlund
diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c index 78ca232..6e5d84a 100644 --- a/drivers/media/platform/rcar-vin/rcar-core.c +++ b/drivers/media/platform/rcar-vin/rcar-core.c @@ -866,17 +866,28 @@ static int rvin_group_graph_init(struct rvin_dev *vin) } i = 0; - for_each_set_bit(bit, &bitmap, RVIN_CSI_MAX) { - subdevs[i++] = &vin->group->csi[bit].asd; + for_each_set_bit(bit, &bitmap, RVIN_INPUT_MAX) { + if (bit < RVIN_CSI_MAX) + subdevs[i++] = &vin->group->csi[bit].asd; + else if (bit == RVIN_PARALLEL_IN) { + subdevs[0] = &vin->digital.asd; + vin->notifier.num_subdevs = 1; + } } vin_dbg(vin, "Claimed %d subdevices for group\n", count); - vin->notifier.num_subdevs = count; vin->notifier.subdevs = subdevs; - vin->notifier.bound = rvin_group_notify_bound; - vin->notifier.unbind = rvin_group_notify_unbind; - vin->notifier.complete = rvin_group_notify_complete; + if (!vin->notifier.num_subdevs) { + vin->notifier.num_subdevs = count; + vin->notifier.bound = rvin_group_notify_bound; + vin->notifier.unbind = rvin_group_notify_unbind; + vin->notifier.complete = rvin_group_notify_complete; + } else { + vin->notifier.bound = rvin_digital_notify_bound; + vin->notifier.unbind = rvin_digital_notify_unbind; + vin->notifier.complete = rvin_digital_notify_complete; + } mutex_unlock(&vin->group->lock);
Install async notifier for digital input on Gen3 when no other CSI-2 input has been found connected. Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org> --- drivers/media/platform/rcar-vin/rcar-core.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-)