162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2007 Daniel Mack 462306a36Sopenharmony_ci * friendly supported by NI. 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include <linux/device.h> 862306a36Sopenharmony_ci#include <linux/init.h> 962306a36Sopenharmony_ci#include <linux/usb.h> 1062306a36Sopenharmony_ci#include <sound/control.h> 1162306a36Sopenharmony_ci#include <sound/core.h> 1262306a36Sopenharmony_ci#include <sound/pcm.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include "device.h" 1562306a36Sopenharmony_ci#include "control.h" 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define CNT_INTVAL 0x10000 1862306a36Sopenharmony_ci#define MASCHINE_BANK_SIZE 32 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cistatic int control_info(struct snd_kcontrol *kcontrol, 2162306a36Sopenharmony_ci struct snd_ctl_elem_info *uinfo) 2262306a36Sopenharmony_ci{ 2362306a36Sopenharmony_ci struct snd_usb_audio *chip = snd_kcontrol_chip(kcontrol); 2462306a36Sopenharmony_ci struct snd_usb_caiaqdev *cdev = caiaqdev(chip->card); 2562306a36Sopenharmony_ci int pos = kcontrol->private_value; 2662306a36Sopenharmony_ci int is_intval = pos & CNT_INTVAL; 2762306a36Sopenharmony_ci int maxval = 63; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci uinfo->count = 1; 3062306a36Sopenharmony_ci pos &= ~CNT_INTVAL; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci switch (cdev->chip.usb_id) { 3362306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_AUDIO8DJ): 3462306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_AUDIO4DJ): 3562306a36Sopenharmony_ci if (pos == 0) { 3662306a36Sopenharmony_ci /* current input mode of A8DJ and A4DJ */ 3762306a36Sopenharmony_ci uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 3862306a36Sopenharmony_ci uinfo->value.integer.min = 0; 3962306a36Sopenharmony_ci uinfo->value.integer.max = 2; 4062306a36Sopenharmony_ci return 0; 4162306a36Sopenharmony_ci } 4262306a36Sopenharmony_ci break; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLX1): 4562306a36Sopenharmony_ci maxval = 127; 4662306a36Sopenharmony_ci break; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLS4): 4962306a36Sopenharmony_ci maxval = 31; 5062306a36Sopenharmony_ci break; 5162306a36Sopenharmony_ci } 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci if (is_intval) { 5462306a36Sopenharmony_ci uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 5562306a36Sopenharmony_ci uinfo->value.integer.min = 0; 5662306a36Sopenharmony_ci uinfo->value.integer.max = maxval; 5762306a36Sopenharmony_ci } else { 5862306a36Sopenharmony_ci uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 5962306a36Sopenharmony_ci uinfo->value.integer.min = 0; 6062306a36Sopenharmony_ci uinfo->value.integer.max = 1; 6162306a36Sopenharmony_ci } 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci return 0; 6462306a36Sopenharmony_ci} 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_cistatic int control_get(struct snd_kcontrol *kcontrol, 6762306a36Sopenharmony_ci struct snd_ctl_elem_value *ucontrol) 6862306a36Sopenharmony_ci{ 6962306a36Sopenharmony_ci struct snd_usb_audio *chip = snd_kcontrol_chip(kcontrol); 7062306a36Sopenharmony_ci struct snd_usb_caiaqdev *cdev = caiaqdev(chip->card); 7162306a36Sopenharmony_ci int pos = kcontrol->private_value; 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci if (pos & CNT_INTVAL) 7462306a36Sopenharmony_ci ucontrol->value.integer.value[0] 7562306a36Sopenharmony_ci = cdev->control_state[pos & ~CNT_INTVAL]; 7662306a36Sopenharmony_ci else 7762306a36Sopenharmony_ci ucontrol->value.integer.value[0] 7862306a36Sopenharmony_ci = !!(cdev->control_state[pos / 8] & (1 << pos % 8)); 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ci return 0; 8162306a36Sopenharmony_ci} 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_cistatic int control_put(struct snd_kcontrol *kcontrol, 8462306a36Sopenharmony_ci struct snd_ctl_elem_value *ucontrol) 8562306a36Sopenharmony_ci{ 8662306a36Sopenharmony_ci struct snd_usb_audio *chip = snd_kcontrol_chip(kcontrol); 8762306a36Sopenharmony_ci struct snd_usb_caiaqdev *cdev = caiaqdev(chip->card); 8862306a36Sopenharmony_ci int pos = kcontrol->private_value; 8962306a36Sopenharmony_ci int v = ucontrol->value.integer.value[0]; 9062306a36Sopenharmony_ci unsigned char cmd; 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci switch (cdev->chip.usb_id) { 9362306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_MASCHINECONTROLLER): 9462306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLX1): 9562306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER2): 9662306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER): 9762306a36Sopenharmony_ci cmd = EP1_CMD_DIMM_LEDS; 9862306a36Sopenharmony_ci break; 9962306a36Sopenharmony_ci default: 10062306a36Sopenharmony_ci cmd = EP1_CMD_WRITE_IO; 10162306a36Sopenharmony_ci break; 10262306a36Sopenharmony_ci } 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci if (pos & CNT_INTVAL) { 10562306a36Sopenharmony_ci int i = pos & ~CNT_INTVAL; 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci cdev->control_state[i] = v; 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci if (cdev->chip.usb_id == 11062306a36Sopenharmony_ci USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLS4)) { 11162306a36Sopenharmony_ci int actual_len; 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci cdev->ep8_out_buf[0] = i; 11462306a36Sopenharmony_ci cdev->ep8_out_buf[1] = v; 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci usb_bulk_msg(cdev->chip.dev, 11762306a36Sopenharmony_ci usb_sndbulkpipe(cdev->chip.dev, 8), 11862306a36Sopenharmony_ci cdev->ep8_out_buf, sizeof(cdev->ep8_out_buf), 11962306a36Sopenharmony_ci &actual_len, 200); 12062306a36Sopenharmony_ci } else if (cdev->chip.usb_id == 12162306a36Sopenharmony_ci USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_MASCHINECONTROLLER)) { 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci int bank = 0; 12462306a36Sopenharmony_ci int offset = 0; 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ci if (i >= MASCHINE_BANK_SIZE) { 12762306a36Sopenharmony_ci bank = 0x1e; 12862306a36Sopenharmony_ci offset = MASCHINE_BANK_SIZE; 12962306a36Sopenharmony_ci } 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ci snd_usb_caiaq_send_command_bank(cdev, cmd, bank, 13262306a36Sopenharmony_ci cdev->control_state + offset, 13362306a36Sopenharmony_ci MASCHINE_BANK_SIZE); 13462306a36Sopenharmony_ci } else { 13562306a36Sopenharmony_ci snd_usb_caiaq_send_command(cdev, cmd, 13662306a36Sopenharmony_ci cdev->control_state, sizeof(cdev->control_state)); 13762306a36Sopenharmony_ci } 13862306a36Sopenharmony_ci } else { 13962306a36Sopenharmony_ci if (v) 14062306a36Sopenharmony_ci cdev->control_state[pos / 8] |= 1 << (pos % 8); 14162306a36Sopenharmony_ci else 14262306a36Sopenharmony_ci cdev->control_state[pos / 8] &= ~(1 << (pos % 8)); 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci snd_usb_caiaq_send_command(cdev, cmd, 14562306a36Sopenharmony_ci cdev->control_state, sizeof(cdev->control_state)); 14662306a36Sopenharmony_ci } 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci return 1; 14962306a36Sopenharmony_ci} 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_cistatic struct snd_kcontrol_new kcontrol_template = { 15262306a36Sopenharmony_ci .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, 15362306a36Sopenharmony_ci .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, 15462306a36Sopenharmony_ci .index = 0, 15562306a36Sopenharmony_ci .info = control_info, 15662306a36Sopenharmony_ci .get = control_get, 15762306a36Sopenharmony_ci .put = control_put, 15862306a36Sopenharmony_ci /* name and private_value filled later */ 15962306a36Sopenharmony_ci}; 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_cistruct caiaq_controller { 16262306a36Sopenharmony_ci char *name; 16362306a36Sopenharmony_ci int index; 16462306a36Sopenharmony_ci}; 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_cistatic const struct caiaq_controller ak1_controller[] = { 16762306a36Sopenharmony_ci { "LED left", 2 }, 16862306a36Sopenharmony_ci { "LED middle", 1 }, 16962306a36Sopenharmony_ci { "LED right", 0 }, 17062306a36Sopenharmony_ci { "LED ring", 3 } 17162306a36Sopenharmony_ci}; 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_cistatic const struct caiaq_controller rk2_controller[] = { 17462306a36Sopenharmony_ci { "LED 1", 5 }, 17562306a36Sopenharmony_ci { "LED 2", 4 }, 17662306a36Sopenharmony_ci { "LED 3", 3 }, 17762306a36Sopenharmony_ci { "LED 4", 2 }, 17862306a36Sopenharmony_ci { "LED 5", 1 }, 17962306a36Sopenharmony_ci { "LED 6", 0 }, 18062306a36Sopenharmony_ci { "LED pedal", 6 }, 18162306a36Sopenharmony_ci { "LED 7seg_1b", 8 }, 18262306a36Sopenharmony_ci { "LED 7seg_1c", 9 }, 18362306a36Sopenharmony_ci { "LED 7seg_2a", 10 }, 18462306a36Sopenharmony_ci { "LED 7seg_2b", 11 }, 18562306a36Sopenharmony_ci { "LED 7seg_2c", 12 }, 18662306a36Sopenharmony_ci { "LED 7seg_2d", 13 }, 18762306a36Sopenharmony_ci { "LED 7seg_2e", 14 }, 18862306a36Sopenharmony_ci { "LED 7seg_2f", 15 }, 18962306a36Sopenharmony_ci { "LED 7seg_2g", 16 }, 19062306a36Sopenharmony_ci { "LED 7seg_3a", 17 }, 19162306a36Sopenharmony_ci { "LED 7seg_3b", 18 }, 19262306a36Sopenharmony_ci { "LED 7seg_3c", 19 }, 19362306a36Sopenharmony_ci { "LED 7seg_3d", 20 }, 19462306a36Sopenharmony_ci { "LED 7seg_3e", 21 }, 19562306a36Sopenharmony_ci { "LED 7seg_3f", 22 }, 19662306a36Sopenharmony_ci { "LED 7seg_3g", 23 } 19762306a36Sopenharmony_ci}; 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_cistatic const struct caiaq_controller rk3_controller[] = { 20062306a36Sopenharmony_ci { "LED 7seg_1a", 0 + 0 }, 20162306a36Sopenharmony_ci { "LED 7seg_1b", 0 + 1 }, 20262306a36Sopenharmony_ci { "LED 7seg_1c", 0 + 2 }, 20362306a36Sopenharmony_ci { "LED 7seg_1d", 0 + 3 }, 20462306a36Sopenharmony_ci { "LED 7seg_1e", 0 + 4 }, 20562306a36Sopenharmony_ci { "LED 7seg_1f", 0 + 5 }, 20662306a36Sopenharmony_ci { "LED 7seg_1g", 0 + 6 }, 20762306a36Sopenharmony_ci { "LED 7seg_1p", 0 + 7 }, 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ci { "LED 7seg_2a", 8 + 0 }, 21062306a36Sopenharmony_ci { "LED 7seg_2b", 8 + 1 }, 21162306a36Sopenharmony_ci { "LED 7seg_2c", 8 + 2 }, 21262306a36Sopenharmony_ci { "LED 7seg_2d", 8 + 3 }, 21362306a36Sopenharmony_ci { "LED 7seg_2e", 8 + 4 }, 21462306a36Sopenharmony_ci { "LED 7seg_2f", 8 + 5 }, 21562306a36Sopenharmony_ci { "LED 7seg_2g", 8 + 6 }, 21662306a36Sopenharmony_ci { "LED 7seg_2p", 8 + 7 }, 21762306a36Sopenharmony_ci 21862306a36Sopenharmony_ci { "LED 7seg_3a", 16 + 0 }, 21962306a36Sopenharmony_ci { "LED 7seg_3b", 16 + 1 }, 22062306a36Sopenharmony_ci { "LED 7seg_3c", 16 + 2 }, 22162306a36Sopenharmony_ci { "LED 7seg_3d", 16 + 3 }, 22262306a36Sopenharmony_ci { "LED 7seg_3e", 16 + 4 }, 22362306a36Sopenharmony_ci { "LED 7seg_3f", 16 + 5 }, 22462306a36Sopenharmony_ci { "LED 7seg_3g", 16 + 6 }, 22562306a36Sopenharmony_ci { "LED 7seg_3p", 16 + 7 }, 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_ci { "LED 7seg_4a", 24 + 0 }, 22862306a36Sopenharmony_ci { "LED 7seg_4b", 24 + 1 }, 22962306a36Sopenharmony_ci { "LED 7seg_4c", 24 + 2 }, 23062306a36Sopenharmony_ci { "LED 7seg_4d", 24 + 3 }, 23162306a36Sopenharmony_ci { "LED 7seg_4e", 24 + 4 }, 23262306a36Sopenharmony_ci { "LED 7seg_4f", 24 + 5 }, 23362306a36Sopenharmony_ci { "LED 7seg_4g", 24 + 6 }, 23462306a36Sopenharmony_ci { "LED 7seg_4p", 24 + 7 }, 23562306a36Sopenharmony_ci 23662306a36Sopenharmony_ci { "LED 1", 32 + 0 }, 23762306a36Sopenharmony_ci { "LED 2", 32 + 1 }, 23862306a36Sopenharmony_ci { "LED 3", 32 + 2 }, 23962306a36Sopenharmony_ci { "LED 4", 32 + 3 }, 24062306a36Sopenharmony_ci { "LED 5", 32 + 4 }, 24162306a36Sopenharmony_ci { "LED 6", 32 + 5 }, 24262306a36Sopenharmony_ci { "LED 7", 32 + 6 }, 24362306a36Sopenharmony_ci { "LED 8", 32 + 7 }, 24462306a36Sopenharmony_ci { "LED pedal", 32 + 8 } 24562306a36Sopenharmony_ci}; 24662306a36Sopenharmony_ci 24762306a36Sopenharmony_cistatic const struct caiaq_controller kore_controller[] = { 24862306a36Sopenharmony_ci { "LED F1", 8 | CNT_INTVAL }, 24962306a36Sopenharmony_ci { "LED F2", 12 | CNT_INTVAL }, 25062306a36Sopenharmony_ci { "LED F3", 0 | CNT_INTVAL }, 25162306a36Sopenharmony_ci { "LED F4", 4 | CNT_INTVAL }, 25262306a36Sopenharmony_ci { "LED F5", 11 | CNT_INTVAL }, 25362306a36Sopenharmony_ci { "LED F6", 15 | CNT_INTVAL }, 25462306a36Sopenharmony_ci { "LED F7", 3 | CNT_INTVAL }, 25562306a36Sopenharmony_ci { "LED F8", 7 | CNT_INTVAL }, 25662306a36Sopenharmony_ci { "LED touch1", 10 | CNT_INTVAL }, 25762306a36Sopenharmony_ci { "LED touch2", 14 | CNT_INTVAL }, 25862306a36Sopenharmony_ci { "LED touch3", 2 | CNT_INTVAL }, 25962306a36Sopenharmony_ci { "LED touch4", 6 | CNT_INTVAL }, 26062306a36Sopenharmony_ci { "LED touch5", 9 | CNT_INTVAL }, 26162306a36Sopenharmony_ci { "LED touch6", 13 | CNT_INTVAL }, 26262306a36Sopenharmony_ci { "LED touch7", 1 | CNT_INTVAL }, 26362306a36Sopenharmony_ci { "LED touch8", 5 | CNT_INTVAL }, 26462306a36Sopenharmony_ci { "LED left", 18 | CNT_INTVAL }, 26562306a36Sopenharmony_ci { "LED right", 22 | CNT_INTVAL }, 26662306a36Sopenharmony_ci { "LED up", 16 | CNT_INTVAL }, 26762306a36Sopenharmony_ci { "LED down", 20 | CNT_INTVAL }, 26862306a36Sopenharmony_ci { "LED stop", 23 | CNT_INTVAL }, 26962306a36Sopenharmony_ci { "LED play", 21 | CNT_INTVAL }, 27062306a36Sopenharmony_ci { "LED record", 19 | CNT_INTVAL }, 27162306a36Sopenharmony_ci { "LED listen", 17 | CNT_INTVAL }, 27262306a36Sopenharmony_ci { "LED lcd", 30 | CNT_INTVAL }, 27362306a36Sopenharmony_ci { "LED menu", 28 | CNT_INTVAL }, 27462306a36Sopenharmony_ci { "LED sound", 31 | CNT_INTVAL }, 27562306a36Sopenharmony_ci { "LED esc", 29 | CNT_INTVAL }, 27662306a36Sopenharmony_ci { "LED view", 27 | CNT_INTVAL }, 27762306a36Sopenharmony_ci { "LED enter", 24 | CNT_INTVAL }, 27862306a36Sopenharmony_ci { "LED control", 26 | CNT_INTVAL } 27962306a36Sopenharmony_ci}; 28062306a36Sopenharmony_ci 28162306a36Sopenharmony_cistatic const struct caiaq_controller a8dj_controller[] = { 28262306a36Sopenharmony_ci { "Current input mode", 0 | CNT_INTVAL }, 28362306a36Sopenharmony_ci { "GND lift for TC Vinyl mode", 24 + 0 }, 28462306a36Sopenharmony_ci { "GND lift for TC CD/Line mode", 24 + 1 }, 28562306a36Sopenharmony_ci { "GND lift for phono mode", 24 + 2 }, 28662306a36Sopenharmony_ci { "Software lock", 40 } 28762306a36Sopenharmony_ci}; 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_cistatic const struct caiaq_controller a4dj_controller[] = { 29062306a36Sopenharmony_ci { "Current input mode", 0 | CNT_INTVAL } 29162306a36Sopenharmony_ci}; 29262306a36Sopenharmony_ci 29362306a36Sopenharmony_cistatic const struct caiaq_controller kontrolx1_controller[] = { 29462306a36Sopenharmony_ci { "LED FX A: ON", 7 | CNT_INTVAL }, 29562306a36Sopenharmony_ci { "LED FX A: 1", 6 | CNT_INTVAL }, 29662306a36Sopenharmony_ci { "LED FX A: 2", 5 | CNT_INTVAL }, 29762306a36Sopenharmony_ci { "LED FX A: 3", 4 | CNT_INTVAL }, 29862306a36Sopenharmony_ci { "LED FX B: ON", 3 | CNT_INTVAL }, 29962306a36Sopenharmony_ci { "LED FX B: 1", 2 | CNT_INTVAL }, 30062306a36Sopenharmony_ci { "LED FX B: 2", 1 | CNT_INTVAL }, 30162306a36Sopenharmony_ci { "LED FX B: 3", 0 | CNT_INTVAL }, 30262306a36Sopenharmony_ci 30362306a36Sopenharmony_ci { "LED Hotcue", 28 | CNT_INTVAL }, 30462306a36Sopenharmony_ci { "LED Shift (white)", 29 | CNT_INTVAL }, 30562306a36Sopenharmony_ci { "LED Shift (green)", 30 | CNT_INTVAL }, 30662306a36Sopenharmony_ci 30762306a36Sopenharmony_ci { "LED Deck A: FX1", 24 | CNT_INTVAL }, 30862306a36Sopenharmony_ci { "LED Deck A: FX2", 25 | CNT_INTVAL }, 30962306a36Sopenharmony_ci { "LED Deck A: IN", 17 | CNT_INTVAL }, 31062306a36Sopenharmony_ci { "LED Deck A: OUT", 16 | CNT_INTVAL }, 31162306a36Sopenharmony_ci { "LED Deck A: < BEAT", 19 | CNT_INTVAL }, 31262306a36Sopenharmony_ci { "LED Deck A: BEAT >", 18 | CNT_INTVAL }, 31362306a36Sopenharmony_ci { "LED Deck A: CUE/ABS", 21 | CNT_INTVAL }, 31462306a36Sopenharmony_ci { "LED Deck A: CUP/REL", 20 | CNT_INTVAL }, 31562306a36Sopenharmony_ci { "LED Deck A: PLAY", 23 | CNT_INTVAL }, 31662306a36Sopenharmony_ci { "LED Deck A: SYNC", 22 | CNT_INTVAL }, 31762306a36Sopenharmony_ci 31862306a36Sopenharmony_ci { "LED Deck B: FX1", 26 | CNT_INTVAL }, 31962306a36Sopenharmony_ci { "LED Deck B: FX2", 27 | CNT_INTVAL }, 32062306a36Sopenharmony_ci { "LED Deck B: IN", 15 | CNT_INTVAL }, 32162306a36Sopenharmony_ci { "LED Deck B: OUT", 14 | CNT_INTVAL }, 32262306a36Sopenharmony_ci { "LED Deck B: < BEAT", 13 | CNT_INTVAL }, 32362306a36Sopenharmony_ci { "LED Deck B: BEAT >", 12 | CNT_INTVAL }, 32462306a36Sopenharmony_ci { "LED Deck B: CUE/ABS", 11 | CNT_INTVAL }, 32562306a36Sopenharmony_ci { "LED Deck B: CUP/REL", 10 | CNT_INTVAL }, 32662306a36Sopenharmony_ci { "LED Deck B: PLAY", 9 | CNT_INTVAL }, 32762306a36Sopenharmony_ci { "LED Deck B: SYNC", 8 | CNT_INTVAL }, 32862306a36Sopenharmony_ci}; 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_cistatic const struct caiaq_controller kontrols4_controller[] = { 33162306a36Sopenharmony_ci { "LED: Master: Quant", 10 | CNT_INTVAL }, 33262306a36Sopenharmony_ci { "LED: Master: Headphone", 11 | CNT_INTVAL }, 33362306a36Sopenharmony_ci { "LED: Master: Master", 12 | CNT_INTVAL }, 33462306a36Sopenharmony_ci { "LED: Master: Snap", 14 | CNT_INTVAL }, 33562306a36Sopenharmony_ci { "LED: Master: Warning", 15 | CNT_INTVAL }, 33662306a36Sopenharmony_ci { "LED: Master: Master button", 112 | CNT_INTVAL }, 33762306a36Sopenharmony_ci { "LED: Master: Snap button", 113 | CNT_INTVAL }, 33862306a36Sopenharmony_ci { "LED: Master: Rec", 118 | CNT_INTVAL }, 33962306a36Sopenharmony_ci { "LED: Master: Size", 119 | CNT_INTVAL }, 34062306a36Sopenharmony_ci { "LED: Master: Quant button", 120 | CNT_INTVAL }, 34162306a36Sopenharmony_ci { "LED: Master: Browser button", 121 | CNT_INTVAL }, 34262306a36Sopenharmony_ci { "LED: Master: Play button", 126 | CNT_INTVAL }, 34362306a36Sopenharmony_ci { "LED: Master: Undo button", 127 | CNT_INTVAL }, 34462306a36Sopenharmony_ci 34562306a36Sopenharmony_ci { "LED: Channel A: >", 4 | CNT_INTVAL }, 34662306a36Sopenharmony_ci { "LED: Channel A: <", 5 | CNT_INTVAL }, 34762306a36Sopenharmony_ci { "LED: Channel A: Meter 1", 97 | CNT_INTVAL }, 34862306a36Sopenharmony_ci { "LED: Channel A: Meter 2", 98 | CNT_INTVAL }, 34962306a36Sopenharmony_ci { "LED: Channel A: Meter 3", 99 | CNT_INTVAL }, 35062306a36Sopenharmony_ci { "LED: Channel A: Meter 4", 100 | CNT_INTVAL }, 35162306a36Sopenharmony_ci { "LED: Channel A: Meter 5", 101 | CNT_INTVAL }, 35262306a36Sopenharmony_ci { "LED: Channel A: Meter 6", 102 | CNT_INTVAL }, 35362306a36Sopenharmony_ci { "LED: Channel A: Meter clip", 103 | CNT_INTVAL }, 35462306a36Sopenharmony_ci { "LED: Channel A: Active", 114 | CNT_INTVAL }, 35562306a36Sopenharmony_ci { "LED: Channel A: Cue", 116 | CNT_INTVAL }, 35662306a36Sopenharmony_ci { "LED: Channel A: FX1", 149 | CNT_INTVAL }, 35762306a36Sopenharmony_ci { "LED: Channel A: FX2", 148 | CNT_INTVAL }, 35862306a36Sopenharmony_ci 35962306a36Sopenharmony_ci { "LED: Channel B: >", 2 | CNT_INTVAL }, 36062306a36Sopenharmony_ci { "LED: Channel B: <", 3 | CNT_INTVAL }, 36162306a36Sopenharmony_ci { "LED: Channel B: Meter 1", 89 | CNT_INTVAL }, 36262306a36Sopenharmony_ci { "LED: Channel B: Meter 2", 90 | CNT_INTVAL }, 36362306a36Sopenharmony_ci { "LED: Channel B: Meter 3", 91 | CNT_INTVAL }, 36462306a36Sopenharmony_ci { "LED: Channel B: Meter 4", 92 | CNT_INTVAL }, 36562306a36Sopenharmony_ci { "LED: Channel B: Meter 5", 93 | CNT_INTVAL }, 36662306a36Sopenharmony_ci { "LED: Channel B: Meter 6", 94 | CNT_INTVAL }, 36762306a36Sopenharmony_ci { "LED: Channel B: Meter clip", 95 | CNT_INTVAL }, 36862306a36Sopenharmony_ci { "LED: Channel B: Active", 122 | CNT_INTVAL }, 36962306a36Sopenharmony_ci { "LED: Channel B: Cue", 125 | CNT_INTVAL }, 37062306a36Sopenharmony_ci { "LED: Channel B: FX1", 147 | CNT_INTVAL }, 37162306a36Sopenharmony_ci { "LED: Channel B: FX2", 146 | CNT_INTVAL }, 37262306a36Sopenharmony_ci 37362306a36Sopenharmony_ci { "LED: Channel C: >", 6 | CNT_INTVAL }, 37462306a36Sopenharmony_ci { "LED: Channel C: <", 7 | CNT_INTVAL }, 37562306a36Sopenharmony_ci { "LED: Channel C: Meter 1", 105 | CNT_INTVAL }, 37662306a36Sopenharmony_ci { "LED: Channel C: Meter 2", 106 | CNT_INTVAL }, 37762306a36Sopenharmony_ci { "LED: Channel C: Meter 3", 107 | CNT_INTVAL }, 37862306a36Sopenharmony_ci { "LED: Channel C: Meter 4", 108 | CNT_INTVAL }, 37962306a36Sopenharmony_ci { "LED: Channel C: Meter 5", 109 | CNT_INTVAL }, 38062306a36Sopenharmony_ci { "LED: Channel C: Meter 6", 110 | CNT_INTVAL }, 38162306a36Sopenharmony_ci { "LED: Channel C: Meter clip", 111 | CNT_INTVAL }, 38262306a36Sopenharmony_ci { "LED: Channel C: Active", 115 | CNT_INTVAL }, 38362306a36Sopenharmony_ci { "LED: Channel C: Cue", 117 | CNT_INTVAL }, 38462306a36Sopenharmony_ci { "LED: Channel C: FX1", 151 | CNT_INTVAL }, 38562306a36Sopenharmony_ci { "LED: Channel C: FX2", 150 | CNT_INTVAL }, 38662306a36Sopenharmony_ci 38762306a36Sopenharmony_ci { "LED: Channel D: >", 0 | CNT_INTVAL }, 38862306a36Sopenharmony_ci { "LED: Channel D: <", 1 | CNT_INTVAL }, 38962306a36Sopenharmony_ci { "LED: Channel D: Meter 1", 81 | CNT_INTVAL }, 39062306a36Sopenharmony_ci { "LED: Channel D: Meter 2", 82 | CNT_INTVAL }, 39162306a36Sopenharmony_ci { "LED: Channel D: Meter 3", 83 | CNT_INTVAL }, 39262306a36Sopenharmony_ci { "LED: Channel D: Meter 4", 84 | CNT_INTVAL }, 39362306a36Sopenharmony_ci { "LED: Channel D: Meter 5", 85 | CNT_INTVAL }, 39462306a36Sopenharmony_ci { "LED: Channel D: Meter 6", 86 | CNT_INTVAL }, 39562306a36Sopenharmony_ci { "LED: Channel D: Meter clip", 87 | CNT_INTVAL }, 39662306a36Sopenharmony_ci { "LED: Channel D: Active", 123 | CNT_INTVAL }, 39762306a36Sopenharmony_ci { "LED: Channel D: Cue", 124 | CNT_INTVAL }, 39862306a36Sopenharmony_ci { "LED: Channel D: FX1", 145 | CNT_INTVAL }, 39962306a36Sopenharmony_ci { "LED: Channel D: FX2", 144 | CNT_INTVAL }, 40062306a36Sopenharmony_ci 40162306a36Sopenharmony_ci { "LED: Deck A: 1 (blue)", 22 | CNT_INTVAL }, 40262306a36Sopenharmony_ci { "LED: Deck A: 1 (green)", 23 | CNT_INTVAL }, 40362306a36Sopenharmony_ci { "LED: Deck A: 2 (blue)", 20 | CNT_INTVAL }, 40462306a36Sopenharmony_ci { "LED: Deck A: 2 (green)", 21 | CNT_INTVAL }, 40562306a36Sopenharmony_ci { "LED: Deck A: 3 (blue)", 18 | CNT_INTVAL }, 40662306a36Sopenharmony_ci { "LED: Deck A: 3 (green)", 19 | CNT_INTVAL }, 40762306a36Sopenharmony_ci { "LED: Deck A: 4 (blue)", 16 | CNT_INTVAL }, 40862306a36Sopenharmony_ci { "LED: Deck A: 4 (green)", 17 | CNT_INTVAL }, 40962306a36Sopenharmony_ci { "LED: Deck A: Load", 44 | CNT_INTVAL }, 41062306a36Sopenharmony_ci { "LED: Deck A: Deck C button", 45 | CNT_INTVAL }, 41162306a36Sopenharmony_ci { "LED: Deck A: In", 47 | CNT_INTVAL }, 41262306a36Sopenharmony_ci { "LED: Deck A: Out", 46 | CNT_INTVAL }, 41362306a36Sopenharmony_ci { "LED: Deck A: Shift", 24 | CNT_INTVAL }, 41462306a36Sopenharmony_ci { "LED: Deck A: Sync", 27 | CNT_INTVAL }, 41562306a36Sopenharmony_ci { "LED: Deck A: Cue", 26 | CNT_INTVAL }, 41662306a36Sopenharmony_ci { "LED: Deck A: Play", 25 | CNT_INTVAL }, 41762306a36Sopenharmony_ci { "LED: Deck A: Tempo up", 33 | CNT_INTVAL }, 41862306a36Sopenharmony_ci { "LED: Deck A: Tempo down", 32 | CNT_INTVAL }, 41962306a36Sopenharmony_ci { "LED: Deck A: Master", 34 | CNT_INTVAL }, 42062306a36Sopenharmony_ci { "LED: Deck A: Keylock", 35 | CNT_INTVAL }, 42162306a36Sopenharmony_ci { "LED: Deck A: Deck A", 37 | CNT_INTVAL }, 42262306a36Sopenharmony_ci { "LED: Deck A: Deck C", 36 | CNT_INTVAL }, 42362306a36Sopenharmony_ci { "LED: Deck A: Samples", 38 | CNT_INTVAL }, 42462306a36Sopenharmony_ci { "LED: Deck A: On Air", 39 | CNT_INTVAL }, 42562306a36Sopenharmony_ci { "LED: Deck A: Sample 1", 31 | CNT_INTVAL }, 42662306a36Sopenharmony_ci { "LED: Deck A: Sample 2", 30 | CNT_INTVAL }, 42762306a36Sopenharmony_ci { "LED: Deck A: Sample 3", 29 | CNT_INTVAL }, 42862306a36Sopenharmony_ci { "LED: Deck A: Sample 4", 28 | CNT_INTVAL }, 42962306a36Sopenharmony_ci { "LED: Deck A: Digit 1 - A", 55 | CNT_INTVAL }, 43062306a36Sopenharmony_ci { "LED: Deck A: Digit 1 - B", 54 | CNT_INTVAL }, 43162306a36Sopenharmony_ci { "LED: Deck A: Digit 1 - C", 53 | CNT_INTVAL }, 43262306a36Sopenharmony_ci { "LED: Deck A: Digit 1 - D", 52 | CNT_INTVAL }, 43362306a36Sopenharmony_ci { "LED: Deck A: Digit 1 - E", 51 | CNT_INTVAL }, 43462306a36Sopenharmony_ci { "LED: Deck A: Digit 1 - F", 50 | CNT_INTVAL }, 43562306a36Sopenharmony_ci { "LED: Deck A: Digit 1 - G", 49 | CNT_INTVAL }, 43662306a36Sopenharmony_ci { "LED: Deck A: Digit 1 - dot", 48 | CNT_INTVAL }, 43762306a36Sopenharmony_ci { "LED: Deck A: Digit 2 - A", 63 | CNT_INTVAL }, 43862306a36Sopenharmony_ci { "LED: Deck A: Digit 2 - B", 62 | CNT_INTVAL }, 43962306a36Sopenharmony_ci { "LED: Deck A: Digit 2 - C", 61 | CNT_INTVAL }, 44062306a36Sopenharmony_ci { "LED: Deck A: Digit 2 - D", 60 | CNT_INTVAL }, 44162306a36Sopenharmony_ci { "LED: Deck A: Digit 2 - E", 59 | CNT_INTVAL }, 44262306a36Sopenharmony_ci { "LED: Deck A: Digit 2 - F", 58 | CNT_INTVAL }, 44362306a36Sopenharmony_ci { "LED: Deck A: Digit 2 - G", 57 | CNT_INTVAL }, 44462306a36Sopenharmony_ci { "LED: Deck A: Digit 2 - dot", 56 | CNT_INTVAL }, 44562306a36Sopenharmony_ci 44662306a36Sopenharmony_ci { "LED: Deck B: 1 (blue)", 78 | CNT_INTVAL }, 44762306a36Sopenharmony_ci { "LED: Deck B: 1 (green)", 79 | CNT_INTVAL }, 44862306a36Sopenharmony_ci { "LED: Deck B: 2 (blue)", 76 | CNT_INTVAL }, 44962306a36Sopenharmony_ci { "LED: Deck B: 2 (green)", 77 | CNT_INTVAL }, 45062306a36Sopenharmony_ci { "LED: Deck B: 3 (blue)", 74 | CNT_INTVAL }, 45162306a36Sopenharmony_ci { "LED: Deck B: 3 (green)", 75 | CNT_INTVAL }, 45262306a36Sopenharmony_ci { "LED: Deck B: 4 (blue)", 72 | CNT_INTVAL }, 45362306a36Sopenharmony_ci { "LED: Deck B: 4 (green)", 73 | CNT_INTVAL }, 45462306a36Sopenharmony_ci { "LED: Deck B: Load", 180 | CNT_INTVAL }, 45562306a36Sopenharmony_ci { "LED: Deck B: Deck D button", 181 | CNT_INTVAL }, 45662306a36Sopenharmony_ci { "LED: Deck B: In", 183 | CNT_INTVAL }, 45762306a36Sopenharmony_ci { "LED: Deck B: Out", 182 | CNT_INTVAL }, 45862306a36Sopenharmony_ci { "LED: Deck B: Shift", 64 | CNT_INTVAL }, 45962306a36Sopenharmony_ci { "LED: Deck B: Sync", 67 | CNT_INTVAL }, 46062306a36Sopenharmony_ci { "LED: Deck B: Cue", 66 | CNT_INTVAL }, 46162306a36Sopenharmony_ci { "LED: Deck B: Play", 65 | CNT_INTVAL }, 46262306a36Sopenharmony_ci { "LED: Deck B: Tempo up", 185 | CNT_INTVAL }, 46362306a36Sopenharmony_ci { "LED: Deck B: Tempo down", 184 | CNT_INTVAL }, 46462306a36Sopenharmony_ci { "LED: Deck B: Master", 186 | CNT_INTVAL }, 46562306a36Sopenharmony_ci { "LED: Deck B: Keylock", 187 | CNT_INTVAL }, 46662306a36Sopenharmony_ci { "LED: Deck B: Deck B", 189 | CNT_INTVAL }, 46762306a36Sopenharmony_ci { "LED: Deck B: Deck D", 188 | CNT_INTVAL }, 46862306a36Sopenharmony_ci { "LED: Deck B: Samples", 190 | CNT_INTVAL }, 46962306a36Sopenharmony_ci { "LED: Deck B: On Air", 191 | CNT_INTVAL }, 47062306a36Sopenharmony_ci { "LED: Deck B: Sample 1", 71 | CNT_INTVAL }, 47162306a36Sopenharmony_ci { "LED: Deck B: Sample 2", 70 | CNT_INTVAL }, 47262306a36Sopenharmony_ci { "LED: Deck B: Sample 3", 69 | CNT_INTVAL }, 47362306a36Sopenharmony_ci { "LED: Deck B: Sample 4", 68 | CNT_INTVAL }, 47462306a36Sopenharmony_ci { "LED: Deck B: Digit 1 - A", 175 | CNT_INTVAL }, 47562306a36Sopenharmony_ci { "LED: Deck B: Digit 1 - B", 174 | CNT_INTVAL }, 47662306a36Sopenharmony_ci { "LED: Deck B: Digit 1 - C", 173 | CNT_INTVAL }, 47762306a36Sopenharmony_ci { "LED: Deck B: Digit 1 - D", 172 | CNT_INTVAL }, 47862306a36Sopenharmony_ci { "LED: Deck B: Digit 1 - E", 171 | CNT_INTVAL }, 47962306a36Sopenharmony_ci { "LED: Deck B: Digit 1 - F", 170 | CNT_INTVAL }, 48062306a36Sopenharmony_ci { "LED: Deck B: Digit 1 - G", 169 | CNT_INTVAL }, 48162306a36Sopenharmony_ci { "LED: Deck B: Digit 1 - dot", 168 | CNT_INTVAL }, 48262306a36Sopenharmony_ci { "LED: Deck B: Digit 2 - A", 167 | CNT_INTVAL }, 48362306a36Sopenharmony_ci { "LED: Deck B: Digit 2 - B", 166 | CNT_INTVAL }, 48462306a36Sopenharmony_ci { "LED: Deck B: Digit 2 - C", 165 | CNT_INTVAL }, 48562306a36Sopenharmony_ci { "LED: Deck B: Digit 2 - D", 164 | CNT_INTVAL }, 48662306a36Sopenharmony_ci { "LED: Deck B: Digit 2 - E", 163 | CNT_INTVAL }, 48762306a36Sopenharmony_ci { "LED: Deck B: Digit 2 - F", 162 | CNT_INTVAL }, 48862306a36Sopenharmony_ci { "LED: Deck B: Digit 2 - G", 161 | CNT_INTVAL }, 48962306a36Sopenharmony_ci { "LED: Deck B: Digit 2 - dot", 160 | CNT_INTVAL }, 49062306a36Sopenharmony_ci 49162306a36Sopenharmony_ci { "LED: FX1: dry/wet", 153 | CNT_INTVAL }, 49262306a36Sopenharmony_ci { "LED: FX1: 1", 154 | CNT_INTVAL }, 49362306a36Sopenharmony_ci { "LED: FX1: 2", 155 | CNT_INTVAL }, 49462306a36Sopenharmony_ci { "LED: FX1: 3", 156 | CNT_INTVAL }, 49562306a36Sopenharmony_ci { "LED: FX1: Mode", 157 | CNT_INTVAL }, 49662306a36Sopenharmony_ci { "LED: FX2: dry/wet", 129 | CNT_INTVAL }, 49762306a36Sopenharmony_ci { "LED: FX2: 1", 130 | CNT_INTVAL }, 49862306a36Sopenharmony_ci { "LED: FX2: 2", 131 | CNT_INTVAL }, 49962306a36Sopenharmony_ci { "LED: FX2: 3", 132 | CNT_INTVAL }, 50062306a36Sopenharmony_ci { "LED: FX2: Mode", 133 | CNT_INTVAL }, 50162306a36Sopenharmony_ci}; 50262306a36Sopenharmony_ci 50362306a36Sopenharmony_cistatic const struct caiaq_controller maschine_controller[] = { 50462306a36Sopenharmony_ci { "LED: Pad 1", 3 | CNT_INTVAL }, 50562306a36Sopenharmony_ci { "LED: Pad 2", 2 | CNT_INTVAL }, 50662306a36Sopenharmony_ci { "LED: Pad 3", 1 | CNT_INTVAL }, 50762306a36Sopenharmony_ci { "LED: Pad 4", 0 | CNT_INTVAL }, 50862306a36Sopenharmony_ci { "LED: Pad 5", 7 | CNT_INTVAL }, 50962306a36Sopenharmony_ci { "LED: Pad 6", 6 | CNT_INTVAL }, 51062306a36Sopenharmony_ci { "LED: Pad 7", 5 | CNT_INTVAL }, 51162306a36Sopenharmony_ci { "LED: Pad 8", 4 | CNT_INTVAL }, 51262306a36Sopenharmony_ci { "LED: Pad 9", 11 | CNT_INTVAL }, 51362306a36Sopenharmony_ci { "LED: Pad 10", 10 | CNT_INTVAL }, 51462306a36Sopenharmony_ci { "LED: Pad 11", 9 | CNT_INTVAL }, 51562306a36Sopenharmony_ci { "LED: Pad 12", 8 | CNT_INTVAL }, 51662306a36Sopenharmony_ci { "LED: Pad 13", 15 | CNT_INTVAL }, 51762306a36Sopenharmony_ci { "LED: Pad 14", 14 | CNT_INTVAL }, 51862306a36Sopenharmony_ci { "LED: Pad 15", 13 | CNT_INTVAL }, 51962306a36Sopenharmony_ci { "LED: Pad 16", 12 | CNT_INTVAL }, 52062306a36Sopenharmony_ci 52162306a36Sopenharmony_ci { "LED: Mute", 16 | CNT_INTVAL }, 52262306a36Sopenharmony_ci { "LED: Solo", 17 | CNT_INTVAL }, 52362306a36Sopenharmony_ci { "LED: Select", 18 | CNT_INTVAL }, 52462306a36Sopenharmony_ci { "LED: Duplicate", 19 | CNT_INTVAL }, 52562306a36Sopenharmony_ci { "LED: Navigate", 20 | CNT_INTVAL }, 52662306a36Sopenharmony_ci { "LED: Pad Mode", 21 | CNT_INTVAL }, 52762306a36Sopenharmony_ci { "LED: Pattern", 22 | CNT_INTVAL }, 52862306a36Sopenharmony_ci { "LED: Scene", 23 | CNT_INTVAL }, 52962306a36Sopenharmony_ci 53062306a36Sopenharmony_ci { "LED: Shift", 24 | CNT_INTVAL }, 53162306a36Sopenharmony_ci { "LED: Erase", 25 | CNT_INTVAL }, 53262306a36Sopenharmony_ci { "LED: Grid", 26 | CNT_INTVAL }, 53362306a36Sopenharmony_ci { "LED: Right Bottom", 27 | CNT_INTVAL }, 53462306a36Sopenharmony_ci { "LED: Rec", 28 | CNT_INTVAL }, 53562306a36Sopenharmony_ci { "LED: Play", 29 | CNT_INTVAL }, 53662306a36Sopenharmony_ci { "LED: Left Bottom", 32 | CNT_INTVAL }, 53762306a36Sopenharmony_ci { "LED: Restart", 33 | CNT_INTVAL }, 53862306a36Sopenharmony_ci 53962306a36Sopenharmony_ci { "LED: Group A", 41 | CNT_INTVAL }, 54062306a36Sopenharmony_ci { "LED: Group B", 40 | CNT_INTVAL }, 54162306a36Sopenharmony_ci { "LED: Group C", 37 | CNT_INTVAL }, 54262306a36Sopenharmony_ci { "LED: Group D", 36 | CNT_INTVAL }, 54362306a36Sopenharmony_ci { "LED: Group E", 39 | CNT_INTVAL }, 54462306a36Sopenharmony_ci { "LED: Group F", 38 | CNT_INTVAL }, 54562306a36Sopenharmony_ci { "LED: Group G", 35 | CNT_INTVAL }, 54662306a36Sopenharmony_ci { "LED: Group H", 34 | CNT_INTVAL }, 54762306a36Sopenharmony_ci 54862306a36Sopenharmony_ci { "LED: Auto Write", 42 | CNT_INTVAL }, 54962306a36Sopenharmony_ci { "LED: Snap", 43 | CNT_INTVAL }, 55062306a36Sopenharmony_ci { "LED: Right Top", 44 | CNT_INTVAL }, 55162306a36Sopenharmony_ci { "LED: Left Top", 45 | CNT_INTVAL }, 55262306a36Sopenharmony_ci { "LED: Sampling", 46 | CNT_INTVAL }, 55362306a36Sopenharmony_ci { "LED: Browse", 47 | CNT_INTVAL }, 55462306a36Sopenharmony_ci { "LED: Step", 48 | CNT_INTVAL }, 55562306a36Sopenharmony_ci { "LED: Control", 49 | CNT_INTVAL }, 55662306a36Sopenharmony_ci 55762306a36Sopenharmony_ci { "LED: Top Button 1", 57 | CNT_INTVAL }, 55862306a36Sopenharmony_ci { "LED: Top Button 2", 56 | CNT_INTVAL }, 55962306a36Sopenharmony_ci { "LED: Top Button 3", 55 | CNT_INTVAL }, 56062306a36Sopenharmony_ci { "LED: Top Button 4", 54 | CNT_INTVAL }, 56162306a36Sopenharmony_ci { "LED: Top Button 5", 53 | CNT_INTVAL }, 56262306a36Sopenharmony_ci { "LED: Top Button 6", 52 | CNT_INTVAL }, 56362306a36Sopenharmony_ci { "LED: Top Button 7", 51 | CNT_INTVAL }, 56462306a36Sopenharmony_ci { "LED: Top Button 8", 50 | CNT_INTVAL }, 56562306a36Sopenharmony_ci 56662306a36Sopenharmony_ci { "LED: Note Repeat", 58 | CNT_INTVAL }, 56762306a36Sopenharmony_ci 56862306a36Sopenharmony_ci { "Backlight Display", 59 | CNT_INTVAL } 56962306a36Sopenharmony_ci}; 57062306a36Sopenharmony_ci 57162306a36Sopenharmony_cistatic int add_controls(const struct caiaq_controller *c, int num, 57262306a36Sopenharmony_ci struct snd_usb_caiaqdev *cdev) 57362306a36Sopenharmony_ci{ 57462306a36Sopenharmony_ci int i, ret; 57562306a36Sopenharmony_ci struct snd_kcontrol *kc; 57662306a36Sopenharmony_ci 57762306a36Sopenharmony_ci for (i = 0; i < num; i++, c++) { 57862306a36Sopenharmony_ci kcontrol_template.name = c->name; 57962306a36Sopenharmony_ci kcontrol_template.private_value = c->index; 58062306a36Sopenharmony_ci kc = snd_ctl_new1(&kcontrol_template, cdev); 58162306a36Sopenharmony_ci ret = snd_ctl_add(cdev->chip.card, kc); 58262306a36Sopenharmony_ci if (ret < 0) 58362306a36Sopenharmony_ci return ret; 58462306a36Sopenharmony_ci } 58562306a36Sopenharmony_ci 58662306a36Sopenharmony_ci return 0; 58762306a36Sopenharmony_ci} 58862306a36Sopenharmony_ci 58962306a36Sopenharmony_ciint snd_usb_caiaq_control_init(struct snd_usb_caiaqdev *cdev) 59062306a36Sopenharmony_ci{ 59162306a36Sopenharmony_ci int ret = 0; 59262306a36Sopenharmony_ci 59362306a36Sopenharmony_ci switch (cdev->chip.usb_id) { 59462306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_AK1): 59562306a36Sopenharmony_ci ret = add_controls(ak1_controller, 59662306a36Sopenharmony_ci ARRAY_SIZE(ak1_controller), cdev); 59762306a36Sopenharmony_ci break; 59862306a36Sopenharmony_ci 59962306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_RIGKONTROL2): 60062306a36Sopenharmony_ci ret = add_controls(rk2_controller, 60162306a36Sopenharmony_ci ARRAY_SIZE(rk2_controller), cdev); 60262306a36Sopenharmony_ci break; 60362306a36Sopenharmony_ci 60462306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_RIGKONTROL3): 60562306a36Sopenharmony_ci ret = add_controls(rk3_controller, 60662306a36Sopenharmony_ci ARRAY_SIZE(rk3_controller), cdev); 60762306a36Sopenharmony_ci break; 60862306a36Sopenharmony_ci 60962306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER): 61062306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER2): 61162306a36Sopenharmony_ci ret = add_controls(kore_controller, 61262306a36Sopenharmony_ci ARRAY_SIZE(kore_controller), cdev); 61362306a36Sopenharmony_ci break; 61462306a36Sopenharmony_ci 61562306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_AUDIO8DJ): 61662306a36Sopenharmony_ci ret = add_controls(a8dj_controller, 61762306a36Sopenharmony_ci ARRAY_SIZE(a8dj_controller), cdev); 61862306a36Sopenharmony_ci break; 61962306a36Sopenharmony_ci 62062306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_AUDIO4DJ): 62162306a36Sopenharmony_ci ret = add_controls(a4dj_controller, 62262306a36Sopenharmony_ci ARRAY_SIZE(a4dj_controller), cdev); 62362306a36Sopenharmony_ci break; 62462306a36Sopenharmony_ci 62562306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLX1): 62662306a36Sopenharmony_ci ret = add_controls(kontrolx1_controller, 62762306a36Sopenharmony_ci ARRAY_SIZE(kontrolx1_controller), cdev); 62862306a36Sopenharmony_ci break; 62962306a36Sopenharmony_ci 63062306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLS4): 63162306a36Sopenharmony_ci ret = add_controls(kontrols4_controller, 63262306a36Sopenharmony_ci ARRAY_SIZE(kontrols4_controller), cdev); 63362306a36Sopenharmony_ci break; 63462306a36Sopenharmony_ci 63562306a36Sopenharmony_ci case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_MASCHINECONTROLLER): 63662306a36Sopenharmony_ci ret = add_controls(maschine_controller, 63762306a36Sopenharmony_ci ARRAY_SIZE(maschine_controller), cdev); 63862306a36Sopenharmony_ci break; 63962306a36Sopenharmony_ci } 64062306a36Sopenharmony_ci 64162306a36Sopenharmony_ci return ret; 64262306a36Sopenharmony_ci} 64362306a36Sopenharmony_ci 644