mirror of
				https://source.denx.de/u-boot/u-boot.git
				synced 2025-11-03 18:01:41 +01:00 
			
		
		
		
	Convert plain text documentation to reStructuredText format and add it to Sphinx TOC tree. No essential content change. Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
		
			
				
	
	
		
			144 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
.. SPDX-License-Identifier: GPL-2.0+
 | 
						|
.. (C) Copyright 2014-2015 Samsung Electronics
 | 
						|
.. sectionauthor:: Przemyslaw Marczak <p.marczak@samsung.com>
 | 
						|
 | 
						|
PMIC framework based on Driver Model
 | 
						|
====================================
 | 
						|
 | 
						|
Introduction
 | 
						|
------------
 | 
						|
This is an introduction to driver-model multi uclass PMIC IC's support.
 | 
						|
At present it's based on two uclass types:
 | 
						|
 | 
						|
UCLASS_PMIC:
 | 
						|
  basic uclass type for PMIC I/O, which provides common
 | 
						|
  read/write interface.
 | 
						|
UCLASS_REGULATOR:
 | 
						|
  additional uclass type for specific PMIC features, which are
 | 
						|
  Voltage/Current regulators.
 | 
						|
 | 
						|
New files:
 | 
						|
 | 
						|
UCLASS_PMIC:
 | 
						|
  - drivers/power/pmic/pmic-uclass.c
 | 
						|
  - include/power/pmic.h
 | 
						|
UCLASS_REGULATOR:
 | 
						|
  - drivers/power/regulator/regulator-uclass.c
 | 
						|
  - include/power/regulator.h
 | 
						|
 | 
						|
Commands:
 | 
						|
- common/cmd_pmic.c
 | 
						|
- common/cmd_regulator.c
 | 
						|
 | 
						|
How doees it work
 | 
						|
-----------------
 | 
						|
The Power Management Integrated Circuits (PMIC) are used in embedded systems
 | 
						|
to provide stable, precise and specific voltage power source with over-voltage
 | 
						|
and thermal protection circuits.
 | 
						|
 | 
						|
The single PMIC can provide various functions by single or multiple interfaces,
 | 
						|
like in the example below::
 | 
						|
 | 
						|
   -- SoC
 | 
						|
    |
 | 
						|
    |            ______________________________________
 | 
						|
    | BUS 0     |       Multi interface PMIC IC        |--> LDO out 1
 | 
						|
    | e.g.I2C0  |                                      |--> LDO out N
 | 
						|
    |-----------|---- PMIC device 0 (READ/WRITE ops)   |
 | 
						|
    | or SPI0   |    |_ REGULATOR device (ldo/... ops) |--> BUCK out 1
 | 
						|
    |           |    |_ CHARGER device (charger ops)   |--> BUCK out M
 | 
						|
    |           |    |_ MUIC device (microUSB con ops) |
 | 
						|
    | BUS 1     |    |_ ...                            |---> BATTERY
 | 
						|
    | e.g.I2C1  |                                      |
 | 
						|
    |-----------|---- PMIC device 1 (READ/WRITE ops)   |---> USB in 1
 | 
						|
    . or SPI1   |    |_ RTC device (rtc ops)           |---> USB in 2
 | 
						|
    .           |______________________________________|---> USB out
 | 
						|
    .
 | 
						|
 | 
						|
Since U-Boot provides driver model features for I2C and SPI bus drivers,
 | 
						|
the PMIC devices should also support this. By the pmic and regulator API's,
 | 
						|
PMIC drivers can simply provide a common functions, for multi-interface and
 | 
						|
and multi-instance device support.
 | 
						|
 | 
						|
Basic design assumptions:
 | 
						|
 | 
						|
- Common I/O API:
 | 
						|
    UCLASS_PMIC. For the multi-function PMIC devices, this can be used as
 | 
						|
    parent I/O device for each IC's interface. Then, each children uses the
 | 
						|
    same dev for read/write.
 | 
						|
 | 
						|
- Common regulator API:
 | 
						|
    UCLASS_REGULATOR. For driving the regulator attributes, auto setting
 | 
						|
    function or command line interface, based on kernel-style regulator device
 | 
						|
    tree constraints.
 | 
						|
 | 
						|
For simple implementations, regulator drivers are not required, so the code can
 | 
						|
use pmic read/write directly.
 | 
						|
 | 
						|
Pmic uclass
 | 
						|
-----------
 | 
						|
The basic information:
 | 
						|
 | 
						|
* Uclass:   'UCLASS_PMIC'
 | 
						|
* Header:   'include/power/pmic.h'
 | 
						|
* Core:     'drivers/power/pmic/pmic-uclass.c' (config 'CONFIG_DM_PMIC')
 | 
						|
* Command:  'common/cmd_pmic.c' (config 'CONFIG_CMD_PMIC')
 | 
						|
* Example:  'drivers/power/pmic/max77686.c'
 | 
						|
 | 
						|
For detailed API description, please refer to the header file.
 | 
						|
 | 
						|
As an example of the pmic driver, please refer to the MAX77686 driver.
 | 
						|
 | 
						|
Please pay attention for the driver's bind() method. Exactly the function call:
 | 
						|
'pmic_bind_children()', which is used to bind the regulators by using the array
 | 
						|
of regulator's node, compatible prefixes.
 | 
						|
 | 
						|
The 'pmic; command also supports the new API. So the pmic command can be enabled
 | 
						|
by adding CONFIG_CMD_PMIC.
 | 
						|
The new pmic command allows to:
 | 
						|
- list pmic devices
 | 
						|
- choose the current device (like the mmc command)
 | 
						|
- read or write the pmic register
 | 
						|
- dump all pmic registers
 | 
						|
 | 
						|
This command can use only UCLASS_PMIC devices, since this uclass is designed
 | 
						|
for pmic I/O operations only.
 | 
						|
 | 
						|
For more information, please refer to the core file.
 | 
						|
 | 
						|
Regulator uclass
 | 
						|
----------------
 | 
						|
The basic information:
 | 
						|
 | 
						|
* Uclass: 'UCLASS_REGULATOR'
 | 
						|
 | 
						|
* Header: 'include/power/regulator.h'
 | 
						|
 | 
						|
* Core: 'drivers/power/regulator/regulator-uclass.c'
 | 
						|
  (config 'CONFIG_DM_REGULATOR')
 | 
						|
 | 
						|
* Binding: 'doc/device-tree-bindings/regulator/regulator.txt'
 | 
						|
 | 
						|
* Command: 'common/cmd_regulator.c' (config 'CONFIG_CMD_REGULATOR')
 | 
						|
 | 
						|
* Example: 'drivers/power/regulator/max77686.c'
 | 
						|
  'drivers/power/pmic/max77686.c' (required I/O driver for the above)
 | 
						|
 | 
						|
* Example: 'drivers/power/regulator/fixed.c'
 | 
						|
  (config 'CONFIG_DM_REGULATOR_FIXED')
 | 
						|
 | 
						|
For detailed API description, please refer to the header file.
 | 
						|
 | 
						|
For the example regulator driver, please refer to the MAX77686 regulator driver,
 | 
						|
but this driver can't operate without pmic's example driver, which provides an
 | 
						|
I/O interface for MAX77686 regulator.
 | 
						|
 | 
						|
The second example is a fixed Voltage/Current regulator for a common use.
 | 
						|
 | 
						|
The 'regulator' command also supports the new API. The command allow:
 | 
						|
- list regulator devices
 | 
						|
- choose the current device (like the mmc command)
 | 
						|
- do all regulator-specific operations
 | 
						|
 | 
						|
For more information, please refer to the command file.
 |