Last edited 3 years ago

PMIC hardware components

The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

1 Article purpose[edit source]

The purpose of this article is to:

  • list the PMIC hardware components that might be integrated in the different boards
  • link these components to the corresponding software framework(s)
  • point to the datasheet(s) of these components
  • explain, when necessary, how to configure these components.

2 Software frameworks[edit source]

Domain Peripheral Software frameworks Comment
Cortex-A7
secure
(OP-TEE)
Cortex-A7
non-secure
(Linux)
Cortex-M4

(STM32Cube)
PMIC STPMIC1 OP-TEE overview Regulator overview Watchdog overview U-Boot overview

3 STPMIC1[edit source]

3.1 Description[edit source]

The STPMIC1 is a device that handles the power supplies for some STM32MP boards. The STPMIC1 main features are:

  • configuration via I²C bus,
  • 10 regulators of different kinds with over-current protection,
  • 3 power switches for USB supplies,
  • a power-on key input,
  • a watchdog,
  • a thermal protection,
  • a NORMAL mode and an ALTERNATE mode that is used for system suspend.

The user manual is available here: NOT YET AVAILABLE

3.2 Support in Linux Kernel[edit source]

The STPMIC1 driver is used to handle STPMIC1 Power Management Integrated Circuit (PMIC). The driver is composed of several parts:

  • The core driver
  • The regulator driver
  • The watchdog driver
  • The input driver

The thermal feature is not supported.

3.2.1 Core driver[edit source]

The core implements the Multi-Function Devices Framework API.

  • It is probed by the I²C framework.
  • It handles communication with the PMIC via I²C.
  • It probes the others STPMIC1 drivers (input, watchdog....).
  • It acts as an interrupt controller for the other drivers.

Source code:

 include/linux/mfd/stpmic1.h  
 drivers/mfd/stpmic1.c  


Bindings are described in:

 Documentation/devicetree/bindings/mfd/st,stpmic1.txt 

3.2.2 Regulator driver[edit source]

The driver implements the Regulator framework API

  • Each BUCK, LDO or POWER SWITCH inside the STPMIC1 device is presented as a voltage regulator.
  • Power switches are presented as fixed voltage sources. Voltage can not be set.
  • The driver does not handle the suspend configuration. This is done by the Secure Monitor.

Source code:

 drivers/regulator/stpmic1_regulator.c  

Bindings are described in:

 Documentation/devicetree/bindings/regulator/st,stpmic1-regulator.txt 

3.2.3 Watchdog driver[edit source]

The driver implements the Watchdog framework API

When enabled, a watchdog device is available for the user-land. As soon as a user has started to write in the watchdog it is armed in the PMIC. When the watchdog timer expires, the PMIC shuts down.

Source code:

 drivers/watchdog/stpmic1_wdt.c  

Bindings are described in:

 Documentation/devicetree/bindings/watchdog/st,stpmic1-wdt.txt 

3.2.4 Input driver[edit source]

The driver implements the Input framework API.

The driver exposes a single key (KEY_POWER) that can be used as any standard input device in /dev/input/eventX

Source code:

 drivers/input/misc/stpmic1_onkey.c 

Bindings are described in:

 Documentation/devicetree/bindings/input/st,stpmic1-onkey.txt 

3.2.5 Kernel Configuration[edit source]

With kernel menuconfig, enable following configurations:

  • core part: MFD_STPMIC1
  • regulator: REGULATOR_STPMIC1
  • watchdog: STPMIC1_WATCHDOG
  • input: INPUT_STPMIC1_ONKEY

3.3 Support in U-BOOT[edit source]

STPMIC1 is used by U-Boot to:

  • Control regulators used by other drivers (mmc-supply for SDCard for example, usb vbus)
  • Trace pmic startup reason

STMPIC is supported with existing uclass of the 'Driver Model' described in doc/driver-model/pmic-framework.txt .

The STPMIC1 is available with the existing commands:

  • pmic (CONFIG_CMD_PMIC)
  • regulator (CONFIG_CMD_REGULATOR)
  • poweroff (CONFIG_CMD_POWEROFF)

SPTMIC1 driver supports configuration via device-tree; the bindings, same as kernel, are described in:

doc/device-tree-bindings/mfd/stpmic1.txt

3.4 Support in Cortex-A7 Secure[edit source]

3.4.1 TF-A[edit source]

STPMIC1 is used by TF-A firmware to:

  • Configure DDR power supplies.
  • Configure the regulators for system suspend and system shutdown.

Driver source code:

 include/drivers/st/stpmic1.h  
 drivers/st/pmic/stpmic1.c  

SPTMIC1 driver supports configuration via device-tree, bindings are described in:

 docs/devicetree/bindings/power/st,stpmic1.txt 

3.4.2 OP-TEE[edit source]

STPMIC1 is used by OP-TEE OS to configure the regulators for system suspend and system shutdown.

Driver source code:

 core/include/drivers/stpmic1.h  
 core/drivers/stpmic1.c