linux自帶的usbtouchscreen.c也有bug?你猜對了!


問題出在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/)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM