123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- .. Copyright 2007-2008 Wolfson Microelectronics
- .. This documentation is free software; you can redistribute
- .. it and/or modify it under the terms of the GNU General Public
- .. License version 2 as published by the Free Software Foundation.
- =================================
- Voltage and current regulator API
- =================================
- :Author: Liam Girdwood
- :Author: Mark Brown
- Introduction
- ============
- This framework is designed to provide a standard kernel interface to
- control voltage and current regulators.
- The intention is to allow systems to dynamically control regulator power
- 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 limit is controllable).
- Note that additional (and currently more complete) documentation is
- available in the Linux kernel source under
- ``Documentation/power/regulator``.
- Glossary
- --------
- The regulator API uses a number of terms which may not be familiar:
- Regulator
- Electronic device that supplies power to other devices. Most regulators
- can enable and disable their output and some can also control their
- output voltage or current.
- Consumer
- Electronic device which consumes power provided by a regulator. These
- may either be static, requiring only a fixed supply, or dynamic,
- requiring active management of the regulator at runtime.
- Power Domain
- The electronic circuit supplied by a given regulator, including the
- regulator and all consumer devices. The configuration of the regulator
- is shared between all the components in the circuit.
- Power Management Integrated Circuit (PMIC)
- An IC which contains numerous regulators and often also other
- subsystems. In an embedded system the primary PMIC is often equivalent
- to a combination of the PSU and southbridge in a desktop system.
- Consumer driver interface
- =========================
- This offers a similar API to the kernel clock framework. Consumer
- drivers use `get <#API-regulator-get>`__ and
- `put <#API-regulator-put>`__ operations to acquire and release
- regulators. Functions are provided to `enable <#API-regulator-enable>`__
- and `disable <#API-regulator-disable>`__ the regulator and to get and
- set the runtime parameters of the regulator.
- When requesting regulators consumers use symbolic names for their
- supplies, such as "Vcc", which are mapped into actual regulator devices
- by the machine interface.
- A stub version of this API is provided when the regulator framework is
- not in use in order to minimise the need to use ifdefs.
- Enabling and disabling
- ----------------------
- The regulator API provides reference counted enabling and disabling of
- regulators. Consumer devices use the :c:func:`regulator_enable()` and
- :c:func:`regulator_disable()` functions to enable and disable
- regulators. Calls to the two functions must be balanced.
- Note that since multiple consumers may be using a regulator and machine
- constraints may not allow the regulator to be disabled there is no
- guarantee that calling :c:func:`regulator_disable()` will actually
- cause the supply provided by the regulator to be disabled. Consumer
- drivers should assume that the regulator may be enabled at all times.
- Configuration
- -------------
- Some consumer devices may need to be able to dynamically configure their
- supplies. For example, MMC drivers may need to select the correct
- operating voltage for their cards. This may be done while the regulator
- is enabled or disabled.
- The :c:func:`regulator_set_voltage()` and
- :c:func:`regulator_set_current_limit()` functions provide the primary
- interface for this. Both take ranges of voltages and currents, supporting
- drivers that do not require a specific value (eg, CPU frequency scaling
- normally permits the CPU to use a wider range of supply voltages at lower
- frequencies but does not require that the supply voltage be lowered). Where
- an exact value is required both minimum and maximum values should be
- identical.
- Callbacks
- ---------
- Callbacks may also be registered for events such as regulation failures.
- Regulator driver interface
- ==========================
- Drivers for regulator chips register the regulators with the regulator
- core, providing operations structures to the core. A notifier interface
- allows error conditions to be reported to the core.
- Registration should be triggered by explicit setup done by the platform,
- supplying a struct :c:type:`regulator_init_data` for the regulator
- containing constraint and supply information.
- Machine interface
- =================
- This interface provides a way to define how regulators are connected to
- consumers on a given system and what the valid operating parameters are
- for the system.
- Supplies
- --------
- Regulator supplies are specified using struct
- :c:type:`regulator_consumer_supply`. This is done at driver registration
- time as part of the machine constraints.
- Constraints
- -----------
- As well as defining the connections the machine interface also provides
- constraints defining the operations that clients are allowed to perform
- and the parameters that may be set. This is required since generally
- regulator devices will offer more flexibility than it is safe to use on
- a given system, for example supporting higher supply voltages than the
- consumers are rated for.
- This is done at driver registration time` by providing a
- struct :c:type:`regulation_constraints`.
- The constraints may also specify an initial configuration for the
- regulator in the constraints, which is particularly useful for use with
- static consumers.
- API reference
- =============
- Due to limitations of the kernel documentation framework and the
- existing layout of the source code the entire regulator API is
- documented here.
- .. kernel-doc:: include/linux/regulator/consumer.h
- :internal:
- .. kernel-doc:: include/linux/regulator/machine.h
- :internal:
- .. kernel-doc:: include/linux/regulator/driver.h
- :internal:
- .. kernel-doc:: drivers/regulator/core.c
- :export:
|