139 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef CAIAQ_DEVICE_H3#define CAIAQ_DEVICE_H4 5#include "../usbaudio.h"6 7#define USB_VID_NATIVEINSTRUMENTS 0x17cc8 9#define USB_PID_RIGKONTROL2 0x196910#define USB_PID_RIGKONTROL3 0x194011#define USB_PID_KORECONTROLLER 0x471112#define USB_PID_KORECONTROLLER2 0x471213#define USB_PID_AK1 0x081514#define USB_PID_AUDIO2DJ 0x041c15#define USB_PID_AUDIO4DJ 0x083916#define USB_PID_AUDIO8DJ 0x197817#define USB_PID_SESSIONIO 0x191518#define USB_PID_GUITARRIGMOBILE 0x0d8d19#define USB_PID_TRAKTORKONTROLX1 0x230520#define USB_PID_TRAKTORKONTROLS4 0xbaff21#define USB_PID_TRAKTORAUDIO2 0x041d22#define USB_PID_MASCHINECONTROLLER 0x080823 24#define EP1_BUFSIZE 6425#define EP4_BUFSIZE 51226#define CAIAQ_USB_STR_LEN 0xff27#define MAX_STREAMS 3228 29#define MODNAME "snd-usb-caiaq"30 31#define EP1_CMD_GET_DEVICE_INFO 0x132#define EP1_CMD_READ_ERP 0x233#define EP1_CMD_READ_ANALOG 0x334#define EP1_CMD_READ_IO 0x435#define EP1_CMD_WRITE_IO 0x536#define EP1_CMD_MIDI_READ 0x637#define EP1_CMD_MIDI_WRITE 0x738#define EP1_CMD_AUDIO_PARAMS 0x939#define EP1_CMD_AUTO_MSG 0xb40#define EP1_CMD_DIMM_LEDS 0xc41 42struct caiaq_device_spec {43 unsigned short fw_version;44 unsigned char hw_subtype;45 unsigned char num_erp;46 unsigned char num_analog_in;47 unsigned char num_digital_in;48 unsigned char num_digital_out;49 unsigned char num_analog_audio_out;50 unsigned char num_analog_audio_in;51 unsigned char num_digital_audio_out;52 unsigned char num_digital_audio_in;53 unsigned char num_midi_out;54 unsigned char num_midi_in;55 unsigned char data_alignment;56} __packed;57 58struct snd_usb_caiaq_cb_info;59 60struct snd_usb_caiaqdev {61 struct snd_usb_audio chip;62 63 struct urb ep1_in_urb;64 struct urb midi_out_urb;65 struct urb **data_urbs_in;66 struct urb **data_urbs_out;67 struct snd_usb_caiaq_cb_info *data_cb_info;68 69 unsigned char ep1_in_buf[EP1_BUFSIZE];70 unsigned char ep1_out_buf[EP1_BUFSIZE];71 unsigned char midi_out_buf[EP1_BUFSIZE];72 73 struct caiaq_device_spec spec;74 spinlock_t spinlock;75 wait_queue_head_t ep1_wait_queue;76 wait_queue_head_t prepare_wait_queue;77 int spec_received, audio_parm_answer;78 int midi_out_active;79 80 char vendor_name[CAIAQ_USB_STR_LEN];81 char product_name[CAIAQ_USB_STR_LEN];82 83 int n_streams, n_audio_in, n_audio_out;84 int streaming, first_packet, output_running;85 int audio_in_buf_pos[MAX_STREAMS];86 int audio_out_buf_pos[MAX_STREAMS];87 int period_in_count[MAX_STREAMS];88 int period_out_count[MAX_STREAMS];89 int input_panic, output_panic, warned;90 char *audio_in_buf, *audio_out_buf;91 unsigned int samplerates, bpp;92 unsigned long outurb_active_mask;93 94 struct snd_pcm_substream *sub_playback[MAX_STREAMS];95 struct snd_pcm_substream *sub_capture[MAX_STREAMS];96 97 /* Controls */98 unsigned char control_state[256];99 unsigned char ep8_out_buf[2];100 101 /* Linux input */102#ifdef CONFIG_SND_USB_CAIAQ_INPUT103 struct input_dev *input_dev;104 char phys[64]; /* physical device path */105 unsigned short keycode[128];106 struct urb *ep4_in_urb;107 unsigned char ep4_in_buf[EP4_BUFSIZE];108#endif109 110 /* ALSA */111 struct snd_pcm *pcm;112 struct snd_pcm_hardware pcm_info;113 struct snd_rawmidi *rmidi;114 struct snd_rawmidi_substream *midi_receive_substream;115 struct snd_rawmidi_substream *midi_out_substream;116};117 118struct snd_usb_caiaq_cb_info {119 struct snd_usb_caiaqdev *cdev;120 int index;121};122 123#define caiaqdev(c) ((struct snd_usb_caiaqdev*)(c)->private_data)124#define caiaqdev_to_dev(d) (d->chip.card->dev)125 126int snd_usb_caiaq_set_audio_params (struct snd_usb_caiaqdev *cdev, int rate, int depth, int bbp);127int snd_usb_caiaq_set_auto_msg (struct snd_usb_caiaqdev *cdev, int digital, int analog, int erp);128int snd_usb_caiaq_send_command(struct snd_usb_caiaqdev *cdev,129 unsigned char command,130 const unsigned char *buffer,131 int len);132int snd_usb_caiaq_send_command_bank(struct snd_usb_caiaqdev *cdev,133 unsigned char command,134 unsigned char bank,135 const unsigned char *buffer,136 int len);137 138#endif /* CAIAQ_DEVICE_H */139