本帖最后由 xu0xiang0 于 2015-7-15 23:23 编辑
大家好:
我在IMX6Q的板子上(Kernel 3.0.35)需要配置3个按键(上拉),现在配置完成以后,有2个按键可以正常使用,有一个按键(KEY_ROW2_GPIO_4_11)没反应。
我使用的是 driver/input/keyboard/gpio-keys.c作为驱动,在板文件 board-mx6q_sabrelite.c中的修改如下:
.................................................
#define MX6Q_SABRELITE_MENU_KEY IMX_GPIO_NR(4, 14)
#define MX6Q_SABRELITE_BACK_KEY IMX_GPIO_NR(4, 11)
#define MX6Q_SABRELITE_HOME_KEY IMX_GPIO_NR(4, 10)
..........................................................................
static iomux_v3_cfg_t mx6q_sabrelite_pads[] =
{
................................................
/* others */
// MX6Q_PAD_KEY_COL2__**_COL_2,
MX6Q_PAD_KEY_COL2__GPIO_4_10,
// MX6Q_PAD_KEY_ROW2__**_ROW_2,
MX6Q_PAD_KEY_ROW2__GPIO_4_11,
// MX6Q_PAD_KEY_COL4__**_COL_4,
MX6Q_PAD_KEY_COL4__GPIO_4_14,
.......................
}
......................................
static struct gpio_keys_button sabrelite_buttons[] =
{
GPIO_BUTTON(MX6Q_SABRELITE_BACK_KEY, KEY_BACK, 1, "key-back", 0),
GPIO_BUTTON(MX6Q_SABRELITE_MENU_KEY, KEY_MENU, 1, "key-memu", 0),
GPIO_BUTTON(MX6Q_SABRELITE_HOME_KEY, KEY_HOME, 1, "key-home", 0),
};
系统启动以后 MX6Q_PAD_KEY_COL2_GPIO_4_10,MA6Q_PAD_KEY_COL4_GPIO_4_14初始状态都为高电平,按键按下后变为低电平,正常; MX6Q_PAD_KEY_ROW2_GPIO_4_11初始状态为低电平,按键按下后也为低电平,故此表现为按键无反应.
我对此的测试方法是:
1.硬件连接可能有问题,我把万用表打到短路挡测试了下,从按键的转接板到底板的线路是没问题的,底板和主板因为放在仪器里面,暂时不好测试.
2.按键可能需要配置为上拉,按照主板供应商技术支持的说法,我将 iomux-mx6q.h中
#define MX6Q_PAD_KEY_ROW2__GPIO_4_11 \
(_MX6Q_PAD_KEY_ROW2__GPIO_4_11 | MUX_PAD_CTRL(NO_PAD_CTRL))
修改为
#define MX6Q_PAD_KEY_ROW2__GPIO_4_11 \
(_MX6Q_PAD_KEY_ROW2__GPIO_4_11 | MUX_PAD_CTRL(NO_PAD_CTRL|PAD_CTL_PUE))
但是测试没效果。
3。可能系统其他的地方也对 GPIO_4_11做了配置,我在目录下用命令
find -name "*.c"|xargs grep "ROW2" 做了搜索,发现在6Q的系统下没有驱动对其作配置。
4.我在 gpio-keys.c中使用 gpio_direction_output(KEY,0) 和 gpio_direction_output(KEY,1)分别做了测试,MX6Q_PAD_KEY_ROW2_GPIO_4_11始终为0,另外2个按键根据测试语句的不同而初始状态为低电平和高电平,这说明,从ARM的芯片里面似乎也无法设置 GPIO_4_11这个 Pin脚。
从以上似乎可以说明,MX6Q_PAD_KEY_ROW2_GPIO_4_11这个Pin脚在主板或者底板的线路开路了,但是我在网上搜索的时候,发现论坛里面也有人和我遇到了同样的问题,他的是 GPIO_4_15 始终为低电平https://bbs.21ic.com/forum.php?mod=viewthread&tid=818762 ,但是他的帖子里面没有写怎么解决的,这说明有可能是 MX6Q_PAD_KEY_ROW2_GPIO_4_11, MX6Q_PAD_KEY_ROW4_GPIO_4_15需要特别的配置......
公司的硬件说,这几个按键之前是用来作矩阵键盘的,而 COL2,COL4是输入端,ROW2,ROW4是接受端,所以COL2,COL4的初始状态为高电平,ROW2,ROW4的初始状态为低电平。难道我还需要在其他地方作配置?
如果谁在6Q的板子上配置过 ROW2,ROW4,还请指点下,或者给出点代码也可以。
如果我自己解决了这个问题,我也会将解决方法贴出来,让别人少走弯路。
|