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