CONFIG_INPUT_GPIO_KEYS=y ``` 然后,通过设备树(DTS)文件描述GPIO键盘驱动: ```yaml gpio-keys { compatible = "gpio-keys"; pinctrl-names = "default"; pinctrl-0 = <&gpio_key_pins>; #address-cells = <1>; #size-cells = <0>; button@0 { label = "gpio-button 0"; linux,code = <KEY...
--- a/kernel-4.4/drivers/input/keyboard/gpio_keys.c+++ b/kernel-4.4/drivers/input/keyboard/gpio_keys.c@@ -32,6 +32,11 @@#include<linux/of_irq.h>#include<linux/spinlock.h>++#define LOG_TAG "[BUTTON]: %s() line: %d "+#define PRINTK_T(fmt, args...) printk(KERN_INFO LOG_TAG...
structgpio_keys_button_data{structgpio_desc*gpiod;intlast_state;intcount;intthreshold; };structgpio_button_data{conststructgpio_keys_button*button;structinput_dev*input;structgpio_desc*gpiod;unsignedshort*code;structtimer_listrelease_timer;unsignedintrelease_delay;/* in msecs, for IRQ-only buttons...
https://gitee.com/weiqifa/gpio_key/blob/master/gpio_keys.c 1. 驱动代码流程,从probe处开始 刚开始的时候,我连dts文件都不会写,因为之前没有接触过这个驱动。然后看了gpio_keys_get_devtree_pdata函数,之后又看了内核代码下其他项目其他平台的dts文件,才知道怎么写这个驱动的dts文件。 实话说,这个驱动完成...
+++b/kernel-4.4/drivers/input/keyboard/gpio_keys.c @@-32,6+32,11@@ #include<linux/of_irq.h> #include<linux/spinlock.h> + +#defineLOG_TAG"[BUTTON]: %s() line: %d " +#definePRINTK_T(fmt,args...)printk(KERN_INFOLOG_TAGfmt,__FUNCTION__,__LINE__,##args) ...
gpio_keys { compatible = “gpio-keys”; ... button@1{ wakeup-source; linux,code = <KEY_ESC>; label = “ESC”; gpios = <&gpio00GPIO_ACTIVE_HIGH>; }; }; API 这里先大致介绍一下一般会用到的接口,还有一些遗漏,以后会慢慢补充。
Pinctrl 框架是 linux 系统为统一各 SoC 厂商 pin 管理,避免各 SoC 厂商各自实现相同 pin 管理子系统而提出的。目的是为了减少 SoC 厂商系统移植工作量。 2.1 模块功能介绍 许多SoC 内部都包含 pin 控制器,通过 pin 控制器,我们可以配置一个或一组引脚的功能和特性。在软件上,Linux 内核 pinctrl 驱动可以操作 ...
gpio_keys: gpio_keys { status = "okay"; compatible = "gpio-keys"; autorepeat; pinctrl-names = "default"; pinctrl-0 = <&leds_keys_gpio>; + key_sw1 { + debounce-interval = <100>; + gpios = <&gpio4 RK_PA4 GPIO_ACTIVE_LOW>; + label = "GPIO Key sw1"; + linux,code = ;...
- linux,code: input子系统所定义的按键代码,参见:include/dt-bindings/input/input.h关于keys和buttons的code定义。 Optional subnode-properties -linux,input-type:定义该key/button所依赖的event type(input子系统定义),默认为1 == EV_KEY。 -debounce-interval:定义该key/button的去抖间隔,默认为5ms。
Show me the code: 从上述代码可看到,gpio_keys.c节点内定义两个按键节点: “key_power”、”key_headset”。每个按键节点包括一个gpio所用到的所有硬件属性。拿第一个设备节点解析: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 key_power{label="Power Key";//按键描述性名称linux,code=<116>;//...