RE: [RFC] Regulator state after regulator_get

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

 



Hi,

 > -----Original Message-----
 > From: Sakari Ailus [mailto:sakari.ailus@xxxxxxxxx]
 > Sent: 28. huhtikuuta 2011 12:34
 > To: Jokiniemi Kalle (Nokia-SD/Tampere)
 > Cc: broonie@xxxxxxxxxxxxxxxxxxxxxxxxxxx; lrg@xxxxxxxxxxxxxxx;
 > mchehab@xxxxxxxxxxxxx; svarbatov@xxxxxxxxxx; saaguirre@xxxxxx;
 > grosikopulos@xxxxxxxxxx; Zutshi Vimarsh (Nokia-SD/Helsinki); linux-
 > kernel@xxxxxxxxxxxxxxx; linux-media@xxxxxxxxxxxxxxx; Laurent Pinchart
 > Subject: Re: [RFC] Regulator state after regulator_get
 > 
 > Hello,
 > 
 > Jokiniemi Kalle (Nokia-SD/Tampere) wrote:
 > > Hello regulator FW and OMAP3 ISP fellows,
 > >
 > > I'm currently optimizing power management for Nokia N900 MeeGo DE
 > release,
 > > and found an issue with how regulators are handled at boot.
 > >
 > > The N900 uses VAUX2 regulator in OMAP3430 to power the CSIb IO complex
 > > that is used by the camera. While implementing regulator FW support to
 > > handle this regulator in the camera driver I noticed a problem with the
 > > regulator init sequence:
 > >
 > > If the device driver using the regulator does not enable and disable the
 > > regulator after regulator_get, the regulator is left in the state that it was
 > > after bootloader. In case of N900 this is a problem as the regulator is left
 > > on to leak current. Of course there is the option to let regulator FW disable
 > > all unused regulators, but this will break the N900 functionality, as the
 > > regulator handling is not in place for many drivers.
 > >
 > > I found couple of solutions to this:
 > > 1. reset all regulators that have users (regulator_get is called on them) with
 > > a regulator_enable/disable cycle within the regulator FW.
 > > 2. enable/disable the specific vdds_csib regulator in the omap3isp driver
 > > to reset this one specific regulator to disabled state.
 > >
 > > So, please share comments on which approach is more appropriate to take?
 > > Or maybe there is option 3?
 > >
 > > Here are example code for the two options (based on .37 kernel, will update
 > > on top of appropriate tree once right solution is agreed):
 > >
 > > Option1:
 > >
 > > If a consumer device of a regulator gets a regulator, but
 > > does not enable/disable it during probe, the regulator may
 > > be left active from boot, even though it is not needed. If
 > > it were needed it would be enabled by the consumer device.
 > >
 > > So reset the regulator on first regulator_get call to make
 > > sure that any regulator that has users is not left active
 > > needlessly.
 > 
 > I'm not an expert in the regulator framework, but I'd think that one
 > should be able to assume a regulator is in a sane state after boot. The
 > fact that the regulator is enabled when it has no users should likely be
 > fixed in the boot loader. Is that an option?

Not an option, the device has shipped and there will be no updates to
the bootloader.

 > 
 > Does the problem exist in other boards beyond N900?

Don't know, I currently have only N900 to test with.

 > 
 > Another alternative to the first option you proposed could be to add a
 > flags field to regulator_consumer_supply, and use a flag to recognise
 > regulators which need to be disabled during initialisation. The flag
 > could be set by using a new macro e.g. REGULATOR_SUPPLY_NASTY() when
 > defining the regulator.

This sounds like a good option actually. Liam, Mark, any opinions?

- Kalle

 > 
 > Just my 0,05 euros. ;-)
 > 
 > Cc Laurent Pinchart.
 > 
 > Regards,
 > 
 > --
 > Sakari Ailus
 > sakari.ailus@xxxxxxxxxxxxxxxxxxxxxxxxxx
--
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