Index: sys/dev/usb/usb_subr.c =================================================================== RCS file: /cvsroot/src/sys/dev/usb/usb_subr.c,v retrieving revision 1.215 diff -u -p -r1.215 usb_subr.c --- sys/dev/usb/usb_subr.c 3 Sep 2016 07:29:16 -0000 1.215 +++ sys/dev/usb/usb_subr.c 3 Sep 2016 08:08:15 -0000 @@ -1551,7 +1551,9 @@ usbd_fill_deviceinfo(struct usbd_device if (p->up_dev) err = p->up_dev->ud_addr; else { - int s = UGETW(p->up_status.wPortStatus); + const bool sshub_p = USB_IS_SS(dev->ud_speed); + const int s = UGETW(p->up_status.wPortStatus); + if (s & UPS_PORT_ENABLED) err = USB_PORT_ENABLED; else if (s & UPS_SUSPEND) @@ -1561,10 +1563,9 @@ usbd_fill_deviceinfo(struct usbd_device * on 3.x, and UPS_PORT_POWER is available * only on 2.0 or 1.1. */ - else if (USB_IS_SS(dev->ud_speed) && - (s & UPS_PORT_POWER_SS)) + else if (sshub_p && (s & UPS_PORT_POWER_SS)) err = USB_PORT_POWERED; - else if (s & UPS_PORT_POWER) + else if (!sshub_p && (s & UPS_PORT_POWER)) err = USB_PORT_POWERED; else err = USB_PORT_DISABLED; @@ -1627,7 +1628,7 @@ usbd_fill_deviceinfo_old(struct usbd_dev if (p->up_dev) err = p->up_dev->ud_addr; else { - int s = UGETW(p->up_status.wPortStatus); + const int s = UGETW(p->up_status.wPortStatus); if (s & UPS_PORT_ENABLED) err = USB_PORT_ENABLED; else if (s & UPS_SUSPEND)