# Patching the FT245 Driver under Linux

This steps have to be done in order to modify the Linux kernel module `ftdi_sio.ko` so, that it accepts devices with the vendor/device IDs of the Atmel STK541 and/or the Dresden Elektronik Sensor Terminal Board and assigns them a serial device like `/dev/ttyUSBxx`.

Modify the Driver Source Code
  In the directory `/usr/src/linux/drivers/usb/serial/` there are the files `ftdi_sio.h` and `ftdi_sio.c`, which needs to be modified.

There are two patches available but most probably they will not work at a specific system, since in `ftdi_sio.c`, the line numbers change rapidly by adding new devices from other vendors. So the patches most probably needs to be applied manually.

- ftdi_sio_2.6.13-15-default.patch (SuSE 10.0, default kernel)
- ftdi_sio_2.6.25.5-1.1-pae.patch (SuSE 11.0, default kernel)

At first, the macros for the vendor and product ID of the boards have to be added in the file `ftdi_sio.h:329`.

        #define ATMEL_VID              0x03eb  /* Atmel Vendor ID */
        #define STK541_PID             0x2109  /* Zigbee Controller */
        #define DE_VID                 0x1cf1  /* Dresden Electronic Vendor ID */
        #define STB_PID                0x0001  /* Sensor Terminal Board */

Next in the file `ftdi_sio.c` the new Vendor/Device ID tuples needs to be added:

         static struct usb_device_id id_table_combined [] = {
                { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) },
                ...
                ...
                ...
                { USB_DEVICE(ATMEL_VID, STK541_PID) },
                { USB_DEVICE(DE_VID, STB_PID) },
                { },                                    /* Optional parameter entry */
                { }                                     /* Terminating entry */
         };

Build the Modified Kernel Modul

        root@pandora>cd /usr/src/linux
        root@pandora>make drivers/usb/serial/ftdi_sio.ko
        CC [M]  drivers/usb/serial/ftdi_sio.o
        MODPOST
        CC      drivers/usb/serial/ftdi_sio.mod.o
        LD [M]  drivers/usb/serial/ftdi_sio.ko

Note:
  If an error message like "You have not yet configured your kernel! (missing kernel .config file)" occurs, under SuSE Linux you can quickly recover from this issue by doing "zcat /proc/config.gz > .config" in the directory `/usr/src/linux`.

Install the new Kernel Modul

        root@pandora>rmmod ftdi_sio
        root@pandora>cd /lib/modules/`uname -r`/kernel/drivers/usb/serial
        root@pandora>cp ftdi_sio.ko ftdi_sio.ko.orig
        root@pandora>cp /usr/src/linux/drivers/usb/serial/ftdi_sio.ko .
        root@pandora>depmod -a

Load and Test the new Kernel Modul

        root@pandora>modprobe ftdi_sio
        root@pandora>lsmod | grep ftdi
        ftdi_sio               27400  0
        usbserial              28776  1 ftdi_sio
        usbcore               112640  5 ftdi_sio,usbserial,uhci_hcd,rt73
        root@pandora>dmesg | grep FTDI
        ftdi_sio 1-1.2:1.0: FTDI USB Serial Device converter detected
        usb 1-1.2: FTDI USB Serial Device converter now attached to ttyUSB0
        drivers/usb/serial/ftdi_sio.c: v1.4.3:USB FTDI Serial Converters Driver