- 论坛徽章:
- 0
|
这几天被老板弄来搞I2C设备,读取的坐标需要用Input子系统上报应用。但是代码写好以后测试中发现上报的三个坐标值经常会丢失1-2个,有时连input_sync都没发。我的代码:
相关代码:
input子系统注册:
bma->input_dev = input_allocate_device();
if (!bma->input_dev)
{
err = -ENOMEM;
printk(KERN_DEBUG "Input Request Error.\n");
goto probe_err_reg;
}
printk(KERN_DEBUG "Input Request Successful.\n");
bma->input_dev->open = input_open;
bma->input_dev->close = input_release;
bma->input_dev->name = SXA_I2C_NAME;
bma->input_dev->phys = "sxa/input7";
bma->input_dev->id.bustype = BUS_I2C;
bma->input_dev->id.vendor = SXA_VENDOR;
bma->input_dev->id.product = 1;
bma->input_dev->id.version = 1;
__set_bit(EV_ABS, bma->input_dev->evbit);
__set_bit(ABS_X, bma->input_dev->absbit);
__set_bit(ABS_Y, bma->input_dev->absbit);
__set_bit(ABS_Z, bma->input_dev->absbit);
__set_bit(ABS_MISC, bma->input_dev->absbit);
err = input_register_device(bma->input_dev);
工作队列内发送坐标数据:
input_report_abs(dd->input_dev, ABS_X, x);
input_report_abs(dd->input_dev, ABS_Y, y);
input_report_abs(dd->input_dev, ABS_Z, z);
input_sync(dd->input_dev);
在工作队列内发送数据时,上层报告数据丢失。采用evbug.ko调试发现数据确定丢失,以下是报告:
<7>[ 3224.267441] Enter irq.
<7>[ 3224.267484] dd has get.
<7>[ 3224.267529] work scheduled.
<7>[ 3224.267589] work_q Entered.
<7>[ 3224.268473] X Regs: -3.
<7>[ 3224.268504] Y Regs: 31.
<7>[ 3224.268519] Z Regs: 2.
<7>[ 3224.268534] TILT Regs: 96.
<7>[ 3224.268551] *******************************
<7>[ 3224.268669] evbug.c: Event. Dev: input3, Type: 3, Code: 0, Value: -3 应该有3个数据,-3、31、2,结果31丢失
<7>[ 3224.270979] evbug.c: Event. Dev: input3, Type: 3, Code: 2, Value: 2
<7>[ 3224.272001] evbug.c: Event. Dev: input3, Type: 0, Code: 0, Value: 0
另外,发现同事正常应用的触摸屏上报的坐标数据也是有丢失的,不过似乎没影响正常使用……迷惑中……
还望高手们能指点迷津,谢谢! |
|