linux/高通 增加按键事件


文件:
kernel/drivers/gpio/gpio-keys.c
kernel/arch/arm64/boot/dts//chip.dtsi
kernel/include/dt-bindings/input/linux-event-codes.h

linux

对于linux,基本的按键驱动其实很成熟,但是却很少用到。其驱动监听按键电平然后以input事件形式上报,我们只需要在设备树中配置:

gpio-keys {
		compatible = "gpio-keys";
		pinctrl-names = "default";
		pinctrl-0 = <&keys_gpio>;
		status = "okay";
		#address-cells = <1>;
		#size-cells = <0>;
		#autorepeat;

		button@0 {
			gpios = <&gpio0 5  GPIO_ACTIVE_LOW>;
			label = "Power";
			linux,code = <KEY_POWER>;
			linux,input-type = <1>;
			gpio-key,wakeup = <1>;
			debounce-interval = <100>;
		};
};
gpio-keys{
		keys_gpio: keys-gpio {
			rockchip,pins =
					<0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>;
		};
};

头文件中定义:

#define KEY_POWER 116

android

安卓以高通平台为例,还需要配置layout文件:
frameworks/base/data/keyboards/Generic.kl
device/qcom/trinket/gpio-keys.kl
如果之前有定义,需要在第一个文件中修改,如果之前未定义,则需要两个之中新增。

key 116 KEY_POWER

注意的是上层和驱动匹配是依靠.kl文件中的名字KEY_POWER;驱动和设备树匹配则是依据数值116;也就是说设备树和头文件中的KEY_POWER和kl文件中的并非一个,只是恰好重名。

posted @ 2021-12-23 15:41  月的光景  阅读(731)  评论(0编辑  收藏  举报