| .. SPDX-License-Identifier: GPL-2.0 | 
 |  | 
 | ===================================== | 
 | Texas Instruments TPS6594 PFSM driver | 
 | ===================================== | 
 |  | 
 | Author: Julien Panis (jpanis@baylibre.com) | 
 |  | 
 | Overview | 
 | ======== | 
 |  | 
 | Strictly speaking, PFSM (Pre-configurable Finite State Machine) is not | 
 | hardware. It is a piece of code. | 
 |  | 
 | The TPS6594 PMIC (Power Management IC) integrates a state machine which | 
 | manages operational modes. Depending on the current operational mode, | 
 | some voltage domains remain energized while others can be off. | 
 |  | 
 | The PFSM driver can be used to trigger transitions between configured | 
 | states. It also provides R/W access to the device registers. | 
 |  | 
 | Supported chips | 
 | --------------- | 
 |  | 
 | - tps6594-q1 | 
 | - tps6593-q1 | 
 | - lp8764-q1 | 
 |  | 
 | Driver location | 
 | =============== | 
 |  | 
 | drivers/misc/tps6594-pfsm.c | 
 |  | 
 | Driver type definitions | 
 | ======================= | 
 |  | 
 | include/uapi/linux/tps6594_pfsm.h | 
 |  | 
 | Driver IOCTLs | 
 | ============= | 
 |  | 
 | :c:macro::`PMIC_GOTO_STANDBY` | 
 | All device resources are powered down. The processor is off, and | 
 | no voltage domains are energized. | 
 |  | 
 | :c:macro::`PMIC_GOTO_LP_STANDBY` | 
 | The digital and analog functions of the PMIC, which are not | 
 | required to be always-on, are turned off (low-power). | 
 |  | 
 | :c:macro::`PMIC_UPDATE_PGM` | 
 | Triggers a firmware update. | 
 |  | 
 | :c:macro::`PMIC_SET_ACTIVE_STATE` | 
 | One of the operational modes. | 
 | The PMICs are fully functional and supply power to all PDN loads. | 
 | All voltage domains are energized in both MCU and Main processor | 
 | sections. | 
 |  | 
 | :c:macro::`PMIC_SET_MCU_ONLY_STATE` | 
 | One of the operational modes. | 
 | Only the power resources assigned to the MCU Safety Island are on. | 
 |  | 
 | :c:macro::`PMIC_SET_RETENTION_STATE` | 
 | One of the operational modes. | 
 | Depending on the triggers set, some DDR/GPIO voltage domains can | 
 | remain energized, while all other domains are off to minimize | 
 | total system power. | 
 |  | 
 | Driver usage | 
 | ============ | 
 |  | 
 | See available PFSMs:: | 
 |  | 
 |     # ls /dev/pfsm* | 
 |  | 
 | Dump the registers of pages 0 and 1:: | 
 |  | 
 |     # hexdump -C /dev/pfsm-0-0x48 | 
 |  | 
 | See PFSM events:: | 
 |  | 
 |     # cat /proc/interrupts | 
 |  | 
 | Userspace code example | 
 | ---------------------- | 
 |  | 
 | samples/pfsm/pfsm-wakeup.c |