public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: Sylwester Nawrocki <sylvester.nawrocki@gmail.com>
To: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Cc: Linux Media Mailing List <linux-media@vger.kernel.org>,
	Sylwester Nawrocki <s.nawrocki@samsung.com>,
	Magnus Damm <magnus.damm@gmail.com>,
	Sakari Ailus <sakari.ailus@iki.fi>,
	Prabhakar Lad <prabhakar.lad@ti.com>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Hans Verkuil <hverkuil@xs4all.nl>
Subject: Re: [PATCH v2] V4L2: add documentation for V4L2 clock helpers and asynchronous probing
Date: Mon, 24 Jun 2013 22:58:36 +0200	[thread overview]
Message-ID: <51C8B2FC.8040200@gmail.com> (raw)
In-Reply-To: <Pine.LNX.4.64.1306241311420.19735@axis700.grange>

Hi Guennadi,

On 06/24/2013 01:20 PM, Guennadi Liakhovetski wrote:
> Add documentation for the V4L2 clock and V4L2 asynchronous probing APIs
> to v4l2-framework.txt.
>
> Signed-off-by: Guennadi Liakhovetski<g.liakhovetski@gmx.de>
> ---
>
> v2: addressed comments by Hans and Laurent (thanks), including
> (a) language clean up
> (b) extended the V4L2 clock API section with an explanation, what special
> requirements V4L2 has and a mention of it being temporary until CCF is
> used by all
> (c) added an explanation of the use of -EPROBE_DEFER

Looks pretty good.

  Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>

Just one remark below...

>   Documentation/video4linux/v4l2-framework.txt |   73 +++++++++++++++++++++++++-
>   1 files changed, 71 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/video4linux/v4l2-framework.txt b/Documentation/video4linux/v4l2-framework.txt
> index b5e6347..00a9d21 100644
> --- a/Documentation/video4linux/v4l2-framework.txt
> +++ b/Documentation/video4linux/v4l2-framework.txt
> @@ -325,8 +325,27 @@ that width, height and the media bus pixel code are equal on both source and
>   sink of the link. Subdev drivers are also free to use this function to
>   perform the checks mentioned above in addition to their own checks.
>
> -A device (bridge) driver needs to register the v4l2_subdev with the
> -v4l2_device:
> +There are currently two ways to register subdevices with the V4L2 core. The
> +first (traditional) possibility is to have subdevices registered by bridge
> +drivers. This can be done when the bridge driver has the complete information
> +about subdevices connected to it and knows exactly when to register them. This
> +is typically the case for internal subdevices, like video data processing units
> +within SoCs or complex PCI(e) boards, camera sensors in USB cameras or connected
> +to SoCs, which pass information about them to bridge drivers, usually in their
> +platform data.
> +
> +There are however also situations where subdevices have to be registered
> +asynchronously to bridge devices. An example of such a configuration is a Device
> +Tree based systems where information about subdevices is made available to the

I think you need to substitute "is a Device Tree based systems" with either:
"are Device Tree based systems" or
"is a Device Tree based system".

> +system independently from the bridge devices, e.g. when subdevices are defined
> +in DT as I2C device nodes. The API used in this second case is described further
> +below.
> +
> +Using one or the other registration method only affects the probing process, the
> +run-time bridge-subdevice interaction is in both cases the same.
> +
> +In the synchronous case a device (bridge) driver needs to register the
> +v4l2_subdev with the v4l2_device:
>
>   	int err = v4l2_device_register_subdev(v4l2_dev, sd);
>
> @@ -393,6 +412,30 @@ controlled through GPIO pins. This distinction is only relevant when setting
>   up the device, but once the subdev is registered it is completely transparent.
>
>
> +In the asynchronous case subdevice probing can be invoked independently of the
> +bridge driver availability. The subdevice driver then has to verify whether all
> +the requirements for a successful probing are satisfied. This can include a
> +check for a master clock availability. If any of the conditions aren't satisfied
> +the driver might decide to return -EPROBE_DEFER to request further reprobing
> +attempts. Once all conditions are met the subdevice shall be registered using
> +the v4l2_async_register_subdev() function. Unregistration is performed using
> +the v4l2_async_unregister_subdev() call. Subdevices registered this way are
> +stored in a global list of subdevices, ready to be picked up by bridge drivers.
> +
> +Bridge drivers in turn have to register a notifier object with an array of
> +subdevice descriptors that the bridge device needs for its operation. This is
> +performed using the v4l2_async_notifier_register() call. To unregister the
> +notifier the driver has to call v4l2_async_notifier_unregister(). The former of
> +the two functions takes two arguments: a pointer to struct v4l2_device and a
> +pointer to struct v4l2_async_notifier. The latter contains a pointer to an array
> +of pointers to subdevice descriptors of type struct v4l2_async_subdev type. The
> +V4L2 core will then use these descriptors to match asynchronously registered
> +subdevices to them. If a match is detected the .bound() notifier callback is
> +called. After all subdevices have been located the .complete() callback is
> +called. When a subdevice is removed from the system the .unbind() method is
> +called. All three callbacks are optional.
> +
> +
>   V4L2 sub-device userspace API
>   -----------------------------
>
> @@ -1065,3 +1108,29 @@ available event type is 'class base + 1'.
>
>   An example on how the V4L2 events may be used can be found in the OMAP
>   3 ISP driver (drivers/media/platform/omap3isp).
> +
> +
> +V4L2 clocks
> +-----------
> +
> +Many subdevices, like camera sensors, TV decoders and encoders, need a clock
> +signal to be supplied by the system. Often this clock is supplied by the
> +respective bridge device. The Linux kernel provides a Common Clock Framework for
> +this purpose. However, it is not (yet) available on all architectures. Besides,
> +the nature of the multi-functional (clock, data + synchronisation, I2C control)
> +connection of subdevices to the system might impose special requirements on the
> +clock API usage. E.g. V4L2 has to support clock provider driver unregistration
> +while a subdevice driver is holding a reference to the clock. For these reasons
> +a V4L2 clock helper API has been developed and is provided to bridge and
> +subdevice drivers.
> +
> +The API consists of two parts: two functions to register and unregister a V4L2
> +clock source: v4l2_clk_register() and v4l2_clk_unregister() and calls to control
> +a clock object, similar to the respective generic clock API calls:
> +v4l2_clk_get(), v4l2_clk_put(), v4l2_clk_enable(), v4l2_clk_disable(),
> +v4l2_clk_get_rate(), and v4l2_clk_set_rate(). Clock suppliers have to provide
> +clock operations that will be called when clock users invoke respective API
> +methods.
> +
> +It is expected that once the CCF becomes available on all relevant
> +architectures this API will be removed.

Thanks,
Sylwester

  reply	other threads:[~2013-06-24 20:58 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-24 11:20 [PATCH v2] V4L2: add documentation for V4L2 clock helpers and asynchronous probing Guennadi Liakhovetski
2013-06-24 20:58 ` Sylwester Nawrocki [this message]
2013-06-25  9:22   ` Guennadi Liakhovetski

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=51C8B2FC.8040200@gmail.com \
    --to=sylvester.nawrocki@gmail.com \
    --cc=g.liakhovetski@gmx.de \
    --cc=hverkuil@xs4all.nl \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-media@vger.kernel.org \
    --cc=magnus.damm@gmail.com \
    --cc=prabhakar.lad@ti.com \
    --cc=s.hauer@pengutronix.de \
    --cc=s.nawrocki@samsung.com \
    --cc=sakari.ailus@iki.fi \
    /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