imx6需要添加4x4的矩阵键盘。本文记录添加方法。

参考链接

http://processors.wiki.ti.com/index.php/TI-Android-JB-PortingGuide

http://blog.sina.com.cn/s/blog_54aa47930102vesb.html

http://blog.csdn.net/shell_albert/article/details/46801091

http://www.kikikoo.com/uid-20768928-id-5084287.html

http://blog.csdn.net/shell_albert/article/details/46618655

添加驱动

驱动源码driver/input/keyboard/matrix_keypad.c

CONFIG_KEYBOARD_MATRIX:                                       

    Enable support for GPIO driven matrix keypad.     

    To compile this driver as a module, choose M here: the
module will be called matrix_keypad. Symbol: KEYBOARD_MATRIX [=y]
Type : tristate
Prompt: GPIO driven matrix keypad support
Defined at drivers/input/keyboard/Kconfig:224
Depends on: !S390 && INPUT [=y] && INPUT_KEYBOARD [=y] && GENERIC_GPIO [=y]
Location:
-> Device Drivers
-> Input device support
-> Generic input layer (needed for keyboard, mouse, ...) (INPUT [=y])
-> Keyboards (INPUT_KEYBOARD [=y])

添加设备

vi arch/arm/mach-mx6/board-mx6q_sabresd.c

// COL
#define SABRESD_KEY0 IMX_GPIO_NR(4, 6)
#define SABRESD_KEY1 IMX_GPIO_NR(4, 8)
#define SABRESD_KEY2 IMX_GPIO_NR(4, 10)
#define SABRESD_KEY3 IMX_GPIO_NR(4, 12)
// ROW
#define SABRESD_KEY4 IMX_GPIO_NR(4, 7)
#define SABRESD_KEY5 IMX_GPIO_NR(4, 9)
#define SABRESD_KEY6 IMX_GPIO_NR(4, 11)
#define SABRESD_KEY7 IMX_GPIO_NR(4, 13) static const uint32_t sabresd_keymap[] = {
KEY(0, 0, KEY_ESC),
KEY(0, 1, KEY_0),
KEY(0, 2, KEY_1),
KEY(0, 3, KEY_OK),
KEY(1, 0, KEY_2),
KEY(1, 1, KEY_3),
KEY(1, 2, KEY_4),
KEY(1, 3, KEY_5),
KEY(2, 0, KEY_6),
KEY(2, 1, KEY_7),
KEY(2, 2, KEY_8),
KEY(2, 3, KEY_9),
KEY(3, 0, KEY_F1),
KEY(3, 1, KEY_0),
KEY(3, 2, KEY_F2),
KEY(3, 3, KEY_F3),
}; static const struct matrix_keymap_data sabresd_keymap_data = {
.keymap = sabresd_keymap,
.keymap_size = ARRAY_SIZE(sabresd_keymap),
}; static const unsigned int sabresd_keypad_cols[] = {
SABRESD_KEY0,
SABRESD_KEY1,
SABRESD_KEY2,
SABRESD_KEY3,
}; static const unsigned int sabresd_keypad_rows[] = {
SABRESD_KEY4,
SABRESD_KEY5,
SABRESD_KEY6,
SABRESD_KEY7,
}; static struct matrix_keypad_platform_data sabresd_kpd_pdata = {
.keymap_data = &sabresd_keymap_data,
.col_gpios = sabresd_keypad_cols,
.row_gpios = sabresd_keypad_rows,
.num_col_gpios = ARRAY_SIZE(sabresd_keypad_cols),
.num_row_gpios = ARRAY_SIZE(sabresd_keypad_rows),
.col_scan_delay_us = 10,
.debounce_ms = 10,
.wakeup = 1,
.active_low = 1,
//.active_low = 0,
}; static struct platform_device sabresd_keypad = {
.name = "matrix-keypad",
.id = -1,
.dev = {
.platform_data = &sabresd_kpd_pdata,
},
}; 再添加初始化函数
static void __init mx6_sabresd_board_init(void)
{
......
platform_device_register(&sabresd_keypad)
......
}

查看效果

root@android:/data # cat /proc/bus/input/devices
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="gpio-keys"
P: Phys=gpio-keys/input0
S: Sysfs=/devices/platform/gpio-keys/input/input0
U: Uniq=
H: Handlers=event0
B: PROP=0
B: EV=3
B: KEY=100000 0 0 0 I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="matrix-keypad"
P: Phys=
S: Sysfs=/devices/platform/matrix-keypad/input/input1
U: Uniq=
H: Handlers=event1
B: PROP=0
B: EV=100013
B: KEY=1 0 0 0 0 0 0 0 0 0 38000000 ffe
B: MSC=10 I: Bus=0003 Vendor=09da Product=c10a Version=0110
N: Name="A4Tech USB Mouse"
P: Phys=usb-fsl-ehci.1-1.3/input0
S: Sysfs=/devices/platform/fsl-ehci.1/usb2/2-1/2-1.3/2-1.3:1.0/input/input2
U: Uniq=
H: Handlers=mouse0 event2
B: PROP=0
B: EV=1f
B: KEY=ff0000 0 0 0 0 0 0 0 0
B: REL=303
B: ABS=1f00 0
B: MSC=10 root@android:/data # getevent
could not get driver version for /dev/input/mice, Not a typewriter
add device 1: /dev/input/event2
name: "A4Tech USB Mouse"
could not get driver version for /dev/input/mouse0, Not a typewriter
add device 2: /dev/input/event1
name: "matrix-keypad" # matrix-keypad
add device 3: /dev/input/event0
name: "gpio-keys" # gpio-keys```

Tony Liu

2016-12-30, Shenzhen

imx6 matrix keyboard的更多相关文章

  1. EDA课设-交通灯-Verilog版----FPGA--004

    分得到析四个状态: S1: 主干道(绿灯亮) ,支干道(亮红灯):--40S S1: 主干道 (黄灯亮) ,支干道(亮红灯):--4S S1: 主干道 (亮红灯),支干道(绿灯亮):--20S S1: ...

  2. EasyMonkeyDevice vs MonkeyDevice&HierarchyViewer API Mapping Matrix

    1. 前言 本来这次文章的title是写成和前几篇类似的<EasyMonkeyDevice API实践全记录>,内容也打算把每一个API的实践和建议给记录下来,但后来想了下认为这样子并非最 ...

  3. EasyMonkeyDevice vs MonkeyDevice&HierarchyViewer API Mapping Matrix

    1. 前言 本来这次文章的title是写成和前几篇类似的<EasyMonkeyDevice API实践全记录>,内容也打算把每个API的实践和建议给记录下来,但后来想了下觉得这样子并不是最 ...

  4. angular2系列教程(十一)路由嵌套、路由生命周期、matrix URL notation

    今天我们要讲的是ng2的路由的第二部分,包括路由嵌套.路由生命周期等知识点. 例子 例子仍然是上节课的例子:

  5. Pramp mock interview (4th practice): Matrix Spiral Print

    March 16, 2016 Problem statement:Given a 2D array (matrix) named M, print all items of M in a spiral ...

  6. Fedora 22中的Locale and Keyboard Configuration

    Introduction The system locale specifies the language settings of system services and user interface ...

  7. Atitit Data Matrix dm码的原理与特点

    Atitit Data Matrix dm码的原理与特点 Datamatrix原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于 ...

  8. Android笔记——Matrix

    转自:http://www.cnblogs.com/qiengo/archive/2012/06/30/2570874.html#translate Matrix的数学原理 在Android中,如果你 ...

  9. 通过Matrix进行二维图形仿射变换

    Affine Transformation是一种二维坐标到二维坐标之间的线性变换,保持二维图形的"平直性"和"平行性".仿射变换可以通过一系列的原子变换的复合来 ...

随机推荐

  1. cryptkeeper的使用

    转自:http://www.linuxidc.com/Linux/2011-06/37070.htm Cryptkeeper 是加密文件系统 EncFS 的前端工具,以 Gnome Applet 方式 ...

  2. 一把鼻涕一把泪 搭建公网ftp服务器

    至于为什么要搭建公网ftp服务器,就当我心血来潮吧. ftp开源工具很多,咱用的是filezilla服务器.后来为了方便搭建web服务器,就改成了集成工具xampp.客户端工具也是filezilla ...

  3. linux 查找文件或者内容常用命令

    whereis <程序名称> find [路径] <表达式> locate <文件名称> 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符 ...

  4. BC一周年练习赛

    Souvenir  Accepts: 901  Submissions: 2743  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 262 ...

  5. Salt安装(yum不可用时)

        salt-master安装   [salt-master]# yum install salt-master   或者 curl -L http://bootstrap.saltstack.o ...

  6. Who's in the Middle[HDU1157]

    Who's in the Middle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  7. table sorting–angularjs

    1: <script type="text/javascript" ng:autobind 2: src="http://code.angularjs.org/0. ...

  8. 【BZOJ】3521: [Poi2014]Salad Bar

    题意 长度为\(n(1 \le n \le 1000000)\)的\(01\)字符串.找一个最长的连续子串\(S\),使得不管是从左往右还是从右往左取,都保证每时每刻已取出的\(1\)的个数不小于\( ...

  9. docker 配置文件引发的问题

    好久没有配置 vmware / harbor 了,突然间来了兴趣,结果让我失望了,登陆反复的被refused; 这个是配置文件地址:https://github.com/vmware/harbor/b ...

  10. MongoDB命令及SQL语法对比

    mongodb与mysql命令对比 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(col ...