The ConnectCore 95 contains an NXP PF09 Power Management IC (PMIC). This PMIC works in combination with two additional NXP PMICs:
-
MPF5302 to supply the SoC
-
MPF5301 to supply the ARM
The PMICs are connected to the CPU via the LPI2C1 port:
-
PF09 at address
0x08 -
MPF5302 at address
0x29 -
MPF5302 at address
0x2A
| For simplicity, this topic refers to the main PF09 PMIC. |
The PMIC has the following features:
-
Five buck regulators
-
Three LDO regulators
Kernel configuration
The PMIC is managed by the System Manager (SM) running on the Cortex-M33 firmware. Access by the kernel to some exposed regulators is done through SCMI:
-
SCMI based regulator driver (
CONFIG_REGULATOR_ARM_SCMI)
This option is enabled as built-in on the default ConnectCore 95 kernel configuration file.
Kernel driver
The SCMI based regulator driver is located at:
| File | Description |
|---|---|
SCMI based regulator driver |
Device tree bindings and customization
The PMIC is managed by the System Manager (SM) and is accessed through SCMI.
The PMIC and its regulators are defined on the SM source code. Some regulators are used internally inside the ConnectCore 95 and some are used externally on the carrier board.
ConnectCore 95 internal regulators
| The following regulators are used internally on the ConnectCore 95 and their parameters should not be modified. |
| Regulator name | PF09 regulator | Description |
|---|---|---|
|
SW1 |
Internal 3V3 power supply |
|
SW2 |
Internal 0V8 power supply |
|
SW3 |
Internal 1V8 power supply |
|
SW4 |
LPDDR5 power supply |
|
SW5 |
LPDDR5 power supply |
|
LDO2 |
uSDHC2 power supply |
|
LDO3 |
SoC power supply |
ConnectCore 95 external regulators
The following PMIC regulators are routed outside the ConnectCore 95 and may be used in the carrier board:
| Regulator name | PF09 regulator | Default voltage | Usage on ConnectCore 95 Development Kit |
|---|---|---|---|
|
SW1 |
3.3 V |
RS485, uSD, Ethernet, Camera, LVDS, USB, Audio |
|
LDO1 |
3.3 V |
Not used |
|
LDO2 |
3.3 V |
microSD lines |
| The OTP configuration of the PF09 PMIC on the ConnectCore 95 Development Kit sets LDO1 in load switch mode as a fixed 3.3V regulator. |
Device tree entries
The following regulators are exposed by SM to the non-secure world (Linux), to be used as supplies for peripherals on the device tree.
firmware {
scmi {
scmi_voltd: protocol@17 {
reg = <0x17>;
scmi_regu: regulators {
#address-cells = <1>;
#size-cells = <0>;
scmi_vdd_ldo1: regulator@7 {
reg = <VOLTD_SCMI_PF09_LDO1>;
regulator-name = "vdd_ldo1";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};
scmi_vdd_sdio2: regulator@8 {
reg = <VOLTD_SCMI_PF09_LDO2>;
regulator-name = "vdd_sdio2";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-boot-on;
};
};
};
};
};
Example of a regulator consumer in the device tree
Certain device drivers have a property in the form <propname>-supply to help users define them as consumers of a power regulator.
You can use this property to provide the phandle of the regulator that powers the device.
This mechanism reduces the overall power consumption of the system by allowing the driver to enable the regulator when the interface is being used and disable it (or set a lower voltage) when the system goes to suspend or the driver is unloaded.
For example, on the ConnectCore 95 Development Kit, the uSDHC2 controller (microSD) is powered by LDO2.
/* MicroSD */
&usdhc2 {
pinctrl-names = "default", "state_100mhz", "state_200mhz", "sleep";
pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_gpio>;
pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>;
pinctrl-3 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
vmmc-supply = <®_vdd_3v3_dummy>;
vqmmc-supply = <&scmi_vdd_sdio2>;
cd-gpios = <&gpio3 00 GPIO_ACTIVE_HIGH>;
fsl,cd-gpio-wakeup-disable;
bus-width = <4>;
status = "okay";
};