Re: [patch 2.6.29-rc8 regulator-next] regulator: init fixes (v4)

From: David Brownell
Date: Sun Mar 15 2009 - 00:05:45 EST


On Saturday 14 March 2009, Mark Brown wrote:
> On Sat, Mar 14, 2009 at 05:25:35PM -0700, David Brownell wrote:
>
> > + } else if (ops->is_enabled) {
> > + /* ... if the bootloader left it on, drivers need a
> > + * nonzero enable count else it can't be disabled.
> > + */
> > + ret = ops->is_enabled(rdev);
> > + if (ret > 0)
> > + rdev->use_count = 1;
> > + ret = 0;
>
> This means that drivers that do balanced enables and disables will never
> be able to cause the regulator to actually be disabled since there will
> always be this extra reference count there.

That's already true for every regulator for which the "boot_on"
flag was set ... nothing changes. Except that things act the
same now regardless of whether Linux or the bootloader enabled
the regulator in the first place; win! :)

On the other hand, every driver using a regulator for which that
flag could have be set (== ALL of them) needs to be able to cope
with the regulator having been enabled when the device probe()
was called. It's not exactly hard to check if it was enabled, then
act accordingly, in the typical "single consumer of the regulator"
case.


> Without this patch what'll
> happen with those drivers is that they'll do an enable then later on
> when the last one disables its supply the reference count will fall to
> zero and the regulator will be disabled.

If they're prepared to work with a regulator enabled at boot time
by either the bootloader or (as its proxy) Linux, they'll first look
to see if the regulator is enabled.

Of course, trying to share a regulator that's set up like that can
bring its own joys. This patch doesn't change that issue, but it
does get rid of one nasty initialization problem.


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/