xref: /rk3399_rockchip-uboot/doc/driver-model/pmic-framework.txt (revision fdea8bbbc8a3e2ea17ebad507957039ef94a4414)
1*fdea8bbbSPrzemyslaw Marczak#
2*fdea8bbbSPrzemyslaw Marczak# (C) Copyright 2014-2015 Samsung Electronics
3*fdea8bbbSPrzemyslaw Marczak# Przemyslaw Marczak <p.marczak@samsung.com>
4*fdea8bbbSPrzemyslaw Marczak#
5*fdea8bbbSPrzemyslaw Marczak# SPDX-License-Identifier:      GPL-2.0+
6*fdea8bbbSPrzemyslaw Marczak#
7*fdea8bbbSPrzemyslaw Marczak
8*fdea8bbbSPrzemyslaw MarczakPMIC framework based on Driver Model
9*fdea8bbbSPrzemyslaw Marczak====================================
10*fdea8bbbSPrzemyslaw MarczakTOC:
11*fdea8bbbSPrzemyslaw Marczak1. Introduction
12*fdea8bbbSPrzemyslaw Marczak2. How does it work
13*fdea8bbbSPrzemyslaw Marczak3. Pmic uclass
14*fdea8bbbSPrzemyslaw Marczak4. Regulator uclass
15*fdea8bbbSPrzemyslaw Marczak
16*fdea8bbbSPrzemyslaw Marczak1. Introduction
17*fdea8bbbSPrzemyslaw Marczak===============
18*fdea8bbbSPrzemyslaw MarczakThis is an introduction to driver-model multi uclass PMIC IC's support.
19*fdea8bbbSPrzemyslaw MarczakAt present it's based on two uclass types:
20*fdea8bbbSPrzemyslaw Marczak- UCLASS_PMIC      - basic uclass type for PMIC I/O, which provides common
21*fdea8bbbSPrzemyslaw Marczak                     read/write interface.
22*fdea8bbbSPrzemyslaw Marczak- UCLASS_REGULATOR - additional uclass type for specific PMIC features,
23*fdea8bbbSPrzemyslaw Marczak                     which are Voltage/Current regulators.
24*fdea8bbbSPrzemyslaw Marczak
25*fdea8bbbSPrzemyslaw MarczakNew files:
26*fdea8bbbSPrzemyslaw MarczakUCLASS_PMIC:
27*fdea8bbbSPrzemyslaw Marczak- drivers/power/pmic/pmic-uclass.c
28*fdea8bbbSPrzemyslaw Marczak- include/power/pmic.h
29*fdea8bbbSPrzemyslaw MarczakUCLASS_REGULATOR:
30*fdea8bbbSPrzemyslaw Marczak- drivers/power/regulator/regulator-uclass.c
31*fdea8bbbSPrzemyslaw Marczak- include/power/regulator.h
32*fdea8bbbSPrzemyslaw Marczak
33*fdea8bbbSPrzemyslaw MarczakCommands:
34*fdea8bbbSPrzemyslaw Marczak- common/cmd_pmic.c
35*fdea8bbbSPrzemyslaw Marczak- common/cmd_regulator.c
36*fdea8bbbSPrzemyslaw Marczak
37*fdea8bbbSPrzemyslaw Marczak2. How doees it work
38*fdea8bbbSPrzemyslaw Marczak====================
39*fdea8bbbSPrzemyslaw MarczakThe Power Management Integrated Circuits (PMIC) are used in embedded systems
40*fdea8bbbSPrzemyslaw Marczakto provide stable, precise and specific voltage power source with over-voltage
41*fdea8bbbSPrzemyslaw Marczakand thermal protection circuits.
42*fdea8bbbSPrzemyslaw Marczak
43*fdea8bbbSPrzemyslaw MarczakThe single PMIC can provide various functions by single or multiple interfaces,
44*fdea8bbbSPrzemyslaw Marczaklike in the example below.
45*fdea8bbbSPrzemyslaw Marczak
46*fdea8bbbSPrzemyslaw Marczak-- SoC
47*fdea8bbbSPrzemyslaw Marczak |
48*fdea8bbbSPrzemyslaw Marczak |            ______________________________________
49*fdea8bbbSPrzemyslaw Marczak | BUS 0     |       Multi interface PMIC IC        |--> LDO out 1
50*fdea8bbbSPrzemyslaw Marczak | e.g.I2C0  |                                      |--> LDO out N
51*fdea8bbbSPrzemyslaw Marczak |-----------|---- PMIC device 0 (READ/WRITE ops)   |
52*fdea8bbbSPrzemyslaw Marczak | or SPI0   |    |_ REGULATOR device (ldo/... ops) |--> BUCK out 1
53*fdea8bbbSPrzemyslaw Marczak |           |    |_ CHARGER device (charger ops)   |--> BUCK out M
54*fdea8bbbSPrzemyslaw Marczak |           |    |_ MUIC device (microUSB con ops) |
55*fdea8bbbSPrzemyslaw Marczak | BUS 1     |    |_ ...                            |---> BATTERY
56*fdea8bbbSPrzemyslaw Marczak | e.g.I2C1  |                                      |
57*fdea8bbbSPrzemyslaw Marczak |-----------|---- PMIC device 1 (READ/WRITE ops)   |---> USB in 1
58*fdea8bbbSPrzemyslaw Marczak . or SPI1   |    |_ RTC device (rtc ops)           |---> USB in 2
59*fdea8bbbSPrzemyslaw Marczak .           |______________________________________|---> USB out
60*fdea8bbbSPrzemyslaw Marczak .
61*fdea8bbbSPrzemyslaw Marczak
62*fdea8bbbSPrzemyslaw MarczakSince U-Boot provides driver model features for I2C and SPI bus drivers,
63*fdea8bbbSPrzemyslaw Marczakthe PMIC devices should also support this. By the pmic and regulator API's,
64*fdea8bbbSPrzemyslaw MarczakPMIC drivers can simply provide a common functions, for multi-interface and
65*fdea8bbbSPrzemyslaw Marczakand multi-instance device support.
66*fdea8bbbSPrzemyslaw Marczak
67*fdea8bbbSPrzemyslaw MarczakBasic design assumptions:
68*fdea8bbbSPrzemyslaw Marczak
69*fdea8bbbSPrzemyslaw Marczak- Common I/O API - UCLASS_PMIC
70*fdea8bbbSPrzemyslaw MarczakFor the multi-function PMIC devices, this can be used as parent I/O device
71*fdea8bbbSPrzemyslaw Marczakfor each IC's interface. Then, each children uses the same dev for read/write.
72*fdea8bbbSPrzemyslaw Marczak
73*fdea8bbbSPrzemyslaw Marczak- Common regulator API - UCLASS_REGULATOR
74*fdea8bbbSPrzemyslaw MarczakFor driving the regulator attributes, auto setting function or command line
75*fdea8bbbSPrzemyslaw Marczakinterface, based on kernel-style regulator device tree constraints.
76*fdea8bbbSPrzemyslaw Marczak
77*fdea8bbbSPrzemyslaw MarczakFor simple implementations, regulator drivers are not required, so the code can
78*fdea8bbbSPrzemyslaw Marczakuse pmic read/write directly.
79*fdea8bbbSPrzemyslaw Marczak
80*fdea8bbbSPrzemyslaw Marczak3. Pmic uclass
81*fdea8bbbSPrzemyslaw Marczak==============
82*fdea8bbbSPrzemyslaw MarczakThe basic informations:
83*fdea8bbbSPrzemyslaw Marczak* Uclass:   'UCLASS_PMIC'
84*fdea8bbbSPrzemyslaw Marczak* Header:   'include/power/pmic.h'
85*fdea8bbbSPrzemyslaw Marczak* Core:     'drivers/power/pmic/pmic-uclass.c'
86*fdea8bbbSPrzemyslaw Marczak  config:   'CONFIG_DM_PMIC'
87*fdea8bbbSPrzemyslaw Marczak* Command:  'common/cmd_pmic.c'
88*fdea8bbbSPrzemyslaw Marczak  config:   'CONFIG_CMD_PMIC'
89*fdea8bbbSPrzemyslaw Marczak* Example:  'drivers/power/pmic/max77686.c'
90*fdea8bbbSPrzemyslaw Marczak
91*fdea8bbbSPrzemyslaw MarczakThis is still under the construction. So for the API description, please refer
92*fdea8bbbSPrzemyslaw Marczakto the header file.
93*fdea8bbbSPrzemyslaw Marczak
94*fdea8bbbSPrzemyslaw MarczakAs an example of the pmic driver, please refer to the MAX77686 driver.
95*fdea8bbbSPrzemyslaw Marczak
96*fdea8bbbSPrzemyslaw MarczakPlease pay attention for the driver's '.bind' method. Exactly the function call:
97*fdea8bbbSPrzemyslaw Marczak'pmic_bind_childs()', which is used to bind the regulators by using the array of
98*fdea8bbbSPrzemyslaw Marczakregulator's node, compatible prefixes.
99*fdea8bbbSPrzemyslaw Marczak
100*fdea8bbbSPrzemyslaw MarczakThe 'pmic; command also supports the new API. So the pmic command can be enabled
101*fdea8bbbSPrzemyslaw Marczakby adding CONFIG_CMD_PMIC.
102*fdea8bbbSPrzemyslaw MarczakThe new pmic command allows to:
103*fdea8bbbSPrzemyslaw Marczak- list pmic devices
104*fdea8bbbSPrzemyslaw Marczak- choose the current device (like the mmc command)
105*fdea8bbbSPrzemyslaw Marczak- read or write the pmic register
106*fdea8bbbSPrzemyslaw Marczak- dump all pmic registers
107*fdea8bbbSPrzemyslaw Marczak
108*fdea8bbbSPrzemyslaw MarczakThis command can use only UCLASS_PMIC devices, since this uclass is designed
109*fdea8bbbSPrzemyslaw Marczakfor pmic I/O operations only.
110*fdea8bbbSPrzemyslaw Marczak
111*fdea8bbbSPrzemyslaw MarczakFor more informations, please refer to the file: 'common/cmd_pmic.c'.
112*fdea8bbbSPrzemyslaw Marczak
113*fdea8bbbSPrzemyslaw Marczak4. Regulator uclass
114*fdea8bbbSPrzemyslaw Marczak===================
115*fdea8bbbSPrzemyslaw MarczakThe basic informations:
116*fdea8bbbSPrzemyslaw Marczak* Uclass:  'UCLASS_REGULATOR'
117*fdea8bbbSPrzemyslaw Marczak* Header:  'include/power/regulator.h'
118*fdea8bbbSPrzemyslaw Marczak* Core:    'drivers/power/regulator/regulator-uclass.c'
119*fdea8bbbSPrzemyslaw Marczak  config:  'CONFIG_DM_REGULATOR'
120*fdea8bbbSPrzemyslaw Marczak  binding: 'doc/device-tree-bindings/regulator/regulator.txt'
121*fdea8bbbSPrzemyslaw Marczak* Command: 'common/cmd_regulator.c'
122*fdea8bbbSPrzemyslaw Marczak  config:  'CONFIG_CMD_REGULATOR'
123*fdea8bbbSPrzemyslaw Marczak* Example: 'drivers/power/regulator/max77686.c'
124*fdea8bbbSPrzemyslaw Marczak           'drivers/power/pmic/max77686.c' (required I/O driver for the above)
125*fdea8bbbSPrzemyslaw Marczak* Example: 'drivers/power/regulator/fixed.c'
126*fdea8bbbSPrzemyslaw Marczak  config"  'CONFIG_DM_REGULATOR_FIXED'
127*fdea8bbbSPrzemyslaw Marczak
128*fdea8bbbSPrzemyslaw MarczakThis is still under the construction. So for the API description, please refer
129*fdea8bbbSPrzemyslaw Marczakto the header file.
130*fdea8bbbSPrzemyslaw Marczak
131*fdea8bbbSPrzemyslaw MarczakFor the example regulator driver, please refer to the MAX77686 regulator driver,
132*fdea8bbbSPrzemyslaw Marczakbut this driver can't operate without pmic's example driver, which provides an
133*fdea8bbbSPrzemyslaw MarczakI/O interface for MAX77686 regulator.
134*fdea8bbbSPrzemyslaw Marczak
135*fdea8bbbSPrzemyslaw MarczakThe second example is a fixed Voltage/Current regulator for a common use.
136*fdea8bbbSPrzemyslaw Marczak
137*fdea8bbbSPrzemyslaw MarczakThe 'regulator' command also supports the new API. The command allow:
138*fdea8bbbSPrzemyslaw Marczak- list regulator devices
139*fdea8bbbSPrzemyslaw Marczak- choose the current device (like the mmc command)
140*fdea8bbbSPrzemyslaw Marczak- do all regulator-specific operations
141*fdea8bbbSPrzemyslaw Marczak
142*fdea8bbbSPrzemyslaw MarczakFor more informations, please refer to the file: 'common/cmd_regulator.c'
143