解决方法:
- 在配置GPIO复用功能之后,等待一段时间,清一遍pending,去除第一次误触发中断。另外,在使用过程中,不要动态切换GPIO的复用功能。
- 在gpio-keys驱动中,定义一些变量,强行让中断处理函数不去处理第一次中断事件。
2.由gpio-keys的gpio_keys_open()函数上报的:
static int gpio_keys_open(struct input_dev *input)
{
struct gpio_keys_drvdata *ddata = input_get_drvdata(input);
const struct gpio_keys_platform_data *pdata = ddata->pdata;
int error;
if (pdata->enable) {
error = pdata->enable(input->dev.parent);
if (error)
return error;
}
/* Report current state of buttons that are connected to GPIOs */
gpio_keys_report_state(ddata);
return 0;
}
gpio_keys_report_state()函数来上报按键当前状态。在驱动probe函数和resume函数都会运行该函数。
这个函数是否需要运行主要取决于应用层的工作逻辑,不想在probe或者resume上报当前按键状态的话,也可以在代码中注释掉该函数。
解决方法:
- 在配置GPIO复用功能之后,等待一段时间,清一遍pending,去除第一次误触发中断。另外,在使用过程中,不要动态切换GPIO的复用功能。
- 在gpio-keys驱动中,定义一些变量,强行让中断处理函数不去处理第一次中断事件。
2.由gpio-keys的gpio_keys_open()函数上报的:
static int gpio_keys_open(struct input_dev *input)
{
struct gpio_keys_drvdata *ddata = input_get_drvdata(input);
const struct gpio_keys_platform_data *pdata = ddata->pdata;
int error;
if (pdata->enable) {
error = pdata->enable(input->dev.parent);
if (error)
return error;
}
/* Report current state of buttons that are connected to GPIOs */
gpio_keys_report_state(ddata);
return 0;
}
gpio_keys_report_state()函数来上报按键当前状态。在驱动probe函数和resume函数都会运行该函数。
这个函数是否需要运行主要取决于应用层的工作逻辑,不想在probe或者resume上报当前按键状态的话,也可以在代码中注释掉该函数。
举报