Re: [PATCH] PCAP regulator driver (for 2.6.32).

From: Daniel Ribeiro
Date: Fri Jun 26 2009 - 02:04:44 EST


Em Sex, 2009-06-26 Ãs 00:37 +0100, Mark Brown escreveu:
> On Thu, Jun 25, 2009 at 05:29:53PM -0300, Daniel Ribeiro wrote:
> > + /*
> > + * The regulator framework doesn't like regulators which default
> > + * to ON at boot time, so we just disable it here (when it is safe).
> > + */
> > + if (pdev->id == VAUX2 || pdev->id == VAUX3)
> > + pcap_regulator_disable(rdev);
>
> No need to do this - the regulator framework is perfectly happy with
> regulators that are enabled at boot time and turning regulators that are
> actively being used off is likely to cause issues. Regulator drivers
> should just leave everything as they find it and leave it up to the core
> and machine drivers to make any changes.

Humm, I still see:

if (WARN(rdev->use_count <= 0,
"unbalanced disables for %s\n",
rdev->desc->name))
return -EIO;

So, the regulator is enabled at boot, but it can't be disabled because
use_count is 0. This is the same issue as twl4030-mmc, but instead of a
enable/disable pair on pxamci.c i opted to disable it at pcap's
regulator probe(). VAUX2 and VAUX3 are only used for MMC on all the
hardware that I know of, so it is safe.

Also, on regulator_init_complete() the regulator core disables all
regulators which have a use_count == 0. So, its kind of funny that if I
don't disable the regulator at boot(so mmc_core does enable() it), the
timing causes regulator_init_complete() to auto-disable the regulator
right when pxamci.c is probing the card.

I can move this hack to pxamci.c if you want me to (as David did for
twl4030), but this issue really should be fixed on regulator/core.c:

With the current code if you use a regulator which can be disabled as
the supplier for the CPU core, then the regulator framework will power
off the CPU at boot.

Maybe you should simply allow disable() if use_count is 0, and not
auto-disable() on regulator_init_complete() ?

--
Daniel Ribeiro

Attachment: signature.asc
Description: Esta =?ISO-8859-1?Q?=E9?= uma parte de mensagemassinada digitalmente