--- 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...
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...
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...
gpio_keys { compatible = “gpio-keys”; ... button@1{ wakeup-source; linux,code = <KEY_ESC>; label = “ESC”; gpios = <&gpio00GPIO_ACTIVE_HIGH>; }; }; API 这里先大致介绍一下一般会用到的接口,还有一些遗漏,以后会慢慢补充。 总结 这里我简单介绍了gpio,罗列了一下Linux操作gpio可能会...
Pinctrl 框架是 linux 系统为统一各 SoC 厂商 pin 管理,避免各 SoC 厂商各自实现相同 pin 管理子系统而提出的。目的是为了减少 SoC 厂商系统移植工作量。 2.1 模块功能介绍 许多SoC 内部都包含 pin 控制器,通过 pin 控制器,我们可以配置一个或一组引脚的功能和特性。在软件上,Linux 内核 pinctrl 驱动可以操作 ...
在Linux系统中,GPIO键盘子系统(gpio-keys)是一种用于将GPIO引脚作为按键输入的子系统。通过gpio-keys子系统,用户可以将普通的GPIO引脚配置为按键输入,以便在Linux系统中进行相应的操作。 在嵌入式系统中,往往会有一些外部按键或开关用于用户交互或控制。通过gpio-keys子系统,这些外部按键或开关可以通过GPIO引脚与系统进行...
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。
+ linux,code = <KEY_F1>;//键值 + // wakeup-source; + gpio-key,wakeup; + }; } &pinctrl { + gpio-keys { + leds_keys_gpio: leds_keys-gpio { + rockchip,pins = <4 RK_PA4 RK_FUNC_GPIO &pcfg_pull_up>;//默认上拉 + }; ...
gpio_keys: volume_keys@0 { compatible = "gpio-keys"; #address-cells = <1>; #size-cells = <0>; autorepeat; switch@9 { label = "volume-up"; linux,code = <115>; gpios = <&gpio3 0 GPIO_ACTIVE_LOW>; gpio-key,wakeup;