linux/高通 增加按键事件
文件:
kernel/drivers/gpio/gpio-keys.c
kernel/arch/arm64/boot/dts/
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文件中的并非一个,只是恰好重名。