USB 2.0 device (scanner) does not work with xhci_hcd on USB 3.0 system

Your USB 2.0 device (in this case, scanner) has some compatibility problem interacting with your USB 3.0 system (either USB3 ports, or USB2 ports of a USB3 hub). The problem could be caused by the scanner hardware/firmware, PC EFI/BIOS firmware, PC USB chipset, or the Linux kernel xhci_hcd driver.

Possible solutions:

  • Use a short USB 2 extension cable (or just a USB2 cable) to connect the device. This forces the USB 3 port to use USB 2 signalling. A USB 3 device or cable has 9 pins, whereas a USB 2 device or cable only has 4 pins. A USB 3 port will default to USB 2 signaling communication when only 4 pins are connected. A USB 2 extension cable only caries 4 wires that connect the 4 pins of USB 2 only communications.

  • Use a cheap USB 1.1 (or 2.0) hub and connect it to the USB3 port. Connect your device to the USB 1.1/2.0 hub. This will force the connection to be USB1.1/2.0. Since the hub has a different USB controller, it will workaround some protocol bugs. A USB 1.1 hub is a good choice for a "low speed" device like a mouse, keyboard etc. A USB 2.0 hub may well be necessary for a "full speed" device like a scanner that won't downgrade to USB 1.1.

  • Upgrade your PC/laptop BIOS. Manufacturers can workaround many USB issues with fixes in the BIOS/EFI.

  • Connect the USB 2.0 device (scanner) via a USB 2.0 port if the laptop has one. This may make no difference if your USB2 ports are also controlled by the xhci_hcd driver (ie. you still see new high-speed USB device number x using xhci_hcd in dmesg), in which case try using an external USB2 hub.

  • If this is a desktop or server rather than a laptop, try a different PCI USB controller card. Different USB3 cards have different XHCI host controller chips, so compatibility with different USB hubs/devices varies.

  • Upgrade the firmware of your USB 2.0 device. This is probably not possible for a consumer-level scanner, but is possible for some USB 2.0 devices (eg. Pro cameras)

  • Replace your USB 2.0 device (scanner) with a USB 3.0 compatible device

  • Upgrade to the latest mainline kernel

  • In the UEFI/BIOS change the setting under USB configuration, "XHCI Pre-Boot mode" from enabled to disabled. In some BIOS configurations this setting is known as "XHCI Mode".

    USB 3.0 ports are controlled by the xhci_hcd driver in Linux. When "XHCI pre-boot mode" is enabled the BIOS will route the USB 3.0 ports to the USB3 xHCI controller. When it is disabled, the USB 3.0 ports are routed to the EHCI (USB 2.0) ports. The wording "pre-boot mode" implies that this option only affects the environment before a full operating system is booted (the associated BIOS help text explicitly mentions that this option is used for USB3 support in MSDOS); however, it seems this can also affect the post-boot environment, and can have the effect of connecting the USB 3.0 ports to the USB 2.0 controller even after Linux is loaded. The disadvantage of this is that all the USB 3 ports will now run at USB 2 speed.

  • Disable USB powersaving for all devices with the autosuspend kernel module option:

    modprobe usbcore autosuspend=-1

    Or if usbcore is not a module with this kernel boot parameter:

    usbcore.autosuspend=-1

    (in Ubuntu usbcore is builtin so use the kernel boot parameter)

  • Disable powersaving (USB autosuspend) for the scanner (from Documentation/usb/power-management.txt.

    When you plug the scanner in check dmesg|tail and you will see something like

    usb 3-3: Product: SCX-4200 Series

    The number 3-3 represents the USB path of the device in the format bus-port.port.port. You will find the corresponding sysfs directory at /sys/bus/usb/devices/3-3. Write on to power/control here to disable autosuspend:

    echo on > /sys/bus/usb/devices/3-3/power/control


I had a similar problem with my scanner (all in one Brother MFC-j410) on Ubuntu 14.04 32 bit. The scanner only worked after starting XSANE for the second time and then only did one operation preview or scan. I tried changing the usb ports to usb 2.0 to no avail. My motherboard is an Asus B85M-k with an intel i3 LGA1150 chip.

I tried virtualbox with a previous version of Ubuntu where the scanner always worked on an other pc. Still, no luck, which made me highly suspicious about the usb 3 capabilities. The printer gave me some warnings also, but did print.

after reading this

USB 3.0 ports are controlled by the xhci_hcd driver in Linux. When "XHCI pre-boot mode" is enabled the BIOS will route the USB 3.0 ports to the USB3 xHCI controller. When it is disabled, the USB 3.0 ports are routed to the EHCI (USB 2.0) ports. The wording "pre-boot mode" implies that this option only affects the environment before a full operating system is booted (the associated BIOS help text explicitly mentions that this option is used for USB3 support in MSDOS); however, it seems this can also affect the post-boot environment, and can have the effect of connecting the USB 3.0 ports to the USB 2.0 controller even after Linux is loaded (so ports run at USB2 speed).

I went into my BIOS and under advanced settings found and changed the USB 3.0 from XHCI enabled to disabled and there was another setting for the usb 2 (I think it was EHCI) from enabled to disabled or the other way around, sorry I don't remember. Anyhow, after booting back into Ubuntu 14.04 32 bit, everything worked fine.