Re: [PATCH v4 14/14] media: Clarify v4l2-async subdevice addition API

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Helen,

Thanks for reviewing the series! It's a tough one,
with plenty of tiny details that are so easy to miss.

On Mon, 2021-02-01 at 17:17 -0300, Helen Koike wrote:
> 
> 
> On 1/28/21 9:09 AM, Sakari Ailus wrote:
> > From: Ezequiel Garcia <ezequiel@xxxxxxxxxxxxx>
> > 
> > Now that most users of v4l2_async_notifier_add_subdev have been converted,
> > let's fix the documentation so it's more clear how the v4l2-async API
> > should be used.
> > 
> > Document functions that drivers should use, and their purpose.
> > 
> > Signed-off-by: Ezequiel Garcia <ezequiel@xxxxxxxxxxxxx>
> > Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
> > Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx>
> > ---
> >  .../driver-api/media/v4l2-subdev.rst          | 41 ++++++++++++++++---
> >  include/media/v4l2-async.h                    | 15 +++++--
> >  2 files changed, 47 insertions(+), 9 deletions(-)
> > 
> > diff --git a/Documentation/driver-api/media/v4l2-subdev.rst b/Documentation/driver-api/media/v4l2-subdev.rst
> > index 0e82c77cf3e2..a6b82b9c8210 100644
> > --- a/Documentation/driver-api/media/v4l2-subdev.rst
> > +++ b/Documentation/driver-api/media/v4l2-subdev.rst
> > @@ -201,11 +201,42 @@ Before registering the notifier, bridge drivers must do two things:
> >  first, the notifier must be initialized using the
> >  :c:func:`v4l2_async_notifier_init`. Second, bridge drivers can then
> >  begin to form a list of subdevice descriptors that the bridge device
> > -needs for its operation. Subdevice descriptors are added to the notifier
> > -using the :c:func:`v4l2_async_notifier_add_subdev` call. This function
> > -takes two arguments: a pointer to struct :c:type:`v4l2_async_notifier`,
> > -and a pointer to the subdevice descripter, which is of type struct
> > -:c:type:`v4l2_async_subdev`.
> > +needs for its operation. Several functions are available, to add subdevice
> > +descriptors to a notifier, depending on the type of device and the needs of the
> > +driver.
> > +
> > +:c:func:`v4l2_async_register_subdev_sensor_common` is a helper function for
> > +sensor drivers registering their own async sub-device, but it also supports
> > +registering lens and flash devices. The function registers an async notifier for
> > +the sub-device which is unregistered with the async sub-device.
> > +
> > +:c:func:`v4l2_async_notifier_add_fwnode_remote_subdev`,
> > +:c:func:`v4l2_async_notifier_add_fwnode_subdev` and
> > +:c:func:`v4l2_async_notifier_add_i2c_subdev` are for bridge and ISP drivers for
> > +registering their async sub-devices.
> 
> If I understand correctly, these functions are for bridge and ISP drivers to tell
> the framework they are waiting asynchronously for another sub-device.
> I wonder if this could be re-phrased a bit to convey that.
> 

That's a good point. Any suggestions for how to phrase this better?

> Shouldn't __v4l2_async_notifier_add_subdev() and v4l2_async_notifier_parse_fwnode_endpoints()
> also be mentioned here?
> Or maybe just don't mention __v4l2_async_notifier_add_subdev() here to discourage its usage.
> 

The plan is to make __v4l2_async_notifier_add_subdev private or at least
not exported. We don't really want it to be part of the API.

> I see that v4l2_async_notifier_parse_fwnode_endpoints() is only used by sun6i_csi.c,
> I wonder if sun6i is a special case of if we could use one of those 3 functions instead
> and discourage the usage of v4l2_async_notifier_parse_fwnode_endpoints() as well.
> 

The plan here is to convert sun6i_csi.c and then just drop
v4l2_async_notifier_parse_fwnode_endpoints().

> > +
> > +These functions allocate an async sub-device descriptor which is of type struct
> > +:c:type:`v4l2_async_subdev` embedded in a driver-specific struct. The &struct
> > +:c:type:`v4l2_async_subdev` shall be the first member of this struct:
> > +
> > +.. code-block:: c
> > +
> > +       struct my_async_subdev {
> > +               struct v4l2_async_subdev asd;
> > +               ...
> > +       };
> > +
> > +       struct my_async_subdev *my_asd;
> > +       struct fwnode_handle *ep;
> > +
> > +       ...
> > +
> > +       my_asd = v4l2_async_notifier_add_fwnode_remote_subdev(&notifier, ep,
> > +                                                             struct my_async_subdev);
> > +       fwnode_handle_put(ep);
> > +
> > +       if (IS_ERR(asd))
> > +               return PTR_ERR(asd);
> >  
> >  The V4L2 core will then use these descriptors to match asynchronously
> >  registered subdevices to them. If a match is detected the ``.bound()``
> > diff --git a/include/media/v4l2-async.h b/include/media/v4l2-async.h
> > index b94f0a0a8042..6dac6cb6290f 100644
> > --- a/include/media/v4l2-async.h
> > +++ b/include/media/v4l2-async.h
> > @@ -128,7 +128,12 @@ void v4l2_async_debug_init(struct dentry *debugfs_dir);
> >   * @notifier: pointer to &struct v4l2_async_notifier
> >   *
> >   * This function initializes the notifier @asd_list. It must be called
> > - * before the first call to @v4l2_async_notifier_add_subdev.
> > + * before adding a subdevice to a notifier, using one of:
> > + * @v4l2_async_notifier_add_fwnode_remote_subdev,
> > + * @v4l2_async_notifier_add_fwnode_subdev,
> > + * @v4l2_async_notifier_add_i2c_subdev,
> > + * @v4l2_async_notifier_add_subdev or
> 
> v4l2_async_notifier_add_subdev() was renamed on patch 12/14.
> 
> Maybe just don't mention it here to discourage its usage?
> 

Indeed, I don't think we should mention __v4l2_async_notifier_add_subdev
anymore.

Thanks a lot!
Ezequiel




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux