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

drivers/regulator/scmi-regulator.c

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

VDD_3V3

SW1

Internal 3V3 power supply

VDD_ANA_0V8

SW2

Internal 0V8 power supply

VDD_1V8

SW3

Internal 1V8 power supply

LPD5_VDDQ

SW4

LPDDR5 power supply

LPD5_VDD2

SW5

LPDDR5 power supply

VDD_SDIO2

LDO2

uSDHC2 power supply

LDO3

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

VDD_3V3

SW1

3.3 V

RS485, uSD, Ethernet, Camera, LVDS, USB, Audio

LDO1

LDO1

3.3 V

Not used

VDD_SDIO2

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.

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

ConnectCore 95 Development Kit device tree
/* 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 = <&reg_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";
};