首先,要使用gpio-keys,你需要确保你的Linux内核已经启用了相应的配置选项。在内核配置中,你需要启用CONFIG_INPUT_GPIO_KEYS选项。这个选项通常位于"Device Drivers" -> "Input device support" -> "Keyboards"下。启用这个选项后,重新编译内核并将其烧录到你的嵌入式设备上。 接下来,你需要在设备树中配置GPIO按键的...
在Linux系统中,GPIO键盘子系统(gpio-keys)是一种用于将GPIO引脚作为按键输入的子系统。通过gpio-keys子系统,用户可以将普通的GPIO引脚配置为按键输入,以便在Linux系统中进行相应的操作。 在嵌入式系统中,往往会有一些外部按键或开关用于用户交互或控制。通过gpio-keys子系统,这些外部按键或开关可以通过GPIO引脚与系统进行...
--- 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...
staticintgpio_keys_probe(structplatform_device *pdev){structdevice*dev=&pdev->dev;conststructgpio_keys_platform_data*pdata=dev_get_platdata(dev);structfwnode_handle*child=NULL;structgpio_keys_drvdata*ddata;structinput_dev*input;size_tsize;inti, error;intwakeup =0;if(!pdata) {// 获取设备...
gpio_keys 驱动使用 of_get_gpio_flags() 获取 dts 里面 gpio 配置信息。 但是of_get_gpio_flags() 传入 enum of_gpio_flags 类型来获取配置信息。 of_get_gpio_flags() 的最终实现由具体的 SOC 厂商实现,这里是全志厂商实现。 实现的函数为:drivers/pinctrl/sunxi/pinctrl-sunxi.c --> sunxi_pinctrl_gpio...
我们可以使用gpios属性,描述我们需要使用的GPIO管脚,或者使用interrupts属性,来描述按键对应的GPIO管脚,此时驱动代码使用中断形式触发。需要注意的是,两者不可并存,二者选其一。 正点原子的imx6ull开发板,同样使用了gpio_keys.c驱动代码,实现GPIO模拟按键,观察其设备树,可以得知,正点原子使用了gpios属性,来描述管脚信息。
https://gitee.com/weiqifa/gpio_key/blob/master/gpio_keys.c 1. 驱动代码流程,从probe处开始 刚开始的时候,我连dts文件都不会写,因为之前没有接触过这个驱动。然后看了gpio_keys_get_devtree_pdata函数,之后又看了内核代码下其他项目其他平台的dts文件,才知道怎么写这个驱动的dts文件。
摘要: 15.1概述 在上一节课中我们学习了gpio_leds设备树驱动,认识了设备树的语法规范、修改方法,执行顺序,在这节课中我们将进一步学习设备树驱动,gpio_keys设备树驱动。15.2 gpio_keys设备树驱动1首先来查看驱动源码 ... 15.1概述 在上一节课中我们学习了gpio_leds设备树驱动,认识了设备树的语法规范、修改方法,执行顺...
gpio_keys_get_devtree_pdata(struct device *dev) { struct device_node *node, *pp; struct gpio_keys_platform_data *pdata; struct gpio_keys_button *button; int error; int nbuttons; int i; node = dev->of_node; if (!node) {
xlnx,gpio2-width = <0x20>; xlnx,interrupt-present = <0x0>; xlnx,is-dual = <0x0>; xlnx,tri-default = <0xffffffff>; xlnx,tri-default-2 = <0xffffffff>; }; }; ... keypad { compatible = "gpio-keys"; #address-cells = <1>; ...