| /* |
| * Copyright (c) 2017, The Linux Foundation. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 and |
| * only version 2 as published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * This file holds USB constants and structures defined |
| * by the USB Device Class Definition for Audio Devices in version 3.0. |
| * Comments below reference relevant sections of the documents contained |
| * in http://www.usb.org/developers/docs/devclass_docs/USB_Audio_v3.0.zip |
| */ |
| |
| #ifndef __LINUX_USB_AUDIO_V3_H |
| #define __LINUX_USB_AUDIO_V3_H |
| |
| #include <linux/types.h> |
| |
| #define UAC3_MIXER_UNIT_V3 0x05 |
| #define UAC3_FEATURE_UNIT_V3 0x07 |
| #define UAC3_CLOCK_SOURCE 0x0b |
| |
| #define BADD_MAXPSIZE_SYNC_MONO_16 0x0060 |
| #define BADD_MAXPSIZE_SYNC_MONO_24 0x0090 |
| #define BADD_MAXPSIZE_SYNC_STEREO_16 0x00c0 |
| #define BADD_MAXPSIZE_SYNC_STEREO_24 0x0120 |
| |
| #define BADD_MAXPSIZE_ASYNC_MONO_16 0x0062 |
| #define BADD_MAXPSIZE_ASYNC_MONO_24 0x0093 |
| #define BADD_MAXPSIZE_ASYNC_STEREO_16 0x00c4 |
| #define BADD_MAXPSIZE_ASYNC_STEREO_24 0x0126 |
| |
| #define BIT_RES_16_BIT 0x10 |
| #define BIT_RES_24_BIT 0x18 |
| |
| #define SUBSLOTSIZE_16_BIT 0x02 |
| #define SUBSLOTSIZE_24_BIT 0x03 |
| |
| #define BADD_SAMPLING_RATE 48000 |
| |
| #define NUM_CHANNELS_MONO 1 |
| #define NUM_CHANNELS_STEREO 2 |
| #define BADD_CH_CONFIG_MONO 0 |
| #define BADD_CH_CONFIG_STEREO 3 |
| #define CLUSTER_ID_MONO 0x0001 |
| #define CLUSTER_ID_STEREO 0x0002 |
| |
| #define FULL_ADC_PROFILE 0x01 |
| |
| /* BADD Profile IDs */ |
| #define PROF_GENERIC_IO 0x20 |
| #define PROF_HEADPHONE 0x21 |
| #define PROF_SPEAKER 0x22 |
| #define PROF_MICROPHONE 0x23 |
| #define PROF_HEADSET 0x24 |
| #define PROF_HEADSET_ADAPTER 0x25 |
| #define PROF_SPEAKERPHONE 0x26 |
| |
| /* BADD Entity IDs */ |
| #define BADD_OUT_TERM_ID_BAOF 0x03 |
| #define BADD_OUT_TERM_ID_BAIF 0x06 |
| #define BADD_IN_TERM_ID_BAOF 0x01 |
| #define BADD_IN_TERM_ID_BAIF 0x04 |
| #define BADD_FU_ID_BAOF 0x02 |
| #define BADD_FU_ID_BAIF 0x05 |
| #define BADD_CLOCK_SOURCE 0x09 |
| #define BADD_FU_ID_BAIOF 0x07 |
| #define BADD_MU_ID_BAIOF 0x08 |
| |
| #define UAC_BIDIR_TERMINAL_HEADSET 0x0402 |
| #define UAC_BIDIR_TERMINAL_SPEAKERPHONE 0x0403 |
| |
| #define NUM_BADD_DESCS 7 |
| |
| struct uac3_input_terminal_descriptor { |
| __u8 bLength; |
| __u8 bDescriptorType; |
| __u8 bDescriptorSubtype; |
| __u8 bTerminalID; |
| __u16 wTerminalType; |
| __u8 bAssocTerminal; |
| __u8 bCSourceID; |
| __u32 bmControls; |
| __u16 wClusterDescrID; |
| __u16 wExTerminalDescrID; |
| __u16 wConnectorsDescrID; |
| __u16 wTerminalDescrStr; |
| } __packed; |
| |
| #define UAC3_DT_INPUT_TERMINAL_SIZE 0x14 |
| |
| extern struct uac3_input_terminal_descriptor badd_baif_in_term_desc; |
| extern struct uac3_input_terminal_descriptor badd_baof_in_term_desc; |
| |
| struct uac3_output_terminal_descriptor { |
| __u8 bLength; |
| __u8 bDescriptorType; |
| __u8 bDescriptorSubtype; |
| __u8 bTerminalID; |
| __u16 wTerminalType; |
| __u8 bAssocTerminal; |
| __u8 bSourceID; |
| __u8 bCSourceID; |
| __u32 bmControls; |
| __u16 wExTerminalDescrID; |
| __u16 wConnectorsDescrID; |
| __u16 wTerminalDescrStr; |
| } __packed; |
| |
| #define UAC3_DT_OUTPUT_TERMINAL_SIZE 0x13 |
| |
| extern struct uac3_output_terminal_descriptor badd_baif_out_term_desc; |
| extern struct uac3_output_terminal_descriptor badd_baof_out_term_desc; |
| |
| extern __u8 monoControls[]; |
| extern __u8 stereoControls[]; |
| extern __u8 badd_mu_src_ids[]; |
| |
| struct uac3_mixer_unit_descriptor { |
| __u8 bLength; |
| __u8 bDescriptorType; |
| __u8 bDescriptorSubtype; |
| __u8 bUnitID; |
| __u8 bNrInPins; |
| __u8 *baSourceID; |
| __u16 wClusterDescrID; |
| __u8 bmMixerControls; |
| __u32 bmControls; |
| __u16 wMixerDescrStr; |
| } __packed; |
| |
| #define UAC3_DT_MIXER_UNIT_SIZE 0x10 |
| |
| extern struct uac3_mixer_unit_descriptor badd_baiof_mu_desc; |
| |
| struct uac3_feature_unit_descriptor { |
| __u8 bLength; |
| __u8 bDescriptorType; |
| __u8 bDescriptorSubtype; |
| __u8 bUnitID; |
| __u8 bSourceID; |
| __u8 *bmaControls; |
| __u16 wFeatureDescrStr; |
| } __packed; |
| |
| extern struct uac3_feature_unit_descriptor badd_baif_fu_desc; |
| extern struct uac3_feature_unit_descriptor badd_baof_fu_desc; |
| extern struct uac3_feature_unit_descriptor badd_baiof_fu_desc; |
| |
| struct uac3_clock_source_descriptor { |
| __u8 bLength; |
| __u8 bDescriptorType; |
| __u8 bDescriptorSubtype; |
| __u8 bClockID; |
| __u8 bmAttributes; |
| __u32 bmControls; |
| __u8 bReferenceTerminal; |
| __u16 wClockSourceStr; |
| } __packed; |
| |
| #define UAC3_DT_CLOCK_SRC_SIZE 0x0c |
| |
| extern struct uac3_clock_source_descriptor badd_clock_desc; |
| |
| extern void *badd_desc_list[]; |
| |
| #endif /* __LINUX_USB_AUDIO_V3_H */ |