From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
To: Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: linux-media@vger.kernel.org, Hans Verkuil <hverkuil@xs4all.nl>,
kernel@collabora.com,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>,
Jacopo Mondi <jacopo@jmondi.org>,
niklas.soderlund+renesas@ragnatech.se,
Helen Koike <helen.koike@collabora.com>,
Dafna Hirschfeld <dafna.hirschfeld@collabora.com>,
Hugues Fruchet <hugues.fruchet@st.com>,
Nicolas Ferre <nicolas.ferre@microchip.com>,
Yong Zhi <yong.zhi@intel.com>,
Sylwester Nawrocki <s.nawrocki@samsung.com>,
Maxime Ripard <mripard@kernel.org>,
Robert Foss <robert.foss@linaro.org>,
Philipp Zabel <p.zabel@pengutronix.de>,
Ezequiel Garcia <ezequiel@collabora.com>
Subject: Re: [PATCH v5 13/13] media: Clarify v4l2-async subdevice addition API
Date: Sat, 6 Feb 2021 09:29:54 +0100 [thread overview]
Message-ID: <20210206092954.1c75e92c@coco.lan> (raw)
In-Reply-To: <20210202135611.13920-14-sakari.ailus@linux.intel.com>
Em Tue, 2 Feb 2021 15:56:11 +0200
Sakari Ailus <sakari.ailus@linux.intel.com> escreveu:
> From: Ezequiel Garcia <ezequiel@collabora.com>
>
> 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@collabora.com>
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> ---
> .../driver-api/media/v4l2-subdev.rst | 48 +++++++++++++++----
> include/media/v4l2-async.h | 15 ++++--
> 2 files changed, 50 insertions(+), 13 deletions(-)
>
> diff --git a/Documentation/driver-api/media/v4l2-subdev.rst b/Documentation/driver-api/media/v4l2-subdev.rst
> index 0e82c77cf3e2..8b53da2f9c74 100644
> --- a/Documentation/driver-api/media/v4l2-subdev.rst
> +++ b/Documentation/driver-api/media/v4l2-subdev.rst
> @@ -197,15 +197,45 @@ unregister the notifier the driver has to call
> takes two arguments: a pointer to struct :c:type:`v4l2_device` and a
> pointer to struct :c:type:`v4l2_async_notifier`.
>
> -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`.
> +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. 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_notifier_add_fwnode_remote_subdev` and
> +:c:func:`v4l2_async_notifier_add_i2c_subdev` are for bridge and ISP drivers for
> +registering their async sub-devices with the notifier.
> +
> +:c:func:`v4l2_async_register_subdev_sensor_common` is a helper function for
> +sensor drivers registering their own async sub-device, but it also registers a
> +notifier and further registers async sub-devices for lens and flash devices
> +found in firmware. The notifier for the sub-device is unregistered with the
> +async sub-device.
> +
> +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:
There's absolutely no need anymore to use:
struct :c:type:`v4l2_async_subdev`
or
:c:func:`v4l2_async_notifier_add_fwnode_remote_subdev`
In a matter of fact, this can even cause troubles with newer versions of
Sphinx, as, after version 3.0, structs should be declared as:
:c:struct:`foo`
Our building system has gained a few years ago a Sphinx extension that
will automatically use the right markup, if all structs are declared
as:
struct foo
and all functions as:
bar()
So, the last two paragraphs could be simply:
v4l2_async_register_subdev_sensor_common() is a helper function for
sensor drivers registering their own async sub-device, but it also registers a
notifier and further registers async sub-devices for lens and flash devices
found in firmware. The notifier for the sub-device is unregistered with the
async sub-device.
These functions allocate an async sub-device descriptor which is of type
struct v4l2_async_subdev embedded in a driver-specific struct. The
struct v4l2_async_subdev shall be the first member of this struct:
PS.: I guess the automarkup.py would accept having something like:
very big line here with lots of words... struct
foo
IMHO, for people reading the text files, it is a lot easier to keep
"struct foo" at the same line, like:
very big line here with lots of words...
struct foo
> +
> +.. 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(¬ifier, 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 192a11bdc4ad..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_parse_fwnode_endpoints.
The markups here are wrong:
'@foo' is to be used for literal blocks. It won't produce
any cross-references. The right way to describe functions is to
write it as:
foo()
> */
> void v4l2_async_notifier_init(struct v4l2_async_notifier *notifier);
>
> @@ -262,9 +267,11 @@ void v4l2_async_notifier_unregister(struct v4l2_async_notifier *notifier);
> * sub-devices allocated for the purposes of the notifier but not the notifier
> * itself. The user is responsible for calling this function to clean up the
> * notifier after calling
> - * @v4l2_async_notifier_add_subdev,
> - * @v4l2_async_notifier_parse_fwnode_endpoints or
> - * @v4l2_fwnode_reference_parse_sensor_common.
> + * @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_parse_fwnode_endpoints.
> *
> * There is no harm from calling v4l2_async_notifier_cleanup in other
> * cases as long as its memory has been zeroed after it has been
Please send a followup patch.
Thanks,
Mauro
next prev parent reply other threads:[~2021-02-06 8:31 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-02 13:55 [PATCH v5 00/13] V4L2 Async notifier API cleanup Sakari Ailus
2021-02-02 13:55 ` [PATCH v5 01/13] media: v4l2-async: Clean v4l2_async_notifier_add_fwnode_remote_subdev Sakari Ailus
2021-02-02 13:56 ` [PATCH v5 02/13] media: atmel: Use v4l2_async_notifier_add_fwnode_remote_subdev Sakari Ailus
2021-02-02 13:56 ` [PATCH v5 03/13] media: stm32: " Sakari Ailus
2021-02-02 13:56 ` [PATCH v5 04/13] media: exynos4-is: " Sakari Ailus
2021-02-02 13:56 ` [PATCH v5 05/13] media: st-mipid02: " Sakari Ailus
2021-02-02 13:56 ` [PATCH v5 06/13] media: cadence: " Sakari Ailus
2021-02-02 13:56 ` [PATCH v5 07/13] media: marvell-ccic: Use v4l2_async_notifier_add_*_subdev Sakari Ailus
2021-02-02 13:56 ` [PATCH v5 08/13] media: renesas-ceu: " Sakari Ailus
2021-02-02 13:56 ` [PATCH v5 09/13] media: pxa-camera: " Sakari Ailus
2021-02-02 13:56 ` [PATCH v5 10/13] media: davinci: vpif_display: Remove unused v4l2-async code Sakari Ailus
2021-02-02 13:56 ` [PATCH v5 11/13] media: v4l2-async: Discourage use of v4l2_async_notifier_add_subdev Sakari Ailus
2021-02-06 8:15 ` Mauro Carvalho Chehab
2021-02-08 10:32 ` Sakari Ailus
2021-02-08 12:54 ` Mauro Carvalho Chehab
2021-02-08 14:40 ` Ezequiel Garcia
2021-02-02 13:56 ` [PATCH v5 12/13] media: v4l2-async: Improve v4l2_async_notifier_add_*_subdev() API Sakari Ailus
2021-02-02 13:56 ` [PATCH v5 13/13] media: Clarify v4l2-async subdevice addition API Sakari Ailus
2021-02-02 14:01 ` Helen Koike
2021-02-02 14:19 ` Sakari Ailus
2021-02-02 14:25 ` [PATCH v5.1 " Sakari Ailus
2021-02-02 15:23 ` Helen Koike
2021-02-02 18:15 ` Sakari Ailus
2021-02-06 8:29 ` Mauro Carvalho Chehab [this message]
2021-02-08 8:35 ` [PATCH v5 " Sakari Ailus
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210206092954.1c75e92c@coco.lan \
--to=mchehab+huawei@kernel.org \
--cc=dafna.hirschfeld@collabora.com \
--cc=ezequiel@collabora.com \
--cc=helen.koike@collabora.com \
--cc=hugues.fruchet@st.com \
--cc=hverkuil@xs4all.nl \
--cc=jacopo@jmondi.org \
--cc=kernel@collabora.com \
--cc=kieran.bingham+renesas@ideasonboard.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=mripard@kernel.org \
--cc=nicolas.ferre@microchip.com \
--cc=niklas.soderlund+renesas@ragnatech.se \
--cc=p.zabel@pengutronix.de \
--cc=robert.foss@linaro.org \
--cc=s.nawrocki@samsung.com \
--cc=sakari.ailus@linux.intel.com \
--cc=yong.zhi@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox