libqmi / Quectel EC21/EC25
Bjørn Mork
bjorn at mork.no
Sat Oct 8 20:13:53 UTC 2016
Sebastian Sjoholm <sebastian.sjoholm at gmail.com> writes:
> Hi,
>
> So regarding my issue with Quectel EC21/EC25, I guess most of the times the problem is between the keyboard and the chair, and I guess it was now as well.
>
> When I followed the Quectel documentation on Linux integration I left the raw-ip implementation because linux kernel already have raw-ip support in the kernel, however at the end of that chapter was some crucial changes that I of course did not include. So, after included the changes in “qmi_wwan_bind”, it started to work.
>
> I have included the diff from my changes and the Linux Kernel 4.7.7.
>
> I have only verified EC25, but will soon run EC21 as well.
>
> /drivers/net/usb/qmi_wwan.c
> 436,451d435
> <
> < /* Quectel */
> < if (dev->udev->descriptor.idVendor == cpu_to_le16(0x2C7C)) {
> < dev_info(&intf->dev, "Quectel EC21&EC25&EC20 R2.0 work on RawIP mode\n");
> < dev->net->flags |= IFF_NOARP;
> <
> < usb_control_msg(
> < interface_to_usbdev(intf),
> < usb_sndctrlpipe(interface_to_usbdev(intf), 0),
> < 0x22, //USB_CDC_REQ_SET_CONTROL_LINE_STATE
> < 0x21, //USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE
> < 1, //active CDC DTR
> < intf->cur_altsetting->desc.bInterfaceNumber,
> < NULL, 0, 100);
> < }
I don't understand. Except for the redundant IFF_NOARP (set in
qmi_wwan_netdev_setup), this should be exactly the same as the
qmi_wwan_change_dtr(dev, true);
I asked you to try to enable unconditionally. And that didn't work?
Bjørn
> <
> 943,944c927
> < /* Quectel conflicts with Acer */
> < /* {QMI_GOBI_DEVICE(0x05c6, 0x9215)},*/ /* Acer Gobi 2000 Modem device (VP413) */
> ---
>> {QMI_GOBI_DEVICE(0x05c6, 0x9215)}, /* Acer Gobi 2000 Modem device (VP413) */
> 946,948d928
> < {QMI_FIXED_INTF(0x05c6, 0x9003, 4)}, /* Quectel UC20 Mini PCIe */
> < {QMI_FIXED_INTF(0x2C7C, 0x0125, 4)}, /* Quectel EC25, EC20 R2.0 Mini PCIe */
> < {QMI_FIXED_INTF(0x2C7C, 0x0121, 4)}, /* Quectel EC21 Mini PCIe */
>
> /drivers/usb/serial/option.c
> 1164,1166d1163
> < { USB_DEVICE(0x05C6, 0x9215) }, /* QUectel EC20 */
> < { USB_DEVICE(0x2C7C, 0x0125) }, /* QUectel EC25/EC20 R2.0 */
> < { USB_DEVICE(0x2C7C, 0x0121) }, /* QUectel EC21 */
> 2040d2036
> < .reset_resume = usb_wwan_resume, /* Quectel */
> 2078,2094d2073
> < return -ENODEV;
> <
> < /* Quectel UC20 */
> < if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) &&
> < serial->dev->descriptor.idProduct == cpu_to_le16(0x9003) &&
> < serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
> < return -ENODEV;
> <
> < /* Quectel EC20 */
> < if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) &&
> < serial->dev->descriptor.idProduct == cpu_to_le16(0x9215) &&
> < serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
> < return -ENODEV;
> <
> < /* Quectel EC21, EC25 and EC20 R2.0 */
> < if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C) &&
> < serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
>
> /drivers/usb/serial/usb_wwan.c
> 508,520d507
> < /* Quectel */
> < if (dir == USB_DIR_OUT) {
> < struct usb_device_descriptor *desc = &serial->dev->descriptor;
> < if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9090))
> < urb->transfer_flags |= URB_ZERO_PACKET;
> < if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9003))
> < urb->transfer_flags |= URB_ZERO_PACKET;
> < if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9215))
> < urb->transfer_flags |= URB_ZERO_PACKET;
> < if (desc->idVendor == cpu_to_le16(0x2C7C))
> < urb->transfer_flags |= URB_ZERO_PACKET;
> < }
> <
>
>
> Example from Quectel EC25;
>
> ati
> Quectel
> EC25
> Revision: EC25EFAR02A03M4G
> OK
>
> # /usr/bin/qmicli -d /dev/cdc-wdm0 --wds-start-network=lte1.dynamic.com --client-no-release-cid
> [/dev/cdc-wdm0] Network started
> Packet data handle: '2267064256'
> [/dev/cdc-wdm0] Client ID not released:
> Service: 'wds'
> CID: '19'
> # /usr/bin/qmicli -d /dev/cdc-wdm0 --nas-get-system-info
> [/dev/cdc-wdm0] Successfully got system info:
> GSM service:
> Status: 'none'
> True Status: 'none'
> Preferred data path: 'no'
> WCDMA service:
> Status: 'none'
> True Status: 'none'
> Preferred data path: 'no'
> LTE service:
> Status: 'available'
> True Status: 'available'
> Preferred data path: 'no'
> Domain: 'cs-ps'
> Service capability: 'cs-ps'
> Roaming status: 'on'
> Forbidden: 'no'
> Cell ID: '18564097'
> MCC: '235'
> MNC: '96'
> Tracking Area Code: '108'
> Voice support: 'yes'
> eMBMS coverage info support: 'no'
> SIM reject info: 'available'
> # /sbin/udhcpc -q -f -S -n -i wwan0
> udhcpc (v1.22.1) started
> Sending discover...
> Sending select for 10.39.8.36...
> Lease of 10.39.8.36 obtained, lease time 7200
> ip: RTNETLINK answers: File exists
> # /sbin/route -v add -host 10.218.245.160 dev wwan0
> # ping -c 5 10.218.245.160
> PING 10.218.245.160 (10.218.245.160) 56(84) bytes of data.
> 64 bytes from 10.218.245.160: icmp_seq=1 ttl=62 time=261 ms
> 64 bytes from 10.218.245.160: icmp_seq=2 ttl=62 time=33.5 ms
> 64 bytes from 10.218.245.160: icmp_seq=3 ttl=62 time=32.0 ms
> 64 bytes from 10.218.245.160: icmp_seq=4 ttl=62 time=30.6 ms
> 64 bytes from 10.218.245.160: icmp_seq=5 ttl=62 time=28.2 ms
>
> --- 10.218.245.160 ping statistics ---
> 5 packets transmitted, 5 received, 0% packet loss, time 4005ms
> rtt min/avg/max/mdev = 28.204/77.250/261.801/92.292 ms
> # /usr/bin/qmicli -d /dev/cdc-wdm0 --wds-stop-network=2267064256 --client-cid=19
> Network cancelled... releasing resources
> [/dev/cdc-wdm0] Network stopped
> #
>
> However, thanks for the support again.
>
> Note, I never got the GobiNet compiled from the Quectel sources, so I could not test that. I prefer the qmi_wwan anyway.
>
> Regards,
> Sebastian
>
>
>>> Have you tried to follow the Quectel instructions and see if that makes
>>> it work? Using GobiNet is probably easiest. If it works, then
>>
>> I have followed the qmi_wwan section, but they have used much earlier qmi_wwan as reference, the raw-ip section they have included I did not add as the raw-ip support should already be included.
>>
>>> a comparison of a short probe + one request with the same from qmi_wwan
>>> should provide some answers.
>>>
>>
>> I will see if I can get the GobiNet to work.
>>
>>>> error: couldn't create client for the 'nas' service: CID allocation failed
>>>> in the CTL client: Transaction timed out
>>>
>>>
>>> The only thing I can think of is that these modems might need the same
>>> DTR toggling as the MC7455 etc. If so, then my simple assumption that we
>>> could automatically apply this based on USB3 support could be failing.
>>>
>>> These modems are based on relatively new Qualcomm chips, but without
>>> USB3 support, is that correct?
>>>
>>
>> Yes, no USB 3.0 support. The Chipset seems to be 9x07 based.
>>
>>> Look for the
>>>
>>> if (le16_to_cpu(dev->udev->descriptor.bcdUSB) >= 0x0201) {
>>> qmi_wwan_manage_power(dev, 1);
>>> qmi_wwan_change_dtr(dev, true);
>>> }
>>>
>>> part and enable that unconditionally. Does that make a difference?
>>>
>>
>> I added this to be active unconditionally, but it did not make any difference.
>>
>> -Sebastian
>>
More information about the libqmi-devel
mailing list