Blame view

doc/driver-model/pmic-framework.txt 4.89 KB
fdea8bbbc   Przemyslaw Marczak   doc: driver-model...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
  #
  # (C) Copyright 2014-2015 Samsung Electronics
  # Przemyslaw Marczak <p.marczak@samsung.com>
  #
  # SPDX-License-Identifier:      GPL-2.0+
  #
  
  PMIC framework based on Driver Model
  ====================================
  TOC:
  1. Introduction
  2. How does it work
  3. Pmic uclass
  4. Regulator uclass
  
  1. 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
  
  2. 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.
  
  3. Pmic uclass
  ==============
769c94865   Przemyslaw Marczak   doc: driver-model...
82
  The basic information:
fdea8bbbc   Przemyslaw Marczak   doc: driver-model...
83
84
85
86
87
88
89
  * 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'
769c94865   Przemyslaw Marczak   doc: driver-model...
90
  For detailed API description, please refer to the header file.
fdea8bbbc   Przemyslaw Marczak   doc: driver-model...
91
92
  
  As an example of the pmic driver, please refer to the MAX77686 driver.
769c94865   Przemyslaw Marczak   doc: driver-model...
93
94
95
  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.
fdea8bbbc   Przemyslaw Marczak   doc: driver-model...
96
97
98
99
100
101
102
103
104
105
106
  
  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.
769c94865   Przemyslaw Marczak   doc: driver-model...
107
  For more information, please refer to the core file.
fdea8bbbc   Przemyslaw Marczak   doc: driver-model...
108
109
110
  
  4. Regulator uclass
  ===================
769c94865   Przemyslaw Marczak   doc: driver-model...
111
  The basic information:
fdea8bbbc   Przemyslaw Marczak   doc: driver-model...
112
113
114
115
116
117
118
119
120
121
122
  * 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'
769c94865   Przemyslaw Marczak   doc: driver-model...
123
  For detailed API description, please refer to the header file.
fdea8bbbc   Przemyslaw Marczak   doc: driver-model...
124
125
126
127
128
129
130
131
132
133
134
  
  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
769c94865   Przemyslaw Marczak   doc: driver-model...
135
  For more information, please refer to the command file.