Linux Voltage and Current Regulator Framework
The intention is to allow systems to dynamically control regulator output in order to save power and prolong battery life. This applies to both voltage regulators (where voltage output is controllable) and current sinks (where current output is controllable).
The framework provides several interfaces :-
This uses a similar API to the kernel clock interface in that client or consumer drivers can get and put a regulator (like they can with clocks atm) and get/set voltage, current, mode, enable and disable. This should allow clients complete control over their supply voltage and current. This API also compiles out if not in use so drivers can be reused in systems with no PMIC power control.
This allows regulator drivers to register their regulators and provide operations to the core. It also has a notifier call chain for propagating regulator events to clients.
This API is for platform/device specific code and allows the creation of voltage/current domains (with constraints) for each regulator. It can provide regulator constraints that will prevent device damage through over voltage or over current caused by buggy client drivers. It also allows the creation of a regulator tree whereby some regulators are supplied by others (similar to a clock tree).
The framework also exports a lot of useful voltage/current/opmode data to userspace via sysfs. This could be used to help monitor device power consumption and status.