Huawei E226 crashes when sent AT+CPOL? (with workaround)
Using: ModemManager-1.18.2-1.fc35.x86_64 systemd-udev-249.11-1.fc35.x86_64 Fedora 35 x86_64
When trying to use a Huawei E226 HSDPA USB Modem with ModemManager, the modem gets into an endless cycle of being recognized, suddenly disconnecting, then being recognized again, and so on.
When running ModemManager in debug mode, I can see that it tries to issue a command AT+CPOL? to the Huawei modem. At that point, the USB device disconnects, which is consistent with a crash.
I could confirm this by shutting down ModemManager, then plugging the modem, and opening a serial terminal to the /dev/ttyUSB0 device. When manually issuing AT+CPOL? , the device responds halfway with a device list, but disconnects in the middle of one line.
By googling around, I could work around this issue by adding a new udev rule file like this:
ACTION!="add|change|move|bind", GOTO="mm_huawei_custom_port_types_end"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="12d1", GOTO="mm_huawei_custom_port_types"
GOTO="mm_huawei_custom_port_types_end"
LABEL="mm_huawei_custom_port_types"
# E226, Disable CPOL based features
ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1003", ENV{ID_MM_PREFERRED_NETWORKS_CPOL_DISABLED}="1"
LABEL="mm_huawei_custom_port_types_end"
After restarting both ModemManager and udevd, the issue went away.
For reference here is the output of udevadm info on both USB ports created by the modem:
# udevadm info /dev/ttyUSB0
P: /devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.0/ttyUSB0/tty/ttyUSB0
N: ttyUSB0
L: 0
S: serial/by-path/pci-0000:00:14.0-usb-0:10:1.0-port0
S: serial/by-id/usb-HUAWEI_Technologies_HUAWEI_Mobile-if00-port0
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.0/ttyUSB0/tty/ttyUSB0
E: DEVNAME=/dev/ttyUSB0
E: MAJOR=188
E: MINOR=0
E: SUBSYSTEM=tty
E: USEC_INITIALIZED=7609692115
E: ID_BUS=usb
E: ID_VENDOR_ID=12d1
E: ID_MODEL_ID=1003
E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI
E: ID_VENDOR_FROM_DATABASE=Huawei Technologies Co., Ltd.
E: ID_MODEL_FROM_DATABASE=E220 HSDPA Modem / E230/E270/E870 HSDPA/HSUPA Modem
E: ID_VENDOR=HUAWEI_Technologies
E: ID_VENDOR_ENC=HUAWEI\x20Technologies
E: ID_MODEL=HUAWEI_Mobile
E: ID_MODEL_ENC=HUAWEI\x20Mobile
E: ID_REVISION=0000
E: ID_SERIAL=HUAWEI_Technologies_HUAWEI_Mobile
E: ID_TYPE=generic
E: ID_USB_INTERFACES=:ffffff:080650:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=option
E: ID_PATH=pci-0000:00:14.0-usb-0:10:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_10_1_0
E: ID_MM_PREFERRED_NETWORKS_CPOL_DISABLED=1
E: ID_MM_CANDIDATE=1
E: DEVLINKS=/dev/serial/by-path/pci-0000:00:14.0-usb-0:10:1.0-port0 /dev/serial/by-id/usb-HUAWEI_Technologies_HUAWEI_Mobile-if00-port0
E: TAGS=:systemd:
E: CURRENT_TAGS=:systemd:
# udevadm info /dev/ttyUSB1
P: /devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.1/ttyUSB1/tty/ttyUSB1
N: ttyUSB1
L: 0
S: serial/by-path/pci-0000:00:14.0-usb-0:10:1.1-port0
S: serial/by-id/usb-HUAWEI_Technologies_HUAWEI_Mobile-if01-port0
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.1/ttyUSB1/tty/ttyUSB1
E: DEVNAME=/dev/ttyUSB1
E: MAJOR=188
E: MINOR=1
E: SUBSYSTEM=tty
E: USEC_INITIALIZED=7609692314
E: ID_BUS=usb
E: ID_VENDOR_ID=12d1
E: ID_MODEL_ID=1003
E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI
E: ID_VENDOR_FROM_DATABASE=Huawei Technologies Co., Ltd.
E: ID_MODEL_FROM_DATABASE=E220 HSDPA Modem / E230/E270/E870 HSDPA/HSUPA Modem
E: ID_VENDOR=HUAWEI_Technologies
E: ID_VENDOR_ENC=HUAWEI\x20Technologies
E: ID_MODEL=HUAWEI_Mobile
E: ID_MODEL_ENC=HUAWEI\x20Mobile
E: ID_REVISION=0000
E: ID_SERIAL=HUAWEI_Technologies_HUAWEI_Mobile
E: ID_TYPE=generic
E: ID_USB_INTERFACES=:ffffff:080650:
E: ID_USB_INTERFACE_NUM=01
E: ID_USB_DRIVER=option
E: ID_PATH=pci-0000:00:14.0-usb-0:10:1.1
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_10_1_1
E: ID_MM_PREFERRED_NETWORKS_CPOL_DISABLED=1
E: ID_MM_CANDIDATE=1
E: DEVLINKS=/dev/serial/by-path/pci-0000:00:14.0-usb-0:10:1.1-port0 /dev/serial/by-id/usb-HUAWEI_Technologies_HUAWEI_Mobile-if01-port0
E: TAGS=:systemd:
E: CURRENT_TAGS=:systemd: