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 <bjorn@xxxxxxx> ==To: Enrico Mioso <mrkiko.rs@xxxxxxxxx> ==Cc: linux-usb@xxxxxxxxxxxxxxx ==Subject: Re: the mysterious == ==Bj?rn Mork <bjorn@xxxxxxx> 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?= <bjorn@xxxxxxx> ==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 <bjorn@xxxxxxx> ==--- == 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html