at_takuya.sasaki
2014年11月24日 18時32分
Armadillo-400シリーズで使用可能であった、gpioctrlをArmadillo-840でも使用できるようにしてみたいと思います。 (注意) 実際にハードウェアを接続しての検証はしておりません。 あくまでソフトウェア的に移植をしたところまでですので、ご了承ください。
[9.9.2. Armadillo-200 シリーズ互換 GPIO ドライバー]
https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_software_manual_ja-1.9.1/ch09.html#sec-armadillo-200-series-gpio-driver
1) ユーザーランドとカーネルを展開します
atmark@atde5:~$ ln -s atmark-dist-20140602/ atmark-dist
atmark@atde5:~$ cd atmark-dist
atmark@atde5:~/atmark-dist$ ln -s ../linux-3.4-at10 ./linux-3.x
2) パッチを /home/atmark に置きます。
パッチは以下からダウンロードしてください。
atmark@atde5:~$ ls *patch
atmark-dist-gpioctrl-support.patch linux-3.4-at10-a2x0-gpio-support.patch
3) パッチを適用します
atmark@atde5:~$ cd atmark-dist
atmark@atde5:~/atmark-dist$ patch -p 1 < ~/atmark-dist-gpioctrl-support.patch
atmark@atde5:~/atmark-dist$ cd ../linux-3.4-at10/
atmark@atde5:~/linux-3.4-at10$ patch -p 1 < ~/linux-3.4-at10-a2x0-gpio-support.patch
4) make menuconfigを実行します
atmark@atde5:~/linux-3.4-at10$ cd ~/atmark-dist
atmark@atde5:~/atmark-dist$ make menuconfig
vendor: AtmarkTechno
product: Armadillo-840
を選択しああと、
カーネルコンフィギュレーションで、
/sys/class/gpioのチェックを外し、
Device Drivers --->
-*- GPIO Support --->
[ ] /sys/class/gpio/... (sysfs interface) ←チェックを外す
Armadillo-2x0 GPIOドライバにチェックをつけてください。
Device Drivers --->
Character devices --->
<*> Armadillo-2x0 compatible GPIO driver (deprecated) ←チェックをつける
5) make を実行します。
atmark@atde5:~/atmark-dist$ make
6) linux.bin.gz / romfs.img.gzをArmadillo-840に書き込みます。
7) 以下のようにgpioctrlを実行できるところまで確認しています。
GPIO0~GPIO4まで定義しています。 使用できるポートは以下のソースコードで定義していますので、適時変更してください。
linux-3.4-at10/arch/arm/mach-shmobile/board-armadillo840.c
static struct armadillo2x0_gpio_info armadillo400_a2x0_compat_gpio_info[] = {
ARMADILLO2X0_GPIO_PIN_INPUT(GPIO0, GPIO_PORT182, 1), // EXT CON13 pin7
ARMADILLO2X0_GPIO_PIN_INPUT(GPIO1, GPIO_PORT181, 1), // EXT CON13 pin8
ARMADILLO2X0_GPIO_PIN_INPUT(GPIO2, GPIO_PORT180, 1), // EXT CON13 pin9
ARMADILLO2X0_GPIO_PIN_INPUT(GPIO3, GPIO_PORT179, 1), // EXT CON13 pin10
ARMADILLO2X0_GPIO_PIN_INPUT(GPIO4, GPIO_PORT178, 1), // EXT CON13 pin11
};
GPIO0の状態を表示します。
root@armadillo840-0 (ttySC2) ~]# gpioctrl --get=gpio0
GPIO No. : 1 (GPIO0)
MODE : 1 (MODE_INPUT)
VALUE : 1 (HIGH)
INTERRUPT : 0 (DISABLE)
GPIO0をOUTPUTにしてLowに設定します。
[root@armadillo840-0 (ttySC2) ~]# gpioctrl --set=gpio0 --mode=output --type=low
[root@armadillo840-0 (ttySC2) ~]# gpioctrl --get=gpio0
GPIO No. : 1 (GPIO0)
MODE : 0 (MODE_OUTPUT)
VALUE : 0 (LOW)
割込み(IRQ)に使えるのはGPIO2です。
[root@armadillo840-0 (ttySC2) ~]# gpioctrl --set=gpio2 --mode=input --type=risin
g-edge --debounce --handler="echo interrupted"
以上