linux自带的usbtouchscreen.c也有bug?你猜对了!Posted on
问题出在usbtouch_irq
case -ECONNRESET:case -ENOENT:case -ESHUTDOWN:case -EPIPE:dbg(,__func__, urb->status);return;
当出现EPIPE错误时,驱动并未做太多处理。
然后,就没有然后了,触控屏从此不动了!触控屏厂家老板带着他的小姨子跑了!
什么时候会出现EPIPE错误呢?
USB作为连接器件,不能假设硬件完全稳定的,,什么都有可能。
linux在它的HID设备驱动里,针对这种EPIPE错误的情况,
在hid_irq_in做了如下的处理,
usbhid_mark_busy(usbhid);clear_bit(HID_IN_RUNNING, &usbhid->iofl);set_bit(HID_CLEAR_HALT, &usbhid->iofl);schedule_work(&usbhid->reset_work);return;
为什么在触控屏这里就视若无睹了?
然后拍一些美得想哭的照片,留给老年的自己。