linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* usb port enumeration changed?
@ 2021-07-27  1:15 Eyal Lebedinsky
  2021-07-27  2:23 ` Alan Stern
  0 siblings, 1 reply; 4+ messages in thread
From: Eyal Lebedinsky @ 2021-07-27  1:15 UTC (permalink / raw)
  To: list linux-usb

I know that device numbers change, but bus/port numbers are stable and reflect the physical layout
of the hubs and devices. I relied for years on these port numbers to identify specific (otherwise
identical) devices.

Searching the list (I am now subscribed) and the web did not yield an answer.

For example, I have two TEMPer temperature sensor devices attached. They are both plugged into
a 4-port USB3 hub. They are on ports 3 and 4. Port 2 is unused and port 1 has a bluetooth radio
attached. I also have 5 dvb usb tuners which stayed in their old positions.

Until now (fedora 34, last on 5.12.17-300.fc34.x86_64), I would see this:

$ lsusb
Bus 001 Device 013: ID 0c45:7401 Microdia TEMPer Temperature Sensor
Bus 001 Device 025: ID 0c45:7401 Microdia TEMPer Temperature Sensor

$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/10p, 10000M
     |__ Port 4: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
         |__ Port 4: Dev 4, If 0, Class=Hub, Driver=hub/4p, 5000M
     |__ Port 5: Dev 3, If 0, Class=Hub, Driver=hub/4p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p, 480M
     |__ Port 2: Dev 26, If 0, Class=Hub, Driver=hub/4p, 480M
         |__ Port 2: Dev 27, If 1, Class=Human Interface Device, Driver=usbhid, 12M
         |__ Port 2: Dev 27, If 0, Class=Human Interface Device, Driver=usbhid, 12M
     |__ Port 4: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
         |__ Port 3: Dev 10, If 1, Class=Vendor Specific Class, Driver=, 480M
         |__ Port 3: Dev 10, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu, 480M
         |__ Port 1: Dev 6, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu, 480M
         |__ Port 1: Dev 6, If 1, Class=Vendor Specific Class, Driver=, 480M
         |__ Port 4: Dev 12, If 0, Class=Hub, Driver=hub/4p, 480M
             |__ Port 3: Dev 15, If 0, Class=Printer, Driver=usblp, 12M
             |__ Port 1: Dev 14, If 1, Class=Vendor Specific Class, Driver=, 480M
             |__ Port 1: Dev 14, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu, 480M
             |__ Port 4: Dev 16, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu, 480M
             |__ Port 4: Dev 16, If 1, Class=Vendor Specific Class, Driver=, 480M
         |__ Port 2: Dev 8, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu, 480M
         |__ Port 2: Dev 8, If 1, Class=Vendor Specific Class, Driver=, 480M
     |__ Port 5: Dev 5, If 0, Class=Hub, Driver=hub/4p, 480M
         |__ Port 1: Dev 20, If 0, Class=Wireless, Driver=btusb, 12M
         |__ Port 1: Dev 20, If 1, Class=Wireless, Driver=btusb, 12M
         |__ Port 3: Dev 25, If 0, Class=Human Interface Device, Driver=, 1.5M            <<<<<
         |__ Port 3: Dev 25, If 1, Class=Human Interface Device, Driver=, 1.5M            <<<<<
         |__ Port 4: Dev 13, If 0, Class=Human Interface Device, Driver=, 1.5M            <<<<<
         |__ Port 4: Dev 13, If 1, Class=Human Interface Device, Driver=, 1.5M            <<<<<
     |__ Port 6: Dev 19, If 0, Class=Human Interface Device, Driver=usbfs, 1.5M

The TEMPer devices show on Bus 01 as was always:
     Port 5.Port 3    (Dev 11)
     Port 5.Port 4    (Dev 13)

After rebooting the newly installed kernel 5.13.4-200.fc34.x86_64 I get:

$ lsusb
Bus 001 Device 012: ID 0c45:7401 Microdia TEMPer Temperature Sensor
Bus 001 Device 003: ID 0c45:7401 Microdia TEMPer Temperature Sensor

$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/10p, 10000M
     |__ Port 4: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
         |__ Port 4: Dev 4, If 0, Class=Hub, Driver=hub/4p, 5000M
     |__ Port 5: Dev 3, If 0, Class=Hub, Driver=hub/4p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p, 480M
     |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
         |__ Port 2: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 12M
         |__ Port 2: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M
     |__ Port 3: Dev 3, If 0, Class=Human Interface Device, Driver=, 1.5M            <<<<<
     |__ Port 3: Dev 3, If 1, Class=Human Interface Device, Driver=, 1.5M            <<<<<
     |__ Port 4: Dev 5, If 0, Class=Hub, Driver=hub/4p, 480M
         |__ Port 3: Dev 11, If 1, Class=Vendor Specific Class, Driver=, 480M
         |__ Port 3: Dev 11, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu, 480M
         |__ Port 1: Dev 7, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu, 480M
         |__ Port 1: Dev 7, If 1, Class=Vendor Specific Class, Driver=, 480M
         |__ Port 4: Dev 13, If 0, Class=Hub, Driver=hub/4p, 480M
             |__ Port 3: Dev 15, If 0, Class=Printer, Driver=usblp, 12M
             |__ Port 1: Dev 14, If 1, Class=Vendor Specific Class, Driver=, 480M
             |__ Port 1: Dev 14, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu, 480M
             |__ Port 4: Dev 16, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu, 480M
             |__ Port 4: Dev 16, If 1, Class=Vendor Specific Class, Driver=, 480M
         |__ Port 2: Dev 9, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu, 480M
         |__ Port 2: Dev 9, If 1, Class=Vendor Specific Class, Driver=, 480M
     |__ Port 5: Dev 6, If 0, Class=Hub, Driver=hub/4p, 480M
         |__ Port 1: Dev 10, If 0, Class=Wireless, Driver=btusb, 12M
         |__ Port 1: Dev 10, If 1, Class=Wireless, Driver=btusb, 12M
         |__ Port 3: Dev 12, If 0, Class=Human Interface Device, Driver=, 1.5M            <<<<<
         |__ Port 3: Dev 12, If 1, Class=Human Interface Device, Driver=, 1.5M            <<<<<
     |__ Port 6: Dev 18, If 0, Class=Human Interface Device, Driver=usbfs, 1.5M

One can see that the TEMPer devices are now showing on Bus 01 but in separate positions:
     Port 3           (Dev 3)  new position
     Port 5.Port 3    (Dev 12) old position

This, naturally, confuses my script that collects the data from these sensors (I use temper-poll).

Is this an intentional change?
If so then what is the way to stably disambiguate usb devices (there is no s/n available)?

If no change was expected then does this reflect a possible hwr problem here?

-- 
Eyal Lebedinsky (eyal@eyal.emu.id.au)

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-07-27 13:39 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-27  1:15 usb port enumeration changed? Eyal Lebedinsky
2021-07-27  2:23 ` Alan Stern
2021-07-27  6:43   ` usb port enumeration changed? [resolved] Eyal Lebedinsky
2021-07-27 13:39     ` Alan Stern

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).