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