/* The UHCI spec says devices must have 2 ports, and goes on to say
         * they may have more but gives no way to determine how many there
-        * are.  However, according to the UHCI spec, Bit 7 of the port
+        * are.  However according to the UHCI spec, Bit 7 of the port
         * status and control register is always set to 1.  So we try to
-        * use this to our advantage.
+        * use this to our advantage.  Another common failure mode when
+        * a nonexistent register is addressed is to return all ones, so
+        * we test for that also.
         */
        for (port = 0; port < (io_size - USBPORTSC1) / 2; port++) {
                unsigned int portstatus;
 
                portstatus = inw(uhci->io_addr + USBPORTSC1 + (port * 2));
-               if (!(portstatus & 0x0080))
+               if (!(portstatus & 0x0080) || portstatus == 0xffff)
                        break;
        }
        if (debug)
                dev_info(uhci_dev(uhci), "detected %d ports\n", port);
 
-       /* Anything less than 2 or greater than 7 is weird,
-        * so we'll ignore it.
-        */
-       if (port < 2 || port > UHCI_RH_MAXCHILD) {
+       /* Anything greater than 7 is weird so we'll ignore it. */
+       if (port > UHCI_RH_MAXCHILD) {
                dev_info(uhci_dev(uhci), "port count misdetected? "
                                "forcing to 2 ports\n");
                port = 2;