查看: 857|回复: 2

DLT-RK3288 按键驱动

[复制链接]

47

主题

49

帖子

227

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
227
发表于 2018-1-7 18:12:29 | 显示全部楼层 |阅读模式
本节简单分析DLT-RK3288 linux 按键驱动。教你如何添加新按键功能。
驱动源码路径:
kernel/drivers/input/keyboard/rk_keys.c

DTS设备树路径:
kernel\arch\arm\boot\dts\daluotuo-rk3288.dts

支持的按键类型:
1、GPIO按键; 2、ADC类型的按键;

驱动分析

rk_keys.c 已经很完善,没必要修改,只需要简单了解即可。
  1. enum rk_key_type {
  2.         TYPE_GPIO = 1,
  3.         TYPE_ADC
  4. };
复制代码
rk_key_type  按键类型支持GPIO和ADC;
  1. #define DEBOUNCE_JIFFIES        (10 / (MSEC_PER_SEC / HZ))        /* 10ms */
  2. #define ADC_SAMPLE_JIFFIES        (100 / (MSEC_PER_SEC / HZ))        /* 100ms */
复制代码
ADC采样频率和按键消抖时间,都可以通过以上宏修改;

设备树分析:
key {
                compatible = "rockchip,key";
                io-channels = <&adc 1>;
                power-key {
                        gpios = <&gpio0 GPIO_A5 GPIO_ACTIVE_LOW>;
                        linux,code = <116>;
                        label = "power";
                        gpio-key,wakeup;
                };
               
                recovery-key {
                        linux,code = <113>;
                        label = "recovery";
                        rockchip,adc_value = <4>;
                };

关键是红色部分,linux,code:按键码,label :按键取什么名,rockchip,adc_value :按键按下时ADC的值,gpios :对应哪个GPIO,按下时是高电平还是低电平;

如何添加新按键:
按键驱动已经很完善。新加按键不需要改驱动,只添加设备树就可以。
以GPIO按键为例:
在设备树文件的key下拷贝 power-key { 。。。}
1、修改按键名、GPIO号:
如:GPIO6_A6_d 作为音量加按键
vol-up-key {
   gpios = <&gpio6 GPIO_A6 GPIO_ACTIVE_LOW>;

2、修改键码
键码表在:
kernel/include/dt-bindings/input/input.h

在input.h 搜索“vol”可以找到 :
  1. <font size="3">#define KEY_VOLUMEUP                115</font>
复制代码
按键码填入 linux,code = <115>;
最后修改label 名,默认支持唤醒,最终添加的:
vol-up-key {
                        gpios = <&gpio6 GPIO_A6 GPIO_ACTIVE_LOW>;
                        linux,code = <115>;
                        label = "volume up";
                        gpio-key,wakeup;
                };

3、添加android的 kl文件
device\rockchip\common\rk29-keypad.kl

添加:
    key 115   VOLUME_UP
4、用getevent测试
shell@daluotuo:/ # getevent                                                   
add device 1: /dev/input/event2
  name:     " USB OPTICAL MOUSE"
add device 2: /dev/input/event1
  name:     "rk29-keypad"
add device 3: /dev/input/event0
  name:     "ff680000.pwm"

按下按键会有: /dev/input/event1:xxx 的串口输出









回复

使用道具 举报

0

主题

22

帖子

51

积分

注册会员

Rank: 2

积分
51
发表于 2018-6-1 07:13:17 | 显示全部楼层
/dev/input/event1:xxx 的串口输出
回复

使用道具 举报

0

主题

23

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 5 天前 | 显示全部楼层
厉害了,给力
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表