Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1996e6c5 authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman
Browse files

USB: EHCI: work around bug in the Philips ISP1562 controller



This patch (as1556) works around a bug in the Philips ISP1562 EHCI
controller.  Although the controller claims to support frame-list
lengths smaller than the default of 1024 for its periodic schedule, in
fact smaller values don't work.  A new quirk flag is added to indicate
when the bug is present, and if it is then the schedule size is left
at the default value.

Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 65b8e5cb
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -639,7 +639,7 @@ static int ehci_init(struct usb_hcd *hcd)
	INIT_LIST_HEAD(&ehci->cached_itd_list);
	INIT_LIST_HEAD(&ehci->cached_sitd_list);

	if (HCC_PGM_FRAMELISTLEN(hcc_params)) {
	if (HCC_PGM_FRAMELISTLEN(hcc_params) && !ehci->sched_size_bug) {
		/* periodic schedule size can be smaller than default */
		switch (EHCI_TUNE_FLS) {
		case 0: ehci->periodic_size = 1024; break;
+7 −0
Original line number Diff line number Diff line
@@ -97,6 +97,13 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
			break;
		}
		break;

	case PCI_VENDOR_ID_PHILIPS:
		/*
		 * Philips controllers set HCC_PGM_FRAMELISTLEN, but
		 * they don't implement schedule sizes shorter than 1024.
		 */
		ehci->sched_size_bug = 1;
	}

	/* cache this readonly data; minimize chip reads */
+1 −0
Original line number Diff line number Diff line
@@ -149,6 +149,7 @@ struct ehci_hcd { /* one per controller */
	unsigned		use_dummy_qh:1;	/* AMD Frame List table quirk*/
	unsigned		has_synopsys_hc_bug:1; /* Synopsys HC */
	unsigned		frame_index_bug:1; /* MosChip (AKA NetMos) */
	unsigned		sched_size_bug:1; /* Philips */

	/* required for usb32 quirk */
	#define OHCI_CTRL_HCFS          (3 << 6)