在probe函数中设置事件类型EV_ABS和支持的事件码ABS_DISTANCE:
input_set_capability(input_dev, EV_ABS, ABS_DISTANCE);然后在工作队列里上报传感器的数据:
input_report_abs(dt->input, ABS_DISTANCE, 1); input_sync(dt->input);
解决办法:
因为ABS_DISTANCE需要使用下面的函数设置相关的参数,如距离的最小,最大值等。才能正常上报。
添加如下内容在probe函数中。
input_set_abs_params(input_dev, ABS_DISTANCE, 0, 1, 0, 0);
函数定义如下:
void input_set_abs_params(struct input_dev *dev, unsigned int axis, <span> </span> int min, int max, int fuzz, int flat) { <span> </span>struct input_absinfo *absinfo; <span> </span>input_alloc_absinfo(dev); <span> </span>if (!dev->absinfo) <span> </span>return; <span> </span>absinfo = &dev->absinfo[axis]; <span> </span>absinfo->minimum = min; <span> </span>absinfo->maximum = max; <span> </span>absinfo->fuzz = fuzz; <span> </span>absinfo->flat = flat; <span> </span>dev->absbit[BIT_WORD(axis)] |= BIT_MASK(axis); }