Linux keypad 设备树,beaglebone black通过devicetree配置矩阵键盘matrix-keypad

最近用设备树文件去配置一个6x8(6列8行)的矩阵键盘,驱动用的是内核里面的matrix_keypad.c通用矩阵键盘驱动;13431922e836e2941579bf94d1f2da70.png

遇到的问题:在通过加载设备树启动后只有部分按键功能有效;如上图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 = ;

__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 = ;

__overlay__ {

matrix_keypad {

compatible = "gpio-matrix-keypad";

pinctrl-names = "default";

pinctrl-0 = ;

debounce-delay-ms = <5>;

col-scan-delay-us = <2>;

row-gpios = , /* Bank2, pin1 */

, /* Bank1, pin29 */

,

,

,

,

,

; /* Bank1, pin12 */

col-gpios = ,

, /* Bank1, pin14 */

,

,

,

; /* 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是对的。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值