TI中文支持网
TI专业的中文技术问题搜集分享网站

am335x通过devicetree配置矩阵键盘

最近用设备树文件去配置一个6×8(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-

设备树配置如下:

/ {
compatible = "ti,beaglebone-black";

/* identification */
part-number = "HCN-KEYPADS-01";
version = "00A0";

/* state the resources this cape uses */
exclusive-use =
/* the pin header uses */
"P8.18", /* gpio2_1 */
"P8.26", /* gpio1_29 */
"P9.12", /* gpio1_28 */
"P9.11", /* gpio0_30 */ 
"P9.13", /* gpio0_31 */
"P8.14", /* gpio0_26 */
"P8.17", /* gpio0_27 */
"P8.12", /* gpio1_12 */      ————》八行
"P8.11", /* gpio1_13 */
"P8.16", /* gpio1_14 */
"P8.15", /* gpio1_15 */
"P9.15", /* gpio1_16 */ 
"P9.23", /* gpio1_17 */
"P9.16", /* gpio1_19 */————》六列

/* the hardware IP uses */
"gpio2_1",
"gpio1_29", 
"gpio1_28",
"gpio0_30",
"gpio0_31",
"gpio0_26",
"gpio0_27",
"gpio1_12",
"gpio1_13",
"gpio1_14",
"gpio1_15",
"gpio1_16",
"gpio1_17",
"gpio1_19";

fragment@0 {
target = <&am33xx_pinmux>;
__overlay__ {

matrix_keypad_s0: matrix_keypad_s0 {
pinctrl-single,pins = < 
0x08c 0x37 /* gpio2_1 INPUT_PULLUP | MODE7 */
0x07c 0x37 /* gpio1_29 INPUT_PULLUP | MODE7 */
0x078 0x37 /* gpio1_28 INPUT_PULLUP | MODE7 */
0x070 0x37 /* gpio0_30 INPUT_PULLUP | MODE7 */
0x074 0x37 /* gpio0_31 INPUT_PULLUP | MODE7 */
0x028 0x37 /* gpio0_26 INPUT_PULLUP | MODE7 */
0x02c 0x37 /* gpio0_27 INPUT_PULLUP | MODE7 */
0x030 0x37 /* gpio1_12 INPUT_PULLUP | MODE7 */
0x034 0x7 /* gpio1_13 OUTPUT | MODE7 */
0x038 0x7 /* gpio1_14 OUTPUT | MODE7 */
0x03c 0x7 /* gpio1_15 OUTPUT | MODE7 */
0x040 0x7 /* gpio1_16 OUTPUT | MODE7 */
0x044 0x7 /* gpio1_17 OUTPUT | MODE7 */
0x04c 0x7 /* gpio1_19 OUTPUT | MODE7 */
>;
};
};
};

fragment@1 {
target = <&ocp>;
__overlay__ {
matrix_keypad {
compatible = "gpio-matrix-keypad";
pinctrl-names = "default";
pinctrl-0 = <&matrix_keypad_s0>;

debounce-delay-ms = <5>;
col-scan-delay-us = <2>;

row-gpios = <&gpio3 1 0>, /* Bank2, pin1 */
<&gpio2 29 0>, /* Bank1, pin29 */
<&gpio2 28 0>,
<&gpio1 30 0>,
<&gpio1 31 0>,
<&gpio1 26 0>,
<&gpio1 27 0>,
<&gpio2 12 0>; /* Bank1, pin12 */

col-gpios = <&gpio2 13 0>,
<&gpio2 14 0>, /* Bank1, pin14 */
<&gpio2 15 0>,
<&gpio2 16 0>,
<&gpio2 17 0>,
<&gpio2 19 0>; /* Bank1, pin19 */

linux,keymap = <0x0000002f /* */
0x0100003b 
0x0200003c 
0x03000067 
0x0400006a 
0x0500006c
0x06000010
0x07000069
0x00010012 /* */
0x01010068
0x0201006d
0x03010013
0x04010014
0x0501001c
0x06010011
0x07010022
0x00020015 /* */
0x01020016
0x02020004
0x03020007
0x0402000a
0x0502000c
0x06020017
0x07020023
0x00030018 /* */
0x01030019
0x02030003
0x03030006
0x04030009
0x05030053
0x0603001f
0x07030024
0x0004001e /* */
0x01040020
0x02040002
0x03040005
0x04040008
0x0504000b
0x06040021
0x07040025
0x00050001 /* */
0x0105000e
0x0205000f
0x0305003d
0x0405003e
0x0505003f
0x06050066
0x07050026>; /* */ 
};
检查了引脚复用没错误,行列的gpio分配,还有keymap。内核启动时设备树文件能顺利加载,上面通过检测程序去检测dev/input/event1上的按键事件,部分按键上报code和value是对的。

请各位帮我看看到底是哪里的问题。

Jian Zhou:

你有参考过GPEVM的device tree文件么?那里面有矩阵键盘的实例。

mines:

回复 Jian Zhou:

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

mines:

回复 Jian Zhou:

Jian Zhou

你有参考过GPEVM的device tree文件么?那里面有矩阵键盘的实例。

xuetong wang:

回复 mines:

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

赞(0)
未经允许不得转载:TI中文支持网 » am335x通过devicetree配置矩阵键盘
分享到: 更多 (0)