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