linux/Documentation/DocBook/regulator.tmpl
<<
>>
Prefs
   1<?xml version="1.0" encoding="UTF-8"?>
   2<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
   3        "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>
   4
   5<book id="regulator-api">
   6 <bookinfo>
   7  <title>Voltage and current regulator API</title>
   8
   9  <authorgroup>
  10   <author>
  11    <firstname>Liam</firstname>
  12    <surname>Girdwood</surname>
  13    <affiliation>
  14     <address>
  15      <email>lrg@slimlogic.co.uk</email>
  16     </address>
  17    </affiliation>
  18   </author>
  19   <author>
  20    <firstname>Mark</firstname>
  21    <surname>Brown</surname>
  22    <affiliation>
  23     <orgname>Wolfson Microelectronics</orgname>
  24     <address>
  25      <email>broonie@opensource.wolfsonmicro.com</email>
  26     </address>
  27    </affiliation>
  28   </author>
  29  </authorgroup>
  30
  31  <copyright>
  32   <year>2007-2008</year>
  33   <holder>Wolfson Microelectronics</holder>
  34  </copyright>
  35  <copyright>
  36   <year>2008</year>
  37   <holder>Liam Girdwood</holder>
  38  </copyright>
  39
  40  <legalnotice>
  41   <para>
  42     This documentation is free software; you can redistribute
  43     it and/or modify it under the terms of the GNU General Public
  44     License version 2 as published by the Free Software Foundation.
  45   </para>
  46
  47   <para>
  48     This program is distributed in the hope that it will be
  49     useful, but WITHOUT ANY WARRANTY; without even the implied
  50     warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  51     See the GNU General Public License for more details.
  52   </para>
  53
  54   <para>
  55     You should have received a copy of the GNU General Public
  56     License along with this program; if not, write to the Free
  57     Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  58     MA 02111-1307 USA
  59   </para>
  60
  61   <para>
  62     For more details see the file COPYING in the source
  63     distribution of Linux.
  64   </para>
  65  </legalnotice>
  66 </bookinfo>
  67
  68<toc></toc>
  69
  70  <chapter id="intro">
  71    <title>Introduction</title>
  72    <para>
  73        This framework is designed to provide a standard kernel
  74        interface to control voltage and current regulators.
  75    </para>
  76    <para>
  77        The intention is to allow systems to dynamically control
  78        regulator power output in order to save power and prolong
  79        battery life.  This applies to both voltage regulators (where
  80        voltage output is controllable) and current sinks (where current
  81        limit is controllable).
  82    </para>
  83    <para>
  84        Note that additional (and currently more complete) documentation
  85        is available in the Linux kernel source under
  86        <filename>Documentation/power/regulator</filename>.
  87    </para>
  88
  89    <sect1 id="glossary">
  90       <title>Glossary</title>
  91       <para>
  92        The regulator API uses a number of terms which may not be
  93        familiar:
  94       </para>
  95       <glossary>
  96
  97         <glossentry>
  98           <glossterm>Regulator</glossterm>
  99           <glossdef>
 100             <para>
 101        Electronic device that supplies power to other devices.  Most
 102        regulators can enable and disable their output and some can also
 103        control their output voltage or current.
 104             </para>
 105           </glossdef>
 106         </glossentry>
 107
 108         <glossentry>
 109           <glossterm>Consumer</glossterm>
 110           <glossdef>
 111             <para>
 112        Electronic device which consumes power provided by a regulator.
 113        These may either be static, requiring only a fixed supply, or
 114        dynamic, requiring active management of the regulator at
 115        runtime.
 116             </para>
 117           </glossdef>
 118         </glossentry>
 119
 120         <glossentry>
 121           <glossterm>Power Domain</glossterm>
 122           <glossdef>
 123             <para>
 124        The electronic circuit supplied by a given regulator, including
 125        the regulator and all consumer devices.  The configuration of
 126        the regulator is shared between all the components in the
 127        circuit.
 128             </para>
 129           </glossdef>
 130         </glossentry>
 131
 132         <glossentry>
 133           <glossterm>Power Management Integrated Circuit</glossterm>
 134           <acronym>PMIC</acronym>
 135           <glossdef>
 136             <para>
 137        An IC which contains numerous regulators and often also other
 138        subsystems.  In an embedded system the primary PMIC is often
 139        equivalent to a combination of the PSU and southbridge in a
 140        desktop system.
 141             </para>
 142           </glossdef>
 143         </glossentry>
 144        </glossary>
 145     </sect1>
 146  </chapter>
 147
 148  <chapter id="consumer">
 149     <title>Consumer driver interface</title>
 150     <para>
 151       This offers a similar API to the kernel clock framework.
 152       Consumer drivers use <link
 153       linkend='API-regulator-get'>get</link> and <link
 154       linkend='API-regulator-put'>put</link> operations to acquire and
 155       release regulators.  Functions are
 156       provided to <link linkend='API-regulator-enable'>enable</link>
 157       and <link linkend='API-regulator-disable'>disable</link> the
 158       reguator and to get and set the runtime parameters of the
 159       regulator.
 160     </para>
 161     <para>
 162       When requesting regulators consumers use symbolic names for their
 163       supplies, such as "Vcc", which are mapped into actual regulator
 164       devices by the machine interface.
 165     </para>
 166     <para>
 167        A stub version of this API is provided when the regulator
 168        framework is not in use in order to minimise the need to use
 169        ifdefs.
 170     </para>
 171
 172     <sect1 id="consumer-enable">
 173       <title>Enabling and disabling</title>
 174       <para>
 175         The regulator API provides reference counted enabling and
 176         disabling of regulators. Consumer devices use the <function><link
 177         linkend='API-regulator-enable'>regulator_enable</link></function>
 178         and <function><link
 179         linkend='API-regulator-disable'>regulator_disable</link>
 180         </function> functions to enable and disable regulators.  Calls
 181         to the two functions must be balanced.
 182       </para>
 183       <para>
 184         Note that since multiple consumers may be using a regulator and
 185         machine constraints may not allow the regulator to be disabled
 186         there is no guarantee that calling
 187         <function>regulator_disable</function> will actually cause the
 188         supply provided by the regulator to be disabled. Consumer
 189         drivers should assume that the regulator may be enabled at all
 190         times.
 191       </para>
 192     </sect1>
 193
 194     <sect1 id="consumer-config">
 195       <title>Configuration</title>
 196       <para>
 197         Some consumer devices may need to be able to dynamically
 198         configure their supplies.  For example, MMC drivers may need to
 199         select the correct operating voltage for their cards.  This may
 200         be done while the regulator is enabled or disabled.
 201       </para>
 202       <para>
 203         The <function><link
 204         linkend='API-regulator-set-voltage'>regulator_set_voltage</link>
 205         </function> and <function><link
 206         linkend='API-regulator-set-current-limit'
 207         >regulator_set_current_limit</link>
 208         </function> functions provide the primary interface for this.
 209         Both take ranges of voltages and currents, supporting drivers
 210         that do not require a specific value (eg, CPU frequency scaling
 211         normally permits the CPU to use a wider range of supply
 212         voltages at lower frequencies but does not require that the
 213         supply voltage be lowered).  Where an exact value is required
 214         both minimum and maximum values should be identical.
 215       </para>
 216     </sect1>
 217
 218     <sect1 id="consumer-callback">
 219       <title>Callbacks</title>
 220       <para>
 221          Callbacks may also be <link
 222          linkend='API-regulator-register-notifier'>registered</link>
 223          for events such as regulation failures.
 224       </para>
 225     </sect1>
 226   </chapter>
 227
 228   <chapter id="driver">
 229     <title>Regulator driver interface</title>
 230     <para>
 231       Drivers for regulator chips <link
 232       linkend='API-regulator-register'>register</link> the regulators
 233       with the regulator core, providing operations structures to the
 234       core.  A <link
 235       linkend='API-regulator-notifier-call-chain'>notifier</link> interface
 236       allows error conditions to be reported to the core.
 237     </para>
 238     <para>
 239       Registration should be triggered by explicit setup done by the
 240       platform, supplying a <link
 241       linkend='API-struct-regulator-init-data'>struct
 242       regulator_init_data</link> for the regulator containing
 243       <link linkend='machine-constraint'>constraint</link> and
 244       <link linkend='machine-supply'>supply</link> information.
 245     </para>
 246   </chapter>
 247
 248   <chapter id="machine">
 249     <title>Machine interface</title>
 250     <para>
 251       This interface provides a way to define how regulators are
 252       connected to consumers on a given system and what the valid
 253       operating parameters are for the system.
 254     </para>
 255
 256     <sect1 id="machine-supply">
 257       <title>Supplies</title>
 258       <para>
 259         Regulator supplies are specified using <link
 260         linkend='API-struct-regulator-consumer-supply'>struct
 261         regulator_consumer_supply</link>.  This is done at
 262         <link linkend='driver'>driver registration
 263         time</link> as part of the machine constraints.
 264       </para>
 265     </sect1>
 266
 267     <sect1 id="machine-constraint">
 268       <title>Constraints</title>
 269       <para>
 270         As well as definining the connections the machine interface
 271         also provides constraints definining the operations that
 272         clients are allowed to perform and the parameters that may be
 273         set.  This is required since generally regulator devices will
 274         offer more flexibility than it is safe to use on a given
 275         system, for example supporting higher supply voltages than the
 276         consumers are rated for.
 277       </para>
 278       <para>
 279         This is done at <link linkend='driver'>driver
 280         registration time</link> by providing a <link
 281         linkend='API-struct-regulation-constraints'>struct
 282         regulation_constraints</link>.
 283       </para>
 284       <para>
 285         The constraints may also specify an initial configuration for the
 286         regulator in the constraints, which is particularly useful for
 287         use with static consumers.
 288       </para>
 289     </sect1>
 290  </chapter>
 291
 292  <chapter id="api">
 293    <title>API reference</title>
 294    <para>
 295      Due to limitations of the kernel documentation framework and the
 296      existing layout of the source code the entire regulator API is
 297      documented here.
 298    </para>
 299!Iinclude/linux/regulator/consumer.h
 300!Iinclude/linux/regulator/machine.h
 301!Iinclude/linux/regulator/driver.h
 302!Edrivers/regulator/core.c
 303  </chapter>
 304</book>
 305