問題出在usbtouch_irq
case -ECONNRESET: case -ENOENT: case -ESHUTDOWN: case -EPIPE: /* this urb is terminated, clean up */ dbg("%s - urb shutting down with status: %d", __func__, urb->status); return;
當出現EPIPE錯誤時,驅動並未做太多處理。
然后,就沒有然后了,觸控屏從此不動了!觸控屏廠家老板帶着他的小姨子跑了!
什么時候會出現EPIPE錯誤呢?
USB作為連接器件,不能假設硬件完全穩定的,什么都有可能。
linux在它的HID設備驅動里,針對這種EPIPE錯誤的情況,
在hid_irq_in做了如下的處理,
case -EPIPE: /* stall */ usbhid_mark_busy(usbhid); clear_bit(HID_IN_RUNNING, &usbhid->iofl); set_bit(HID_CLEAR_HALT, &usbhid->iofl); schedule_work(&usbhid->reset_work); return;
為什么在觸控屏這里就視若無睹了?
(轉載請標明:http://www.cnblogs.com/xhawk18/)
