安卓驱动开发-摁键的驱动开发

步骤一:移植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 

安卓驱动开发-摁键的驱动开发_第1张图片

[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张图片

2.修改base.mk文件 做出相应的映射

路径在:~/workspace/Q2806_KAIOS_DEV_BSP_V1/device/qcom/common

安卓驱动开发-摁键的驱动开发_第3张图片

3.增加matrix-keypad.kl文件

路劲在~/workspace/Q2806_KAIOS_DEV_BSP_V1/device/qcom/msm8937_32go
安卓驱动开发-摁键的驱动开发_第4张图片

总结

开始新增实例这个并没有生效!也排查了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文件就能生效

安卓驱动开发-摁键的驱动开发_第5张图片

你可能感兴趣的:(驱动开发,linux,android)