Ok, it works! And I'm sending this mail from the wwan0 interface XD !!
thank you very much for this work!!
Hoping this patch can be submitted - and hoping to send you soon even the 
option-related one.

Note to everyone: to bring up the ndis interface, use the
at^ndisdup=1,1,<apn>
command ad usual; here also ndisconn is usable.



On Fri, 28 Jun 2013, Bj?rn Mork wrote:

==Date: Fri, 28 Jun 2013 10:53:06 +0200
==From: Bj?rn Mork <[email protected]>
==To: Enrico Mioso <[email protected]>
==Cc: [email protected]
==Subject: Re: the mysterious
==
==Bj?rn Mork <[email protected]> writes:
==
==> I guess we can add a workaround for this to cdc_ether.c, just like we
==> recently did for cdc_ncm.c for other types of Huawei devices with the
==> same problem.
==
==Could you try the patch below and see if that makes the driver work with
==this modem?  It's build tested only.
==
==
==From 330a716f964eab191b248a8ff7385c6be4261fca Mon Sep 17 00:00:00 2001
==From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <[email protected]>
==Date: Fri, 28 Jun 2013 10:49:25 +0200
==Subject: [RFT] net: cdc_ether: allow combined control and data interface
==MIME-Version: 1.0
==Content-Type: text/plain; charset=UTF-8
==Content-Transfer-Encoding: 8bit
==
==Signed-off-by: Bj?rn Mork <[email protected]>
==---
== drivers/net/usb/cdc_ether.c |   24 +++++++++++++++++-------
== 1 file changed, 17 insertions(+), 7 deletions(-)
==
==diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c
==index 078795f..8da35f8 100644
==--- a/drivers/net/usb/cdc_ether.c
==+++ b/drivers/net/usb/cdc_ether.c
==@@ -215,6 +215,10 @@ int usbnet_generic_cdc_bind(struct usbnet *dev, struct 
usb_interface *intf)
==                                      goto bad_desc;
==                      }
== 
==+                     /* some devices merge these - skip class check */
==+                     if (info->control == info->data)
==+                             goto next_desc;
==+
==                      /* a data interface altsetting does the real i/o */
==                      d = &info->data->cur_altsetting->desc;
==                      if (d->bInterfaceClass != USB_CLASS_CDC_DATA) {
==@@ -304,19 +308,23 @@ next_desc:
==      /* claim data interface and set it up ... with side effects.
==       * network traffic can't flow until an altsetting is enabled.
==       */
==-     status = usb_driver_claim_interface(driver, info->data, dev);
==-     if (status < 0)
==-             return status;
==+     if (info->data != info->control) {
==+             status = usb_driver_claim_interface(driver, info->data, dev);
==+             if (status < 0)
==+                     return status;
==+     }
==      status = usbnet_get_endpoints(dev, info->data);
==      if (status < 0) {
==              /* ensure immediate exit from usbnet_disconnect */
==              usb_set_intfdata(info->data, NULL);
==-             usb_driver_release_interface(driver, info->data);
==+             if (info->data != info->control)
==+                     usb_driver_release_interface(driver, info->data);
==              return status;
==      }
== 
==      /* status endpoint: optional for CDC Ethernet, not RNDIS (or ACM) */
==-     dev->status = NULL;
==+     if (info->data != info->control)
==+             dev->status = NULL;
==      if (info->control->cur_altsetting->desc.bNumEndpoints == 1) {
==              struct usb_endpoint_descriptor  *desc;
== 
==@@ -353,7 +361,8 @@ void usbnet_cdc_unbind(struct usbnet *dev, struct 
usb_interface *intf)
==      if (intf == info->control && info->data) {
==              /* ensure immediate exit from usbnet_disconnect */
==              usb_set_intfdata(info->data, NULL);
==-             usb_driver_release_interface(driver, info->data);
==+             if (info->data != info->control)
==+                     usb_driver_release_interface(driver, info->data);
==              info->data = NULL;
==      }
== 
==@@ -361,7 +370,8 @@ void usbnet_cdc_unbind(struct usbnet *dev, struct 
usb_interface *intf)
==      else if (intf == info->data && info->control) {
==              /* ensure immediate exit from usbnet_disconnect */
==              usb_set_intfdata(info->control, NULL);
==-             usb_driver_release_interface(driver, info->control);
==+             if (info->data != info->control)
==+                     usb_driver_release_interface(driver, info->control);
==              info->control = NULL;
==      }
== }
==-- 
==1.7.10.4
==
==
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to