TI论坛
直播中

蔡旻杨

7年用户 181经验值
私信 关注

am335x通过devicetree配置矩阵键盘,只有部分按键功能有效,这是为什么?如何解决?

本帖最后由 一只耳朵怪 于 2018-6-21 10:08 编辑

最近用设备树文件去配置一个6x8(6列8行)的矩阵键盘,驱动用的是内核里面的matrix_keypad.c通用矩阵键盘驱动;
遇到的问题:在通过加载设备树启动后只有部分按键功能有效;如上图2、3、4、5行的所有按键没都反应,第6列的所有按键一按下就会把该按键所在行的所有按键的键值报上去,其他按键上报的的code和value都是正确的。驱动我就加了点注释内核原有的驱动程序应该没bug的吧?
内核是Linux-3.8.13
交叉编译器用的是ti-sdk-am335x-evm-08.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin/ARM-linux-gnueabihf-
设备树配置如下:
  1. / [
  2. compatible = "ti,beaglebone-black";
  3. /* identification */
  4. part-number = "HCN-KEYpads-01";
  5. version = "00A0";
  6. /* state the resources this cape uses */
  7. exclusive-use =
  8. /* the pin header uses */
  9. "P8.18", /* gpio2_1 */
  10. "P8.26", /* gpio1_29 */
  11. "P9.12", /* gpio1_28 */
  12. "P9.11", /* gpio0_30 */
  13. "P9.13", /* gpio0_31 */
  14. "P8.14", /* gpio0_26 */
  15. "P8.17", /* gpio0_27 */
  16. "P8.12", /* gpio1_12 */      ------------》八行
  17. "P8.11", /* gpio1_13 */
  18. "P8.16", /* gpio1_14 */
  19. "P8.15", /* gpio1_15 */
  20. "P9.15", /* gpio1_16 */
  21. "P9.23", /* gpio1_17 */
  22. "P9.16", /* gpio1_19 */------------》六列
  23. /* the hardware IP uses */
  24. "gpio2_1",
  25. "gpio1_29",
  26. "gpio1_28",
  27. "gpio0_30",
  28. "gpio0_31",
  29. "gpio0_26",
  30. "gpio0_27",
  31. "gpio1_12",
  32. "gpio1_13",
  33. "gpio1_14",
  34. "gpio1_15",
  35. "gpio1_16",
  36. "gpio1_17",
  37. "gpio1_19";

  38. fragment@0 [
  39. target = <&am33xx_pinmux>;
  40. __overlay__ [
  41. matrix_keypad_s0: matrix_keypad_s0 [
  42. pinctrl-single,pins = <
  43. 0x08c 0x37 /* gpio2_1 INPUT_PULLUP | MODE7 */
  44. 0x07c 0x37 /* gpio1_29 INPUT_PULLUP | MODE7 */
  45. 0x078 0x37 /* gpio1_28 INPUT_PULLUP | MODE7 */
  46. 0x070 0x37 /* gpio0_30 INPUT_PULLUP | MODE7 */
  47. 0x074 0x37 /* gpio0_31 INPUT_PULLUP | MODE7 */
  48. 0x028 0x37 /* gpio0_26 INPUT_PULLUP | MODE7 */
  49. 0x02c 0x37 /* gpio0_27 INPUT_PULLUP | MODE7 */
  50. 0x030 0x37 /* gpio1_12 INPUT_PULLUP | MODE7 */
  51. 0x034 0x7 /* gpio1_13 OUTPUT | MODE7 */
  52. 0x038 0x7 /* gpio1_14 OUTPUT | MODE7 */
  53. 0x03c 0x7 /* gpio1_15 OUTPUT | MODE7 */
  54. 0x040 0x7 /* gpio1_16 OUTPUT | MODE7 */
  55. 0x044 0x7 /* gpio1_17 OUTPUT | MODE7 */
  56. 0x04c 0x7 /* gpio1_19 OUTPUT | MODE7 */
  57. >;
  58. ];
  59. ];
  60. ];
  61. fragment@1 [
  62. target = <&ocp>;
  63. __overlay__ [
  64. matrix_keypad [
  65. compatible = "gpio-matrix-keypad";
  66. pinctrl-names = "default";
  67. pinctrl-0 = <&matrix_keypad_s0>;
  68. debounce-delay-ms = <5>;
  69. col-scan-delay-us = <2>;
  70. row-gpios = <&gpio3 1 0>, /* Bank2, pin1 */
  71. <&gpio2 29 0>, /* Bank1, pin29 */
  72. <&gpio2 28 0>,
  73. <&gpio1 30 0>,
  74. <&gpio1 31 0>,
  75. <&gpio1 26 0>,
  76. <&gpio1 27 0>,
  77. <&gpio2 12 0>; /* Bank1, pin12 */
  78. col-gpios = <&gpio2 13 0>,
  79. <&gpio2 14 0>, /* Bank1, pin14 */
  80. <&gpio2 15 0>,
  81. <&gpio2 16 0>,
  82. <&gpio2 17 0>,
  83. <&gpio2 19 0>; /* Bank1, pin19 */
  84. linux,keymap = <0x0000002f /* */
  85. 0x0100003b
  86. 0x0200003c
  87. 0x03000067
  88. 0x0400006a
  89. 0x0500006c
  90. 0x06000010
  91. 0x07000069
  92. 0x00010012 /* */
  93. 0x01010068
  94. 0x0201006d
  95. 0x03010013
  96. 0x04010014
  97. 0x0501001c
  98. 0x06010011
  99. 0x07010022
  100. 0x00020015 /* */
  101. 0x01020016
  102. 0x02020004
  103. 0x03020007
  104. 0x0402000a
  105. 0x0502000c
  106. 0x06020017
  107. 0x07020023
  108. 0x00030018 /* */
  109. 0x01030019
  110. 0x02030003
  111. 0x03030006
  112. 0x04030009
  113. 0x05030053
  114. 0x0603001f
  115. 0x07030024
  116. 0x0004001e /* */
  117. 0x01040020
  118. 0x02040002
  119. 0x03040005
  120. 0x04040008
  121. 0x0504000b
  122. 0x06040021
  123. 0x07040025
  124. 0x00050001 /* */
  125. 0x0105000e
  126. 0x0205000f
  127. 0x0305003d
  128. 0x0405003e
  129. 0x0505003f
  130. 0x06050066
  131. 0x07050026>; /* */
  132. ];

检查了引脚复用没错误,行列的gpio分配,还有keymap。内核启动时设备树文件能顺利加载,上面通过检测程序去检测dev/input/event1上的按键事件,部分按键上报code和value是对的。
请各位帮我看看到底是哪里的问题。

回帖(4)

罗兰君

2018-6-21 06:24:54
你有参考过GPEVM的device tree文件么?那里面有矩阵键盘的实例。
举报

蔡旻杨

2018-6-21 06:37:55
引用: 344868615qq 发表于 2018-6-21 06:24
你有参考过GPEVM的device tree文件么?那里面有矩阵键盘的实例。

有啊,全是按照内核中devicetree中的文档写的,我部分按键是正确的。要么是配置问题,要么是通用驱动matrix-keypad.c哪里要改。按键硬件没问题的。。
举报

蔡旻杨

2018-6-21 06:44:59
引用: 344868615qq 发表于 2018-6-21 06:24
你有参考过GPEVM的device tree文件么?那里面有矩阵键盘的实例。

有啊,全是按照内核中devicetree中的文档写的,我部分按键是正确的。要么是配置问题,要么是通用驱动matrix-keypad.c哪里要改。按键硬件没问题的。。
举报

杨万富

2018-6-21 06:50:27
引用: chrisjohn 发表于 2018-6-21 06:44
<blockquote class="quote"/>有啊,全是按照内核中devicetree中的文档写的,我部分按键是正确的。要么是配置问题,要么是通用驱动matrix-keypad.c哪里要改。按键硬件没问题的。。

弱弱的问一句,怎么根据矩阵写keymap。第一次写矩阵键盘驱动。这个keymap一直不懂
举报

更多回帖

发帖
×
20
完善资料,
赚取积分