da-takatori
2021年2月26日 13時55分
お世話になっております。
高取と申します。
パワーマネジメントにおける、Suspend-to-RAMからの復帰要因としてGPINを使用したいと考えています。
具体的には、拡張ボードだとUART1_RXとして使用する91番ピン(GPIO1_1026)をGPINとして使用し、そのGPINへの入力を外部割り込み要因として起床させるというものです。
もしかすると、ドライバを作成しなければならないのかも?とも思ったのですが、なにか参考になる情報などありましたらご教示いただければ幸いです。
お忙しいところ申し訳ございませんが、よろしくお願いいたします。
コメント
at_akihito.irie
da-takatori
at_akihito.irie
入江です。
ご回答ありがとうございます。
GPIOを復帰要因として使用するにはdtsの修正が必要ですが、現状at-dtwebは
その修正に対応しておりません。
そのため、
at-dtwebでdts(及びdtb)作成→作成されたdtsを修正→再ビルドしてdtbを生成
という手順を取る必要があります。
なお、以下の手順では15番ピンにHigh(+3.3V)が印加された時に復帰する例を
示します。
まずはat-dtwebで任意のピンアサインでsaveします。
その後at-dtwebを終了し、linuxカーネルソースディレクトリ内の、
arch/arm/boot/dts/armadillo-610-expansion-interface.dtsiの以下の3箇所
を修正します。
(1箇所目)
#include "armadillo-610-onboard-usdhc2.dtsi"
↓1行追加
#include "armadillo-610-onboard-usdhc2.dtsi" #include "gpio-wakeup.dtsi" // この行を追加
(2箇所目)
MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x400010b0 // CON2_15
↓コメントアウト
// MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x400010b0 // CON2_15
(3箇所目)
MX6UL_PAD_JTAG_MOD__GPIO1_IO10 0x400010b0 // CON2_43
↓設定値の変更
MX6UL_PAD_JTAG_MOD__GPIO1_IO10 0x10b0 // CON2_43
また、添付のgpio-wakeup.dtsiをarch/arm/boot/dts/に配置してください。シ
ステムの都合上gpio-wakeup.dtsi_.txtとして添付していますが、末尾の_.txt
は消してください。
その後、linuxカーネルソースディレクトリ直下で以下のコマンドを実行して
dtbを再ビルドします。
[ATDE]$ pwd /home/atmark/linux-v4.14-at[VERSION] // linuxカーネルソースディレクトリ直下 [ATDE]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- armadillo-610-at-dtweb.dtb
実行後、arch/arm/boot/dts/armadillo-610-at-dtweb.dtbが生成されるので、
Armadillo-610に書き込み再起動してください。
その後、Suspend-to-RAMから15番ピンへのHigh印加で復帰することをご確認く
ださい。
注意事項としまして、上記手順の後に再度at-dtwebでdtbを作成すると、
armadillo-610-expansion-interface.dtsiへの修正が上書きされ消えてしまい
ます。
そのため、再度at-dtwebでdtbを作成した場合は、上記手順の
armadillo-610-expansion-interface.dtsiの修正を再度行う必要がありますの
でご注意ください。
ファイル | ファイルの説明 |
---|---|
gpio-wakeup.dtsi_.txt | 末尾の「_.txt」を消してからご使用ください。 |
da-takatori
da-takatori
お世話になっております。
高取です。
GPINからの復帰については、解決いたしました。
ところで、当該修正を加えた場合、15番ピン(GPIO1_IO03)はGPIOのSysfsとして使用することはできますでしょうか?
修正を実施した状態で
echo 3 > /sys/class/gpio/export
を入力すると、
-bash: echo: write error: Device or resource busy
が出力されます。
ちなみに、/sys/class/gpio/gpio3は存在しておりません。
お忙しいところ恐縮ですが、アドバイスいただければ幸いです。
よろしくお願いいたします。
at_akihito.irie
da-takatori
at_akihito.irie
入江です。
過去のフォーラムでgpio-keysの値を読むサンプルコードを作成された例があ
りましたので、こちらを参考にするといいかもしれません。
https://armadillo.atmark-techno.com/forum/armadillo/2125
当方で上記プログラムをArmadillo-610上でコンパイルして動作確認済みです。
da-takatori
at_akihito.irie
入江です。
> gpio-keysの値の読み取りにおけるビット位置(サンプルでは、(i*8+j)番目のビット)は、カーネルとDTBを変えなければ固定されると認識しておりますが、その認識は正しいでしょうか?
ご認識のとおりです。
先に添付しましたgpio-wakeup.dtsi内で、
linux,code = <KEY_ENTER>;
としています。
KEY_ENTERはlinux-4.14-at[VERSION]/include/uapi/linux/input-event-codes.h内で
定義されており、
#define KEY_ENTER 28
となっています。
そのため、ビット位置(=keycode)はdtsの上記箇所の設定で固定です。
da-takatori
da-takatori
2021年2月26日 16時02分
高取です。
91番ピンは私の勘違いでした。
申し訳ございません。
UART1_RXに割り付けられる15番ピンをGPINとして使用し、復帰要因として使えないか?というご相談です。
よろしくお願いいたします。