Message ID | 20171026075342.5760-17-sakari.ailus@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 2017-10-26 10:53:26 +0300, Sakari Ailus wrote: > The information on how many async sub-devices would be bindable to a > notifier is typically dependent on information from platform firmware and > it's not driver's business to be aware of that. > > Many V4L2 main drivers are perfectly usable (and useful) without async > sub-devices and so if there aren't any around, just proceed call the > notifier's complete callback immediately without registering the notifier > itself. > > If a driver needs to check whether there are async sub-devices available, > it can be done by inspecting the notifier's num_subdevs field which tells > the number of async sub-devices. > > Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> > Acked-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> > --- > drivers/media/v4l2-core/v4l2-async.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/v4l2-core/v4l2-async.c b/drivers/media/v4l2-core/v4l2-async.c > index 46db85685894..1b536d68cedf 100644 > --- a/drivers/media/v4l2-core/v4l2-async.c > +++ b/drivers/media/v4l2-core/v4l2-async.c > @@ -180,14 +180,22 @@ int v4l2_async_notifier_register(struct v4l2_device *v4l2_dev, > int ret; > int i; > > - if (!v4l2_dev || !notifier->num_subdevs || > - notifier->num_subdevs > V4L2_MAX_SUBDEVS) > + if (!v4l2_dev || notifier->num_subdevs > V4L2_MAX_SUBDEVS) > return -EINVAL; > > notifier->v4l2_dev = v4l2_dev; > INIT_LIST_HEAD(¬ifier->waiting); > INIT_LIST_HEAD(¬ifier->done); > > + if (!notifier->num_subdevs) { > + int ret; > + > + ret = v4l2_async_notifier_call_complete(notifier); > + notifier->v4l2_dev = NULL; > + > + return ret; > + } > + > for (i = 0; i < notifier->num_subdevs; i++) { > asd = notifier->subdevs[i]; > > -- > 2.11.0 >
Hi, On Thu, Oct 26, 2017 at 10:53:26AM +0300, Sakari Ailus wrote: > The information on how many async sub-devices would be bindable to a > notifier is typically dependent on information from platform firmware and > it's not driver's business to be aware of that. > > Many V4L2 main drivers are perfectly usable (and useful) without async > sub-devices and so if there aren't any around, just proceed call the > notifier's complete callback immediately without registering the notifier > itself. > > If a driver needs to check whether there are async sub-devices available, > it can be done by inspecting the notifier's num_subdevs field which tells > the number of async sub-devices. > > Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> > Acked-by: Hans Verkuil <hans.verkuil@cisco.com> > --- Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk> -- Sebastian > drivers/media/v4l2-core/v4l2-async.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/v4l2-core/v4l2-async.c b/drivers/media/v4l2-core/v4l2-async.c > index 46db85685894..1b536d68cedf 100644 > --- a/drivers/media/v4l2-core/v4l2-async.c > +++ b/drivers/media/v4l2-core/v4l2-async.c > @@ -180,14 +180,22 @@ int v4l2_async_notifier_register(struct v4l2_device *v4l2_dev, > int ret; > int i; > > - if (!v4l2_dev || !notifier->num_subdevs || > - notifier->num_subdevs > V4L2_MAX_SUBDEVS) > + if (!v4l2_dev || notifier->num_subdevs > V4L2_MAX_SUBDEVS) > return -EINVAL; > > notifier->v4l2_dev = v4l2_dev; > INIT_LIST_HEAD(¬ifier->waiting); > INIT_LIST_HEAD(¬ifier->done); > > + if (!notifier->num_subdevs) { > + int ret; > + > + ret = v4l2_async_notifier_call_complete(notifier); > + notifier->v4l2_dev = NULL; > + > + return ret; > + } > + > for (i = 0; i < notifier->num_subdevs; i++) { > asd = notifier->subdevs[i]; > > -- > 2.11.0 >
diff --git a/drivers/media/v4l2-core/v4l2-async.c b/drivers/media/v4l2-core/v4l2-async.c index 46db85685894..1b536d68cedf 100644 --- a/drivers/media/v4l2-core/v4l2-async.c +++ b/drivers/media/v4l2-core/v4l2-async.c @@ -180,14 +180,22 @@ int v4l2_async_notifier_register(struct v4l2_device *v4l2_dev, int ret; int i; - if (!v4l2_dev || !notifier->num_subdevs || - notifier->num_subdevs > V4L2_MAX_SUBDEVS) + if (!v4l2_dev || notifier->num_subdevs > V4L2_MAX_SUBDEVS) return -EINVAL; notifier->v4l2_dev = v4l2_dev; INIT_LIST_HEAD(¬ifier->waiting); INIT_LIST_HEAD(¬ifier->done); + if (!notifier->num_subdevs) { + int ret; + + ret = v4l2_async_notifier_call_complete(notifier); + notifier->v4l2_dev = NULL; + + return ret; + } + for (i = 0; i < notifier->num_subdevs; i++) { asd = notifier->subdevs[i];