diff options
-rw-r--r-- | drivers/usb/host/ehci-hcd.c | 2 | ||||
-rw-r--r-- | drivers/usb/host/ehci-pci.c | 7 | ||||
-rw-r--r-- | drivers/usb/host/ehci.h | 1 |
3 files changed, 9 insertions, 1 deletions
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 5cb775b1802d..f644ba9529ed 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c | |||
@@ -639,7 +639,7 @@ static int ehci_init(struct usb_hcd *hcd) | |||
639 | INIT_LIST_HEAD(&ehci->cached_itd_list); | 639 | INIT_LIST_HEAD(&ehci->cached_itd_list); |
640 | INIT_LIST_HEAD(&ehci->cached_sitd_list); | 640 | INIT_LIST_HEAD(&ehci->cached_sitd_list); |
641 | 641 | ||
642 | if (HCC_PGM_FRAMELISTLEN(hcc_params)) { | 642 | if (HCC_PGM_FRAMELISTLEN(hcc_params) && !ehci->sched_size_bug) { |
643 | /* periodic schedule size can be smaller than default */ | 643 | /* periodic schedule size can be smaller than default */ |
644 | switch (EHCI_TUNE_FLS) { | 644 | switch (EHCI_TUNE_FLS) { |
645 | case 0: ehci->periodic_size = 1024; break; | 645 | case 0: ehci->periodic_size = 1024; break; |
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c index bc94d7bf072d..4baafa3e80b2 100644 --- a/drivers/usb/host/ehci-pci.c +++ b/drivers/usb/host/ehci-pci.c | |||
@@ -97,6 +97,13 @@ static int ehci_pci_setup(struct usb_hcd *hcd) | |||
97 | break; | 97 | break; |
98 | } | 98 | } |
99 | break; | 99 | break; |
100 | |||
101 | case PCI_VENDOR_ID_PHILIPS: | ||
102 | /* | ||
103 | * Philips controllers set HCC_PGM_FRAMELISTLEN, but | ||
104 | * they don't implement schedule sizes shorter than 1024. | ||
105 | */ | ||
106 | ehci->sched_size_bug = 1; | ||
100 | } | 107 | } |
101 | 108 | ||
102 | /* cache this readonly data; minimize chip reads */ | 109 | /* cache this readonly data; minimize chip reads */ |
diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h index 2694ed6558d2..2a6652fd5400 100644 --- a/drivers/usb/host/ehci.h +++ b/drivers/usb/host/ehci.h | |||
@@ -149,6 +149,7 @@ struct ehci_hcd { /* one per controller */ | |||
149 | unsigned use_dummy_qh:1; /* AMD Frame List table quirk*/ | 149 | unsigned use_dummy_qh:1; /* AMD Frame List table quirk*/ |
150 | unsigned has_synopsys_hc_bug:1; /* Synopsys HC */ | 150 | unsigned has_synopsys_hc_bug:1; /* Synopsys HC */ |
151 | unsigned frame_index_bug:1; /* MosChip (AKA NetMos) */ | 151 | unsigned frame_index_bug:1; /* MosChip (AKA NetMos) */ |
152 | unsigned sched_size_bug:1; /* Philips */ | ||
152 | 153 | ||
153 | /* required for usb32 quirk */ | 154 | /* required for usb32 quirk */ |
154 | #define OHCI_CTRL_HCFS (3 << 6) | 155 | #define OHCI_CTRL_HCFS (3 << 6) |