#
# (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
==============
The basic information:
* 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'

For detailed API description, please refer to the header file.

As an example of the pmic driver, please refer to the MAX77686 driver.

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.

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.

For more information, please refer to the core file.

4. Regulator uclass
===================
The basic information:
* 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'

For detailed API description, please refer to the header file.

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

For more information, please refer to the command file.
