DART-6UL WakeableGPIO
In Suspend mode, The power domains of all pins of the SOM are switched off in memory retention mode => All GPIOs lose their state.
The only domain that remains alive is RTC domain (SNVS) and the only pins that still accessible are bank 5 of the GPIO.
The DART-6UL provides 4 external GPIO pins that are a part of bank 5, and can be used for waking the system up and for controlling external peripherals in sleep mode.
In the below example we will use GPIO5_1 to wake up the system. This pin is exposed on J2.64 of the SOM and on pin J6.6 of the EVK.
Device tree adjustments
Follow either the "Build the Linux kernel from source code" or "Customizing the Linux kernel" wiki pages and edit the the appropriate device tree for your board (arch/arm/boot/dts/imx6ul-imx6ull-var-dart-common.dtsi in the kernel source tree) according to the following instruction.
If you build the kernel manually from source code, you should build only the device trees and copy them to your SD card.
Define GPIO as a key pad
Add the following right after the leds section:
gpio_keys { compatible = "gpio-keys"; #address-cells = <1>; #size-cells = <0>; autorepeat; button@21 { label = "GPIO Key UP"; linux,code = <103>; gpios = <&gpio5 1 1>; gpio-key,wakeup; }; };
Add GPIO pad configuration
Add the following in the pinctrl_hog_1 group for iMX6UL based SoMs:
MX6UL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x1b0b0 /* WAKE gpio */
If your SoM is based on iMX6ULL or iMX6ULZ, add instead
MX6ULL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x1b0b0 /* WAKE gpio */
Enter memory retention mode
On the target, if pm-utils is installed, run:
# pm-suspend
else run
# echo mem > /sys/power/state
Wake up the system
Connect pins J6.6 and J6,8 with a jumper. It will wake the system up.
You can also press the PWR button to wake up the system.