Let me start rapidly ;)

Index: usb/umsm.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/umsm.c,v
retrieving revision 1.100
diff -u -p -d -h -p -r1.100 umsm.c
--- usb/umsm.c 12 Jul 2014 21:24:33 -0000 1.100
+++ usb/umsm.c 9 Nov 2014 23:52:30 -0000
@@ -169,11 +169,13 @@ static const struct umsm_type umsm_devs[
{{ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER2 }, DEV_UMASS6},
{{ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER3 }, DEV_UMASS7},
{{ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER4 }, DEV_UMASS4},
+// {{ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER5 }, DEV_UMASS6},
{{ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_K3565Z }, 0},
{{ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF112 }, DEV_UMASS4},
{{ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF633 }, 0},
{{ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF637 }, 0},
{{ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MSA110UP }, 0},
+ {{ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF821 }, 0},

{{ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_EXPRESSCARD }, 0},
{{ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINV620 }, 0},
Index: usb/usbdevs
===================================================================
RCS file: /cvs/src/sys/dev/usb/usbdevs,v
retrieving revision 1.639
diff -u -p -d -h -p -r1.639 usbdevs
--- usb/usbdevs 31 Oct 2014 21:17:42 -0000 1.639
+++ usb/usbdevs 9 Nov 2014 23:52:30 -0000
@@ -3417,9 +3417,11 @@ product ZTE MF633 0x0016 ZTE MF633 USUP
product ZTE MF637 0x0031 ZTE MF637 HSUPA USB modem
product ZTE K3565Z 0x0063 ZTE K3565-Z USB MSM modem
product ZTE UMASS_INSTALLER4 0x0083 ZTE USB MSM installer
+product ZTE UMASS_INSTALLER5    0x0166  ZTE USB MSM installer
product ZTE MSA110UP 0x0091 ONDA MSA110UP USB MSM modem
product ZTE UMASS_INSTALLER2 0x0103 ZTE USB MSM installer
product ZTE MF112 0x0117 ZTE MF112 HSUPA USB modem
+product ZTE MF821 0x0167  ZTE MF821 LTE USB modem
product ZTE HSUSB 0x1364 ZTE HSUSB
product ZTE UMASS_INSTALLER 0x2000 ZTE USB MSM installer
product ZTE AC2746 0xfff1 AC2746 CDMA USB modem
Index: usb/usbdevs.h
===================================================================
RCS file: /cvs/src/sys/dev/usb/usbdevs.h,v
retrieving revision 1.651
diff -u -p -d -h -p -r1.651 usbdevs.h
--- usb/usbdevs.h 31 Oct 2014 21:17:53 -0000 1.651
+++ usb/usbdevs.h 9 Nov 2014 23:52:30 -0000
@@ -3431,7 +3431,9 @@
#define USB_PRODUCT_ZTE_UMASS_INSTALLER 0x2000 /* ZTE USB MSM installer */
#define USB_PRODUCT_ZTE_AC2746 0xfff1 /* AC2746 CDMA USB modem */
#define USB_PRODUCT_ZTE_UMASS_INSTALLER3 0xfff5 /* ZTE USB CDMA installer */
+#define USB_PRODUCT_ZTE_UMASS_INSTALLER5        0x0166          /* ZTE USB
MSM installer */
#define USB_PRODUCT_ZTE_AC8700 0xfffe /* AC8700 CDMA USB modem */
+#define USB_PRODUCT_ZTE_MF821 0x0167            /* ZTE MF821 LTE modem */

/* Quanta products */
#define USB_PRODUCT_QUANTA_RT3070 0x0304 /* RT3070 */
Index: usb/usbdevs_data.h
===================================================================
RCS file: /cvs/src/sys/dev/usb/usbdevs_data.h,v
retrieving revision 1.645
diff -u -p -d -h -p -r1.645 usbdevs_data.h
--- usb/usbdevs_data.h 31 Oct 2014 21:17:53 -0000 1.645
+++ usb/usbdevs_data.h 9 Nov 2014 23:52:30 -0000
@@ -8409,6 +8409,10 @@ const struct usb_known_product usb_known
   USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF637,
   "ZTE MF637 HSUPA USB modem",
},
+        {
+            USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MF821,
+            "ZTE MF821 LTE USB modem",
+        },
{
   USB_VENDOR_ZTE, USB_PRODUCT_ZTE_K3565Z,
   "ZTE K3565-Z USB MSM modem",
@@ -8417,6 +8421,10 @@ const struct usb_known_product usb_known
   USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER4,
   "ZTE USB MSM installer",
},
+        {
+            USB_VENDOR_ZTE, USB_PRODUCT_ZTE_UMASS_INSTALLER5,
+            "ZTE USB MSM installer",
+        },
{
   USB_VENDOR_ZTE, USB_PRODUCT_ZTE_MSA110UP,
   "ONDA MSA110UP USB MSM modem",

OK, now some explaination. This isn't a very innovative patch. I'm only
adding a ZTE MF821 LTE modem to the list of usbdevs and umsm.c enabled
devices.

But, wait, there's more! It doesn't to USB modeswitching (look at thhis
commented line in umsm.c), because any of DEV_UMASS* methods won't work.
So, I used to tell modem to be always a modem, not a fake CDROM drive by AT
command "AT+ZCDRUN=8" which I done via serial terminal emulator on my home
MikroTik box. It disables "USB CDROM" mode (number 9 enables it back) and
reports modem always as modem. And here ends my competence, now I'll only
describe how modem behaves in certain situations:

* USB VID is 19d2 (ZTE one), at boot (red led) it shows as PID 0166 and
after some seconds (green led, associated to network) it becomes a PID 0167.

* On a clean OpenBSD kernel, when I plug that modem in, OpenBSD loads
ugen/umass device driver for internal microSD reader in modem and a cdrom
driver for "installation CD" (a ROM with device drivers for Microshit
Windoze). None of umsm/ucom drivers is loaded.

* With AT+ZCDRUN=8 option, on clean kernel, modem behaves in the same way.

* On kernel with that patch, but uncommented DEV_UMASS* line, regardless of
method number, modem stays in PID 0166 and loads only umsm driver, not ucom
(needed to do PPP call) and doesnt show up an CDROM/microSD drives.

* But it's only one exception, on DEV_UMASS6, device shows up as CDROM/card
reader, but doesn't load an umsm/ucom driver, even with AT+ZCDRUN=8 was
enabled or not

* Last combination, with disabled CDROM modem, disabled USB modeswitching
line and all other elements of patch applied was desribed earlier.

So, the question is: Does someone here have experience with USB modems
(especially that Quallcom MSM based) drivers and switching them between
CDROM and modem state? Can someone help me in completion of that patch?

At last, I only want to mention my programming skills isn't very well, I'm
not a regular and serious programmer, and it's probably my first patch to
greater open source project, so don't expect from me to understand whole
kernel infrastructure and please try to easily explain and instruct me what
I'm doing wrong, rather than hating and starting flamewars. I want also to
tell you that English is not my native language, so I DO mistakes (even
huge fails), and sorry for all of them in advance.

With regards,
Jakub Skrzypnik

Reply via email to