ブログ

Armadillo-400シリーズ:GPIOを使ったボタン入力を追加する

at_kazutaka.bito
2015年9月14日 17時42分

Armadillo-400シリーズの標準カーネルでは、タクトスイッチ、LCD拡張ボードのスイッチ(Armadillo420を除く)のボタン入力が 実装されている。

参考)
Armadillo-400 シリーズソフトウェアマニュアル 第9章 Linux カーネルデバイスドライバー仕様 9.11. ボタン

ここでは、下記のようにGPIOを使ったボタン入力を追加する。
 使用端子: CON9の26pin(GPIO2_22)
 キーのコード: KEY_KP3

参考)GPIO(GPIO2_22)の名称
Armadillo-400シリーズハードウェアマニュアル 第5章 インターフェース仕様 - 「Armadillo-420/440」 5.3.6. CON9(拡張インターフェース1) - 「Armadillo-420/440」 表5.16 CON9信号マルチプレクス - 「Armadillo-420/440」

参考)キーのコード(KEY_KP3)の定義
Linuxカーネルソースコード atmark-dist/linux-2.6.x/include/linux/input.h

1.カーネルの修正

atmark-dist/linux-2.6.x/arch/arm/mach-mx25/armadillo400.c 内の下記の2か所を変更する。

static struct mxc_ext_gpio gpio_list_revc[] 内の {"CON9_26", GPIO(2, 22), MXC_EXT_GPIO_DIRECTION_INPUT}, をコメントアウト。

static struct mxc_ext_gpio gpio_list_revc[] = {
<略>
#if defined(CONFIG_ARMADILLO400_CON9_26_GPIO)
//    {"CON9_26",  GPIO(2, 22), MXC_EXT_GPIO_DIRECTION_INPUT}, 
#endif
<略>
}

static struct gpio_keys_button armadillo400_key_buttons[] 内に {KEY_KP3, GPIO(2, 22), 1, "CON926", EV_KEY, 1}, を追加。(下記/**** CON9_26 for Button ****/のある行)

static struct gpio_keys_button armadillo400_key_buttons[] = {
#if !defined(CONFIG_ARMADILLO400_SELECT_MUX_AS_A410)
    {KEY_ENTER, GPIO(3, 30), 1, "SW1",     EV_KEY, CONFIG_ARMADILLO400_SW1_GPIO_3_30_IS_WAKE_SRC},
#if defined(CONFIG_MACH_ARMADILLO410) || defined(CONFIG_MACH_ARMADILLO440) || defined(CONFIG_MACH_ARMADILLO460)
    {KEY_BACK,  GPIO(2, 20), 1, "LCD_SW1", EV_KEY, CONFIG_ARMADILLO400_CON11_39_GPIO_2_20_IS_WAKE_SRC},
#if defined(CONFIG_ARMADILLO400_CON11_40_GPIO_2_29)
    {KEY_MENU,  GPIO(2, 29), 1, "LCD_SW2", EV_KEY, CONFIG_ARMADILLO400_CON11_40_GPIO_2_29_IS_WAKE_SRC},
#endif
#if defined(CONFIG_ARMADILLO400_CON11_41_GPIO_2_30)
    {KEY_HOME,  GPIO(2, 30), 1, "LCD_SW3", EV_KEY, CONFIG_ARMADILLO400_CON11_41_GPIO_2_30_IS_WAKE_SRC},
#endif
    {KEY_KP3,  GPIO(2, 22), 1, "CON926", EV_KEY, 1}, /**** CON9_26 for Button ****/
#endif /* CONFIG_MACH_ARMADILLO410 || CONFIG_MACH_ARMADILLO440 || CONFIG_MACH_ARMADILLO460 */
#endif /* CONFIG_ARMADILLO400_SELECT_MUX_AS_A410 */
};

2.カーネルをビルドして、Armadilloに書き込む

3.ボタン入力が追加されたことを確認

evtestコマンドで、/dev/input/event0を確認する。

[root@armadillo440-0 (ttymxc1) ~]# evtest /dev/input/event0
Input driver version is 1.0.0
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "gpio-keys"
Supported events:
  Event type 0 (Sync)
  Event type 1 (Key)
    Event code 28 (Enter)
    Event code 81 (KP3)
    Event code 102 (Home)
    Event code 139 (Menu)
    Event code 158 (Back)

上記のように Event code 81 (KP3) が追加されていることを確認。