Configure EM05-CE to not register for voice calls

Hi there,

just got the EM05-CE WWAN card working on my Lenovo X1 Nano Gen2 under Debian GNU/Linux. Everything was pretty much plug and play and internet works just fine, but with one drop of bitterness: I got two SIM cards from my ISP and whenever I use the EM05-CE to connect to the internet, I am unable to receive calls on my cell phone.

Due to my research, this is because the EM05-CE somehow does not only register on the ISP’s network to transfer data, but also to make phone calls.

I read something about an AT^SYSCFGEX command to set the modem from CS_PS mode to PS_ONLY (Packet Switched domain) mode, which should do the trick. However, I only got the MBIM interface (/dev/cdc-wdmX) and no serial interface (like e.g. /dev/ttyUSBX).

So here are my questions:

  1. is it expected that there is a MBIM interface only, or should there also be a serial interface exposed by the kernel to userspace?
  2. if there should also be a serial interface, how can I make it appear?
  3. is there some way to make the EM05-CW register on the ISP’s network only to transfer data?

Some more details about my configuration:

Modem details:

$ mmcli --modem=1
  --------------------------------
  General  |                 path: /org/freedesktop/ModemManager1/Modem/1
           |            device id: *snip*
  --------------------------------
  Hardware |         manufacturer: Quectel
           |                model: Quectel EM05-CE
           |    firmware revision: EM05CEFCR08A14M1G_LNV
           |         h/w revision: QUECTEL Mobile Broadband Modul
           |            supported: gsm-umts, lte
           |              current: gsm-umts, lte
           |         equipment id: *snip*
  --------------------------------
  System   |               device: /sys/devices/pci0000:00/0000:00:14.0/usb1/1-4
           |              physdev: /sys/devices/pci0000:00/0000:00:14.0/usb1/1-4
           |              drivers: cdc_mbim
           |               plugin: quectel
           |         primary port: cdc-wdm1
           |                ports: cdc-wdm1 (mbim), wwan0 (net)
  --------------------------------
  Status   |                 lock: sim-pin2
           |       unlock retries: sim-pin2 (3)
           |                state: registered
           |          power state: on
           |          access tech: lte
           |       signal quality: 58% (recent)
  --------------------------------
  Modes    |            supported: allowed: 2g, 3g, 4g; preferred: none
           |              current: allowed: 2g, 3g, 4g; preferred: none
  --------------------------------
  IP       |            supported: ipv4, ipv6, ipv4v6
  --------------------------------
  3GPP     |                 imei: *snip*
           |        enabled locks: fixed-dialing
           |          operator id: *snip*
           |        operator name: *snip*
           |         registration: home
           | packet service state: attached
  --------------------------------
  SIM      |     primary sim path: /org/freedesktop/ModemManager1/SIM/0

USB device details:

$ lsusb -d 2c7c:0127 -vvv
Bus 001 Device 003: ID 2c7c:0127 Quectel Wireless Solutions Co., Ltd. Quectel EM05-CE
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          239 Miscellaneous Device
  bDeviceSubClass         2 [unknown]
  bDeviceProtocol         1 Interface Association
  bMaxPacketSize0        64
  idVendor           0x2c7c Quectel Wireless Solutions Co., Ltd.
  idProduct          0x0127 Quectel EM05-CE
  bcdDevice            3.18
  iManufacturer           1 Quectel
  iProduct                2 Quectel EM05-CE
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0090
    bNumInterfaces          3
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           3
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      0 [unknown]
      bInterfaceProtocol      0 
      iInterface              0 
      ** UNRECOGNIZED:  05 24 00 10 01
      ** UNRECOGNIZED:  05 24 01 00 00
      ** UNRECOGNIZED:  04 24 02 02
      ** UNRECOGNIZED:  05 24 06 00 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x000a  1x 10 bytes
        bInterval               9
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Association:
      bLength                 8
      bDescriptorType        11
      bFirstInterface         1
      bInterfaceCount         2
      bFunctionClass          2 Communications
      bFunctionSubClass      14 [unknown]
      bFunctionProtocol       0 
      iFunction               0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         2 Communications
      bInterfaceSubClass     14 [unknown]
      bInterfaceProtocol      0 
      iInterface              6 
      CDC Header:
        bcdCDC               1.10
      CDC Union:
        bMasterInterface        1
        bSlaveInterface         2 
      CDC MBIM:
        bcdMBIMVersion       1.00
        wMaxControlMessage   4096
        bNumberFilters       32
        bMaxFilterSize       128
        wMaxSegmentSize      2048
        bmNetworkCapabilities 0x20
          8-byte ntb input size
      CDC MBIM Extended:
        bcdMBIMExtendedVersion           1.00
        bMaxOutstandingCommandMessages     64
        wMTU                             1500
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               9
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass        10 CDC Data
      bInterfaceSubClass      0 [unknown]
      bInterfaceProtocol      2 
      iInterface              7 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       1
      bNumEndpoints           2
      bInterfaceClass        10 CDC Data
      bInterfaceSubClass      0 [unknown]
      bInterfaceProtocol      2 
      iInterface              7 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0

MBIM Interface:

$ ls -l /dev/cdc-wdm1 
crw------- 1 root root 180, 1 Mar  4 19:19 /dev/cdc-wdm1

Connection details:

$ nmcli device show cdc-wdm1 
GENERAL.DEVICE:                         cdc-wdm1
GENERAL.TYPE:                           gsm
GENERAL.HWADDR:                         (unknown)
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     *snip*
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/3
IP4.ADDRESS[1]:                         *snip*
IP4.GATEWAY:                            *snip*
IP4.ROUTE[1]:                           dst = *snip*/29, nh = 0.0.0.0, mt = 1050
IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = *snip*, mt = 1050
IP4.DNS[1]:                             *snip*
IP4.DNS[2]:                             *snip*
IP6.ADDRESS[1]:                         *snip*/64
IP6.GATEWAY:                            *snip*
IP6.ROUTE[1]:                           dst = *snip*/64, nh = ::, mt = 700
IP6.ROUTE[2]:                           dst = ::/0, nh = *snip*, mt = 700
IP6.DNS[1]:                             *snip*
IP6.DNS[2]:                             *snip*

Kernel:

$ uname -a
Linux *snip* 6.6.15-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.6.15-2 (2024-02-04) x86_64 GNU/Linux

journalctl messages:

Mar 04 21:11:25 *snip* kernel: cdc_mbim 1-4:1.1: cdc-wdm1: USB WDM device
Mar 04 21:11:25 *snip* kernel: cdc_mbim 1-4:1.1 wwan0: register 'cdc_mbim' at usb-0000:00:14.0-4, CDC MBIM, 62:45:56:04:55:0f
Mar 04 21:11:27 *snip* ModemManager[1100]: <msg> [cdc-wdm1/mbim] MBIM device is not QMI capable
Mar 04 21:11:29 *snip* ModemManager[1100]: <msg> [device /sys/devices/pci0000:00/0000:00:14.0/usb1/1-4] creating modem with plugin 'quectel' and '2' ports
Mar 04 21:11:29 *snip* ModemManager[1100]: <msg> [base-manager] modem for device '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4' successfully created
Mar 04 21:11:29 *snip* ModemManager[1100]: <msg> [modem1/cdc-wdm1/mbim] MBIM device is not QMI capable
Mar 04 21:11:30 *snip* ModemManager[1100]: <msg> [modem1] state changed (unknown -> disabled)
Mar 04 21:11:30 *snip* NetworkManager[1069]: <info>  [1709583090.5606] manager: (cdc-wdm1): new Broadband device (/org/freedesktop/NetworkManager/Devices/5)
Mar 04 21:11:30 *snip* NetworkManager[1069]: <info>  [1709583090.5609] device (cdc-wdm1): state change: unmanaged -> unavailable (reason 'managed', sys-iface-state: 'external')
Mar 04 21:11:30 *snip* NetworkManager[1069]: <info>  [1709583090.5613] device (cdc-wdm1): modem state 'enabling'
Mar 04 21:11:30 *snip* NetworkManager[1069]: <info>  [1709583090.5615] device (cdc-wdm1): state change: unavailable -> disconnected (reason 'none', sys-iface-state: 'managed')
Mar 04 21:11:30 *snip* ModemManager[1100]: <msg> [modem1] state changed (disabled -> enabling)
Mar 04 21:11:30 *snip* ModemManager[1100]: <msg> [modem1] power state updated: on
Mar 04 21:11:30 *snip* ModemManager[1100]: <msg> [modem1] 3GPP packet service state changed (unknown -> attached)
Mar 04 21:11:30 *snip* ModemManager[1100]: <msg> [modem1] state changed (enabling -> enabled)
Mar 04 21:11:30 *snip* ModemManager[1100]: <msg> [modem1] 3GPP registration state changed (unknown -> registering)
Mar 04 21:11:30 *snip* ModemManager[1100]: <msg> [modem1] 3GPP registration state changed (registering -> home)
Mar 04 21:11:30 *snip* ModemManager[1100]: <msg> [modem1] state changed (enabled -> registered)

USB tree info:

lsusb -t -vv
/:  Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/12p, 480M
    ID 1d6b:0002 Linux Foundation 2.0 root hub
    /sys/bus/usb/devices/usb1  /dev/bus/usb/001/001
    *snip*
    |__ Port 004: Dev 003, If 0, Class=Vendor Specific Class, Driver=[none], 480M
        ID 2c7c:0127 Quectel Wireless Solutions Co., Ltd. 
        /sys/bus/usb/devices/1-4  /dev/bus/usb/001/003
    |__ Port 004: Dev 003, If 1, Class=Communications, Driver=cdc_mbim, 480M
        ID 2c7c:0127 Quectel Wireless Solutions Co., Ltd. 
        /sys/bus/usb/devices/1-4  /dev/bus/usb/001/003
    |__ Port 004: Dev 003, If 2, Class=CDC Data, Driver=cdc_mbim, 480M
        ID 2c7c:0127 Quectel Wireless Solutions Co., Ltd. 
        /sys/bus/usb/devices/1-4  /dev/bus/usb/001/003
    *snip*
*snip*

Please show the

lsusb -t

If you must try the ModemManager(mmcli) there must exists the ttyUSB port.
I guess that the ttyUSB not exist on the Debian.
Data connection is not a problem.

I have added the lsusb -t output to my question (For better readability I removed the output for the other USB devices, like fingerprintreader etc.). There seems to be one interface without matching driver (Port 4, Dev 3, If 0).

Not exactly sure what you mean, but here is the output of mmcli when I try to run an AT command:

$ mmcli --modem=1 --command="AT+GMM"
error: command failed: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Connected: No AT port available to run command'

And there is definitely no ttyUSBX:

$ ls -l /dev/tty*
crw-rw-rw- 1 root tty     5,  0 Mar  5 04:55 /dev/tty
crw--w---- 1 root tty     4,  0 Mar  4 20:51 /dev/tty0
crw--w---- 1 root tty     4,  1 Mar  4 20:51 /dev/tty1
crw--w---- 1 root tty     4, 10 Mar  4 20:51 /dev/tty10
crw--w---- 1 root tty     4, 11 Mar  4 20:51 /dev/tty11
crw--w---- 1 root tty     4, 12 Mar  4 20:51 /dev/tty12
crw--w---- 1 root tty     4, 13 Mar  4 20:51 /dev/tty13
crw--w---- 1 root tty     4, 14 Mar  4 20:51 /dev/tty14
crw--w---- 1 root tty     4, 15 Mar  4 20:51 /dev/tty15
crw--w---- 1 root tty     4, 16 Mar  4 20:51 /dev/tty16
crw--w---- 1 root tty     4, 17 Mar  4 20:51 /dev/tty17
crw--w---- 1 root tty     4, 18 Mar  4 20:51 /dev/tty18
crw--w---- 1 root tty     4, 19 Mar  4 20:51 /dev/tty19
crw--w---- 1 te   tty     4,  2 Mar  4 20:51 /dev/tty2
crw--w---- 1 root tty     4, 20 Mar  4 20:51 /dev/tty20
crw--w---- 1 root tty     4, 21 Mar  4 20:51 /dev/tty21
crw--w---- 1 root tty     4, 22 Mar  4 20:51 /dev/tty22
crw--w---- 1 root tty     4, 23 Mar  4 20:51 /dev/tty23
crw--w---- 1 root tty     4, 24 Mar  4 20:51 /dev/tty24
crw--w---- 1 root tty     4, 25 Mar  4 20:51 /dev/tty25
crw--w---- 1 root tty     4, 26 Mar  4 20:51 /dev/tty26
crw--w---- 1 root tty     4, 27 Mar  4 20:51 /dev/tty27
crw--w---- 1 root tty     4, 28 Mar  4 20:51 /dev/tty28
crw--w---- 1 root tty     4, 29 Mar  4 20:51 /dev/tty29
crw--w---- 1 root tty     4,  3 Mar  4 20:51 /dev/tty3
crw--w---- 1 root tty     4, 30 Mar  4 20:51 /dev/tty30
crw--w---- 1 root tty     4, 31 Mar  4 20:51 /dev/tty31
crw--w---- 1 root tty     4, 32 Mar  4 20:51 /dev/tty32
crw--w---- 1 root tty     4, 33 Mar  4 20:51 /dev/tty33
crw--w---- 1 root tty     4, 34 Mar  4 20:51 /dev/tty34
crw--w---- 1 root tty     4, 35 Mar  4 20:51 /dev/tty35
crw--w---- 1 root tty     4, 36 Mar  4 20:51 /dev/tty36
crw--w---- 1 root tty     4, 37 Mar  4 20:51 /dev/tty37
crw--w---- 1 root tty     4, 38 Mar  4 20:51 /dev/tty38
crw--w---- 1 root tty     4, 39 Mar  4 20:51 /dev/tty39
crw--w---- 1 root tty     4,  4 Mar  4 20:51 /dev/tty4
crw--w---- 1 root tty     4, 40 Mar  4 20:51 /dev/tty40
crw--w---- 1 root tty     4, 41 Mar  4 20:51 /dev/tty41
crw--w---- 1 root tty     4, 42 Mar  4 20:51 /dev/tty42
crw--w---- 1 root tty     4, 43 Mar  4 20:51 /dev/tty43
crw--w---- 1 root tty     4, 44 Mar  4 20:51 /dev/tty44
crw--w---- 1 root tty     4, 45 Mar  4 20:51 /dev/tty45
crw--w---- 1 root tty     4, 46 Mar  4 20:51 /dev/tty46
crw--w---- 1 root tty     4, 47 Mar  4 20:51 /dev/tty47
crw--w---- 1 root tty     4, 48 Mar  4 20:51 /dev/tty48
crw--w---- 1 root tty     4, 49 Mar  4 20:51 /dev/tty49
crw--w---- 1 root tty     4,  5 Mar  4 20:51 /dev/tty5
crw--w---- 1 root tty     4, 50 Mar  4 20:51 /dev/tty50
crw--w---- 1 root tty     4, 51 Mar  4 20:51 /dev/tty51
crw--w---- 1 root tty     4, 52 Mar  4 20:51 /dev/tty52
crw--w---- 1 root tty     4, 53 Mar  4 20:51 /dev/tty53
crw--w---- 1 root tty     4, 54 Mar  4 20:51 /dev/tty54
crw--w---- 1 root tty     4, 55 Mar  4 20:51 /dev/tty55
crw--w---- 1 root tty     4, 56 Mar  4 20:51 /dev/tty56
crw--w---- 1 root tty     4, 57 Mar  4 20:51 /dev/tty57
crw--w---- 1 root tty     4, 58 Mar  4 20:51 /dev/tty58
crw--w---- 1 root tty     4, 59 Mar  4 20:51 /dev/tty59
crw--w---- 1 root tty     4,  6 Mar  4 20:51 /dev/tty6
crw--w---- 1 root tty     4, 60 Mar  4 20:51 /dev/tty60
crw--w---- 1 root tty     4, 61 Mar  4 20:51 /dev/tty61
crw--w---- 1 root tty     4, 62 Mar  4 20:51 /dev/tty62
crw--w---- 1 root tty     4, 63 Mar  4 20:51 /dev/tty63
crw--w---- 1 root tty     4,  7 Mar  4 20:51 /dev/tty7
crw--w---- 1 root tty     4,  8 Mar  4 20:51 /dev/tty8
crw--w---- 1 root tty     4,  9 Mar  4 20:51 /dev/tty9
crw-rw---- 1 root dialout 4, 64 Mar  5 04:51 /dev/ttyS0
crw-rw---- 1 root dialout 4, 65 Mar  4 20:51 /dev/ttyS1
crw-rw---- 1 root dialout 4, 66 Mar  4 20:51 /dev/ttyS2
crw-rw---- 1 root dialout 4, 67 Mar  4 20:51 /dev/ttyS3

I mean that there is no ttyUSB generated by the Quectel modem.
please check the command:

lsusb -t

Please try:

modprobe  option
echo 2C7C 0125 FF | tee  /sys/bus/usb-serial/drivers/option1/new_id

and then try restart the ModemManager.

systemctl restart ModemManager

1 Like

Thank you, sudo modprobe option; echo 2C7C 0127 FF | sudo tee /sys/bus/usb-serial/drivers/option1/new_id did the trick (I had to replace 125 with 127) and now I got the AT interface up and working:

$ mmcli --modem=0 --command="AT+GMM"
response: 'EM05'

Now I just need to figure out the AT command to prevent the modem from registering for voice calls (AT^SYSCFGEX did not work - seems to be a command specific to another vendor).

Please refer to the Quectel AT command to test voice call.

Please try the
ATD
to start voice call.

With the following AT command, I was able to switch the service domain from CS & PS (Circuit Switched and Packet Switched) to PS only (Packet Switched only): AT+QCFG="servicedomain",1,1

The command was documented at the EM05 AT Commands Manual V 1.0 from 2017, but not at the EC2x&EC9x&EG2x-G&EM05 Series AT Commands Manual V 2.0 from 2021.

Now I am able to receive calls on my phone while having my laptop connected to the internet.

@Bean.Wang-Q thank you so much for your fast support. Without you it would have took me ages to get the AT interface up and running :smiley: