[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#670241: Updated qmi_wwan backport based on v3.2.19, including new device IDs from v3.5-rc1

A few changes since the bug was reported:

- v3.2.19 includes a few fixes in cdc-wdm which conflict with the
  backport.  The easiest way to merge these is to first revert them, do
  the backport, and then reapply the fixes as cherry-picks from

- The sierra driver fix has been included in stable and can be dropped.

- A few new device IDs has been added to the qmi_wwan driver.

The following procedure will produce a backported version of qmi_wwan
and the supporting cdc-wdm driver on top of a clean v3.2.19:

1) revert the following conflicting stable fixes (will be reapplied in
   the next step):

8fd4242 USB: cdc-wdm: cannot use dev_printk when device is gone
0c68ab1 USB: cdc-wdm: add debug messages on cleanup
7569109 USB: cdc-wdm: fix memory leak
811c72b USB: cdc-wdm: sanitize error returns

2) cherry-pick to add subdriver support to cdc-wdm:

19b85b3 USB: cdc-wdm: no need to fill the in request URB every time it's submitted
8143a89 USB: cdc-wdm: kill the now unnecessary bMaxPacketSize0 field and udev variable
820c629 USB: cdc-wdm: avoid printing odd-looking "cdc-wdm-176" names
fec67b4 usb: cdc-wdm: Add device-id for Huawei 3G/LTE modems
8804420 usb: cdc-wdm: make reset work with blocking IO
8457d99 USB: cdc-wdm: no need to use usb_alloc_coherent
0dffb48 usb: cdc-wdm: split out reusable parts of probe
b0c1386 usb: cdc-wdm: adding list lookup indirection
3cc3615 usb: cdc-wdm: adding usb_cdc_wdm_register subdriver support
24a85ba USB: cdc-wdm: sanitize error returns
2f338c8 USB: cdc-wdm: fix memory leak
880bca3 USB: cdc-wdm: add debug messages on cleanup
12a98b2 USB: cdc-wdm: cleanup error codes
6b0b79d USB: cdc-wdm: cannot use dev_printk when device is gone
6286d85 USB: cdc-wdm: remove from device list on disconnect

3) cherry-pick to add qmi_wwan driver:

423ce8c net: usb: qmi_wwan: New driver for Huawei QMI based WWAN devices
c3ecb08 net: qmi_wwan: support devices having a shared QMI/wwan interface
b086cf0 net: qmi_wwan: add Gobi and Pantech UML290 device IDs
11207b6 net: qmi_wwan: add support for ZTE MF820D
1aa35a2 USB: qmi_wwan: Add ZTE (Vodafone) K3565-Z and K4505-Z net interfaces
dbb6d09 USB: qmi_wwan: Add ZTE (Vodafone) K3570-Z and K3571-Z net interfaces
3bc17d1 net: qmi_wwan: support Sierra Wireless MC77xx devices in QMI mode
88c16dc net: qmi_wwan: Add Vodafone/Huawei K5005 support
0000188 USB: qmi_wwan: Make forced int 4 whitelist generic
8965c98 USB: qmi_wwan: Add ZTE (Vodafone) K3765-Z
f7142e6 USB: qmi_wwan: Add ZTE (Vodafone) K3520-Z
5e071b5 net: qmi_wwan: Add Sierra Wireless device IDs

The diffstat of the above is:

bjorn@nemi:/usr/local/src/git/linux$ git diff --stat v3.2.19..HEAD
 drivers/net/usb/Kconfig     |   22 +++++++
 drivers/net/usb/Makefile    |    1 +
 drivers/net/usb/qmi_wwan.c  |  581 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 drivers/usb/class/cdc-wdm.c |  345 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------
 include/linux/usb/cdc-wdm.h |   19 ++++++
 5 files changed, 849 insertions(+), 119 deletions(-)

The resulting drivers will be identical to the 3.5-rc1 versions, with
the exception of the module_usb_driver() macro and the
disable_hub_initiated_lpm patch:

bjorn@nemi:/usr/local/src/git/linux$ git diff HEAD..v3.5-rc1 -- drivers/usb/class/cdc-wdm.c include/linux/usb/cdc-wdm.h drivers/net/usb/qmi_wwan.c
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 32755c6..3b20678 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -562,6 +562,7 @@ static struct usb_driver qmi_wwan_driver = {
        .resume               = qmi_wwan_resume,
        .reset_resume         = qmi_wwan_resume,
        .supports_autosuspend = 1,
+       .disable_hub_initiated_lpm = 1,
 static int __init qmi_wwan_init(void)
diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
index 2236fe7..ea8b304 100644
--- a/drivers/usb/class/cdc-wdm.c
+++ b/drivers/usb/class/cdc-wdm.c
@@ -1034,26 +1034,10 @@ static struct usb_driver wdm_driver = {
        .post_reset =   wdm_post_reset,
        .id_table =     wdm_ids,
        .supports_autosuspend = 1,
+       .disable_hub_initiated_lpm = 1,
-/* --- low level module stuff --- */
-static int __init wdm_init(void)
-       int rv;
-       rv = usb_register(&wdm_driver);
-       return rv;
-static void __exit wdm_exit(void)
-       usb_deregister(&wdm_driver);


Reply to: