Using the SpeedTouch 330 ADSL USB modem with kernel 2.4
The SpeedTouch 330 USB ADSL modem is becoming quite popular, because a lot of ISPs now give it to customers for free. Therefore, I felt obliged to include out-of-the-box support for it in Gibraltar. For kernels >= 2.6.10, it has now become very simple to use it under Linux with the new kernel driver. One just needs to obtain the matching firmware file from Alcatel/Thomson, extract the two parts of it (boot code and firmware code), install it in the correct directory (e.g. /etc/firmware for Debian/Ubuntu) and the modem will be initialized correctly upon plugging it in (assumed that a recent version of Debian/ubuntu is installed). This page describes the whole procedure in detail.
However, kernels before 2.6.10 do not include support for loading the firmware, and thus the modem_run user space utility needs to be used. It took me quite a while to figure out the correct combination of all parts, so hopefully this page might save others bit of trial&error time.
The correct version of modem_run
Most of the time, it’s good advice to use the latest version of any software package. In the case of the speedtouch package (the GPLed driver and user space utilites for the SpeedTouch modems), this turned out to be the wrong approach. Neither version 1.3 nor version 1.3.1 were able to upload the firmware to the modem. I tried with Debian unstable and with Gibraltar (which is a customized and updated Debian woody). But version 1.2 works nicely (and has, in contrast to the 1.2-beta2 version that I used previously for Gibraltar, support for the new 4.00 revision of the modem), so I am using it now. Since the upstream package already comes with debian packaging files, it was easy to generate a Debian package out of it that works under Debian woody - you can download it from any Gibaltar mirror, e.g. from here.
The correct version of the firmware
Another catch, which is also a problem when using the kernel firmware loader, is to choose the correct firmware version. As far as I know, there are at least 3 different firmware versions at the time of this writing: two distributed in the Linux embedded firmware package from Alcatel/Thomson and one that can be extracted from their speedmgmt package (which is an alternative to the GPLed modem_run utility). I don’t know if the versions shipped with the Windows and MacOS driver packages are also different. However, the two versions contained in the Linux embedded firmware package appear to work with all modem versions that I tried (which is arguably only a small selection), so it should be enough to use those two. This page explains how to find out which revision the modem is and which firmware to use for it. To make it easier for users of Gibraltar, I included the USB hotplug script from the 1.3.1 speedtouch package and modified it to work with Gibraltar. This script automatically selects the correct firmware version depending on the modem revision and starts modem_run to upload the firmware. Feel free to use my version of the script to load the firmware automatically. To do so, this script should be put into /etc/hotplug/usb/.
I need the firmware, quickly…
The modem turned out to be quite picky concerning the firmware upload, which is yet another catch in getting it running. On my first attempts with modem_run version 1.2, I always got USB transfer error messages like
Mar 22 15:50:07 localhost kernel: usb_control/bulk_msg: timeout
Mar 22 15:50:07 localhost kernel: usbdevfs: USBDEVFS_BULK failed dev 2 ep 0x85 len 512 ret -110
Those message did not, contrary to what they might seem like, indicate a problem with the USB subsystem. Instead, the modem only seems to accept the firmware for some (rather short) time after being plugged in. The bottom line is that it works when modem_run is executed immediately by the USB hotplug script, but that it does not when the hotplug script is missing or not working properly and modem_run is executed manually from the command line. Doh….