--- zzzz-none-000/linux-2.6.39.4/drivers/usb/host/ehci-hub.c 2011-08-03 19:43:28.000000000 +0000 +++ puma6-atom-6490-729/linux-2.6.39.4/drivers/usb/host/ehci-hub.c 2021-11-10 13:38:17.000000000 +0000 @@ -1092,6 +1092,25 @@ temp |= PORT_RESET; temp &= ~PORT_PE; +#ifdef CONFIG_GEN3_USB + /* 20131028 AVM/WK USB Tricky Enum Workaround */ + if (hostpc_reg) { + //reset starts + ehci_writel(ehci, temp, status_reg); + + spin_unlock_irqrestore(&ehci->lock, flags); + msleep(10);//USB reset for 10 ms + spin_lock_irqsave(&ehci->lock, flags); + + temp1 = ehci_readl(ehci, hostpc_reg); + ehci_writel(ehci, temp1 | HOSTPC_PHCD, hostpc_reg); + + udelay(220); //USB suspend for 220 us + + ehci_writel(ehci, temp1 & ~ HOSTPC_PHCD, hostpc_reg); + // reset continues + } +#endif /* * caller must wait, then call GetPortStatus * usb 2.0 spec says 50 ms resets on root