Drivers for old forgotten-by-their-manufacturers USB audio devices
Go to file
Šerif Rami 5792764612 auto build script dir update 2025-08-09 10:55:22 +02:00
tascam_controls feat: Implement dynamic feedback and align URB configuration 2025-08-07 19:21:49 +02:00
.gitattributes Initial commit 2025-06-23 19:11:42 +02:00
.gitignore native control panel app 2025-07-18 12:53:11 +02:00
LICENSE Create LICENSE 2025-06-27 15:21:46 +02:00
Linux Driver Development Specification for TASCAM US-144 MKII.txt better stability with JACK and DAW's 2025-06-29 11:13:21 +02:00
Makefile rename & cleanup for ALSA submission candidate 2025-08-02 15:25:09 +02:00
README.md proper kernel code formatting 2025-08-06 13:40:07 +02:00
build_and_install.sh auto build script dir update 2025-08-09 10:55:22 +02:00
us144mkii.c fix for latest 6.16 kernels 2025-08-09 10:25:40 +02:00
us144mkii.h more stability fixes 2025-08-08 18:40:02 +02:00
us144mkii_capture.c midi parsing fixes 2025-08-08 16:37:17 +02:00
us144mkii_controls.c code safety improvements 2025-08-08 15:57:06 +02:00
us144mkii_midi.c midi parsing fixes 2025-08-08 16:37:17 +02:00
us144mkii_pcm.c midi parsing fixes 2025-08-08 16:37:17 +02:00
us144mkii_pcm.h feat: Refactor and optimize TASCAM US-144MKII driver 2025-08-06 17:35:22 +02:00
us144mkii_playback.c more stability fixes 2025-08-08 18:40:02 +02:00

README.md

ALSA Driver for TASCAM US-144MKII

An unofficial ALSA kernel module for the TASCAM US-144MKII USB audio interface.

Current Status: Work in Progress

This driver is under active development.

Implemented Features

  • Audio Playback:
  • Audio Capture (Recording):
  • MIDI IN/OUT:

📝 To-Do & Known Limitations

  • Find Bugs, if possible improve performance/stablity
  • *MIDI IN/OUT works only in active audio streaming(DAW ALSA/JACK or browser audio)
  • Non MKII US-144 needs testing to see if the driver will work with it.

Installation and Usage

This is an out-of-tree kernel module, meaning you must compile it against the headers for your specific kernel version.

Step 1: Install Prerequisites (Kernel Headers & Build Tools)

You need the necessary tools to compile kernel modules and the headers for your currently running kernel. Open a terminal and run the command for your Linux distribution:

  • Debian / Ubuntu / Pop!_OS / Mint:

    sudo apt update
    sudo apt install build-essential linux-headers-$(uname -r)
    
  • Fedora / CentOS Stream / RHEL:

    sudo dnf install kernel-devel kernel-headers make gcc
    
  • Arch Linux / Manjaro:

    sudo pacman -S base-devel linux-headers
    
  • openSUSE:

    sudo zypper install -t pattern devel_basis
    sudo zypper install kernel-devel
    

Step 2: Blacklist the Stock snd-usb-us122l Driver

The standard kernel includes a driver that will conflict with our custom module. You must prevent it from loading.

  1. Create a blacklist file. This tells the system not to load the snd-usb-us122l module.

    echo "blacklist snd_usb_us122l" | sudo tee /etc/modprobe.d/blacklist-us122l.conf
    
  2. Rebuild your initramfs. This is a critical step that ensures the blacklist is applied at the very start of the boot process, before the stock driver has a chance to load. Run the command corresponding to your distribution:

    • Debian / Ubuntu / Pop!_OS / Mint:
      sudo update-initramfs -u
      
    • Fedora / RHEL / CentOS Stream:
      sudo dracut --force
      
    • Arch Linux / Manjaro:
      sudo mkinitcpio -P
      
    • openSUSE:
      sudo mkinitrd
      
  3. Reboot your computer.

  4. After rebooting, verify the stock driver is not loaded by running lsmod | grep snd_usb_us122l. This command should produce no output.

Note on a More Aggressive Method: If the method above does not work, some systems (like Arch) may load the conflicting module before the blacklist is processed. A more forceful method is to use a udev rule to de-authorize the device for the kernel entirely, preventing any driver from binding to it automatically.

Create the file /etc/udev/rules.d/99-tascam-blacklist.rules and add the following line. This targets the Tascam US-122L/144MKII series product ID (8007).

ATTR{idVendor}=="0644", ATTR{idProduct}=="8007", ATTR{authorized}="0"

After saving, run sudo udevadm control --reload and reboot. Note that with this rule in place, you will likely need to load the us144mkii driver manually with sudo insmod snd-usb-us144mkii.ko each time. The modprobe method is preferred for automatic loading.

Step 3: Compile and Load the Driver

This process will build the module from source and load it for your current session. This is the best way to test it.

  1. Clone this repository and navigate into the source directory.

  2. Compile the module:

    make
    
  3. Load the compiled module into the kernel:

    sudo insmod snd-usb-us144mkii.ko
    
  4. Connect your TASCAM US-144MKII. Verify that the driver loaded and the audio card is recognized by the system:

    # Check if the kernel module is loaded
    lsmod | grep us144mkii
    
    # Check if ALSA sees the new sound card
    aplay -l
    

    The first command should show us144mkii. The second command should list your "TASCAM US-144MKII" as an available playback device. You should now be able to select it in your audio settings and play sound.

Step 4: Install for Automatic Loading on Boot

To make the driver load automatically every time you start your computer, follow these steps after you have successfully compiled it in Step 3.

  1. Copy the compiled module to the kernel's extra modules directory. This makes it available to system tools.

    sudo mkdir -p /lib/modules/$(uname -r)/extra/us144mkii
    sudo cp snd-usb-us144mkii.ko /lib/modules/$(uname -r)/extra/us144mkii
    
  2. Update module dependencies. This command rebuilds the map of modules so the kernel knows about our new driver.

    sudo depmod -a
    

Now, after a reboot, the us144mkii driver should load automatically.

Tascam Control Panel

Screenshot_20250720_231914

A control panel app built with Qt6 and ALSA.

Get it from releases or build it.

Prerequisites

Before building the application, ensure you have the following installed on your system:

  • CMake (version 3.16 or higher)
  • C++ Compiler (supporting C++17, e.g., GCC/G++)
  • Qt6 Development Libraries (specifically the Widgets module)
  • ALSA Development Libraries
  • Make (or Ninja)

Installation of Prerequisites by Distribution

Debian/Ubuntu

sudo apt update sudo apt install cmake build-essential qt6-base-dev qt6-base-dev-tools libasound2-dev

Fedora/RHEL/CentOS

sudo dnf install cmake "Development Tools" qt6-qtbase-devel alsa-lib-devel

Arch Linux

sudo pacman -Syu sudo pacman -S cmake base-devel qt6-base alsa-lib

openSUSE

sudo zypper install cmake gcc-c++ libqt6-qtbase-devel alsa-devel

Building the Application

Follow these steps to build the TascamControlPanel application from source:

  1. Clone the repository (if you haven't already):

    git clone https://github.com/serifpersia/us144mkii.git

    cd tascam_controls/

  2. Create a build directory and navigate into it:

    mkdir build cd build

  3. Configure the project with CMake:

    cmake ..

    This step will check for all necessary dependencies and generate the build files.

  4. Build the application:

    make -j$(nproc)

    This command compiles the source code. The -j$(nproc) option uses all available CPU cores to speed up the compilation process.

Running the Application

After a successful build, the executable will be located in the build directory.

./TascamControlPanel

Cleaning the Build

To remove all compiled files and intermediate artifacts, simply delete the build directory:

cd .. rm -rf build

License

This project is licensed under the GPL-2.0 see the LICENSE file for details.