title: Understanding linux hub messages in kernel log
body: <p>I'm having problems with a 4-port USB hub chip attached to a SOM running Linux, and I'm trying to understand the meaning of the various messages in the kernel log pertaining to it. My hub produces the following messages during bootup:</p>
  
  <pre><code> usb 2-1: new high speed USB device number 2 using fsl-ehci
   usb 2-1: new high speed USB device number 3 using fsl-ehci
   usb 2-1: new high speed USB device number 4 using fsl-ehci
   usb 2-1: device not accepting address 4, error -71
   usb 2-1: new high speed USB device number 5 using fsl-ehci
   usb 2-1: device not accepting address 5, error -71
   hub 2-0:1.0: unable to enumerate USB device on port 1
  </code></pre>
  
  <p>There are a couple of on-board devices connected to this hub, but it's never getting as far as enumerating those. So why does it try to assign multiple USB device numbers to my hub chip? I could understand it failing, and then retrying with the next higher device number, but it's not showing an error for device number 2 or 3. And then what does "unable to enumerate USB device on port 1" mean? Port 1 of what? It's clearly on host port 2, not 1. And why does the final error message come from the hub driver, when it hasn't apparently recognized a hub, and why does it use 2-0 as the device number rather than 2-1? Does any of this make sense?</p>
  
  <p>To get some idea of what I ought to be seeing if it wasn't failing, I tried plugging an external hub into the other host port, and got this:</p>
  
  <pre><code>usb 1-1: new high speed USB device number 7 using fsl-ehci
  usb 1-1: New USB device found, idVendor=05e3, idProduct=0608
  usb 1-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
  usb 1-1: Product: USB2.0 Hub
  hub 1-1:1.0: USB hub found
  hub 1-1:1.0: 4 ports detected
  usb 1-1.1: new high speed USB device number 8 using fsl-ehci
  usb 1-1.1: New USB device found, idVendor=05e3, idProduct=0608
  usb 1-1.1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
  usb 1-1.1: Product: USB2.0 Hub
  hub 1-1.1:1.0: USB hub found
  hub 1-1.1:1.0: 4 ports detected
  </code></pre>
  
  <p>Obviously, this 7-port hub is implemented as a 4-port hub connected to another 4-port hub, and the "x-y.z" construct refers to downstream port z on hub x-y. But what does the construct "1-1:1.0" mean? I've done a lot of Googling to find this out, including looking through kernel source and header files, to no avail. At one point in the code, they are fetched by a function called dev_name(). Could someone point me to some documentation on this?</p>