之前在init函数里只配置了这个:
set_bit(EV_KEY, gpio_hyc->evbit);
set_bit(KEY_HYC1, gpio_hyc->keybit);
set_bit(KEY_HYC2, gpio_hyc->keybit)
结果发现input_report_key(gpio_hyc, KEY_HYC1, 1);
input_sync(gpio_hyc);失败
这个input_sync(gpio_hyc)如果没有,那么input子系统不会去唤醒上报的线程,那个线程会一直等着wake;
追了一下发现卡在了
static void input_handle_event(struct input_dev *dev,unsigned int type, unsigned int code, int value)
case EV_KEY:
if (is_event_supported(code, dev->keybit, KEY_MAX) &&
!!test_bit(code, dev->key) != value) {
if (value != 2) {
__change_bit(code, dev->key);
if (value)
input_start_autorepeat(dev, code);
else
input_stop_autorepeat(dev);
}
disposition = INPUT_PASS_TO_HANDLERS; 也就是没有跑到这导致后面没有上报
}
break;
于是猜了一下,由于dev->keybit配置了,dev->key没有配置,于是在init里加了两句
set_bit(KEY_HYC1, gpio_hyc->key);
set_bit(KEY_HYC2, gpio_hyc->key);
于是搞定了,但是没有搜到相关资料,只能说侥幸