Alan, My patch works fine. As below:(ohci_irq) -- ints = ohci_readl(ohci, ®s->intrstatus); ++ if((ohci->hcca->done_head!=0) ++ &&!(hc32_to_cpup(ohci, &ohci->hcca->done_head) ++ &0x01)){ ++ ints = OHCI_INTR_WDH; ++ }else{ ++ ints = ohci_readl(ohci, ®s->intrstatus); ++ ints = 0xfffffffd; ++ } Can you provide your patch for your thought? I'll give a try. For my understanding about this , if the WDH in HcInterruptStatus Register is set, we must clear this bit after the ohci_irq() function finished. Otherwise, this bit will be set always. But I don't find any code clearing this WDH bit. So in which place this WDH bit is clear? Thanks, Frank -----Original Message----- From: Alan Stern [mailto:stern@xxxxxxxxxxxxxxxxxxx] Sent: Wednesday, December 30, 2009 11:28 AM To: Huang, FrankR Cc: USB list Subject: RE: A question about ohci_irq() On Wed, 30 Dec 2009, Huang, FrankR wrote: > Right now , it works fine. > I'll do more tests and give you feedback. > But what I am thinking is that if the WDH is set in interrupt status > register, should I clear this bit if I omit this interrupt? > What's your improved way? No, the bit should not be cleared. That's what the original code in the driver did, and it caused your mouse to stop working. My patch clears WDH when hcca->done_head is not 0, and keeps WDH set if hca->done_head is 0. That way when the controller sets hcca->done_head to a nonzero value, the driver will know to call dl_done_list(). Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html