tca8418

来源:互联网 发布:linux 内核 视频 编辑:程序博客网 时间:2024/05/22 16:45
驱动位置
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);
原创粉丝点击