123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- 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);
|