Using the Tascam US-144MKII with Linux

Today I got a Tascam US-144MKII from a colleague because he couldn’t use it anymore with Mac OSX. Apparently this USB2.0 audio interface stopped working on El Capitan. Tascam claims they’re working on a driver but they’re only generating bad publicity with that announcement it seems. So he gave it to me, maybe it would work on Linux.

Tascam US-144MKII
Tascam US-144MKII

First thing I did was plugging it in. The snd_usb_122l module got loaded but that was about it. So much for plug and play. There are reports though that this interface should work so when I got home I started digging a bit deeper. Apparently you have to disable the ehci_hcd USB driver, which is actually the USB2.0 controller driver, and force the US-144MKII to use the uhci_hcd USB1.1 driver instead so that it thinks it’s in USB1.1 mode. This limits the capabilities of the device but my goal for today was to get sound out of this interface, not getting the most out of it.

I quickly found out that on my trusty XPS13 forcing USB1.1 was probably not going to work because it only has USB3.0 ports. So I can disable the ehci_hcd driver but then it seems the xhci_hcd USB3.0 driver takes over. And disabling that driver effectively disables all USB ports. So I grabbed an older notebook with USB2.0 ports and disabled the ehci_hcd driver by unbinding it since it’s not compiled as a module. Unbinding a driver is done by writing the system ID of a device to a so-called unbind file of the driver that is bound to this device. In this case we’re interested in the system ID’s of the devices that use the ehci_hcd driver which can be found in /sys/bus/drivers/ehci-pci/:

# ls /sys/bus/pci/drivers/ehci-pci/
0000:00:1a.7  bind  new_id  remove_id  uevent  unbind
# echo -n "0000:00:1a.7" > /sys/bus/pci/drivers/ehci-pci/unbind

This will unbind the ehci_hcd driver from the device with system ID 0000:00:1a.7 which in this case is an USB2.0 controller.When plugging in the USB interface it now got properly picked up by the system and I was greeted with an active green USB led on the interface as proof.

$ cat /proc/asound/cards
 0 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0xf4800000 irq 46
 1 [US122L         ]: USB US-122L - TASCAM US-122L
                      TASCAM US-122L (644:8020 if 0 at 006/002

So ALSA picked it up as a device but it doesn’t show up in the list of sound cards when issuing aplay -l. This is because you have to tell ALSA to talk to the device in a different way then to a normal audio interface. Normally an audio interface can be addressed by using the hw plugin which is the most low-level ALSA plugin that does nothing more than talking to the driver and this is what most applications use, including JACK. The US-144MKII works differently though, its driver snd_usb_122l has to be accessed with the use of the usb_stream plugin which is part of the libasound2-plugins package and that allows you to set a PCM device name that can be used with JACK for instance. This can be done with the following .asoundrc file that you have to create in the root of your home directory: {
        type usb_stream
        card "US122L"
} {
        type hw
        card "US122L"

What we do here is creating a PCM device called us-144mkii and coupling that to the card name we got from cat /proc/asound/cards which is US122L. Of course you can name the PCM device anything you want. Almost all other examples name it usb_stream but that’s a bit confusing because that is the name of the plugin and you’d rather have a name that has some relation to the device you’re using. Also practically all examples use card numbers. But who says that the USB audio interface will always be card 0, or 1. It could also be 2, or 10 if you have 9 other audio interfaces. Other examples work around this by fixing the order of the numbers that get assigned to each available audio interface by adjusting the index parameter for the snd_usb_122l driver. But why do that when ALSA also accepts the name of the card? This also makes thing a lot easier to read, it’s now clear that we are coupling the PCM name us-144mkii to the card named US122L. And we’re avoiding having to edit system-wide settings. The ctl stanza is not strictly necessary but it prevents the following warning when starting JACK:

ALSA lib control.c:953:(snd_ctl_open_noupdate) Invalid CTL us-144mkii
control open "us-144mkii" (No such file or directory)

So with the .asoundrc in place you can try starting JACK:

$ jackd -P85 -t2000 -dalsa -r48000 -p512 -n2 -Cus-144mkii -Pus-144mkii
jackd 0.124.2
Copyright 2001-2009 Paul Davis, Stephane Letz, Jack O'Quinn, Torben Hohn and others.
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details

no message buffer overruns
JACK compiled with System V SHM support.
loading driver ..
apparent rate = 48000
creating alsa driver ... us-144mkii|us-144mkii|512|2|48000|0|0|nomon|swmeter|-|32bit
configuring for 48000Hz, period = 512 frames (10.7 ms), buffer = 2 periods
ALSA: final selected sample format for capture: 24bit little-endian in 3bytes format
ALSA: use 2 periods for capture
ALSA: final selected sample format for playback: 24bit little-endian in 3bytes format
ALSA: use 2 periods for playback

This translates to the following settings in QjackCtl:

QjackCtl Settings – Parameters
QjackCtl Settings – Parameters
QjackCtl Settings – Advanced
QjackCtl Settings – Advanced

Don’t expect miracles of this setup. You won’t be able to achieve super low-latencies but at least you can still use your Tascam US-144MKII instead of having to give it away to a colleague.

Using the Tascam US-144MKII with Linux

10 thoughts on “Using the Tascam US-144MKII with Linux

  1. Costas says:

    Hi there,
    I am running Linux Mint 18 and this tascam surprisingly works out of the box (after a couple of reboots and messing around with the secureboot options). My only problem is that every few minutes there is this screeching sound fading in and out for a few seconds. Not sure why yet, I will keep searching. If you have any ideas please let me know!

    1. Hello Costas, that’s great to hear! What kernel and ALSA versions does Mint 18 have? No idea about the screeching sound, it doesn’t do that with WIndows or OSX?

        1. Costas says:

          Sorry for the late reply (2y later!) , I did not get notification of your question.

          I wrote my original message in haste, because I was getting sound and I thought it was all working. I never got the inputs to work. I am using Linux Mint 18.3 and it is still the same, I have sound output with screeching sound as Disolve says, and no inputs or MIDI.

          I gave up on trying to fix it, I tried with a USB1.1 hub but still it did not work because it was still using the xhci module. I was getting confused how to force the kernel module so it is taking more time than I can afford. I will be giving it away I think 🙁

  2. Wolfgang says:

    Hi there,

    I’m trying to use the TASCAM US-144mkII on my Debian Jessie system. Of course it is not recognized as a sound card. From lsusb -t I get:

    /:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
        |__ Port 1: Dev 27, If 0, Class=Vendor Specific Class, Driver=, 480M
        |__ Port 1: Dev 27, If 1, Class=Vendor Specific Class, Driver=, 480M
        |__ Port 3: Dev 26, If 0, Class=Vendor Specific Class, Driver=ath9k_htc, 480M
        |__ Port 6: Dev 4, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 1: Dev 28, If 0, Class=Printer, Driver=usblp, 480M

    Device 27 is the US-144mkII. How can I unbind teh EHCI driver from this bus without downgrading my WIFI-USB stick at the same time?


    1. jeremy says:

      Hello Wolfgang, first of all apologies for the belated reply. You can’t use an USB2 device on an USB bus that has the EHCI driver disabled. So in your case you can’t use the WiFi dongle and the Tascam on the same bus. Do you have any other USB ports on your system that might be connected to a different USB bus?

  3. Michael says:

    Hi Jeremy,

    I’m running Lubuntu on a lenovo z570 with usb 2.0 ports. I can unbind “0000:00:1a.0” “0000:00:1d.0” in /sys/bus/pci/drivers/ehci-pci/, But the device is still not showing up in /proc/asound/cards.

    Any suggestions?

  4. Jake says:

    I am having the exact same problem as Michael, even my Buses are named the same.
    Do you have an idea what the problem might be? The PC also has 3.0 buses, do they affect it?

Leave a Reply

Your email address will not be published. Required fields are marked *