Re: USBid/interfaces for Huawei E398

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

 



On Tue, 2011-12-13 at 05:52 +0100, Bjørn Mork wrote:
> Alex Hermann <alex@xxxxxxxxx> writes:
> > On Wednesday 07 December 2011 15:43:45 Bjørn Mork wrote:
> >> Alex Hermann <alex-lists@xxxxxxxxx> writes:
> >> > the E398 shares an usb id with the E353, but seems to use different 
> >> > interfaces. The ones already present in the option driver don't autoload the 
> >> > driver for this device.
> >> > Bus 002 Device 008: ID 12d1:1506 Huawei Technologies Co., Ltd. E398 
> >> > LTE/UMTS/GSM Modem/Networkcard
> >> 
> >> Do you happen to know what usb_modeswitch command you used to switch the
> >> device to this mode?  I happen to ha a similar device (E392) using the
> >> exact same USB IDs, but I have not seen any NCM descriptor there (yet).
> >
> > I just copied one from a similar device, as it worked for ppp, i looked
> > no further.
> 
> But do you get full speed with ppp?  I have been unable to push more
> than 8 Mbps upstream using ppp.  Using the ethernet emulation I can
> consistently get 25+ Mbps upstream.
> 
> > MessageContent="55534243123456780000000000000011062000000100000000000000000000"
> 
> Thanks, that's what I'm using as well.  
> 
> I finally took the time to sniff on Windows, and found that that driver
> uses "55534243000000000000000000000011060000000100000000000000000000".
> Which causes an interesting effect:  The CDC descriptors disappear and
> the control and data interfaces are merged into one.
> 
> So they do actually provide a "Linux" mode and a "Windows" mode.
> 
> I wondered if maybe the problem was that the "Linux" mode wasn't very
> well tested.  But creating a minimalistic driver for the "Windows" mode
> showed that it had exactly the same behaviour.  I guess that supports
> my assumption that everything behind the endpoints is exactly the same
> independent of descriptors.
> 
> I also looked through a Windows session to see if there were any magic
> commands there, but there were none.  Only what was expected:  Common
> AT commands, including the AT+CPIN="xxxx", and a few QMI commands to
> actually start the session.
> 
> So I started the little harder job of adding QMI to an usbnet driver
> (after first trying to Gobi driver, which immediately hung my laptop - I
> didn't continue that way.  Don't think the "dual serial/net" interface
> is a good idea, and the driver has been rejected for reasons unknown to
> me).
> 
> Anyway, adding QMI paid off. After sending a QMI_WDS "start" message,
> the device is working perfectly as any other USB CDC ECM device,
> supporting DHCP for address configuration and forwarding traffic at
> speeds up to 70/26 Mbps.

Where did you post the rough-draft driver to?  I didn't see it on netdev
but I may have just missed it.

Dan

> It seems as if these devices cannot be configured for ethernet operation
> using only AT commands.  You have to register with the QMI system.
> 
> 
> 
> >
> >> The Windows driver indicates that this is a CDC NCM (?) interface:
> >
> >> It would be extremely interesting to know if you are able to use the
> >> cdc_ncm class driver on this card, though.  It might need some
> >> modifications to allow it to load for a vendor specific interface.
> >> Haven't looket at the details.
> >
> > I tried to get it to work with the following patch. I allowed the driver to 
> > continue even if the device was already bound, just to see what would happen. 
> > It did seem to parse the descriptor just fine, but the device didn't accept 
> > any AT+NDISDUP commands on the serial devices.
> >
> > diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
> > index f06fb78..6470e66 100644
> > --- a/drivers/net/usb/cdc_ncm.c
> > +++ b/drivers/net/usb/cdc_ncm.c
> > @@ -145,6 +145,10 @@ static const struct usb_device_id cdc_devs[] = {
> >  		USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE),
> >  		.driver_info = (unsigned long)&cdc_ncm_info,
> >  	},
> > +	{ USB_DEVICE_AND_INTERFACE_INFO(0x12d1,
> > +		0x1506, 0xff, 0x02, 0x16),
> > +		.driver_info = (unsigned long)&cdc_ncm_info,
> > +	},  /* E398 */
> >  	{
> >  	},
> >  };
> > @@ -545,7 +549,7 @@ advance:
> >  
> >  	/* claim interfaces, if any */
> >  	temp = usb_driver_claim_interface(driver, ctx->data, dev);
> > -	if (temp)
> > +	if (temp && temp!= -EBUSY)
> >  		goto error;
> >  
> >  	iface_no = ctx->data->cur_altsetting->desc.bInterfaceNumber;
> 
> 
> I just posted my first draft of a working CDC ECM based driver with QMI
> support.  It's not very polished, and I assume that there will be
> hundreds of bugs to fix before it can go anywhere, but if you're brave
> you can try combining the QMI support from it with the cdc_ncm.  That
> might do it.
> 
> 
> 
> Bjørn
> --
> 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


--
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


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux