| .. 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 |