break;
        case PCI_VENDOR_ID_INTEL:
                ehci->need_io_watchdog = 0;
+               ehci->fs_i_thresh = 1;
                if (pdev->device == 0x27cc) {
                        ehci->broken_periodic = 1;
                        ehci_info(ehci, "using broken periodic workaround\n");
 
        int                     status;
        unsigned                mod = ehci->periodic_size << 3;
        struct ehci_iso_sched   *sched = urb->hcpriv;
-       struct pci_dev          *pdev;
 
        if (sched->span > (mod - SCHEDULE_SLOP)) {
                ehci_dbg (ehci, "iso request %p too long\n", urb);
         * slot in the schedule, implicitly assuming URB_ISO_ASAP.
         */
        if (likely (!list_empty (&stream->td_list))) {
-               pdev = to_pci_dev(ehci_to_hcd(ehci)->self.controller);
                start = stream->next_uframe;
 
                /* For high speed devices, allow scheduling within the
-                * isochronous scheduling threshold.  For full speed devices,
-                * don't. (Work around for Intel ICH9 bug.)
+                * isochronous scheduling threshold.  For full speed devices
+                * and Intel PCI-based controllers, don't (work around for
+                * Intel ICH9 bug).
                 */
-               if (!stream->highspeed &&
-                               pdev->vendor == PCI_VENDOR_ID_INTEL)
+               if (!stream->highspeed && ehci->fs_i_thresh)
                        next = now + ehci->i_thresh;
                else
                        next = now;
 
        unsigned                has_amcc_usb23:1;
        unsigned                need_io_watchdog:1;
        unsigned                broken_periodic:1;
+       unsigned                fs_i_thresh:1;  /* Intel iso scheduling */
 
        /* required for usb32 quirk */
        #define OHCI_CTRL_HCFS          (3 << 6)