-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This adds documenation describing the regulator machine interface. Signed-off-by: Liam Girdwood <lg@opensource.wolfsonmicro.com>
- Loading branch information
Liam Girdwood
committed
Jul 30, 2008
1 parent
e8695eb
commit e7d0fe3
Showing
1 changed file
with
101 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
Regulator Machine Driver Interface | ||
=================================== | ||
|
||
The regulator machine driver interface is intended for board/machine specific | ||
initialisation code to configure the regulator subsystem. Typical things that | ||
machine drivers would do are :- | ||
|
||
1. Regulator -> Device mapping. | ||
2. Regulator supply configuration. | ||
3. Power Domain constraint setting. | ||
|
||
|
||
|
||
1. Regulator -> device mapping | ||
============================== | ||
Consider the following machine :- | ||
|
||
Regulator-1 -+-> Regulator-2 --> [Consumer A @ 1.8 - 2.0V] | ||
| | ||
+-> [Consumer B @ 3.3V] | ||
|
||
The drivers for consumers A & B must be mapped to the correct regulator in | ||
order to control their power supply. This mapping can be achieved in machine | ||
initialisation code by calling :- | ||
|
||
int regulator_set_device_supply(const char *regulator, struct device *dev, | ||
const char *supply); | ||
|
||
and is shown with the following code :- | ||
|
||
regulator_set_device_supply("Regulator-1", devB, "Vcc"); | ||
regulator_set_device_supply("Regulator-2", devA, "Vcc"); | ||
|
||
This maps Regulator-1 to the 'Vcc' supply for Consumer B and maps Regulator-2 | ||
to the 'Vcc' supply for Consumer A. | ||
|
||
|
||
2. Regulator supply configuration. | ||
================================== | ||
Consider the following machine (again) :- | ||
|
||
Regulator-1 -+-> Regulator-2 --> [Consumer A @ 1.8 - 2.0V] | ||
| | ||
+-> [Consumer B @ 3.3V] | ||
|
||
Regulator-1 supplies power to Regulator-2. This relationship must be registered | ||
with the core so that Regulator-1 is also enabled when Consumer A enables it's | ||
supply (Regulator-2). | ||
|
||
This relationship can be register with the core via :- | ||
|
||
int regulator_set_supply(const char *regulator, const char *regulator_supply); | ||
|
||
In this example we would use the following code :- | ||
|
||
regulator_set_supply("Regulator-2", "Regulator-1"); | ||
|
||
Relationships can be queried by calling :- | ||
|
||
const char *regulator_get_supply(const char *regulator); | ||
|
||
|
||
3. Power Domain constraint setting. | ||
=================================== | ||
Each power domain within a system has physical constraints on voltage and | ||
current. This must be defined in software so that the power domain is always | ||
operated within specifications. | ||
|
||
Consider the following machine (again) :- | ||
|
||
Regulator-1 -+-> Regulator-2 --> [Consumer A @ 1.8 - 2.0V] | ||
| | ||
+-> [Consumer B @ 3.3V] | ||
|
||
This gives us two regulators and two power domains: | ||
|
||
Domain 1: Regulator-2, Consumer B. | ||
Domain 2: Consumer A. | ||
|
||
Constraints can be registered by calling :- | ||
|
||
int regulator_set_platform_constraints(const char *regulator, | ||
struct regulation_constraints *constraints); | ||
|
||
The example is defined as follows :- | ||
|
||
struct regulation_constraints domain_1 = { | ||
.min_uV = 3300000, | ||
.max_uV = 3300000, | ||
.valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
}; | ||
|
||
struct regulation_constraints domain_2 = { | ||
.min_uV = 1800000, | ||
.max_uV = 2000000, | ||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, | ||
.valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
}; | ||
|
||
regulator_set_platform_constraints("Regulator-1", &domain_1); | ||
regulator_set_platform_constraints("Regulator-2", &domain_2); |