Monday, November 26, 2007

How to get Reliance ZTE MG880 working with Ubuntu Linux 7.04

I tried searching on Google but couldn't find all the information in one place as a simple TODO. So here's my contribution back to the Linux user's out there:

  1. I've been successful in configuring Reliance ZTE MG880 modem/data card over the USB bus. I'm not sure whether this model is available as a PCMCIA card, but I don't know whether it'll work for it.

  2. Plug in the smart looking black little thingie in a USB slot. dmesg should give weird message like this:
    [37246.516000] usb 2-1: new full speed USB device using uhci_hcd and address 15
    [37246.640000] usb 2-1: device descriptor read/64, error -71
    [37246.864000] usb 2-1: device descriptor read/64, error -71
    [37247.080000] usb 2-1: new full speed USB device using uhci_hcd and address 16
    [37247.200000] usb 2-1: device descriptor read/64, error -71
    [37247.424000] usb 2-1: device descriptor read/64, error -71
    [37247.640000] usb 2-1: new full speed USB device using uhci_hcd and address 17
    [37248.048000] usb 2-1: device not accepting address 17, error -71
    [37248.536000] usb 2-1: new full speed USB device using uhci_hcd and address 19
    [37248.760000] usb 2-1: configuration #1 chosen from 1 choice


  3. Don't worry. Just execute the following command and look for ZTE in the output:
    $ cat/proc/bus/usb/devices
    [...]
    T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 19 Spd=12 MxCh= 0
    D: Ver= 1.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=16 #Cfgs= 1
    P: Vendor=19d2 ProdID=fffd Rev= 0.00
    S: Manufacturer=ZTE, Incorporated
    S: Product=ZTE CDMA Tech
    [...]

  4. Look for the Vendor ID and Product ID (in bold above). Issue the following command:
    $ sudo modprobe usbserial vendor=0x19d2 product=0xfffd

    A dmesg should give you similar looking output at the end:
    [38360.764000] usbcore: registered new interface driver usbserial
    [38360.764000] drivers/usb/serial/usb-serial.c: USB Serial support registered for generic
    [38360.940000] usbserial_generic 2-1:1.0: generic converter detected
    [38360.940000] usb 2-1: generic converter now attached to ttyUSB0
    [38360.940000] usbserial_generic 2-1:1.1: generic converter detected
    [38360.940000] usb 2-1: generic converter now attached to ttyUSB1
    [38360.940000] usbserial_generic 2-1:1.2: generic converter detected
    [38360.940000] usb 2-1: generic converter now attached to ttyUSB2
    [38360.940000] usbcore: registered new interface driver usbserial_generic
    [38360.940000] drivers/usb/serial/usb-serial.c: USB Serial Driver core

  5. Now run a wvdialconf:
    $ sudo wvdialconf
    Editing `/etc/wvdial.conf'.

    Scanning your serial ports for a modem.

    Modem Port Scan<*1>: S0 S1 S2 S3
    WvModem<*1>: Cannot get information for serial port.
    ttyUSB0<*1>: ATQ0 V1 E1 -- OK
    ttyUSB0<*1>: ATQ0 V1 E1 Z -- OK
    ttyUSB0<*1>: ATQ0 V1 E1 S0=0 -- OK
    ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK
    ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
    ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
    ttyUSB0<*1>: Modem Identifier: ATI -- ZTEiT, Incorporated
    ttyUSB0<*1>: Speed 4800: AT -- OK
    ttyUSB0<*1>: Speed 9600: AT -- OK
    ttyUSB0<*1>: Speed 19200: AT -- OK
    ttyUSB0<*1>: Speed 38400: AT -- OK
    ttyUSB0<*1>: Speed 57600: AT -- OK
    ttyUSB0<*1>: Speed 115200: AT -- OK
    ttyUSB0<*1>: Speed 230400: AT -- OK
    ttyUSB0<*1>: Speed 460800: AT -- OK
    ttyUSB0<*1>: Max speed is 460800; that should be safe.
    ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
    WvModem<*1>: Cannot get information for serial port.
    ttyUSB1<*1>: ATQ0 V1 E1 -- failed with 2400 baud, next try: 9600 baud
    ttyUSB1<*1>: ATQ0 V1 E1 -- failed with 9600 baud, next try: 115200 baud
    ttyUSB1<*1>: ATQ0 V1 E1 -- and failed too at 115200, giving up.
    WvModem<*1>: Cannot get information for serial port.
    ttyUSB2<*1>: ATQ0 V1 E1 -- failed with 2400 baud, next try: 9600 baud
    ttyUSB2<*1>: ATQ0 V1 E1 -- failed with 9600 baud, next try: 115200 baud
    ttyUSB2<*1>: ATQ0 V1 E1 -- and failed too at 115200, giving up.

    Found a modem on /dev/ttyUSB0.
    Modem configuration written to /etc/wvdial.conf.
    ttyUSB0: Speed 460800; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"

  6. Finally edit /etc/wvdial.conf to make sure it looks like the following. I've added emphasis to the stuff which I had to edit. I'm not sure the "Stupid Mode = 1" line is need or not. It was required for the older Reliance data cards so I just put it in there:

    [Dialer zte]
    Init1 = ATZ
    Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
    Modem Type = Analog Modem
    Phone = #777
    Username = 9324979856
    Password = 9324979856
    ISDN = 0
    SetVolume = 0
    FlowControl = Hardware (CRTSCTS)
    Modem = /dev/ttyUSB0
    Dial Command = ATDT
    Baud = 460800
    Stupid Mode = 1

Just in case this did not work for you and you had to tweak the process, please post it in the comments section and I'll update the post accordingly.

Update: I noticed that if I do the modprobe with the modem inserted in the USB slot, the /dev/ttyUSB* devices are not created. So, first modprobe, and then insert the modem.