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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.