[PATCH 0/4] ALSA: caiaq: Kore controller fixes and LCD support

From: Niko Huuskonen

Date: Sat Sep 26 2026 - 20:36:46 EST


The Native Instruments Kore controllers (USB 17cc:4711 and 17cc:4712)
work with snd-usb-caiaq, but a few things are wrong or missing:

- The EP1 command buffer is shared by all senders without locking.
Patch 1 adds a mutex. It is needed by patch 4, which adds a sender.

- Parts of the Kore key map do not match the hardware: softkeys 5-8
come in reverse order, and on the first Kore the knob touch sensors
are scrambled. Patch 2 fixes the map.

- The 128x64 LCD is not supported, and userspace cannot reach it while
the driver is bound. Patch 3 adds a hwdep interface ID, and patch 4
exposes the LCD as a hwdep device that takes whole frames, plus an
"LCD Contrast" control. The display protocol comes from USB captures
of the vendor software that the OpenKoreBridge project published.

Patch 2 changes the key codes userspace sees for softkeys 5-8 on both
controllers, and for the touch sensors on the first Kore. Userspace
that compensates for the old map, such as the OpenKoreBridge controller
script, would have to follow. Userspace can read the map with
EVIOCGKEYCODE to support kernels with and without the change. If
changing the codes is a concern, patch 2 can be dropped; the rest of
the series does not depend on it.

Testing: the series was tested on a Kore controller (17cc:4711), applied
to v7.2.6 and built out of tree, with a userspace MIDI bridge that uses
the LCD, the LEDs and all controls. Every patch builds with W=1, and
checkpatch.pl --strict only asks whether MAINTAINERS needs updating for
the new file, which the existing sound/usb/caiaq/ entry already covers.
The locking problem in patch 1 was found by code review and has not
been reproduced. A Kore 2 was not available for testing.

Tool use: the patches were written with an AI coding assistant (Claude,
an LLM), as the Assisted-by tags say. It worked in an interactive
session in which I asked it to make the Kore controller usable as a MIDI
controller on Linux, to find out how its LCD is driven, to fix the
button mapping I reported from testing the hardware, and to prepare the
kernel changes for submission. It found the missing locking by code
review, derived the key map from my tests on the controller, checked the
LCD protocol on the device over raw USB, and tested each change on my
controller.

Niko Huuskonen (4):
ALSA: caiaq: Serialize access to the EP1 command buffer
ALSA: caiaq: Fix the Kore controller key map
ALSA: uapi: Add hwdep interface ID for caiaq devices
ALSA: caiaq: Add LCD support for the Kore controllers

include/uapi/sound/asound.h | 3 +-
sound/usb/caiaq/Makefile | 2 +-
sound/usb/caiaq/device.c | 12 ++
sound/usb/caiaq/device.h | 13 ++
sound/usb/caiaq/input.c | 29 +++-
sound/usb/caiaq/lcd.c | 258 ++++++++++++++++++++++++++++++++++++
sound/usb/caiaq/lcd.h | 7 +
7 files changed, 318 insertions(+), 6 deletions(-)
create mode 100644 sound/usb/caiaq/lcd.c
create mode 100644 sound/usb/caiaq/lcd.h


base-commit: 4d4bc656580bcc448f8e6d6b3b3a903120eb29bb
--
2.55.0