tetsuya.ooka
2014年2月25日 9時17分
いつもお世話になっております。大岡です。
EXT_IO24はデフォルトだとLCD_SW1に割り当てられていますが、
GPIOクラス経由で制御する方法を教えてください。
とりあえず、v2.6.26-at18のカーネルコンフィグ項目の
Linux Kernel Configuration
System Type
Freescale MXC Implementations
MX25 Options
Armadillo-400 Board options
[ ] LCD_SW1 (CON11_39) ←ここ
上記箇所を無効化したのですが/sys/class/gpio/CON11_39 は出てきませんでした。
カーネルのソースコードを検索して、arch/arm/mach-mx25/armadillo400.c の314行目付近の
以下のあたりを修正したらいいのかなと思ったのですが、影響範囲がわからなくて
本当に修正していいのか迷っている状況です。
#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
正しい修正方法をご教授願えないでしょうか。よろしくお願いします。
コメント
at_daisuke.sasaki
佐々木です。
修正については、中村さんに ご説明頂いたとおりです。
補足の注意点として、以下のソースコード内でPADに対する設定を行なっています。
{linux-2.6.26}/arch/arm/mach-mx25/armadillo400_gpio.c
例えば、以下のコードではLCD_SW2(CON11_40)のIOに対し、47kΩのPull Up抵抗を有効に設定しており、
armadillo400_gpio_init関数にてレジスタに書きこまれます。
MX25_PAD_KPP_ROW0__GPIO_2_29(PAD_CTL_PKE | PAD_CTL_PUS_47K_UP),
※armadillo400_gpio.c:41行目
今回、質問の対象となっている、LCD_SW1(CON11_39)については、
常に47kΩでPull UpされているIOであるため、設定は変える必要がない(変えられない)のですが、
デフォルトからIOの役割を変更する場合には、ご使用の用途に合わせIOの設定も変更すべきか確認してください。
tetsuya.ooka
y.nakamura
2014年2月25日 16時01分
中村です。
> EXT_IO24はデフォルトだとLCD_SW1に割り当てられていますが、
> GPIOクラス経由で制御する方法を教えてください。
ちょうど同じあたりをさわろうとしていたところでしたので(作業の優先
順位としてはもう少し先なのですけど)こちらを先に見てみました。
> MX25 Options
> Armadillo-400 Board options
> [ ] LCD_SW1 (CON11_39) ←ここ
>
> 上記箇所を無効化したのですが/sys/class/gpio/CON11_39 は出てきませんでした。
この部分のKconfigとソースを見て、この設定がどこに影響を与えるのかを
調べる必要があります。
Kconfigによると、この設定で有効なるのは、
ARMADILLO400_CON11_39_GPIO_2_20_WAKE_SRC_SELECT
です。また、
ARMADILLO400_CON11_39_GPIO_2_20_IS_WAKE_SRC
が0か1になります。
ARMADILLO400_CON11_39_GPIO_2_20_WAKE_SRC_SELECT
は、ソース使っているところはありません。
ARMADILLO400_CON11_39_GPIO_2_20_IS_WAKE_SRC
は、大岡さんが書かれたarmadillo400.cの314行目付近に出てきます。
それ以外はありません。
ARMADILLO400_CON11_39_GPIO_2_20_IS_WAKE_SRC
は、wakeupに使うかどうかというフラグであって、gpioクラスに
するか?とか、gpio_keysにするか?とかとは関係ないですね。
CON11_39(GPIO_2_20)をgpio_keysにするか、GPIOクラスにするかは、
カーネルコンフィグで切り替えはできず、ソースを直接修正するしかないです。
armadillo400.cでは、CON11_39(GPIO_2_20)はgpio_keysとして
使うことになっていて、armadillo400.cの314行目付近の
の配列に入ってしまっています。
まずは、この配列からCON11_39を外します。
(gpio_keysとgpioクラスを同時には使えないと思うので)
次に、
または
の配列の中に(両方に入れてしまって大丈夫でしょう)CON11_39の
設定を入れてあげる必要があります。
たぶん、こんなのを入れてあげればいいのではないかと思います。
まだ自分では試してないですけど、たぶんこれでいいのではないかと思います。
余談ですが...Armadillo-410で(420や440と互換にすることなく)これらの
GPIOを使うときに"CON11_XX"って使いにくいですよね。
CON9_XXやCON11_XXは別の名前を付けてしまってもいいのでは
ないかと思います。
--
なかむら