From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Cc: Hans Verkuil <hverkuil@xs4all.nl>,
Sylwester Nawrocki <s.nawrocki@samsung.com>,
Sylwester Nawrocki <sylvester.nawrocki@gmail.com>,
linux-media@vger.kernel.org, devicetree-discuss@lists.ozlabs.org,
Magnus Damm <magnus.damm@gmail.com>,
linux-sh@vger.kernel.org,
Mark Brown <broonie@opensource.wolfsonmicro.com>,
Stephen Warren <swarren@wwwdotorg.org>,
Arnd Bergmann <arnd@arndb.de>,
Grant Likely <grant.likely@secretlab.ca>
Subject: Re: [PATCH 05/14] media: add a V4L2 OF parser
Date: Wed, 10 Oct 2012 14:54 +0200 [thread overview]
Message-ID: <1744244.z7BseID5vc@avalon> (raw)
In-Reply-To: <Pine.LNX.4.64.1210081306240.12203@axis700.grange>
Hi Guennadi,
On Monday 08 October 2012 14:23:25 Guennadi Liakhovetski wrote:
> On Fri, 5 Oct 2012, Hans Verkuil wrote:
>
> [snip]
>
> > I think the soc_camera patches should be left out for now. I suspect that
> > by adding core support for async i2c handling first,
>
> Ok, let's think, what this meacs - async I2C in media / V4L2 core.
>
> The main reason for our probing order problem is the master clock,
> typically supplied from the camera bridge to I2C subdevices, which we only
> want to start when necessary, i.e. when accessing the subdevice. And the
> subdevice driver needs that clock running during its .probe() to be able
> to access and verify or configure the hardware. Our current solution is to
> not register I2C subdevices from the platform data, as is usual for all
> I2C devices, but from the bridge driver and only after it has switched on
> the master clock. After the subdevice driver has completed its probing we
> switch the clock back off until the subdevice has to be activated, e.g.
> for video capture.
>
> Also important - when we want to unregister the bridge driver we just also
> unregister the I2C device.
>
> Now, to reverse the whole thing and to allow I2C devices be registered as
> usual - via platform data or OF, first of all we have to teach I2C
> subdevice drivers to recognise the "too early" situation and request
> deferred probing in such a case. Then it will be reprobed after each new
> successful probe or unregister on the system. After the bridge driver has
> successfully probed the subdevice driver will be re-probed and at that
> time it should succeed. Now, there is a problem here too: who should
> switch on and off the master clock?
>
> If we do it from the bridge driver, we could install an I2C bus-notifier,
> _before_ the subdevice driver is probed, i.e. upon the
> BUS_NOTIFY_BIND_DRIVER event we could turn on the clock. If subdevice
> probing was successful, we can then wait for the BUS_NOTIFY_BOUND_DRIVER
> event to switch the clock back off. BUT - if the subdevice fails probing?
> How do we find out about that and turn the clock back off? There is no
> notification event for that... Possible solutions:
>
> 1. timer - ugly and unreliable.
> 2. add a "probing failed" notifier event to the device core - would this
> be accepted?
> 3. let the subdevice turn the master clock on and off for the duration of
> probing.
>
> My vote goes for (3). Ideally this should be done using the generic clock
> framework. But can we really expect all drivers and platforms to switch to
> it quickly enough? If not, we need a V4L2-specific callback from subdevice
> drivers to bridge drivers to turn the clock on and off. That's what I've
> done "temporarily" in this patch series for soc-camera.
I vote for (3) as well, using the generic clock framework. You're right that
we need an interim solution, as not all platforms will switch quickly enough.
I'm fine with that interim solution being a bit hackish, as long as we push
new drivers towards the right solution.
> Suppose we decide to do the same for V4L2 centrally - add call-backs. Then
> we can think what else we need to add to V4L2 to support asynchronous
> subdevice driver probing.
>
> 1. We'll have to create these V4L2 clock start and stop functions, that,
> supplied (in case of I2C) with client address and adapter number will find
> the correct v4l2_device instance and call its callbacks.
>
> 2. The I2C notifier. I'm not sure, whether this one should be common. Of
> common tasks we have to refcount the I2C adapter and register the
> subdevice. Then we'd have to call the bridge driver's callback. Is it
> worth it doing this centrally or rather allow individual drivers to do
> that themselves?
What about going through board code for platforms that don't support the
generic clock framework yet ? That's what the OMAP3 ISP driver does. DT
support would then require the generic clock framework.
> Also, ideally OF-compatible (I2C) drivers should run with no platform
> data, but soc-camera is using I2C device platform data intensively. To
> avoid modifying the soc-camera core and all drivers, I also trigger on the
> BUS_NOTIFY_BIND_DRIVER event and assign a reference to the dynamically
> created platform data to the I2C device. Would we also want to do this for
> all V4L2 bridge drivers? We could call this a "prepare" callback or
> something similar...
If that's going to be an interim solution only I'm fine with keeping it in
soc-camera.
> 3. Bridge driver unregistering. Here we have to put the subdevice driver
> back into the deferred-probe state... Ugliness alert: I'm doing this by
> unregistering and re-registering the I2C device... For that I also have to
> create a copy of devices I2C board-info data. Lovely, ain't it? This I'd
> be happy to move to the V4L2 core;-)
That's the ugly part. As soon as the I2C device starts using resources
provided by the bridge, those resources can't disappear behind the scene.
Reference counting must ensure that the bridge driver doesn't get removed. And
that's where it gets bad: the bridge uses resources provided by the I2C
driver, through the subdev operations. This creates circular dependencies that
we need to break somehow. I currently have no solution for that problem.
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2012-10-10 12:54 UTC|newest]
Thread overview: 97+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-27 14:07 [PATCH 00/14] V4L2 DT support Guennadi Liakhovetski
2012-09-27 14:07 ` [PATCH 01/14] i2c: add dummy inline functions for when CONFIG_OF_I2C(_MODULE) isn't defined Guennadi Liakhovetski
2012-09-27 14:07 ` [PATCH 02/14] of: add a dummy inline function for when CONFIG_OF is not defined Guennadi Liakhovetski
2012-09-28 11:05 ` [PATCH 15/14] OF: define of_*_cmp() macros also if CONFIG_OF isn't set Guennadi Liakhovetski
2012-09-27 14:07 ` [PATCH 04/14] media: add V4L2 DT binding documentation Guennadi Liakhovetski
2012-10-01 20:45 ` Sylwester Nawrocki
[not found] ` <1348754853-28619-5-git-send-email-g.liakhovetski-Mmb7MZpHnFY@public.gmane.org>
2012-10-02 14:15 ` Rob Herring
2012-10-02 14:33 ` Guennadi Liakhovetski
2012-10-03 20:54 ` Rob Herring
2012-10-05 9:43 ` Guennadi Liakhovetski
2012-10-05 11:31 ` Hans Verkuil
2012-10-05 11:37 ` Guennadi Liakhovetski
2012-10-08 20:00 ` Stephen Warren
2012-10-08 21:00 ` Laurent Pinchart
2012-10-08 21:14 ` Guennadi Liakhovetski
2012-10-09 9:21 ` Hans Verkuil
2012-10-09 9:29 ` Guennadi Liakhovetski
2012-10-05 15:10 ` Sascha Hauer
2012-10-05 15:41 ` Guennadi Liakhovetski
2012-10-05 16:02 ` Sascha Hauer
2012-10-08 7:58 ` Guennadi Liakhovetski
2012-10-10 8:40 ` Sascha Hauer
2012-10-10 8:51 ` Mark Brown
2012-10-10 9:21 ` Sascha Hauer
2012-10-10 10:46 ` Mark Brown
2012-10-08 20:12 ` Stephen Warren
2012-09-27 14:07 ` [PATCH 05/14] media: add a V4L2 OF parser Guennadi Liakhovetski
2012-10-01 21:37 ` Sylwester Nawrocki
2012-10-02 9:49 ` Guennadi Liakhovetski
[not found] ` <Pine.LNX.4.64.1210021142210.15778-0199iw4Nj15frtckUFj5Ag@public.gmane.org>
2012-10-02 10:13 ` Sylwester Nawrocki
2012-10-02 11:04 ` Guennadi Liakhovetski
2012-10-05 10:41 ` Hans Verkuil
2012-10-05 10:58 ` Guennadi Liakhovetski
2012-10-05 11:23 ` Hans Verkuil
2012-10-05 11:35 ` Guennadi Liakhovetski
2012-10-08 12:23 ` Guennadi Liakhovetski
2012-10-08 13:48 ` Hans Verkuil
2012-10-08 14:30 ` Guennadi Liakhovetski
2012-10-08 14:53 ` Hans Verkuil
2012-10-08 15:15 ` Guennadi Liakhovetski
2012-10-08 15:41 ` Hans Verkuil
2012-10-08 15:53 ` Guennadi Liakhovetski
[not found] ` <Pine.LNX.4.64.1210081748390.14454-0199iw4Nj15frtckUFj5Ag@public.gmane.org>
2012-10-08 16:00 ` Guennadi Liakhovetski
2012-10-10 13:22 ` Laurent Pinchart
2012-10-10 13:18 ` Laurent Pinchart
2012-10-10 16:50 ` Stephen Warren
2012-10-10 22:51 ` Laurent Pinchart
2012-10-11 16:15 ` Stephen Warren
2012-10-10 13:12 ` Laurent Pinchart
2012-10-10 12:54 ` Laurent Pinchart [this message]
2012-10-10 13:45 ` Mauro Carvalho Chehab
2012-10-10 14:48 ` Laurent Pinchart
2012-10-10 14:57 ` Mauro Carvalho Chehab
2012-10-10 15:15 ` Laurent Pinchart
2012-10-11 19:48 ` Sakari Ailus
2012-10-13 0:16 ` Guennadi Liakhovetski
2012-10-05 18:30 ` Sylwester Nawrocki
2012-10-05 18:45 ` Mark Brown
2012-10-08 9:40 ` Guennadi Liakhovetski
2012-10-09 10:34 ` Sylwester Nawrocki
2012-10-09 11:00 ` Hans Verkuil
2012-10-10 13:25 ` Laurent Pinchart
2012-10-10 20:23 ` Sylwester Nawrocki
2012-10-10 20:32 ` Guennadi Liakhovetski
2012-10-10 21:12 ` Sylwester Nawrocki
2012-10-10 23:05 ` Laurent Pinchart
[not found] ` <5075D947.3080903-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-10-10 22:58 ` Laurent Pinchart
2012-10-08 21:30 ` Laurent Pinchart
2012-10-08 10:03 ` Sylwester Nawrocki
2012-09-27 14:07 ` [PATCH 06/14] media: soc-camera: prepare for asynchronous client probing Guennadi Liakhovetski
2012-09-27 14:07 ` [PATCH 07/14] media: soc-camera: support deferred probing of clients Guennadi Liakhovetski
2013-04-10 10:38 ` Barry Song
[not found] ` <CAGsJ_4yUY6PE0NWZ9yaOLFmRb3O-HL55=w7Y6muwL0YbkJtP0Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-04-10 12:06 ` Guennadi Liakhovetski
2013-04-10 13:53 ` Barry Song
2013-04-10 13:56 ` Mark Brown
2013-04-10 14:00 ` Barry Song
2013-04-10 14:03 ` Guennadi Liakhovetski
2013-04-10 14:30 ` Barry Song
2013-04-10 14:43 ` Guennadi Liakhovetski
2013-04-10 15:02 ` Barry Song
2012-09-27 14:07 ` [PATCH 08/14] media: soc-camera: use managed devm_regulator_bulk_get() Guennadi Liakhovetski
2012-09-27 17:38 ` Sachin Kamat
2012-09-27 14:07 ` [PATCH 09/14] media: mt9t112: support deferred probing Guennadi Liakhovetski
[not found] ` <1348754853-28619-1-git-send-email-g.liakhovetski-Mmb7MZpHnFY@public.gmane.org>
2012-09-27 14:07 ` [PATCH 03/14] OF: make a function pointer argument const Guennadi Liakhovetski
2012-09-27 14:07 ` [PATCH 10/14] media: soc-camera: support OF cameras Guennadi Liakhovetski
2012-10-05 19:11 ` Sylwester Nawrocki
2012-10-08 8:37 ` Guennadi Liakhovetski
2012-10-08 9:28 ` Sylwester Nawrocki
2013-04-08 9:19 ` Barry Song
[not found] ` <CAGsJ_4zYvF-U0_ETs9EP8i+bOJiJLkXWrJdMNnW_sXU-QwnXQw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-04-08 11:21 ` Guennadi Liakhovetski
2013-04-08 11:49 ` Barry Song
2012-09-27 14:07 ` [PATCH 11/14] media: sh-mobile-ceu-camera: runtime PM suspending doesn't have to be synchronous Guennadi Liakhovetski
2012-09-27 14:07 ` [PATCH 12/14] media: sh-mobile-ceu-camera: add primitive OF support Guennadi Liakhovetski
2012-09-27 14:07 ` [PATCH 13/14] media: sh-mobile-ceu-driver: support max width and height in DT Guennadi Liakhovetski
2012-09-27 14:07 ` [PATCH 14/14] media: sh_mobile_ceu_camera: support all standard V4L2 DT properties Guennadi Liakhovetski
2012-10-05 12:32 ` [PATCH 00/14] V4L2 DT support Sylwester Nawrocki
2012-10-05 14:41 ` 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=1744244.z7BseID5vc@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=arnd@arndb.de \
--cc=broonie@opensource.wolfsonmicro.com \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=g.liakhovetski@gmx.de \
--cc=grant.likely@secretlab.ca \
--cc=hverkuil@xs4all.nl \
--cc=linux-media@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=s.nawrocki@samsung.com \
--cc=swarren@wwwdotorg.org \
--cc=sylvester.nawrocki@gmail.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;
as well as URLs for NNTP newsgroup(s).