Using the Tascam US122 audio/MIDI device in Fedora Core 5

Although Fedora Core 5 comes with a working ALSA device driver of the US122 device, Fedora Core 5 is missing a few other parts, such as the two stages of firmware that need to be downloaded to the device, before the driver will even see the device, and the two programs that are used to download these files.

The necessary firmware and downloading programs can be obtained from www.alsa-project.org, as will be described below. However, at the time of writing this, the accompanying installation procedures assume that the old USB hotplug facility is in place, whereas in Fedora Core 5, this has been removed and replaced by udev. There are two alternative means of addressing this problem. One is to install the deprecated hotplug facility, which can via a compatibility clause in udev. The other method is to configure udev directly to do the two stages of firmware downloading. I have chosen the latter, since it is the cleaner of the two options. Hopefully the ALSA configuration scripts will be modified to do this automatically, in future.

Obtaining the firmware files and the second stage loader program.

 The Tascam firmware files and the second stage firmware-loader program can be obtained by going to the official web-page of the ALSA project (www.alsa-project.org), and downloading the alsa-firmware and alsa-tools packages from there. We have to install these by hand, rather than using yum, since the equivalent packages that are available from the standard FC5 repositories appear to be have been mysteriously stripped of the files that we need.  To avoid conflicts with future updates of the yum variants of these packages, it makes sense to only install the missing parts from the original alsa packages. This turns out to be easy, since the alsa build procedure is ameanable to only building and installing specific parts. At the time of writing this, the alsa packages are numbered 1.0.11. Having downloaded the compressed tar files of these packages, as mentioned above, I first unpacked them as follows:

tar xjf alsa-firmware-1.0.11.tar.bz2
tar xjf alsa-tools-1.0.11.tar.bz2

I then installed the firmware as follows:

cd alsa-firmware-1.0.11
./configure --prefix=/usr
cd usx2yloader
/bin/su -c 'make install'
cd ../..

Then I compiled and installed the second-stage firmware loader, as follows:

cd alsa-tools-1.0.11
cd usx2yloader
./configure --prefix=/usr
make
/bin/su -c 'make install'
cd ../..

The above installation procedure installs files in /etc/hotplug that we don't need, since we aren't going to use the obsolete hotplug facility.  Just in case somebody does install hotplug at a later date, delete these files, to avoid a fight between udev and hotplug.

/bin/su -c '/bin/rm -f /etc/hotplug/usb/tascam*'

Obtaining the first-stage firmware loader.

Unlike the second-stage firmware loader, the first-stage loader isn't specific to the Tascam device. It is designed for bootstrapping any USB device that happens to use the Cypress EZ-USB interface-chip. Thus it isn't part of ALSA, and instead needs to be downloaded from elsewhere. It can be obtained by going to http://prdownloads.sourceforge.net/linux-hotplug/ and downloading the latest RPM file of thefxload package. At the time of writing, this was called fxload-2002_04_11-1.i386.rpm. I downloaded this, and then typed the following to install it.

/bin/su -c 'rpm -i fxload-2002_04_11-1.i386.rpm'

Configuring udev to automatically load the firmware.

When the Tascam US-122 device is plugged in to a USB port, it appears on the USB bus with a vendor ID of 1604 and a product ID of 8006. This doesn't cause the device driver for the Tascam box to be loaded, because the driver is looking for a different product ID that doesn't appear until the first stage firmware has been loaded. Once the first-stage firmware has been loaded using the fxload program that was installed above, the product ID changes to 8007, which is what the device driver is looking for. At this point, if one is listening on headphones, to the audio-output of the Tascam box, a distinct click is heard, and the device driver automatically loads itself. However the LEDs on the Tascam box don't even flicker at this point, since the Tascam box needs to have its second-stage firmware installed, before the driver can do anything with it. This is done using the usx2yloader program that was installed above, which operates through the device driver.

While it is possible to load the firmware by hand, it is much more convenient to have udev do this for one, automatically whenever the Tascam box is plugged in to a USB port. This is done as follows:

/bin/su
cd /etc/udev/rules.d
cat > 55-tascam.rules <<\EOF
BUS=="usb", ACTION=="add", SYSFS{idProduct}=="8006", SYSFS{idVendor}=="1604", RUN+="/bin/sh -c '/sbin/fxload -D %N -s /usr/share/alsa/firmware/usx2yloader/tascam_loader.ihx -I /usr/share/alsa/firmware/usx2yloader/us122fw.ihx'"
BUS=="usb", ACTION=="add", SYSFS{idProduct}=="8007", SYSFS{idVendor}=="1604", RUN+="/bin/sh -c '/usr/bin/usx2yloader'"
EOF

The first line above causes the first-stage firmware to be loaded when udev sees a USB device from Tascam with a 8006 product ID, and the second-stage firmware to be loaded when it sees a Tascam device with a 8007 product-ID. Once udev has loaded the second stage firmware, then the US-122 LEDs should light, and it should be ready for use.

I hope that this helps.