[Armadillo:09204] A-4x0 でのgpio-keyのパッチ

Yasuhisa Nakamura email@hidden
2013年 9月 22日 (日) 13:02:17 JST


中村です。

質問や不具合ではなくて、こんなのがありました情報です。
2つあります。

その1)チャタリング防止

去年の2月〜3月に、こういう投稿がありました。
[Armadillo:07918] Armadillo-440 インプットデバイスのチャタリング防止について
http://lists.atmark-techno.com/pipermail/armadillo/2012-February/007921.html
[Armadillo:07920] Re: Armadillo-440 インプットデバイスのチャタリング防止について
http://lists.atmark-techno.com/pipermail/armadillo/2012-March/007923.html

このときは、自分で改造するしかない、ということでしたが、
探してみたところ、より新しいバージョンのgpio-keyドライバで
対応してましたので、バックポートして使ってみました。

Input: gpio-keys debouncing support
http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=a33466e31213cd7c46696160d3db78680b58f6a3

Input: gpio-keys - fix possible NULL pointer dereference
http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=74dd4393445ba37b79041d92de6ff7e7b68a4aec

確か、パッチがリジェクトされるところがあって、
手作業での修正が必要だったと思います。

arch/arm/mach-mx25/armadillo400.c の
  static struct gpio_keys_button armadillo400_key_buttons[]
も修正が必要で、ボタンごとにパラメタを設定できます。


その2)リピート

リピート機能そのものはすでに入っていて、
それを使う!というフラグを追加するだけです。

Input: gpio-keys - add flag to allow auto repeat
http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=b67b4b117746aef686e527c3205792db0f2c9e16

これを使うには、arch/arm/mach-mx25/armadillo400.c の
  static struct gpio_keys_platform_data armadillo400_gpio_key_data = {
の修正が必要で、こちらはボタンごとではなくて、
全体でリピート機能を使うか使わないかの設定です。

リピートの2つのパラメタは、ioctlで取得と設定ができます。
エラー処理などを省略して要点だけ書くと、こんな感じ。

  int rep[2];
  int fd = open("/dev/input/event0", O_RDWR);

  // 取得
  ioctl(fd, EVIOCGREP, rep);
  printf("delay: %d, repeat rate: %d\n", rep[0], rep[1]);

  // 設定
  rep[0] = atoi(argv[1]); // delay
  rep[1] = atoi(argv[2]); // repeat rate
  ioctl(fd, EVIOCSREP, rep);


Armadillo-460のGPIOにボタンを7個ほど追加して1ヶ月くらい
使っていますが、問題はなさそうです。

-- 
なかむら




armadillo メーリングリストの案内