aboutsummaryrefslogtreecommitdiff
path: root/src/mm-context.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-02-26 23:02:04 +0100
committerAleksander Morgado <aleksander@lanedo.com>2013-02-26 23:22:00 +0100
commitc79d266e627242b22a5e146ab157e34135e7a36a (patch)
treef1381fb0809e7f1f9d6592922d12f9db090cc1a2 /src/mm-context.c
parent89461cf7b3bea1ba3fe02de1629305f62cd4cb48 (diff)
udev: update all udev rules to always match both VID/PID together
If the rules to tag specific USB interface numbers only apply on the PID, we'll end up seeing that if the port has a parent with another PID, and that other PID also has a rule, port will get tagged multiple times. Easier to see with an example: The ZTE MF637 (VID 0x19D2, PID 0x0121) had the following rules: ATTRS{idProduct}=="0121", ENV{.MM_USBIFNUM}=="04", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" ATTRS{idProduct}=="0121", ENV{.MM_USBIFNUM}=="01", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" In our ZTE rules we also have some for the device with PID 0x0002, like: ATTRS{idProduct}=="0002", ENV{.MM_USBIFNUM}=="02", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" ATTRS{idProduct}=="0002", ENV{.MM_USBIFNUM}=="04", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" And it seems that we can grab multiple PIDs from a single port, i.e. from the parent objects in the hierarchy: udevadm info -a -n /dev/ttyUSB4 | grep idProduct ATTRS{idProduct}=="0121" ATTRS{idProduct}=="0020" ATTRS{idProduct}=="0002" Where that 0x0002 idProduct is not from the modem, but from the EHCI Host Controller (with idVendor 0x1d6b in my case). So... we end up seeing that both set of rules will apply to the ports, and we misleadingly get: (ttyUSB3) type 'at' claimed by /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 ZTE: AT port 'tty/ttyUSB2' flagged as primary (ttyUSB2) type 'at' claimed by /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 ZTE: AT port 'tty/ttyUSB1' flagged as secondary (ttyUSB1) type 'at' claimed by /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 ZTE: AT port 'tty/ttyUSB4' flagged as primary b_port(): (ttyUSB4) type 'at' claimed by /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 (/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2) tty/ttyUSB2 at (primary) (/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2) tty/ttyUSB1 at (secondary) (/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2) tty/ttyUSB2 data (primary) (/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2) tty/ttyUSB0 qcdm Which is wrong, as ttyUSB4 should have been our primary port, not ttyUSB2. With this patch on, the rules apply only to the VID/PID pair, and we end up getting what we really wanted: (ttyUSB3) type 'at' claimed by /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 (ttyUSB2) type 'at' claimed by /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 ZTE: AT port 'tty/ttyUSB1' flagged as secondary (ttyUSB1) type 'at' claimed by /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 ZTE: AT port 'tty/ttyUSB4' flagged as primary b_port(): (ttyUSB4) type 'at' claimed by /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 (/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2) tty/ttyUSB4 at (primary) (/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2) tty/ttyUSB1 at (secondary) (/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2) tty/ttyUSB4 data (primary) (/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2) tty/ttyUSB0 qcdm https://bugzilla.gnome.org/show_bug.cgi?id=694759
Diffstat (limited to 'src/mm-context.c')
0 files changed, 0 insertions, 0 deletions