记一次gpio按键驱动调试经历_linux,code = <key_volumedown>;-程序员宅基地

技术标签: linux  GPIO  

Linux有标准的gpio按键驱动
sprd平台只需配置下dts,在mt6761平台(gpio配置成gpio模式)也验证了该驱动。

gpio-keys {
             key-volumedown {
                 label = "Volume Down Key";
                 linux,code = <KEY_VOLUMEDOWN>;
                 gpios = <&ap_gpio 124 GPIO_ACTIVE_LOW>;
                 debounce-interval = <2>;
                 wakeup-source;
             }
};

在mt6580也按相同的方式配置后,dws中将gpio配置成irq模式,发现触发不了按键中断。cat pin查下gpio模式,发现gpio不是irq模式,那需要改造gpio_keys.c文件了。加入如下修改

gpio-keys {
	compatible = "gpio-keys";
	pinctrl-names = "up_cfg","down_cfg";
	pinctrl-0 = <&up_cfg>;
	pinctrl-1 = <&down_cfg>;
	key-volumeup {
		label = "Volume Up Key";
		linux,code = <115>;
		debounce-interval = <5>;
		gpios = <&pio 67 1>;
	};
	key-volumedown {
		label = "Volume Down Key";
		linux,code = <114>;
		debounce-interval = <5>;
		gpios = <&pio 64 1>;
	};
};

&pio {
	down_cfg: down_cfg {
		down_cfg {
			pinmux = <PINMUX_GPIO64__FUNC_EINT0>;
			slew-rate = <0>;
			bias-pull-up =<00>;
		};
	};

	up_cfg: up_cfg {
		up_cfg {
			pinmux = <PINMUX_GPIO67__FUNC_EINT3>;
			slew-rate = <0>;
			bias-pull-up =<00>;
		};
	};
};

gpio_keys.c的probe函数

struct pinctrl_state *pin_state;
static struct pinctrl *pinctrl;

pinctrl = devm_pinctrl_get(&pdev->dev);
if (IS_ERR_OR_NULL(pinctrl)) {
	pr_err("%s(): Pinctrl not defined", __func__);
}else {
	pr_info("%s(): Using Pinctrl", __func__);
	pin_state = pinctrl_lookup_state(pinctrl,"up_cfg");
	if (IS_ERR_OR_NULL(pin_state)) {
		dev_err(&pdev->dev,"pinctrl lookup failed for default state");
	}else{
		pinctrl_select_state(pinctrl,pin_state);
	}

   pin_state = pinctrl_lookup_state(pinctrl,"down_cfg");
   if (IS_ERR_OR_NULL(pin_state)) {
		dev_err(&pdev->dev, "pinctrl lookup failed for sleep state");
   }else{
		pinctrl_select_state(pinctrl,pin_state);
  }
}

硬件去抖部分在该平台不适配,可以按如下修改

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mike8825/article/details/121472902

智能推荐

【Dash搭建可视化网站】项目7: 利用 Dash实现宝可梦能力图表和可视化雷达图联动_如何搭建diy宝可梦网站-程序员宅基地

文章浏览阅读3.9k次,点赞7次,收藏20次。手动反爬虫,禁止转载:原博地址 https://blog.csdn.net/lys_828/article/details/122135788(CSDN博主:Be_melting) 知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息项目7:利用 Dash实现宝可梦能力图表和可视化雷达图7.1 项目完成功能预览项目完成后的预览界面如下。页面分为上下两个部分,上面是展示两列,左侧一列放置宝可梦的图片和介绍信息,右侧一例放置宝可梦能力的可视化雷_如何搭建diy宝可梦网站

java高级开发--foreach_java foreach 用外面的值-程序员宅基地

文章浏览阅读120次。原始数组的输出用for循环完成:public class TestFor { public static void main(String[] args) { int[] data = new int[] {1,2,3,4,5}; for (int i = 0; i < data.length; i++) { System.o..._java foreach 用外面的值

Docker创建tomcat容器报错standard_init_linux.go:211: exec user process caused "no such file or directory"_log":"standard_init_linux.go:211: exec user proces-程序员宅基地

文章浏览阅读1.1w次。Tomcat创建容器之前使用命令docker pull tomcatdocker run -it -P tomcat报如下错误:standard_init_linux.go:211: exec user process caused "no such file or directory"解决方案:改用其他tomcat镜像创建Tomcat容器并运行,执行成功docker r..._log":"standard_init_linux.go:211: exec user process caused \"no such file or

安卓线程学习四 之 线程优先级和调度_set_sched_policy-程序员宅基地

文章浏览阅读3.6k次,点赞2次,收藏3次。一 问题思考安卓开发,如果想设置线程优先级有两种方法:1 Android sdk也提供一个设置线程优先级的方法2 Thread.java里面提供了设置线程优先级的方法这两个方法有什么区别,应该选择使用哪一个呢?二 线程优先级的原理2.1. android.os.process.java设置线程优先级源码分析/** * Set the priorit..._set_sched_policy

flask 文件上传(单文件上传、多文件上传)---程序员宅基地

文章浏览阅读1.6k次。文件上传在HTML中,渲染一个文件上传字段只需要将<input>标签的type属性设为file,即<input type=”file”>。这会在浏览器中渲染成一个文件上传字段,单击文件选择按钮会打开文件选择窗口,选择对应的文件后,被选择的文件名会显示在文件选择按钮旁边。在服务器端,可以和普通数据一样获取上传文件数据并保存。不过需要考虑安全问题,文..._werkzeug.datastructures.filestorage 校验上传文件大小

IDEA安装使用JFormDesigner(非商业用途)_idea jformdesigner-程序员宅基地

文章浏览阅读5.6k次,点赞5次,收藏17次。关于在IDEA中JFormDesigner的安装步骤,和可能出错的一些情况_idea jformdesigner

随便推点

Organising the Organisation(uva10766)(生成树计数)-程序员宅基地

文章浏览阅读195次。InputOutputSample Input5 5 23 13 44 51 45 34 1 11 43 0 2Sample Output383题意:有一张图上有\(n\)个点,两两之间有一条边,现在切断\(m\)条边,求剩下的图中有多少种不同的生成树。题解:生成树计数做这道题,需要三个预备知识:\(Kirchhoff\)矩阵首先先构造两..._uva10766:organising the organisation kuangbin

一目了然凉哥为大家倾力打造的付费专栏_csdn付费专栏-程序员宅基地

文章浏览阅读1.8w次,点赞83次,收藏9次。大家好,我是几何心凉,欢迎来到我的付费专栏系列,本专栏将深入介绍 Vue 3 和 Vite,以及如何在 TypeScript 的帮助下构建现代化的 Web 应用程序。Vue 是一个流行的 JavaScript 框架,它允许开发人员构建高性能的用户界面,并且具有丰富的生态系统。Vue 3 是 Vue 框架的最新版本,引入了一些重要的新特性,例如基于函数的组件 API,增强的响应性系统和更好的 TypeScript 支持。_csdn付费专栏

uniapp从入门到精通(全网保姆式教程)~ 别再说你不会开发小程序了_uniapp开发小程序-程序员宅基地

文章浏览阅读3.3w次,点赞297次,收藏1.0k次。为了实现多端兼容,综合考虑编译速度、运行性能等因素,uni-app约定了如下开发规范:页面文件遵循Vue单文件组件规范组件标签靠近小程序规范,详细见uni-app组件规范接口能力(js api)靠近微信小程序规范,但需将前缀wx替换为uni,详见uni-app接口规范数据绑定及事件处理同Vue.js规范,同时补充了App以及页面的生命周期为兼容多端运行,建议使用flex布局进行开发。_uniapp开发小程序

React Native只支持输入数字和小数点 并且保留两位小数_react-native 只能输入数字和小数点-程序员宅基地

文章浏览阅读1.3k次。overMaxLength(text) { // 只支持输入数字和小数点 const numberReg = new RegExp(/^[0-9.]*$/); if(!numberReg.test(text)) { text = text.substring(0, text.length - 1); console.log('texttexttex..._react-native 只能输入数字和小数点

mugen linux主程序,Mugen主程序报错汇总-程序员宅基地

文章浏览阅读4.8k次。原文来自11区民间整合的Mugen主程序报错汇总,同时加入了千寻网站平时收集的常见报错,源地址:http://mugenbinran.web.fc2.com/error.html以下皆为机翻,有空会慢慢修正翻译加载初始场景报错报错关键字:dojo.def 或 stage0.def原因:程序以debug模式运行且调用了debug场景解决方法:1、在mugen.cfg文件内找到[Debug]下的Sta..._mugen报错

因子个数以及因子和_因子个数和-程序员宅基地

文章浏览阅读1.2k次。整数因子个数题目描述高度可约的三角形数三角形数数列是通过逐个加上自然数来生成的。例如,第7个三角形数是 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28。三角形数数列的前十项分别是:1, 3, 6, 10, 15, 21, 28, 36, 45, 55, …让我们列举出前七个三角形数的所有约数:1: 13: 1,36: 1,2,3,610: 1,2,5,1015: ..._因子个数和