--- zzzz-none-000/linux-2.6.28.10/drivers/usb/host/ehci-q.c 2009-05-02 18:54:43.000000000 +0000 +++ fusiv-7390-686/linux-2.6.28.10/drivers/usb/host/ehci-q.c 2010-04-07 09:56:53.000000000 +0000 @@ -286,7 +286,9 @@ unsigned count = 0; u8 state; __le32 halt = HALT_BIT(ehci); - +#ifdef CONFIG_FUSIV_USB_LED + u32 usb_port=0; +#endif if (unlikely (list_empty (&qh->qtd_list))) return count; @@ -318,6 +320,10 @@ if (likely (last->urb != urb)) { ehci_urb_done(ehci, last->urb, last_status); count++; +#ifdef CONFIG_FUSIV_USB_LED + if ( last->urb->dev && last->urb->dev->portnum ) + usb_port|=(1 << (last->urb->dev->portnum-1)); +#endif last_status = -EINPROGRESS; } ehci_qtd_free (ehci, last); @@ -459,6 +465,10 @@ ehci_urb_done(ehci, last->urb, last_status); count++; ehci_qtd_free (ehci, last); +#ifdef CONFIG_FUSIV_USB_LED + if ( last->urb->dev && last->urb->dev->portnum ) + usb_port|=(1 << (last->urb->dev->portnum-1)); +#endif } /* restore original state; caller must unlink or relink */ @@ -495,7 +505,18 @@ /* otherwise, unlink already started */ } } - +#ifdef CONFIG_FUSIV_USB_LED + if (usb_port) + { + u8 i=0; + while ( i < FUSIV_USB_MAX_LEDS ) + { + if ( usb_port & 1 << i ) + fusiv_usb_led_set(i,FUSIV_USB_LED_XTR_BIT); + i++; + } + } +#endif return count; } @@ -1052,6 +1073,10 @@ iaa_watchdog_done(ehci); +#ifdef CONFIG_FUSIV_VX160 + if(ehci_readl (ehci, &ehci->regs->async_next) == qh->qh_dma) + ehci_writel (ehci, (u32)ehci->async->qh_dma, &ehci->regs->async_next); +#endif // qh->hw_next = cpu_to_hc32(qh->qh_dma); qh->qh_state = QH_STATE_IDLE; qh->qh_next.qh = NULL;