我们知道:rk3288 android7.1主板按键的使用主要有GPIO接口的和ADC接口的,而我的项目这里,需要添加两个GPIO类型的按键,现在记录一下,其实主要是dts的配置而已,驱动不需要改动:
1、首先看下原理图,对应找到具体使用的gpio:从原理图上可知,power按键的GPIO使用的是GPIO0_A1, recovery按键的GPIO使用的是GPIO8_A1


2、dts的配置方面

 164         gpio_keys { //参考同目录下的 rk3036-echo.dts165                 compatible = "gpio-keys";166                 #address-cells = <1>;167                 #size-cells = <0>;168169                 pinctrl-names = "default";170                 pinctrl-0 = <&pwr_key &rcvr_key>;171172                 power_key: power-key { //power按键173                         label = "GPIO Key Power";174                         gpios = <&gpio0 1 GPIO_ACTIVE_LOW>; // [gpio2 25] to GPIO0_A1175                         linux,code = <KEY_POWER>; // 207176                         debounce-interval = <100>;177                         wakeup-source;178                 };179                 recovery_key: recovery_key { //recovery按键180                         label = "recovery";181                         gpios = <&gpio8 1 GPIO_ACTIVE_LOW>; //GPIO8_A1182                         linux,code = <KEY_CLEAR>; // 0x163 ==> 355183                         debounce-interval = <100>;184                         wakeup-source;185                 };186         };
 771 &pinctrl {833         keys {834                 pwr_key: pwr-key {835                         rockchip,pins = <0 1 RK_FUNC_GPIO &pcfg_pull_none>; // pcfg_pull_default836                 };837                 rcvr_key: rcvr-key {838                         rockchip,pins = <8 1 RK_FUNC_GPIO &pcfg_pull_none>;839                 };840         };871 };

对应的gpio按键驱动在以下文件:
./drivers/input/keyboard/gpio_keys.c

上报键值的接口函数

339 static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)
340 {341         const struct gpio_keys_button *button = bdata->button;
342         struct input_dev *input = bdata->input;
343         unsigned int type = button->type ?: EV_KEY;
344         int state = gpio_get_value_cansleep(button->gpio); //get gpio state
345
346         printk("czd0710: enter [%s(), %d], gpio_no ==> %d\n", __func__, __LINE__, button->gpio);
347         printk("czd0710: enter [%s(), %d], get gpio state ==> %d\n", __func__, __LINE__, state);
348         if (state < 0) {349                 dev_err(input->dev.parent, "failed to get gpio state\n");
350                 return;
351         }
352
353         state = (state ? 1 : 0) ^ button->active_low; //这里得出判断按键的状态,最终得到的state为1就是按下,为0就是抬起
354         printk("czd0710: enter [%s(), %d], state ==> %d\n", __func__, __LINE__, state);
355         if (type == EV_ABS) { //事件类型为EV_ABS ==> 0x03
356                 if (state) {357                         input_event(input, type, button->code, button->value);
358                         printk("czd0710: enter [%s(), %d], state ==> %d\n", __func__, __LINE__, state);
359                 }
360         } else {361                 input_event(input, type, button->code, !!state); //上报键值和状态
362                 printk("czd0710: enter [%s(), %d], state ==> %d\n", __func__, __LINE__, state);
363                 printk("czd0710: enter [%s(), %d], !!state ==> %d\n", __func__, __LINE__, !!state);
364         }
365         input_sync(input); //sync一下,表示此次上报完成
366 }

更新kernel之后验证:

在串口输入getevent,然后去按recovery按键就可以得到input上报给上层的键值0x163:

rk3288:/ # getevent
add device 1: /dev/input/event4name:     "rk29-keypad"
add device 2: /dev/input/event2name:     "gpio_keys"
add device 3: /dev/input/event3name:     "gsensor"
add device 4: /dev/input/event0name:     "ff680020.pwm"
add device 5: /dev/input/event1name:     "gtinput"
/dev/input/event2: 0001 0163 00000001 //0x163对应上面dts配置的recovery_key linux,code;后面的1表示按下按键
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0001 0163 00000000 //0x163对应上面dts配置的recovery_key linux,code;后面的0表示释放按键
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0001 0163 00000001
/dev/input/event2: 0000 0000 00000000

RK3288_Android7.1添加两个gpio的按键相关推荐

  1. MSP430 MSP430单片机输入/输出模块 通用I/O端口GPIO LED按键

     DO OR DIE MSP430 MSP430单片机输入/输出模块 通用I/O端口GPIO LED&按键 一.原理图 二.I/O端口常用操作C语言描述及常用C语言解析 1.MSP430头文件 ...

  2. 【驱动】GPIO 作为按键时的 设备树 配置

    #[驱动]GPIO作为按键时的 设备树 配置 0.设备树 0.0 别名 imx6ul.dtsi 什么作用??? /*************开始/ / { aliases {- gpio0 = &am ...

  3. 日期加星期存入mysql_在MySQL中添加两个星期的日期?

    要在MySQL中添加两个星期的日期,请使用DATE_ADD()-insert into yourTableName(yourColumnName) values(date_add(now(),inte ...

  4. html下拉列表框设置两个,怎么使用HTML option标签添加两个value

    怎么使用HTML option标签添加两个value 发布时间:2020-07-13 09:15:45 来源:亿速云 阅读:215 作者:Leah 这篇文章将为大家详细讲解有关怎么使用HTML opt ...

  5. 使用Boost.Compute的STL 在GPU上添加两个向量的实现

    Boost:使用Boost.Compute的STL 在GPU上添加两个向量的实现 实现功能 C++实现代码 实现功能 Boost的compute模块,使用Boost.Compute的STL 在GPU上 ...

  6. kotlin 第一个程序_Kotlin程序添加两个矩阵

    kotlin 第一个程序 Given two matrices, we have to add them. 给定两个矩阵,我们必须将它们相加. Example: 例: Input: matrix 1: ...

  7. html一个页面多个动画,如何在单个html页面中添加两个相同的adobe边缘动画?

    我正在使用jQuery手机,其中不同的网页内容将在一个HTML页面.如何在单个html页面中添加两个相同的adobe边缘动画? 在页面变化(滑动页面)上,其他页面具有相同的边缘动画,因为所有的html ...

  8. phpstorm如何同时打开两个文件夹_iPhone如何同时添加两个不同的面容ID?

    iPhone 8 及之前使用 Touch ID 的设备,可以同时添加多个指纹来解锁设备,这样就可以添加其他人来解锁自己的 iPhone. 在iPhone X及之后的设备上,使用的都是面容识别解锁,其实 ...

  9. 创建一个Rectangle类。 添加两个属性width、height,分别表示宽度和高度,添加计算矩形的周长和面积的方法。测试输出一个矩形的周长和面积。

    [Java]创建一个Rectangle类 添加两个属性width.height,分别表示宽度和高度,添加计算矩形的周长和面积的方法.测试输出一个矩形的周长和面积. /*作者:龙蝶 *日期:2020年4 ...

  10. linux 创建分区 4t,CentOS6.6添加两块4T硬盘过程记录

    市场部门平时存储视频文件比较多,原来的2T硬盘已经快填满,新近买了两块4T硬盘做samba共享使用. 记录一下过程: 1.关机,拆机,装硬盘,装机,接线,开机,这些就不说了,做运维的应该都会. 2.直 ...

最新文章

  1. maven开发mybatis 让*.xml 拷贝到classes目录下
  2. 网易云信 — 陪你打怪让你飞!
  3. 和java通信_[源码和文档分享]基于JAVA的即时通信软件
  4. 【王道计组笔记】总线(2):性能指标分析
  5. CSMA/CA与CSMA/CD
  6. 2. 贯穿软件开发生命周期的测试
  7. Echart使用,看了就会的
  8. mod() SQL中取余的函数
  9. 内存容错技术ECCChipkill保护镜像
  10. July's English
  11. 5G 时代,优酷推出的帧享究竟是什么?
  12. 基于R和ArcGIS两种方法制作土地利用转移图详细教程
  13. C语言程序设计教程(第三版)李凤霞 第十一章课后习题答案
  14. 基于Keras的LSTM多变量时间序列预测(北京PM2.5数据集pollution.csv)
  15. EditPlus中文版+英文版+注册码下载
  16. 深度!用“极速统一”,开启金融行业数据分析新范式
  17. 【面经】 2018深信服前端面试题
  18. springboot+solr实现搜索引擎
  19. (转)DNS Proxy配置
  20. 半双工 Wi-Fi 无线局域网

热门文章

  1. Oracle 自动生成的视图VM_NSO_1
  2. vue模糊搜索select取值
  3. JVM系列四:生产环境参数实例及分析【生产环境实例增加中】
  4. WAMP(windows+apache+mysql+php)
  5. 朋友圈入驻360云盘?这么赤果果微信造吗?
  6. javascript操作cookie实例
  7. UserCF、 KNN 和 TopK
  8. 吐血整理了下AAAI2022中和NLP相关的论文,包括信息抽取、机翻、NER、多模态、数据增强、问答、多语言、KD、文本纠错等...
  9. 读《scikiit-learn机器学习》黄永昌第四章
  10. 数据结构与算法python—1.数据结构与算法入门