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. Tcl

    Tcl(发音 tickle)是一种脚本语言.由John Ousterhout创建.TCL经常被用于快速原型开发 RAD.脚本编程.GUI编程和测试等方面. Expect Expect是 另外一种非常流 ...

  2. 给Jquery动态添加的元素添加事件

    给Jquery动态添加的元素添加事件 来源:[http://wangqixia.diandian.com/post/2011-05-10/6597866] 我想很多人都会向我一样曾经 被新元素的事件绑 ...

  3. [Linux]在linux中,常常用到ctrl和其他按键组合,常用的有哪些及意义呢

    在linux中,常常用到ctrl和其他按键组合,常用的有哪些及意义呢? Ctrl+c 结束正在运行的程序 Ctrl+d 结束输入或退出shell Ctrl+s 暂停屏幕输出[锁住终端] Ctrl+q ...

  4. CompletionService/ExecutorCompletionService/线程池/concurrent包

    线程池 线程池的基本思想:线程频繁的创建.销毁会极大地占用系统资源,为了减少系统在创建销毁线程时的开销,线程池应运而生.线程池包括多个已创建的线程,当有任务要在新线程中执行时,将任务提交给线程池,线程 ...

  5. 已解决:ECSHOP安装出现date_default_timezone_get()问题

    今天在安装ECSHOP时遇到警告如下: Warning: date_default_timezone_get(): It is not safe to rely on the system's tim ...

  6. [工作中的设计模式]装饰模式decorator

    一.模式解析 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的要点主要是: 1.需要对已有对象扩展新的功能,又不希望改变原有对 ...

  7. TComboBoxEx和 TComboBox

    // TComboBoxEx cbbCity: TComboBoxEx; item: TComboExItem; cbbCity.ItemsEx.Clear; //清空 cbbProv.itemInd ...

  8. Xcode的清除缓存

    1.在“前往文件夹”中输入“   /Users/用户名/Library/Developer/Xcode/DerivedData  ”,然后删除里面的东西

  9. cetnos 7 ntp服务的安装与配置

    首先需要搭建yum本地仓库 http://www.cnblogs.com/jw35/p/5967677.html   #搭建yum仓库方法 yum install ntp -y        #安装n ...

  10. java分享第十二天(接口测试jsoup&cookie)

    一.Cookies到底是什么鬼?简单来说,Cookies就是服务器暂时存放在客户端(你的电脑里)的资料(.txt格式的文本文件),好让服务器用来辨认 你的计算机.当你在浏览网站的时候,Web服务器会先 ...