Speedtouch 100 USB Fast Ethernet Adapter (under Linux)

Speedtouch was selling in the past a USB adapter for Ethernet: The Speedtouch 100 USB Fast Ethernet Adapter. Proudly they pronounce on their website that the stick is supported under Linux - in one of their support documents they even tell the exact kernels which are supporting the adapter (2.2 and 2.4). Speedtouch doesn't offer a driver though, so why this is their story is not clear to me.

I put the USB adapter in my computer which is running Linux kernel 2.4.x, and found out pretty quickly that the hotplug scripts of my Linux system did not detect the adapter. So far for the Plug-And-Play support from Speedtouch.

But Linux wouldn't be Linux if you couldn't make a little hack to make things work anyway right. I did a "lsusb" and it showed me the following:
Bus 001 Device 004: ID 07b8:401a D-Link, Inc.
cannot get string descriptor 1, error = Connection timed out(110)
cannot get string descriptor 2, error = Connection timed out(110)
cannot get string descriptor 3, error = Connection timed out(110)
Device Descriptor:
 bLength                18
 bDescriptorType         1
 bcdUSB               1.10
 bDeviceClass            0 Interface
 ...
 ...
The time-outs scared me a little bit, but at least it showed me a USB Vendor-ID (0x07b8) and a USB Product-ID (0x401a). When I typed in these IDs at Google ("0x07b8 0x401a"), I immediately hit the jackpot: Somebody submitted a patch for the rtl8150 driver in the Linux 2.6.5 kernel which included support for these IDs.

Unfortunatly I'm not running a 2.6.5 kernel but a 2.4.x kernel. But I knew now that I probably had to hack in the rtl8150 driver source code to get what I wanted.

I opened the file ${KERNEL_SOURCE}/drivers/usb/rtl8150.c and was delighted to see that it was made easy to edit: In the driver written in C, a couple of VENDOR_ID_XXX constants and PRODUCT_ID_XXX constants were defined. I add my data to it:
#define VENDOR_ID_THOMPSON              0x07b8
...
#define PRODUCT_ID_SPEEDTOUCH           0x401a
...
/* table of devices that work with this driver */
static struct usb_device_id rtl8150_table[] = {
  {USB_DEVICE(VENDOR_ID_REALTEK, PRODUCT_ID_RTL8150)},
  ...
  {USB_DEVICE(VENDOR_ID_THOMPSON , PRODUCT_ID_SPEEDTOUCH)},
  {}
};
I rebuilt the modules ("make modules") and installed them ("make modules_install").

Next I did:

# modprobe usb-ohci
# modprobe usbcore
# modprobe rtl8150
I reinserted the USB adapter and watched /var/log/messages:
kernel: Manufacturer: USBs
kernel: Product: 10/100 Fast Ethernet
kernel: SerialNumber: 9439
kernel: rtl8150.c: eth1: rtl8150 is detected
/etc/hotplug/net.agent: invoke ifup eth1
The rtl8150 driver did indeed support my Speedtouch 100 and I went on configuring things to get the new network interface (eth1) up and running.

Just to show why Open Source software works... :)

My own spam-spamming page

The following addresses are spamtraps. Do not use them or you will be banned from hundreds of web sites

Webmaster Editor Sales