tina linux key 快速配置使用指南 1 前言 1.1 文档简介 本文介绍tina 平台key 相关的快速配置和使用方法。
1.2 目标读者 allwinner key 驱动驱动层/应用层的使用/开发/维护人员。
1.3 适用范围
表1-1: 适用产品列表
产品名称 内核版本 平台架构
r18 linux-4.4 cortex-a53(64 位)
r30 linux-4.4 cortex-a53(64 位)
r328 linux-4.9 cortex-a7(32 位)
r329 linux-4.9 cortex-a53(64 位)
r818 linux-4.9 cortex-a53(64 位)
r818b linux-4.9 cortex-a53(64 位)
mr813 linux-4.9 cortex-a53(64 位)
mr813b linux-4.9 cortex-a53(64 位)
r528 linux-5.4 cortex-a7(32 位)
d1 linux-5.4 risc-v(64 位)
h133 linux-5.4 cortex-a7(32 位)
2 模块介绍 2.1 key 配置 allwinner 平台支持三种不同类型的key:gpio-key,adc-key,axp-key。其中,gpiokey又包括普通的gpio 按键和矩阵键盘。
按键相关配置根据平台不同内核会有部分差异,下面作详细介绍。
说明
若板子上没有使用我司的带有按键功能的pmu,则就没有对应的axp 按键。
2.2 相关术语介绍 2.2.1 软件术语
表2-1: key 软件术语列表
术语 解释说明
key 按键
gpio-key 使用gpio 检测按键的设备
adc 模数转换器
adc-key 通过adc 读取电压检测按键的设备
lradc 精度为6 位的单通道adc
gpadc 精度为12 位的多通道adc
pmu 电源管理单元
axp-key 连接在电源芯片的按键
3 gpio-key 3.1 4.4 以及4.9 内核 4.4 以及4.9 内核的按键相关配置是一样的。涉及到的驱动文件位于如下位置:
其中,64 位平台和32 位平台的dts 文件位置是不一样的。
lichee/linux-*/arch/arm/boot/dts/平台代号.dtsi //32位平台的dts文件位置
lichee/linux-*/arch/arm64/boot/dts/sunxi/平台代号.dtsi //64位平台的dts文件位置
其中drivers/input/keyboard/目录下的相关文件为驱动文件,而平台名称.dtsi 为设备树文件,例如r328 的dts 文件sun8iw18p1.dtsi,下面以r328 为例进行说明。
支持interrupt-key,poll-key 驱动文件如下:
lichee/linux-*/drivers/input/keyboard/gpio-keys-polled.c //gpio poll key
lichee/linux-*/drivers/input/keyboard/gpio-keys.c //interrupt key
r328 的dts 文件:
lichee/linux-4.9/arch/arm/boot/dts/sun8iw18p1.dtsi
配置这种类型的gpio-key 时,请先查询,当前的gpio 是否可以用作中断功能,如果该引脚可以用作中断功能,则采用interrupt 触发方式获取按键信息,若不能用
作中断功能,则只能采用轮询的方式查询按键的状态信息。
goio-key 的硬件配置图参考下图所示:
图3-1: gpio-key 配置图
3.1.1 普通gpio 采用poll 方式 修改设备树文件
根据原理图arch/arm/boot/dts/sun8iw18p1.dtsi 文件中添加对应的gpio。例如音量加减键分别用到ph5,ph6 这两个gpio,则修改方法如下:
gpio-keys {
compatible = gpio-keys;
status = okay;
vol-down-key {
gpios = ;
linux,code = ;
label = volume down;
debounce-interval = ;
wakeup-source = ;
};
vol-up-key {
gpios = ;
linux,code = ;
label = volume up;
debounce-interval = ;
};
};
• compatible:用于匹配驱动。 • status:是否加载设备。 • vol-down-key:每一个按键都是单独的一份配置,需要分别区分开来。 • gpios:gpio 口配置。 • linux,code:这个按键对应的input 键值。 • label:单个按键对应的标签。 • debounce-interval:消抖时间,单位为us。 • wakeup-source:是否作为唤醒源,配置了这个项的按键可以作为唤醒源唤醒系统。
确认驱动是否被选中
确认gpio_keys_polled.c 是否编译进系统,在tina 目录下执行make kernel_menuconfig,需要将polled gpio buttons 选成“[*]”。
device drivers
└─>input device support
└─>keyboards
└─>polled gpio buttons
图3-2: linux4.4/4.9 轮询按键配置图
3.1.2 普通gpio 采用中断方式 跟采用poll 方式一样,也需要完成如下步骤:
修改设备树文件 可见普通gpio 采用poll 方式,不一样的是这里gpio 采用中断的方式。
gpio-keys {
compatible = gpio-keys;
status = okay;
vol-down-key {
gpios = ;
linux,code = ;
label = volume down;
debounce-interval = ;
wakeup-source = ;
};
vol-up-key {
gpios = ;
linux,code = ;
label = volume up;
debounce-interval = ;
};
};
• compatible:用于匹配驱动。
• status:是否加载设备。
• vol-down-key:每一个按键都是单独的一份配置,需要分别区分开来。
• gpios:gpio 口配置。
• linux,code:这个按键对应的input 键值。
• label:单个按键对应的标签。
• debounce-interval:消抖时间,单位为us。
• wakeup-source:是否作为唤醒源,配置了这个项的按键可以作为唤醒源唤醒系统。
确认驱动是否被选中 在tina 目录下执行make kernel_menuconfig,确保gpio buttons 被选上。
device drivers
└─>input device support
└─>keyboards
└─>gpio buttons
图3-3: linux4.4/4.9 中断按键配置图
3.2 5.4 内核 linux-5.4 内核相对4.4/4.9 来说,gpio 子系统有所变化,因此dts 的配置也不大一样。
dts 文件位置:
lichee/linux-5.4/arch/arm/boot/dts/平台代号.dtsi //32位平台的dts文件位置
lichee/linux-5.4/arch/riscv/boot/dts/sunxi/平台代号.dtsi //risc-v架构平台的dts文件位置
其中drivers/input/keyboard/目录下的相关文件为驱动文件。
支持interrupt-key,poll-key 驱动文件如下:
lichee/linux-5.4/drivers/input/keyboard/gpio-keys-polled.c //gpio poll key lichee/linux-5.4/drivers/input/keyboard/gpio-keys.c //interrupt key
3.2.1 普通gpio 采用poll 方式 修改设备树文件
gpio-keys { compatible = gpio-keys; status = okay; vol-down-key { gpios = ; linux,code = ; label = volume down; debounce-interval = ; wakeup-source = ; }; vol-up-key { gpios = ; linux,code = ; label = volume up; debounce-interval = ; }; };
• compatible:用于匹配驱动。 • status:是否加载设备。 • vol-down-key:每一个按键都是单独的一份配置,需要分别区分开来。 • gpios:gpio 口配置。 • linux,code:这个按键对应的input 键值。 • label:单个按键对应的标签。 • debounce-interval:消抖时间,单位为us。 • wakeup-source:是否作为唤醒源,配置了这个项的按键可以作为唤醒源唤醒系统。
与4.4/4.9 相比,主要是gpios 配置方式变化了。
选上驱动 gpio-key 轮询驱动kernel_menuconfig 路径:
device drivers └─>input device support └─>keyboards └─>polled gpio buttons
3.2.2 普通gpio 采用中断方式 修改设备树文件
gpio-keys { compatible = gpio-keys; status = okay; vol-down-key { gpios = ; linux,code = ; label = volume down; debounce-interval = ; wakeup-source = ; }; vol-up-key { gpios = ; linux,code = ; label = volume up; debounce-interval = ; }; };
• compatible:用于匹配驱动。 • status:是否加载设备。 • vol-down-key:每一个按键都是单独的一份配置,需要分别区分开来。 • gpios:gpio 口配置。 • linux,code:这个按键对应的input 键值。 • label:单个按键对应的标签。 • debounce-interval:消抖时间,单位为us。 • wakeup-source:是否作为唤醒源,配置了这个项的按键可以作为唤醒源唤醒系统。
选上驱动 gpio-key 中断驱动kernel_menuconfig 路径:
device drivers └─>input device support └─>keyboards └─>gpio button
3.2.3 矩阵键盘 当需要使用大量按键的时候,如果单独给每一个按键配一个gpio 的话,那gpio 是远远不够的。这时,可以使用矩阵键盘的方式,使用n 个gpio,就可以最大支持n*n 个按键。矩阵按键的硬件原理图如下所示:
图3-4: 矩阵按键硬件原理图
警告 矩阵键盘的gpio 建议使用soc 自带的io 口,不使用扩展io 芯片的io 口。因为矩阵键盘扫描按键的时间比较短,而扩展io 芯片的io 是通过i2c/uart 等等的总线去修改io 状态的,修改一次状态时间比较长,可能会导致矩阵按键扫描按键检测失败的。
这里以r528 为示例,dts 为:
lichee/linux-5.4/arch/arm/boot/dts/sun8iw20p1.dtsi
驱动文件为:
lichee/linux-5.4/drivers/input/keyboard/matrix_keypad.c
修改设备树文件 根据r528 原理图来添加对应行和列的gpio,分别写在row-gpios 和col-gpios,详细设备树文件为:
matrix_keypad:matrix-keypad { compatible = gpio-matrix-keypad; keypad,num-rows = ; keypad,num-columns = ; row-gpios = ; col-gpios = ; linux,keymap = ; gpio-activelow; debounce-delay-ms = ; col-scan-delay-us = ; linux,no-autorepeat; status = okay; };
设备树文件参数描述如下: • keypad,num-rows:行数 • keypad,num-columns:列数 • row-gpios:行对应的gpio 口,从第一行开始 • col-gpios:列对应的gpio 口,从第一列开始 • linux,keymap:每一个按键对应的键值 • gpio-activelow:按键按下时,行线是否为低电平。用于触发中断,必须配置。 • debounce-delay-ms:消抖时间。 • col-scan-delay-us:扫描延时,如果io 状态转换时间过长可能会导致按键扫描错误。 • linux,no-autorepeat:按键按下时是否重复提交按键, 设1 就是不重复, 设0 重复。
确认驱动是否被选中在tina 目录下执行运行make kernel_menuconfig,确认以下配置:
device drivers └─>input device support └─>keyboards └─>gpio driven matrix keypad support
图3-5: 矩阵键盘配置图
4 adc-key adc-key 一共有两种adc 检测方式,分别是lradc 和gpadc。lradc 分辨率为6 位,gpadc 分辨率为12 位,因此后者精度会更高。
下面将分别讲述两种不同的方式。
4.1 4.4 以及4.9 内核 4.1.1 lradc-key lradc-key 有如下特性:
1.support voltage input range between 0 to 2v。 2.support sample rate up to 250hz,可以配置为32hz,62hz,125hz,250hz,r328 sdk中默认配置为250hz。
3.当前lradc key 最大可以支持到13 个按键(0.15v 为一个档),通常情况下,建议lradc key最大不要超过8 个(0.2v 为一档),否则由于采样误差、精度等因素存在,
会很容易出现误判的情况。
如下图所示,lradc-key 检测原理是当有按键被按下或者抬起时,lradc 控制器(6bit) 检测到电压变化后,经过lradc 内部的逻辑控制单元进行比较运算后,产生相
应的中断给cpu, 同时电压的变化值会通过lradc 内部的data register 的值(0~0x3f) 来体现。
图4-1: lradc 按键原理图
下面以r328 为例进行说明,驱动文件:
linux-4.9/drivers/input/keyboard/sunxi-keyboard.c linux-4.9/arch/arm/boot/dts/sun8iw18p1.dtsi
如果使用adc-key , 请先确保softwinner key board support 有被选择上。
device drivers └─>input device support └─>keyboards └─>softwinnner key board support
图4-2: linux4.4/4.9 lradc 按键配置图
在lradc-key 驱动中涉及两个重要的结构体
static unsigned char keypad_mapindex[64] = { 0,0,0,0,0,0,0, /* key 1, 0-7 */ 1,1,1,1,1,1, /* key 2, 8-14 */ 2,2,2,2,2,2, /* key 3, 15-21 */ 3,3,3,3,3, /* key 4, 22-27 */ 4,4,4,4,4, /* key 5, 28-33 */ 5,5,5,5,5, /* key 6, 34-39 */ 6,6,6,6,6,6,6,6,6, /* key 7, 40-49 */ 7,7,7,7,7,7,7,7,7,7,7,7,7 /* key 8, 50-63 */ }; static unsigned int sunxi_scankeycodes[key_max_cnt] = { [0 ] = key_volumeup, [1 ] = key_volumedown, [2 ] = key_home, [3 ] = key_enter, [4 ] = key_menu, [5 ] = key_reserved, [6 ] = key_reserved, [7 ] = key_reserved, [8 ] = key_reserved, [9 ] = key_reserved, [10] = key_reserved, [11] = key_reserved, [12] = key_reserved, };
keypad_mapindex[] 数组的值跟lradc_data0(0x0c) 的值是对应的,表示的具体意义是:key_val(lradc_data0 寄存器的值) 在0~7 范围内时,表示的是操作
key1,依此类推,key_val为8~14 的范围之内时,表示的操作key2。正常来说,按照r16 推荐的硬件设计,该数组内无需任何更改,当个别情况下,如遇到adc-
key input 上报的keycode 有异常时,需要依次按下每个按键同时读取key_val 的值来修正keypad_mapindex[]。
sunxi_scankeycodes[]: 该数组的意义为 sunxi_scankeycodes[*] 标示的是具体的某一个key,用户可以修改其中的keycode。
例如,key_val 等于25, 则根据keypad_mapindex 得到scancode 为4, 再由sunxi_scankeycodes得到键值为key_menu。
keypad_mapindex 这个数组可以通过sys_config 进行配置:
[key_para] key_used = 1 key_cnt = 5 key1_vol = 300 key2_vol = 600 key3_vol = 1000 key4_vol = 1500 key5_vol = 1800
这个配置下转换得到的keypad_mapindex 数组是:
static unsigned char keypad_mapindex[64] = { 0,0,0,0,0,0,0,0,0,0 /* key 1, 0-9 */ 1,1,1,1,1,1,1,1,1,1, /* key 2, 10-19 */ 2,2,2,2,2,2,2,2,2,2,2,2,2, /* key 3, 20-32 */ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, /* key 4, 33-48 */ 4,4,4,4,4,4,4,4,4,4, /* key 5, 49-58 */ 5,5,5,5,5, /* key 6, 59-63 */ };
设备树文件sun8iw18p1.dtsi
keyboard0:keyboard{ compatible = allwinner,keyboard_1350mv; reg = ; interrupts = ; status = okay; key_cnt = ; key0 = ; key1 = ; key2 = ; key3 = ; key4 = ; wakeup-source; };
• compatible:匹配驱动。
• reg:lradc 模块的基地址。
• interrupts:lradc 中断源。
• status:是否加载驱动。
• key_cnt:按键数量。
• key0:第一个按键,前面数字的是电压范围,后者是input 系统的键值。
• wakeup-source:lradc 作为唤醒源。
驱动初始化时,会读取设备树中相关属性,其中key_cnt 表示配置的按键个数,keyx 配置对应的adc 值以及键值。根据这些属性,会重新设置keypad_mapindex
数组,以及sunxi_scankeycodes 数组。
keypad_mapindex[] 数组的值跟adc 值是对应的, 6bitadc, 范围0~63,表示的具体意义是:key_val 在0~190 范围内时,表示的是操作key0, 以此类推,key_val
为191~390 范围内时,表示的是操作key1。
sunxi_scankeycodes[]: 该数组的意义为 sunxi_scankeycodes[*] 表示的是具体的某一个key,用户可以修改设备树来改变keycode。
例如,默认配置下,key_val 等于300, 则根据keypad_mapindex 得到scancode 为1, 再由sunxi_scankeycodes 得到键值114。
4.1.2 gpadc-key gpadc 有多个通道,例如在r328s3 中有4 个通道。
通道有三种工作模式:
一、是在指定的通道完成一次转换,转换数据更新在对应通道的数据寄存器中;
二、在所有指定的通道连续转换直到软件停止,转换数据更新在对应通道的数据寄存器中;
三、可以在指定的通道进行adc 的采样和转换,并将结果顺序地存入fifo,fifo 深度为64 并支持中断控制。
检测原理是当按键被按下或抬起时,指定的通道的控制器检测到电压变化,然后经过逻辑控制单元进行比较运算后,产生相应的中断给cpu。r328s3 的gpadc
的框图如下图所示。
图4-3: gpadc 按键硬件图
以r328s3 为例,驱动文件:
linux-4.9/drivers/input/sensor/sunxi_gpadc.c linux-4.9/drivers/input/sensor/sunxi_gpadc.h
如果使用gpadc-key,请先确保sensors_gpadc 有被选上。
device drivers └─>device drivers └─>input device support └─>sensors └─>sunxi gpadc
图4-4: linux4.4/4.9 gpadc 按键配置图
在gpadc 中与lradc 一样涉及两个重要的结构体
static unsigned char keypad_mapindex[128] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, /* key 1, 0-8 */ 1, 1, 1, 1, 1, /* key 2, 9-13 */ 2, 2, 2, 2, 2, 2, /* key 3, 14-19 */ 3, 3, 3, 3, 3, 3, /* key 4, 20-25 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, /* key 5, 26-36 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* key 6, 37-39 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, /* key 7, 40-49 */ 7, 7, 7, 7, 7, 7, 7 /* key 8, 50-63 */ }; u32 scankeycodes[key_max_cnt];
keypad_mapindex[] 数组的定义与lradc 的相似,但是要注意的是,gpadc 的数组大小为128,而lradc 的是64,所以说gpadc 的精度更高。在linux4.9 内核
中已经不在数组里配置了,程序中该数组只是初始化的。后面会根据sys_config 或者dts 的配置来生成所要使用的keypad_mapindex[]。
设备树文件这里示例的是r328s3 的方案级设备树文件:
lichee/linux-4.9/arch/arm/boot/dts/sun8iw18p1.dtsi
详细gpadc 配置如下:
gpadc:gpadc{ compatible = allwinner,sunxi-gpadc; reg = ; interrupts = ; clocks = ; status = disable; };
• compatible:匹配驱动。 • reg:gpadc 寄存器基地址。 • interrupts:gpadc 中断源。 • clocks:gpadc 依赖的时钟。 • status:是否加载设备。
4.sys_config.fex 文件
[gpadc] gpadc_used = 1 channel_num = 1 channel_select = 0x01 channel_data_select = 0 channel_compare_select = 0x01 channel_cld_select = 0x01 channel_chd_select = 0 channel0_compare_lowdata = 1700000 channel0_compare_higdata = 1200000 key_cnt = 4 key0_vol = 164 key0_val = 115 key1_vol = 415 key1_val = 114 key2_vol = 700 key2_val = 139 key3_vol = 1000 key3_val = 28
在sys_config 中,配置含义如下:
• channel_num:表示平台上支持的最大通道数; • channel_select:表示通道启用设置,通道0:0x01 通道1:0x02 通道2:0x04 通道3:0x08; • channel_data_select:表示通道数据启用,通道0:0x01 通道1:0x02 通道2:0x04 通道3:0x08; • channel_compare_select;表示比较功能启用,通道写法跟前面一致; • channel0_compare_lowdata:表示的低于该电压可以产生中断,这里是1.7v; • channel0_compare_higdata:则是高于该电压可以产生中断,这里是1.2v; • key_cnt:表示的是按键个数; • key_vol:表示第 个按键的电压值; • key_val:表示的是第 个按键的键值。
在软件上,当key_vol 在0~164 范围时,表示的是操作key0,以此类推;在硬件上,164 表示的是164mv,通过计算keyn_vol = keyn_vol + ( key(n+1)_vol -
keyn_vol) / 2来得到范围。比如说第一个范围为key0_vol = 164 + (415 - 164) / 2 = 289.5,即电压在0~289.5 在,adc 检测到为操作的key0,以此类推。然后通过
scankeycodes 得到键值115。
5.board.dts 文件
方案级设备树文件只写这个模块的配置,而详细的按键配置一般需要写在板级的board.dts 中。
/* resistance gpadc configuration channel_num: maxinum number of channels supported on the platform. channel_select: channel enable setection. channel0:0x01 channel1:0x02 channel2:0x04 channel3:0x08 channel_data_select: channel data enable. channel0:0x01 channel1:0x02 channel2:0x04 channel3:0x08. channel_compare_select: compare function enable channel0:0x01 channel1:0x02 channel2:0 x04 channel3:0x08. channel_cld_select: compare function low data enable setection: channel0:0x01 channel1:0 x02 channel2:0x04 channel3:0x08. channel_chd_select: compare function hig data enable setection: channel0:0x01 channel1:0 x02 channel2:0x04 channel3:0x08. */ gpadc:gpadc{ channel_num = ; channel_select = ; channel_data_select = ; channel_compare_select = ; channel_cld_select = ; channel_chd_select = ; channel0_compare_lowdata = ; channel0_compare_higdata = ; channel1_compare_lowdata = ; channel1_compare_higdata = ; key_cnt = ; key0_vol = ; key0_val = ; key1_vol = ; key1_val = ; key2_vol = ; key2_val = ; key3_vol = ; key3_val = ; key4_vol = ; key4_val = ; status = okay; };
dts 文件参数的含义可以参考sys_config.fex 的。
4.2 5.4 内核 4.2.1 lradc-key 5.4 内核的lradc 驱动功能与4.4/4.9 内核的无明显变化,因此下面只介绍设备树文件与配置教程。
修改设备树文件
这里以d1 为例,设备树文件路径为:
lichee/linux-5.4/arch/riscv/boot/dts/sunxi/sun20iw1p1.dtsi
dtsi 一般默认已经写好lradc 的配置:
keyboard0: keyboard@2009800 { compatible = allwinner,keyboard_1350mv; reg = ; interrupts-extended = ; clocks = ; resets = ; key_cnt = ; key0 = ; key1 = ; key2 = ; key3 = ; key4 = ; wakeup-source; status = okay; };
• compatible:匹配驱动。
• reg:lradc 模块的基地址。
• interrupts:lradc 中断源。
• status:是否加载驱动。
• key_cnt:按键数量。
• key0:第一个按键,前面数字的是电压范围,后者是input 系统的键值。
• wakeup-source:lradc 作为唤醒源。
但是d1 方案电路板上实际lradc 只连接了一个按键,此时可以通过修改board.dts 来进行配置。若实际的电路板上lradc 按键是符合以上配置的,则不需要修
改。
说明 board.dts 的配置最终会覆盖了方案的dtsi 文件配置
board.dts 配置:
&keyboard0 { key_cnt = ; key0 = ; status = okay; };
确认驱动是否被选中在tina 目录下执行make kernel_menuconfig,确认以下配置:
device drivers └─>input device support └─>keyboards └─>softwinnner key board support
图4-5: linux-5.4 lradc 按键配置图
4.2.2 gpadc-key 5.4 内核的gpadc 设备树配置主要是时钟和中断方面有所改动,board.dts 配置可参考4.9 内核。
修改设备树文件
这里以d1 来作为示例,设备树文件为:
lichee/linux-5.4/arch/riscv/boot/dts/sunxi/sun20iw1p1.dtsi
详细配置为:
gpadc: gpadc@2009000 { compatible = allwinner,sunxi-gpadc; reg = ; interrupts-extended = ; clocks = ; clock-names = bus; resets = ; status = okay; };
• compatible:匹配驱动。 • reg:gpadc 寄存器基地址。 • interrupts:gpadc 中断源。 • clocks:gpadc 依赖的时钟。 • status:是否加载设备。
确认驱动是否被选中 在tina 目录下执行make kernel_menuconfig,确认以下配置:
device drivers └─>input device support └─>sensors └─>sunxi gpadc driver support
图4-6: linux-5.4 gpadc 配置图
5 axp-key 使用axp-key 的话需要电路板上带上我司提供power-key 功能的pmu,这是由pmu 识别该按键,并在驱动中上报相关事件,power-key 驱动源码在电源驱动源码
同目录下。用户不需要做任何更改,这部分是可以直接使用的。
这里使用r329 来作为例子,其对应的设备节点为:
图5-1: axp 按键节点图
上报的键值为key_power 116
5.1 4.9 内核 修改设备树文件这里以r329-evb1 为例,设备树文件为board.dts,路径:
device/config/chips/r329/configs/evb1/board.dts
详细配置为:
&twi2{ no_suspend = ; status = okay; pmu0: pmu@34 { compatible = x-powers,axp2585; ............省略其他无关配置 powerkey0: powerkey@0 { status = okay; compatible = x-powers,axp2585-pek; pmu_powkey_off_time = ; pmu_powkey_off_func = ; pmu_powkey_off_en = ; pmu_powkey_long_time = ; pmu_powkey_on_time = ; wakeup_rising; /* wakeup_falling; */ }; }; };
确认驱动是否被选中
tina 目录下执行make kernel_menuconfig,确认以下配置:
device drivers └─>input device support └─>miscellaneous devices └─>x-powers axp2101 power button driver
图5-2: axpkey 配置图
警告 不同方案使用的pmu 可能会不一样,因此axp-key 的配置也会不一致,详细查看各个方案使用的pmu 型号。
这里另外,pmu 还提供了axp gpio, 根据不同型号的pmu, gpio 数量可能不一样,但gpio number 均以1024 开始,例如axp gpio0 的gpio number 为1024,
axp gpio1 的gpio number 为1025。它们均能当做普通gpio 使用,因此按照gpio-key 章节的描述去操作它们即可需要注意的是,sys_config 中axp gpio 的命名
与普通gpio 有些区别,例如axp gpio0:
port:power0
5.2 5.4 内核 说明 本章节暂不介绍linux-5.4 内核。
再度出圈!华帝首场厨房音乐会多元跨界躁动今夏,N多亮点逐个看!
手机锂离子电池什么情况下会爆炸?
智能镜面显示屏可帮助我们打开理想生活的入口
实例介绍Python中深浅拷贝
无人机实质性的作用你了解多少
Tina Linux Key快速配置使用指南
ir2104全桥驱动电路原理
微电网的电压等级如何确定
作为5G衍生概念,边缘计算究竟有何魔力?
彩电行业发展不容乐观,创维赢得发展先机
英特尔AI百佳计划 拓展了“无接触”商业的无限未来
微软SurfaceLaptop评测 找不到准确的词来形容它
苹果对其芯片制造商究竟持何种态度?
深入探讨NXP NXPS32G3对汽车行业的影响
金立M2017评测:金立M2017走商务风,6GB+骁龙653要价6999!
关于汽车无线充电技术的工作原理
自动点烟器电路原理
手机SIM卡和银行卡芯片封装和bga底部填充胶方案
歌尔光学新一代VR/AR光学模组亮相VR&AR显示光学技术峰会
基于Dragonboard 410c开发板的USB摄像头实现实时视频采集