Quectel BG96

Sebastian Sjoholm sebastian.sjoholm at gmail.com
Mon Nov 13 13:08:36 UTC 2017


Hi again,

I think I solved this. The Quectel BG96 does not need the QMI_QUIRK as
EC21/EC25.

# git diff
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 8c37336..4682a93 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -1238,6 +1238,7 @@ static const struct usb_device_id products[] = {
        {QMI_FIXED_INTF(0x1e0e, 0x9001, 5)},    /* SIMCom 7230E */
        {QMI_QUIRK_SET_DTR(0x2c7c, 0x0125, 4)}, /* Quectel EC25, EC20 R2.0
Mini PCIe */
        {QMI_QUIRK_SET_DTR(0x2c7c, 0x0121, 4)}, /* Quectel EC21 Mini PCIe */
+       {QMI_FIXED_INTF(0x2c7c, 0x0296, 4)},    /* Quectel ECBG96 */

        /* 4. Gobi 1000 devices */
        {QMI_GOBI1K_DEVICE(0x05c6, 0x9212)},    /* Acer Gobi Modem Device */
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index db3d34c..c0ddfef 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -241,6 +241,7 @@ static void option_instat_callback(struct urb *urb);
 /* These Quectel products use Quectel's vendor ID */
 #define QUECTEL_PRODUCT_EC21                   0x0121
 #define QUECTEL_PRODUCT_EC25                   0x0125
+#define QUECTEL_PRODUCT_BG96                   0x0296

 #define CMOTECH_VENDOR_ID                      0x16d8
 #define CMOTECH_PRODUCT_6001                   0x6001
@@ -1185,6 +1186,8 @@ static const struct usb_device_id option_ids[] = {
          .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
        { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25),
          .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
+        { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
+          .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
        { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
        { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
        { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003),
#

# qmicli -d /dev/cdc-wdm0 -p --device-open-qmi --dms-get-ids
[/dev/cdc-wdm0] Device IDs retrieved:
ESN: '0'
IMEI: '866425030013702'
MEID: 'unknown'
#

# qmicli -d /dev/cdc-wdm0 --nas-get-signal-strength
[/dev/cdc-wdm0] Successfully got signal strength
Current:
Network 'lte': '-47 dBm'
RSSI:
Network 'lte': '-47 dBm'
ECIO:
Network 'lte': '-31.5 dBm'
IO: '-106 dBm'
SINR (8): '9.0 dB'
RSRQ:
Network 'lte': '-8 dB'
SNR:
Network 'lte': '21.2 dB'
RSRP:
Network 'lte': '-56 dBm'
#

# qmicli -d /dev/cdc-wdm0 --dms-get-revision
[/dev/cdc-wdm0] Device revision retrieved:
Revision: 'BG96MAR02A04M1G  1  [Sep 06 2017 08:00:00]'
#

Regards,
Sebastian


On Mon, Nov 13, 2017 at 8:28 AM, Sebastian Sjoholm <
sebastian.sjoholm at gmail.com> wrote:

> Hi,
>
> I am trying to get Quectel BG96 to work with qmicli. I have added the BG96
> to option.c and qmi_wwan.c (see at the end of the email).
>
> AT port works OK, also the DIAG port.
>
> But I get timeout on qmi commands, which makes me suspect that maybe my
> addition to the qmi_wwan.c might not be correct. I have assumed that it
> would have been handled in the same way as EC21/EC25 and that might not be
> correct. The BG96 is based on Qualcomm MDM9206 which is different from the
> EC21/EC25 which uses Qualcomm MDM9207.
>
> I can from QXDM see that I don't get any incoming QMI commands on the BG96.
>
> Any hints how to proceed with this?
>
> Regards,
> Sebastian
>
> root at sbc-bg96:/opt/libqmi# qmicli -d /dev/cdc-wdm0 -p --device-open-qmi
> --dms-get-ids -v
> [13 Nov 2017, 07:46:43] [Debug] [/dev/cdc-wdm0] Opening device with flags
> 'proxy'...
> [13 Nov 2017, 07:46:43] [Debug] [/dev/cdc-wdm0] loaded driver of cdc-wdm
> port: qmi_wwan
> [13 Nov 2017, 07:46:43] [Debug] [/dev/cdc-wdm0] sent message...
> <<<<<< RAW:
> <<<<<<   length = 28
> <<<<<<   data   = 01:1B:00:00:00:00:00:01:00:FF:
> 10:00:01:0D:00:2F:64:65:76:2F:63:64:63:2D:77:64:6D:30
>
> [13 Nov 2017, 07:46:43] [Debug] [/dev/cdc-wdm0] sent generic request
> (translated)...
> <<<<<< QMUX:
> <<<<<<   length  = 27
> <<<<<<   flags   = 0x00
> <<<<<<   service = "ctl"
> <<<<<<   client  = 0
> <<<<<< QMI:
> <<<<<<   flags       = "none"
> <<<<<<   transaction = 1
> <<<<<<   tlv_length  = 16
> <<<<<<   message     = "Internal Proxy Open" (0xFF00)
> <<<<<< TLV:
> <<<<<<   type       = "Device Path" (0x01)
> <<<<<<   length     = 13
> <<<<<<   value      = 2F:64:65:76:2F:63:64:63:2D:77:64:6D:30
> <<<<<<   translated = /dev/cdc-wdm0
>
> [13 Nov 2017, 07:46:43] [Debug] [/dev/cdc-wdm0] received message...
> <<<<<< RAW:
> <<<<<<   length = 19
> <<<<<<   data   = 01:12:00:00:00:00:01:01:00:FF:07:00:02:04:00:00:00:00:00
>
> [13 Nov 2017, 07:46:43] [Debug] [/dev/cdc-wdm0] received generic response
> (translated)...
> <<<<<< QMUX:
> <<<<<<   length  = 18
> <<<<<<   flags   = 0x00
> <<<<<<   service = "ctl"
> <<<<<<   client  = 0
> <<<<<< QMI:
> <<<<<<   flags       = "response"
> <<<<<<   transaction = 1
> <<<<<<   tlv_length  = 7
> <<<<<<   message     = "Internal Proxy Open" (0xFF00)
> <<<<<< TLV:
> <<<<<<   type       = "Result" (0x02)
> <<<<<<   length     = 4
> <<<<<<   value      = 00:00:00:00
> <<<<<<   translated = SUCCESS
>
> [13 Nov 2017, 07:46:43] [Debug] QMI Device at '/dev/cdc-wdm0' ready
> [13 Nov 2017, 07:46:43] [Debug] [/dev/cdc-wdm0] Assuming service 'dms' is
> supported...
> [13 Nov 2017, 07:46:43] [Debug] [/dev/cdc-wdm0] Allocating new client ID...
> [13 Nov 2017, 07:46:43] [Debug] [/dev/cdc-wdm0] sent message...
> <<<<<< RAW:
> <<<<<<   length = 16
> <<<<<<   data   = 01:0F:00:00:00:00:00:02:22:00:04:00:01:01:00:02
>
> [13 Nov 2017, 07:46:43] [Debug] [/dev/cdc-wdm0] sent generic request
> (translated)...
> <<<<<< QMUX:
> <<<<<<   length  = 15
> <<<<<<   flags   = 0x00
> <<<<<<   service = "ctl"
> <<<<<<   client  = 0
> <<<<<< QMI:
> <<<<<<   flags       = "none"
> <<<<<<   transaction = 2
> <<<<<<   tlv_length  = 4
> <<<<<<   message     = "Allocate CID" (0x0022)
> <<<<<< TLV:
> <<<<<<   type       = "Service" (0x01)
> <<<<<<   length     = 1
> <<<<<<   value      = 02
> <<<<<<   translated = dms
>
> error: couldn't create client for the 'dms' service: CID allocation failed
> in the CTL client: Transaction timed out
> #
>
> # lsusb -t
> /:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ci_hdrc/1p, 480M
>     |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
>         |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class,
> Driver=option, 480M
>         |__ Port 1: Dev 3, If 1, Class=Vendor Specific Class,
> Driver=option, 480M
>         |__ Port 1: Dev 3, If 2, Class=Vendor Specific Class,
> Driver=option, 480M
>         |__ Port 1: Dev 3, If 3, Class=Vendor Specific Class,
> Driver=option, 480M
>         |__ Port 1: Dev 3, If 4, Class=Vendor Specific Class,
> Driver=qmi_wwan, 480M
> /:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ci_hdrc/1p, 480M
> #
>
> lsusb -v printout:
>
> Bus 002 Device 003: ID 2c7c:0296
> Device Descriptor:
>   bLength                18
>   bDescriptorType         1
>   bcdUSB               2.00
>   bDeviceClass            0 (Defined at Interface level)
>   bDeviceSubClass         0
>   bDeviceProtocol         0
>   bMaxPacketSize0        64
>   idVendor           0x2c7c
>   idProduct          0x0296
>   bcdDevice            0.00
>   iManufacturer           3 Qualcomm, Incorporated
>   iProduct                2 Qualcomm CDMA Technologies MSM
>   iSerial                 4 d1098243
>   bNumConfigurations      1
>   Configuration Descriptor:
>     bLength                 9
>     bDescriptorType         2
>     wTotalLength          145
>     bNumInterfaces          5
>     bConfigurationValue     1
>     iConfiguration          1 Qualcomm Configuration
>     bmAttributes         0xe0
>       Self Powered
>       Remote Wakeup
>     MaxPower              500mA
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        0
>       bAlternateSetting       0
>       bNumEndpoints           2
>       bInterfaceClass       255 Vendor Specific Class
>       bInterfaceSubClass    255 Vendor Specific Subclass
>       bInterfaceProtocol    255 Vendor Specific Protocol
>       iInterface              0
>       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 Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        1
>       bAlternateSetting       0
>       bNumEndpoints           2
>       bInterfaceClass       255 Vendor Specific Class
>       bInterfaceSubClass    255 Vendor Specific Subclass
>       bInterfaceProtocol    255 Vendor Specific Protocol
>       iInterface              0
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x82  EP 2 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
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        2
>       bAlternateSetting       0
>       bNumEndpoints           3
>       bInterfaceClass       255 Vendor Specific Class
>       bInterfaceSubClass    255 Vendor Specific Subclass
>       bInterfaceProtocol    255 Vendor Specific Protocol
>       iInterface              0
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x83  EP 3 IN
>         bmAttributes            3
>           Transfer Type            Interrupt
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0040  1x 64 bytes
>         bInterval               5
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x84  EP 4 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     0x03  EP 3 OUT
>         bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0200  1x 512 bytes
>         bInterval               0
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        3
>       bAlternateSetting       0
>       bNumEndpoints           3
>       bInterfaceClass       255 Vendor Specific Class
>       bInterfaceSubClass    254
>       bInterfaceProtocol    255
>       iInterface              0
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x85  EP 5 IN
>         bmAttributes            3
>           Transfer Type            Interrupt
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0040  1x 64 bytes
>         bInterval               5
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x86  EP 6 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     0x04  EP 4 OUT
>         bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0200  1x 512 bytes
>         bInterval               0
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        4
>       bAlternateSetting       0
>       bNumEndpoints           3
>       bInterfaceClass       255 Vendor Specific Class
>       bInterfaceSubClass    255 Vendor Specific Subclass
>       bInterfaceProtocol    255 Vendor Specific Protocol
>       iInterface              0
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x87  EP 7 IN
>         bmAttributes            3
>           Transfer Type            Interrupt
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0040  1x 64 bytes
>         bInterval               5
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x88  EP 8 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     0x05  EP 5 OUT
>         bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0200  1x 512 bytes
>         bInterval               0
> Device Qualifier (for other device speed):
>   bLength                10
>   bDescriptorType         6
>   bcdUSB               2.00
>   bDeviceClass            0 (Defined at Interface level)
>   bDeviceSubClass         0
>   bDeviceProtocol         0
>   bMaxPacketSize0        64
>   bNumConfigurations      1
> Device Status:     0x0000
>   (Bus Powered)
>
> # uname -a
> Linux sbc-bg96 4.13.12-BG96-dirty #1 SMP Sun Nov 12 16:33:31 CET 2017
> armv7l GNU/Linux
> #
>
> diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c index
> 8c37336..feb11fc 100644
> --- a/drivers/net/usb/qmi_wwan.c
> +++ b/drivers/net/usb/qmi_wwan.c
> @@ -1238,6 +1238,7 @@ static const struct usb_device_id products[] = {
>         {QMI_FIXED_INTF(0x1e0e, 0x9001, 5)},    /* SIMCom 7230E */
>         {QMI_QUIRK_SET_DTR(0x2c7c, 0x0125, 4)}, /* Quectel EC25, EC20
> R2.0  Mini PCIe */
>         {QMI_QUIRK_SET_DTR(0x2c7c, 0x0121, 4)}, /* Quectel EC21 Mini PCIe
> */
> +       {QMI_QUIRK_SET_DTR(0x2c7c, 0x0296, 4)}, /* Quectel ECBG96 */
>
>         /* 4. Gobi 1000 devices */
>         {QMI_GOBI1K_DEVICE(0x05c6, 0x9212)},    /* Acer Gobi Modem Device
> */
> diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
> index db3d34c..c0ddfef 100644
> --- a/drivers/usb/serial/option.c
> +++ b/drivers/usb/serial/option.c
> @@ -241,6 +241,7 @@ static void option_instat_callback(struct urb *urb);
>  /* These Quectel products use Quectel's vendor ID */
>  #define QUECTEL_PRODUCT_EC21                   0x0121
>  #define QUECTEL_PRODUCT_EC25                   0x0125
> +#define QUECTEL_PRODUCT_BG96                   0x0296
>
>  #define CMOTECH_VENDOR_ID                      0x16d8
>  #define CMOTECH_PRODUCT_6001                   0x6001
> @@ -1185,6 +1186,8 @@ static const struct usb_device_id option_ids[] = {
>           .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
>         { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25),
>           .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
> +        { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
> +          .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
>         { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
>         { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
>         { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003),
>



-- 
Sebastian Sjöholm

Simborgarvägen 116
SE-18439 Åkersberga
Sverige

Mobile : +46 76 335 0667
Email : sebastian.sjoholm at gmail.com
Skype : ssjoholm
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/libqmi-devel/attachments/20171113/88e91378/attachment-0001.html>


More information about the libqmi-devel mailing list