mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 23:53:32 +00:00
USB: EHCI: add need_io_watchdog flag to ehci_hcd
Basically the io watchdog is only useful for those quirk HCDs. For most good ones, it only brings unnecessary wakeups. At least, I know the Intel EHCI HCDs should turn off the flag. Signed-off-by: Alek Du <alek.du@intel.com> Cc: David Brownell <dbrownell@users.sourceforge.net> Cc: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
4d155eb5f5
commit
403dbd3673
3 changed files with 10 additions and 0 deletions
|
@ -127,6 +127,8 @@ timer_action(struct ehci_hcd *ehci, enum ehci_timer_action action)
|
|||
|
||||
switch (action) {
|
||||
case TIMER_IO_WATCHDOG:
|
||||
if (!ehci->need_io_watchdog)
|
||||
return;
|
||||
t = EHCI_IO_JIFFIES;
|
||||
break;
|
||||
case TIMER_ASYNC_OFF:
|
||||
|
@ -508,6 +510,10 @@ static int ehci_init(struct usb_hcd *hcd)
|
|||
|
||||
spin_lock_init(&ehci->lock);
|
||||
|
||||
/*
|
||||
* keep io watchdog by default, those good HCDs could turn off it later
|
||||
*/
|
||||
ehci->need_io_watchdog = 1;
|
||||
init_timer(&ehci->watchdog);
|
||||
ehci->watchdog.function = ehci_watchdog;
|
||||
ehci->watchdog.data = (unsigned long) ehci;
|
||||
|
|
|
@ -129,6 +129,9 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
|
|||
return retval;
|
||||
|
||||
switch (pdev->vendor) {
|
||||
case PCI_VENDOR_ID_INTEL:
|
||||
ehci->need_io_watchdog = 0;
|
||||
break;
|
||||
case PCI_VENDOR_ID_TDI:
|
||||
if (pdev->device == PCI_DEVICE_ID_TDI_EHCI) {
|
||||
hcd->has_tt = 1;
|
||||
|
|
|
@ -126,6 +126,7 @@ struct ehci_hcd { /* one per controller */
|
|||
unsigned big_endian_mmio:1;
|
||||
unsigned big_endian_desc:1;
|
||||
unsigned has_amcc_usb23:1;
|
||||
unsigned need_io_watchdog:1;
|
||||
|
||||
/* required for usb32 quirk */
|
||||
#define OHCI_CTRL_HCFS (3 << 6)
|
||||
|
|
Loading…
Reference in a new issue