驱动位置
kernel_imx/drivers/input/keyboard/tca8418_keypad.c
kernel_imx/Documentation/devicetree/bindings/input/tca8418_keypad.txt
1.硬件i2c2 地址0x34
中断:GPIO_4 MX6QDL_PAD_GPIO_4__GPIO1_IO04
matrix_keypad_parse_of_params会用到
kernel_imx/drivers/input/matrix-keymap.c
keypad,num-rows
keypad,num-columns
linux,keymap
2.调试
打印信息
# getevent -i
add device 1: /dev/input/event6
bus: 0018
vendor 0001
product 0001
version 0001
name: "tca8418"
location: ""
id: ""
version: 1.0.1
events:
KEY (0001): 0005 0006 0007 0008 0009 000a 000b 020a
020b
MSC (0004): 0004
input props:
<none>
根据kernel_imx/arch/metag/boot/dts/include/dt-bindings/input/input.h值
调整铵键映射的值
0,0 KEY_RIGHT 0x6a
0,1 KEY_BACK 0x9e
0,2 KEY_UP 0x67
1,0 KEY_ENTER 0x1C//确认
1,1 KEY_MUSIC 0XD5 //F1
1,2 KEY_DOWN 0x6c
2,0 KEY_BACKSPACE 0xe//删除
2,1 KEY_AUDIO 0xbc
2,2 KEY_LEFT 0X69
3.dtsi
+ tca8418@34{
+ compatible = "ti,tca8418";
+ reg = <0x34>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <4 2>;
+ keypad,num-rows = <3>;
+ keypad,num-columns = <3>;
+ linux,keymap = <
+ 0x0000006a /*KEY_RIGHT*/
+ 0x0001009e /* KEY_BACK 0x9e*/
+ 0x00020067 /*KEY_UP*/
+ 0x0100001c
+ 0x010100d5
+ 0x0102006c
+ 0x0200000e
+ 0x020100bc
+ 0x02020069
+ >;
+ };
pinctrl_hog: hoggrp {
fsl,pins = <
MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x80000000 /*microsd cd pin*/
+ MX6QDL_PAD_GPIO_4__GPIO1_IO04 0x1b0b0 /*tca8418 irq pin*/
};
4.修改调用的优先级subsys_initcall比module_init先调用,可能i2c总线还没有走完造成i2c写配置失败
--- a/kernel_imx/drivers/input/keyboard/tca8418_keypad.c
+++ b/kernel_imx/drivers/input/keyboard/tca8418_keypad.c
@@ -415,7 +415,7 @@ static int __init tca8418_keypad_init(void)
{
return i2c_add_driver(&tca8418_keypad_driver);
}
-subsys_initcall(tca8418_keypad_init);
+module_init(tca8418_keypad_init);
kernel_imx/drivers/input/keyboard/tca8418_keypad.c
kernel_imx/Documentation/devicetree/bindings/input/tca8418_keypad.txt
1.硬件i2c2 地址0x34
中断:GPIO_4 MX6QDL_PAD_GPIO_4__GPIO1_IO04
matrix_keypad_parse_of_params会用到
kernel_imx/drivers/input/matrix-keymap.c
keypad,num-rows
keypad,num-columns
linux,keymap
2.调试
打印信息
# getevent -i
add device 1: /dev/input/event6
bus: 0018
vendor 0001
product 0001
version 0001
name: "tca8418"
location: ""
id: ""
version: 1.0.1
events:
KEY (0001): 0005 0006 0007 0008 0009 000a 000b 020a
020b
MSC (0004): 0004
input props:
<none>
根据kernel_imx/arch/metag/boot/dts/include/dt-bindings/input/input.h值
调整铵键映射的值
0,0 KEY_RIGHT 0x6a
0,1 KEY_BACK 0x9e
0,2 KEY_UP 0x67
1,0 KEY_ENTER 0x1C//确认
1,1 KEY_MUSIC 0XD5 //F1
1,2 KEY_DOWN 0x6c
2,0 KEY_BACKSPACE 0xe//删除
2,1 KEY_AUDIO 0xbc
2,2 KEY_LEFT 0X69
3.dtsi
+ tca8418@34{
+ compatible = "ti,tca8418";
+ reg = <0x34>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <4 2>;
+ keypad,num-rows = <3>;
+ keypad,num-columns = <3>;
+ linux,keymap = <
+ 0x0000006a /*KEY_RIGHT*/
+ 0x0001009e /* KEY_BACK 0x9e*/
+ 0x00020067 /*KEY_UP*/
+ 0x0100001c
+ 0x010100d5
+ 0x0102006c
+ 0x0200000e
+ 0x020100bc
+ 0x02020069
+ >;
+ };
pinctrl_hog: hoggrp {
fsl,pins = <
MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x80000000 /*microsd cd pin*/
+ MX6QDL_PAD_GPIO_4__GPIO1_IO04 0x1b0b0 /*tca8418 irq pin*/
};
4.修改调用的优先级subsys_initcall比module_init先调用,可能i2c总线还没有走完造成i2c写配置失败
--- a/kernel_imx/drivers/input/keyboard/tca8418_keypad.c
+++ b/kernel_imx/drivers/input/keyboard/tca8418_keypad.c
@@ -415,7 +415,7 @@ static int __init tca8418_keypad_init(void)
{
return i2c_add_driver(&tca8418_keypad_driver);
}
-subsys_initcall(tca8418_keypad_init);
+module_init(tca8418_keypad_init);