ODROID-C2: Power Off and Wake Up Using a Simple GPIO Button

ODROID-C2: Power Off and Wake Up Using a Simple GPIO Button

This article describes how to setup a GPIO key button for power off and wake up purposes. The brief setup steps include the following:

  • Connecting a tab button to the pin port you want to use
  • Setting the GPIO number using boot.iniCompiling and flashing the modified kernel
  • DTS, which is only needed for Android

Hardware Setup

First, you need to prepare a tab switch that will be connected to two GPIO lines. The red wire will be for power and the gray wire will be for the active level line (ground or 3.3V power).

Figure 1 - Material for ODROID-C2 Power Button project

The ODROID-C2 pin layout diagram at http://bit.ly/2aXAlmt will come in very handy for this project. In our case, we will use Pin# 29 of the 40-pin expansion connector. The pin is assigned to GPIOX.BIT0 and its GPIO number is 228. Connect the red line to Pin# 29. Its default pin pulled status is high and switch active will be low. So, you should connect the gray line of tab switch to Ground (GND), Pin# 30.

Pin Number (Red Line) GPIO Number Active Level (Gray Line)
29 GPIO# 228 Active Low (Pin 30)

Available Keys

Here are the available key examples on the 40-pin connector and 7-pin connector. You can find the pin assign examples for Red Line and Gray Line. (1) J2 - 2×20 pins

Active Level (Gray Line) GPIO # Pin # (Red Line) Pin # (Red Line) GPIO # Active Level (Gray Line)
- 3.3V Power 1 2 - -
- - 3 4 - -
- - 5 6 Ground -
Active Low (Pin 9) GPIO# 249 7 8 - -
- Ground 9 10 - -
Active Low (Pin 14) GPIO# 247 11 12 GPIO#238 Active Low (Pin 14)
Active Low (Pin 14) GPIO# 239 13 14 Ground -
Active Low (Pin 14) GPIO# 237 15 16 GPIO#236 Active Low (Pin 14)
- 3.3V Power 17 18 GPIO#233 Active Low (Pin 20)
Active Low (Pin 20) GPIO# 235 19 20 Ground -
Active Low (Pin 20) GPIO# 232 21 22 GPIO#231 Active Low (Pin 20)
Active Low (Pin 25) GPIO# 230 23 24 GPIO#229 Active Low (Pin 25)
- Ground 25 26 GPIO# 225 Active High (Pin 17)
- - 27 28 - -
Active Low (Pin 30) GPIO# 228 29 30 Ground -
Active Low (Pin 30) GPIO# 219 31 32 GPIO# 224 Active Low (Pin 34)
Active High (Pin 17) GPIO# 234 33 34 Ground
Active Low (Pin 34) GPIO# 214 35 36 GPIO# 218 Active Low (Pin 34)
- - 37 38 - -
- Ground 39 40 - -

(2) J7 - 1×7 pins

Pin # (Red Line) GPIO # Active Level (Gray Line)
1 Ground -
2 GPIO# 128 Active Low (Pin 1)
3 5.0V Power -
4 GPIO# 130 Active Low (Pin 1)
5 GPIO# 132 Active Low (Pin 1)
6 GPIO# 131 Active Low (Pin 1)
7 GPIO# 133 Active Low (Pin 1)

You can find the detailed information about 40-pin and 7-pin expansion connectors at http://bit.ly/2gzCA7c.

Ubuntu software setup

The release version should be 3.14.79-107 (Feb 26, 2017) or higher. You can assign GPIO number with env gpiopower in boot.ini:

## gpio power key : J2 (2x20) Pin#29 , GPIOX.BIT0
setenv gpiopower "228"
...
## Add gpiopower like "setenv bootargs ${bootargs} gpiopower=${gpiopower}"
setenv bootargs "root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro ${condev} no_console_suspend hdmimode=${m} ${cmode} m_bpp=${m_bpp} vout=${vout} fsck.repair=yes net.ifnames=0 elevator=noop disablehpd=${hpd} max_freq=${max_freq} maxcpus=${maxcpus} monitor_onoff=${monitor_onoff} disableuhs=${disableuhs} mmc_removable=${mmc_removable} usbmulticam=${usbmulticam} ${hid_quirks} gpiopower=${gpiopower}"

Setting Power Button Action for Power Off

If you intend to turn the board off using the power button, you will need to change the power key action pattern. To facilitate that, first open the Power Management Preferences dialog ([System] → [Preferences] → [Hardware] → [Power Management]) and select the [General] tab.

Figure 2: Power management preferences

Wake up Action

To wake the system up after power off, a long-duration (2-3 seconds) pressing of the power button is needed.

Android software setup

In Android, you have to modify the DTS file in Android Marshmallow (v2.4) and higher version to use this functionality.

You will have to modify the DTS file to activate the GPIO key functionality:

/arch/arm64/boot/dts/meson64_odroidc2.dts
...
gpio_keypad{
    .
    status = "okay";
    .
};
…
After compiling the DTS file, you can flash the DTB file to the board:
$ make odroidc2_defconfig
$ make dtbs
$ fastboot flash dtb arch/arm64/boot/dts/meson64_odroidc2.dtb
$ fastboot reboot
You have to flash the DTBS file when the board is in u-boot fastboot mode:
$ reboot fastboot

Setting boot.ini

In the Android boot.ini, you can uncomment the “gpipower” entry and modify the number to the number relevant in your case:

## gpio power key : J2 (2x20) Pin#29 , GPIOX.BIT0
setenv gpiopower "228"

Setting Power Button Action for Power Off

In Android, you do not need to select any menu options for power button actions. It is already defined as follows:

One short power key event is used for sleep, and with long key event, you can handle options of power off/reboot.

With Android Marshmallow v2.4 or higher version, it is possible to enter power off using a long-duration press (5 seconds).

Wake up Action

To wake-up after power off, a long-duration press (2-3 seconds) will be needed.

Troubleshooting

You can refer to the forum posts at http://bit.ly/2gtE4MA and http://bit.ly/2zGwB4X for troubleshooting tips. For comments, questions, and suggestions, visit http://bit.ly/2yYFWrB.

Be the first to comment

Leave a Reply