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@
以上