驱动层HOME按键的配置

来源:互联网 发布:数据字典是系统中各类 编辑:程序博客网 时间:2024/06/06 23:19

最近切换新base的时候遇到home按键功能错乱的问题,着实浪费了一些时间去找原因。下面简单说下分析的过程。

实验环境:

平台--展讯SC8810,LINUX 2.3.5

实验步骤:

1. 按照小板设计需求,正确配置HOME按键的行数和列数,采用的是矩阵键盘的设计模式。

2.开机测试,home键有音量下键的功能,偶现home键的功能。

3.和硬件的人员确保了硬件上没有问题。

4.抓log进行问题的分析。

实验内容:

1、通过adb抓取按键时的log分析抓取的键值(这里介绍两种方法):

1)第一种:开机后,利用usb连接到电脑,打开cmd,输入adb shell后若连接正常,输入cat /proc/kmsg即可抓取相应的log,按下HOME键:测得的log发现home的键值<4>[ 3403.651000] 115D<4>[ 3404.102000] 65535D<4>[ 3404.103000] 114D即音量上下键和错误值。

2)第二种:开机后,利用usb连接到电脑,打开cmd,输入adb shell后若连接正常,输入getevent即可。点击home键测得键值:

/dev/input/event0: 00010072 00000000

/dev/input/event0: 0000 0000 00000000

/dev/input/event5: 0003 0000 00000017

/dev/input/event5: 0003 0001 00000016

/dev/input/event0: 0001007300000000

/dev/input/event0: 0000 0000 00000000

/dev/input/event5: 0003 0000 00000017

/dev/input/event5: 0003 0001 00000016

由测得可知为十六进制的音量上下键的键值115114.

 

通常在配置home键的功能时,会涉及到一下几个文件的设定。

2.code/customize/customer_cfg/sp6820gb_trout2/kernel/kpd/kpd_cfg.c文件

#define CUSTOM_KEYPAD_ROWS            7

#define CUSTOM_KEYPAD_COLS              7

用于定义矩阵键盘的行数和列数。

static const unsigned int sprd_keymap[] = {

         // 0 row

         KEYVAL(0, 0,    ANDROID_KEY_VOLUME_DOWN),  

         KEYVAL(6, 0,    ANDROID_KEY_HOME),

         // 1 row

         KEYVAL(1, 0,    ANDROID_KEY_VOLUME_UP),       

};

这个地方一定要配对,每个项目可能都会有所不同,具体参照小板原理图,或问硬件人员也可以。

3.code/customize/customer_cfg/sp6820gb_trout2/res/sprd-keypad.kl文件

#KEY_POWER

key 116     POWER             WAKE

 

#KEY_VOLUMEUP

key 115     VOLUME_UP

 

#KEY_VOLUMEDOWN

key 114     VOLUME_DOWN

 

#KEY_HOME

key 102     HOME             WAKE

102,114,115等值指的是键值,后面的WAKE表示该键有唤醒功能。

4.此外还要保证pinmap设定正确。code/customize/customer_cfg/sp6820gb_trout2/kernel/pinmap/pinmap_cfg.c文件中

MFP_CFG_X(KEYOUT0,            AF0, DS1,F_PULL_NONE,S_PULL_NONE,IO_OE),

MFP_CFG_X(KEYOUT1,            AF0, DS1,F_PULL_NONE,S_PULL_NONE,IO_OE),

MFP_CFG_X(KEYOUT2,            AF0, DS1,F_PULL_NONE,S_PULL_NONE,IO_ OE),

MFP_CFG_X(KEYOUT3,            AF0, DS1,F_PULL_NONE,S_PULL_NONE,IO_ OE),

MFP_CFG_X(KEYOUT4,            AF0, DS1,F_PULL_NONE,S_PULL_NONE,IO_ OE),

MFP_CFG_X(KEYOUT5,            AF0, DS1,F_PULL_NONE,S_PULL_NONE,IO_ OE),

MFP_CFG_X(KEYOUT6,            AF0, DS1,F_PULL_NONE,S_PULL_ NONE,IO_ OE),

MFP_CFG_X(KEYOUT7,            AF0, DS1,F_PULL_NONE,S_PULL_ NONE,IO_ OE),

MFP_CFG_X(KEYIN0,             AF0, DS1,F_PULL_UP,S_PULL_UP,IO_IE),

MFP_CFG_X(KEYIN1,             AF0, DS1,F_PULL_UP,S_PULL_UP,IO_IE),

MFP_CFG_X(KEYIN2,             AF0, DS1,F_PULL_UP,S_PULL_UP,IO_IE),

MFP_CFG_X(KEYIN3,             AF0, DS1,F_PULL_UP,S_PULL_UP,IO_ IE),

MFP_CFG_X(KEYIN4,             AF0, DS1,F_PULL_UP,S_PULL_UP,IO_ IE),

MFP_CFG_X(KEYIN5,             AF0, DS1,F_PULL_UP,S_PULL_UP,IO_IE),

MFP_CFG_X(KEYIN6,             AF0, DS1,F_PULL_ UP,S_PULL_UP,IO_ IE),

MFP_CFG_X(KEYIN7,             AF0, DS1,F_PULL_ UP,S_PULL_UP,IO_ IE),

是关于矩阵键盘行和列的设定

pinmap配置

#define MFP_CFG_X(pin, af, drv, func_updown, sleep_updown, io)        \

(MFP_SET_ALL |\

 (MFP_PIN(PIN_##pin) | MFP_##af | MFP_##drv |\

        MFP_##func_updown  | MFP_##sleep_updown| MFP_##io))

AF0~AF3用于选择pin的复用功能

DSpin的驱动能力

F_PULL_NONE,F_PULL_UP,F_PULL_DOWN指在工作模式下pin的上拉和下拉等

S_PULL_NONE,S_PULL_UP,S_PULL_DOWN指在睡眠模式下pin的上拉和下拉等

IO_OE,IO_IE,IO_Z指在睡眠模式下的pin的输出,输入和高阻。

 

此次对于home键失效的问题,问题是在pinmap的配置上。之前的项目用的33列的矩阵键盘。而新base用的矩阵键盘是77列的。pinmap中后面的几行几列没有配置好。

 

 

 

原创粉丝点击