ブログ

Armadillo-400シリーズにLEDを追加する

at_takuya.sasaki
2014年12月14日 17時18分

Armadillo-400シリーズのドライバにはLEDクラスが用意されています。
https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_software_manual_ja-1.9.1/ch09.html#sec-led-class

Armadillo-420/440に標準で用意されている red / yellow / green のLED以外に、 新しいLEDを追加する際の手順です。

今回は、例としてCON9_28ピンをLEDクラスに割り当てます。 また諸事情により、kernel2.6.35に対する修正方法を記載していますが、2.6.26でも大きな違いはないと思います。

まずは以下のソースを編集します。

atmark@atde3:~/linux-2.6.35-at-alpha4/arch/arm/mach-mx25$ vi armadillo400_led.c
 
armadillo400_gpio_led_padsの末尾にGPIO_3_15の定義を追加します。
 
static struct pad_desc armadillo400_gpio_led_pads[] = {
        MX25_PAD_NFALE__GPIO_3_28(), /* red led */
        MX25_PAD_NFCLE__GPIO_3_29(), /* green led */
        MX25_PAD_BOOT_MODE0__GPIO_4_30(), /* yellow led */
        MX25_PAD_EXT_ARMCLK__GPIO_3_15(),
};

MX25_PAD_EXT_ARMCLK__GPIO_3_15は同一フォルダにあるarmadillo400_iomux.h で定義されています。 GPIOの信号名(GPIO3_15)は、ハードウェアマニュアルを参照してください。
https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_hardware_manual_ja-1.11.0/ch05.html#sec-con9-exp-iface1-a420-440

次に、armadillo400_led_pinsの末尾に、同じくGPIO3_15の定義を追加します。名前(ext1)は適当です。

static struct gpio_led armadillo400_led_pins[] = {
        GPIO_LED("red",    "default-on", GPIO(3, 28), 0),
        GPIO_LED("green",  "default-on", GPIO(3, 29), 0),
        GPIO_LED("yellow", "none",       GPIO(4, 30), 0),
        GPIO_LED("ext1",   "none",       GPIO(3, 15), 0),
};

これだけでは、GPIOクラスとバッティングします。以下のファイルを修正します。

atmark@atde3:~/linux-2.6.35-at-alpha4/arch/arm/mach-mx25$ vi armadillo400_gpio.c
 
GPIO3_15に関する箇所をコメントアウトしてください。
 
//      MX25_PAD_EXT_ARMCLK__GPIO_3_15(), /* no pull up */
//      { GPIO(3, 15), GPIOF_OUT_INIT_LOW },

もしくはKconfig.armadillo400を編集して、ARMADILLO400_CON9_28_GPIO3_15を default n にしてもいいかもしれません。

上記で修正は完了です。 makeして新しいカーネルイメージをArmadilloに焼いてください。

以下のようにext1ができているのがわかります。

[root@armadillo440-0 (ttymxc1) ~]# cd /sys/class/leds/
[root@armadillo440-0 (ttymxc1) /sys/class/leds]# ls
ext1@   green@  red@    yellow@

以上