Re: [PATCH] V4L2: add documentation for V4L2 clock helpers and asynchronous probing

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

 



Hi Guennadi,

I had hoped to review this earlier this week, but I didn't get around it. But
better late than never...

Comments below.

On Mon June 17 2013 08:04:10 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@xxxxxx>
> ---
> 
> Hopefully we can commit the actual patches now, while we refine the 
> documentation.
> 
>  Documentation/video4linux/v4l2-framework.txt |   62 +++++++++++++++++++++++++-
>  1 files changed, 60 insertions(+), 2 deletions(-)
> 
> diff --git a/Documentation/video4linux/v4l2-framework.txt b/Documentation/video4linux/v4l2-framework.txt
> index a300b28..159a83a 100644
> --- a/Documentation/video4linux/v4l2-framework.txt
> +++ b/Documentation/video4linux/v4l2-framework.txt
> @@ -326,8 +326,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 pluggable boards, camera sensors in USB cameras or

s/pluggable boards/PCI(e) boards/

That's more concrete than 'pluggable boards' IMHO.

> +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 Device
> +Tree based systems, on which information

"a Device Tree based system where information"

> about subdevices is made available to
> +the system indpendently 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);
>  
> @@ -394,6 +413,25 @@ 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 subdevices register themselves using the
> +v4l2_async_register_subdev() function. Unregistration is performed, using the
> +v4l2_async_unregister_subdev() call. Subdevices registered this way are stored
> +on 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.

Is that true? Don't you need at least a bound or a complete callback?

Something probable needs to be said about when to return -EPROBE_DEFER in a
subdevice, and that any code that depends on the presence of subdevices in
a probe() function will be moved to the complete callback.

Also, what happens if one or more subdevices aren't found.

Ideally a simple example would be helpful.

> +
> +
>  V4L2 sub-device userspace API
>  -----------------------------
>  
> @@ -1061,3 +1099,23 @@ 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,

s/purpose, however,/purpose. However,/

> +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. 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 respective generic clock API calls: v4l2_clk_get(),

s/to/to the/

> +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 might be a good idea to mention that these v4l2 clocks will be replaced by the
regular common clock framework once it is widespread enough. At least, that's my
understanding.

Regards,

	Hans
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[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