The ConnectCore 6UL contains an NXP PF3000 Power Management IC (PMIC). The PMIC is connected to the CPU via the I2C1 port (address 0x08).

The PMIC has the following features:

  • Four buck regulators

  • One boost regulator

  • Six low-dropout (LDO) regulators

  • Coin cell charger

  • DDR reference voltage

  • Battery-backed memory (4 bytes)

Kernel configuration

You can manage the PF3000 driver support through the following kernel configuration option:

  • Freescale PFUZE100/PFUZE200 regulator driver (CONFIG_REGULATOR_PFUZE100)

This option is enabled as built-in on the default ConnectCore 6UL kernel configuration file.

Kernel driver

The driver for PF3000 driver is located at:

File Description

drivers/regulator/pfuze100-regulator.c

PF3000 driver

Device tree bindings and customization

The PF3000 device tree binding is documented at Documentation/devicetree/bindings/regulator/pfuze100.yaml.

The PMIC and its regulators are defined on the ConnectCore 6UL device tree at arch/arm/boot/dts/imx6ul-ccimx6ul.dtsi. Some regulators are used internally inside the ConnectCore 6UL and some are used externally on the carrier board. The settings of the external regulators can be modified in the carrier board device tree if required by your platform.

ConnectCore 6UL internal regulators

The following regulators are used internally on the ConnectCore 6UL and their parameters should not be modified.
Device tree alias PF3000 regulator Description

int_3v3

SW1A

Powers several interfaces inside the module

vdd_arm_soc_in

SW1B

Internal CPU power supply

vcc_ddr3

SW3

DDR3 power supply

vdd_snvs_3v3

VSNVS

Internal CPU power supply

vrefddr

VREFDDR

DDR reference voltage

vdda_adc_3v3

LDO1

CPU ADC reference voltage

vdda_wlan

VCC_SD

Wireless chip power supply

vdd_high_in

V33

Internal CPU power supply

ConnectCore 6UL external regulators

The following regulators are routed outside the ConnectCore 6UL and may be used in the carrier board:

Device tree alias PF3000 regulator Type Default voltage Usage on ConnectCore 6UL SBC Express Usage on ConnectCore 6UL SBC Pro

swbst_reg

SWBST

Boost regulator

5 V

ext_3v3

SW2

Buck regulator

3.3 V

Ethernet PHY, microSD, Raspberry PI, Grove, UART, JTAG, bootstrap.

2x Ethernet PHY, microSD, eMMC, UART RS-232, I/O expander, USB hub, LVDS, parallel LCD, parallel camera, audio, CAN, XBee, NTAG, bootstrap

ldo2_ext

LDO2

LDO regulator

1.5 V

ldo4_ext

LDO4

LDO regulator

1.8 V

LVDS, audio

vcoin_chg

VCOIN

Coin cell charger

3 V

External coin cell

Digi recommends you use the device tree alias for modifying the ConnectCore 6UL external regulator parameters in the final platform DTS file.

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 6UL SBC Pro, the parallel LCD to LVDS converter is powered by PMIC LDO4. The LCD property lcd-supply allows you to define a power supply that will be controlled by the LCD driver.

ConnectCore 6UL SBC Pro device tree
&lcdif {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_lcdif_dat0_17
             &pinctrl_lcdif_clken
             &pinctrl_lcdif_hvsync>;
    lcd-supply = <&ldo4_ext>;    /* BU90T82 LVDS bridge power */
    display = <&f10a0102>;
    status = "disabled";

    ...
};

Read and write PMIC non-volatile registers

Besides the regulators, the PF3000 PMIC allows access to four 8-bit registers (MEMA .. MEMD) whose value is maintained by coin cell battery. The four registers can be read or written as binary data all at once through the sysfs.

To read them:

# hexdump -Cv /sys/devices/platform/soc/2100000.bus/21a0000.i2c/i2c-0/0-0008/nvram
00000000  00 00 00 00                                       |....|

To write hex values (for example MEMA=0x01, MEMB=0xAA, MEMC=0x02, MEMD=0xEF):

# printf "\x01\xAA\x02\xEF" | dd of=/sys/devices/platform/soc/2100000.bus/21a0000.i2c/i2c-0/0-0008/nvram
0+1 records in
0+1 records out