步骤一:移植matrix_keypad.c
~/workspace/Q2806_KAIOS_DEV_BSP_V1/kernel/msm-4.9/drivers/input/keyboard/matrix_keypad.c
步骤二:新修改要检查配置kconfig 和Makefile 和 deconfig
如:
~/workspace/Q2806_KAIOS_DEV_BSP_V1/kernel/msm-4.9]$ vim arch/arm/configs/vendor/msm8937go_defconfig
[ylongbin@ylongbin ~/workspace/Q2806_KAIOS_DEV_BSP_V1/kernel/msm-4.9/drivers/input/keyboard]$ vim Kconfig
[ylongbin@ylongbin ~/workspace/Q2806_KAIOS_DEV_BSP_V1/kernel/msm-4.9/drivers/input/keyboard]$ vim Makefile
这里没有修改上层的Kconfig和Makefile
步骤三:根据电路图对应的gpio修改设备树
电路图gpio:
(图太大,略)所对应的
列gpio:96.99.90.89.62
行gpio:126.127.45.97.129
设备树修改路径:
\Q2806_KAIOS_DEV_BSP_V1\kernel\msm-4.9\arch\arm64\boot\dts\qcom\qm215-qrd.dtsi
在SOC设备节点下加入matrix_keypad子节点
matrix_keypad{
compatible = "gpio-matrix-keypad";
debounce-delay-ms = <10>;
col-scan-delay-us = <5>;
status = "ok";
linux,wakeup;
row-gpios = <&tlmm 96 0
&tlmm 99 0
&tlmm 90 0
&tlmm 89 0
&tlmm 129 0>;
col-gpios = <
&tlmm 126 0
&tlmm 127 0
&tlmm 45 0
&tlmm 97 0
&tlmm 62 0>;
linux,keymap = <
0x000000a9 // call //row 0-4 col 0
0x01000004 // 3 /
0x02000007 // 6 /
0x0300000a // 9 /
0x0400020b // #/
0x00010069 //LEFT/ //row 0-4 col 1
0x01010003 // 2 /
0x02010006 // 5 /
0x03010009 // 8 /
0x0401000b // 0 /
0x0002020d // KEY_NUMERIC_B / //PPT founction
0x01020002 // 1 /
0x02020005 // 4 /
0x03020008 // 7 /
0x0402020a // */ //row 0-4 col 2
0x0003001c // OK / //row 0-4 col 3
0x0103006a // RIGHT /
0x0203000e // #3 C KEY_BACKSPACE/
0x03030067 // UP /
0x0403006c // KEY_DOWN /
0x0004008b // back / //row 0-4 col 4
0x0104009e // menu /
0x0204020d // NULL /
0x0304020d // NULL /
0x0404020d // NULL /
>; // KEY_RIGHTSHIFT MENU/ //row 0-4 col 5
};
验证方法:
adb reboot bootloader
sudo fastboot flash boot boot.img
sudo fastboot flash dtbo dtbo.img
fastboot reboot
adb shell进去 输入getevent 进入此模式 然后就可以摁键来看键值对不对
getevent -l来看是否对键值表功能描述正确
补后续新增.kl移植
缘由:因为有特殊摁键soft_left和soft_right摁键Generic.kl未定义
下列邮件方法是新增.kl文件
1.修改AndroidBoard.mk文件
添加图下部分代码
`路劲在~/workspace/Q2806_KAIOS_DEV_BSP_V1/device/qcom/msm8937_32go`
2.修改base.mk文件 做出相应的映射
路径在:~/workspace/Q2806_KAIOS_DEV_BSP_V1/device/qcom/common
3.增加matrix-keypad.kl文件
路劲在~/workspace/Q2806_KAIOS_DEV_BSP_V1/device/qcom/msm8937_32go
总结
开始新增实例这个并没有生效!也排查了keycordes.h等头文件没定义等方法还是没有解决。并且试了能找到了其他方法。但是新增别的hall_sensor.kl解决FLIP问题的是生效的。说明此方法是有用的
然后看到一篇博客说可能是因为特殊键盘
查阅到一篇博客说:如果是键盘只会读Generic.kl,而不会读rk29-keypad.kl。所以如果是一个特殊的键盘,那么要动手修改Generic.kl。这个是实践结果,具体源码还没有找到。
个人怀疑是因为device name没有对上 getevent发现 name:为 soc:matrix_keypad
**疑点:**还没有搞明白soc:是哪里来的。
后续查明解决方法:
在qm215-qrd.dtsi中修改节点名字为如下:
这样就能把getevent name中的soc:去掉,然后再加matrix_keypad.kl文件就能生效