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 |
---|---|
PF3000 driver |
Device tree bindings and customization
The PF3000 device tree binding is documented at Documentation/devicetree/bindings/regulator/pfuze100.txt.
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.
&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.aips-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.aips-bus/21a0000.i2c/i2c-0/0-0008/nvram 0+1 records in 0+1 records out