项目场景:MTK平台按键中断触发功能,TP调试简记
提示:仅供参考,学习笔记
例如:项目场景:背部pogopin加按键功能
原因分析:
提示:背部pogo引脚需要增加按键触发扫码功能,由此开始调试,硬件上需要拉高GPIO27、28、44,GPIO44为上拉触发中断的方式,GPIO27、28拉高使IC为GPIO44供电。
1、dws文件添加修改
系统使用DWS文件来编写设备树的源码,然后将DWS文件编译成DTS文件。最终,DTS文件将被编译成DTSI或DTSB文件,供Linux内核在启动时使用。
正常情况,使用vendor\mediatek\proprietary\tools\dct下的DrvGen.exe工具,在里面打开对应芯片文件如T695应该为mt6833文件夹下的dws文件,但T695需要在方案商定的其他路径修改,具体分别为kernel-4.19\drivers\misc\mediatek\dws\mt6853\codegen.dws和vendor\mediatek\proprietary\bootable\bootloader\lk\target\k6833v1_64_k419\dct\dct\codegen.dws这两文件,配置GPIO27、28、44。
例如:Handler
发送消息有两种方式,分别是 Handler.obtainMessage()
和 Handler.sendMessage()
,其中 obtainMessage
方式当数据量过大时,由于 MessageQuene
大小也有限,所以当 message
处理不及时时,会造成先传的数据被覆盖,进而导致数据丢失。
dws文件设置具体如下
2、dts文件修改
配置好dws文件后就需要配置dts文件,在设备树文件中也需要配好中断等。
---`@@ -786,14 +813,27 @@ awinic_haptic@5a{
#endif
#endif
};
+ yft_customkey4_pin_eint_as_int:yft_customkey4_pin_def{
+#ifdef __YFT_CUSTOMKEY_F4_SUPPORT__
+ #if __YFT_CUSTOMKEY_F4_SUPPORT__
+ pins_cmd_dat {
+ pinmux = <__YFT_CUSTOMKEY_F4_SUPPORT__>;
+ slew-rate=<0>; /*direction 0:in,1:out*/
+ //bias-pull-up= <00> ;
+ bias-disable;
+ };
+ #endif
+ #endif
+ };
};
&keypad{
- pinctrl-names ="default","yft_customkey_as_int","yft_customkey2_as_int", "yft_customkey3_as_int";
+ pinctrl-names = "default", "yft_customkey_as_int","yft_customkey2_as_int","yft_customkey3_as_int","yft_customkey4_as_int";
pinctrl-0 = <&yft_customkey_pin_default>;
pinctrl-1 = <&yft_customkey_pin_eint_as_int>;
pinctrl-2 = <&yft_customkey2_pin_eint_as_int>;
pinctrl-3 = <&yft_customkey3_pin_eint_as_int>;
+ pinctrl-4 = <&yft_customkey4_pin_eint_as_int>;
customkeyf1@__YFT_INTERCOMKEY_EINT_EN_PIN_NUM__ {
compatible = "mediatek,yft_customkey";
@@ -827,8 +867,19 @@ awinic_haptic@5a{
};
#endif
#endif
-};
+#ifdef __YFT_CUSTOMKEY_F4_SUPPORT__
+ #if __YFT_CUSTOMKEY_F4_SUPPORT__
+ customkeyf4@__YFT_INTERCOMKEY4_EINT_EN_PIN_NUM__ {
+ compatible = "mediatek,yft_customkey4";
+ interrupt-parent = <&pio>;
+ interrupts = <__YFT_INTERCOMKEY4_EINT_EN_PIN_NUM__ IRQ_TYPE_EDGE_FALLING __YFT_INTERCOMKEY4_EINT_EN_PIN_NUM__ 0>;
+ customkey_f4_gpio = <&pio __YFT_INTERCOMKEY4_EINT_GPIO_NUM__ 0>;
+ debounce = <__YFT_INTERCOMKEY4_EINT_EN_PIN_NUM__ 10>;
+ };
+ #endif
+#endif
+};
#endif
#endif
上面是GPIO44的配置,使用pinctr的方式,需要在源码中找到中断对应的宏,把节点加好后要写好配置,且要在相应的驱动文件里面对该节点做解析,要注意,除了这些定义好还需要将新增的驱动文件和宏加入到相应的Makefile和对用的头文件中,如下:
diff --git a/kernel-4.19/drivers/input/keyboard/mediatek/Makefile b/kernel-4.19/drivers/input/keyboard/mediatek/Makefile
index 47d6650169e