aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/host/ehci-hcd.c2
-rw-r--r--drivers/usb/host/ehci-pci.c7
-rw-r--r--drivers/usb/host/ehci.h1
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)