1 // SPDX-License-Identifier: GPL-2.0+ 1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 2 /* 3 * Copyright (c) 2017 Ruslan Bilovol <ruslan.b 3 * Copyright (c) 2017 Ruslan Bilovol <ruslan.bilovol@gmail.com> 4 * 4 * 5 * This file holds USB constants and structure 5 * This file holds USB constants and structures defined 6 * by the USB DEVICE CLASS DEFINITION FOR AUDI 6 * by the USB DEVICE CLASS DEFINITION FOR AUDIO DEVICES Release 3.0. 7 */ 7 */ 8 8 9 #ifndef __LINUX_USB_AUDIO_V3_H 9 #ifndef __LINUX_USB_AUDIO_V3_H 10 #define __LINUX_USB_AUDIO_V3_H 10 #define __LINUX_USB_AUDIO_V3_H 11 11 12 #include <linux/types.h> 12 #include <linux/types.h> 13 13 14 /* 14 /* 15 * v1.0, v2.0 and v3.0 of this standard have m 15 * v1.0, v2.0 and v3.0 of this standard have many things in common. For the rest 16 * of the definitions, please refer to audio.h 16 * of the definitions, please refer to audio.h and audio-v2.h 17 */ 17 */ 18 18 19 /* All High Capability descriptors have these 19 /* All High Capability descriptors have these 2 fields at the beginning */ 20 struct uac3_hc_descriptor_header { 20 struct uac3_hc_descriptor_header { 21 __le16 wLength; 21 __le16 wLength; 22 __u8 bDescriptorType; 22 __u8 bDescriptorType; 23 __u8 bDescriptorSubtype; 23 __u8 bDescriptorSubtype; 24 __le16 wDescriptorID; 24 __le16 wDescriptorID; 25 } __attribute__ ((packed)); 25 } __attribute__ ((packed)); 26 26 27 /* 4.3.1 CLUSTER DESCRIPTOR HEADER */ 27 /* 4.3.1 CLUSTER DESCRIPTOR HEADER */ 28 struct uac3_cluster_header_descriptor { 28 struct uac3_cluster_header_descriptor { 29 __le16 wLength; 29 __le16 wLength; 30 __u8 bDescriptorType; 30 __u8 bDescriptorType; 31 __u8 bDescriptorSubtype; 31 __u8 bDescriptorSubtype; 32 __le16 wDescriptorID; 32 __le16 wDescriptorID; 33 __u8 bNrChannels; 33 __u8 bNrChannels; 34 } __attribute__ ((packed)); 34 } __attribute__ ((packed)); 35 35 36 /* 4.3.2.1 SEGMENTS */ 36 /* 4.3.2.1 SEGMENTS */ 37 struct uac3_cluster_segment_descriptor { 37 struct uac3_cluster_segment_descriptor { 38 __le16 wLength; 38 __le16 wLength; 39 __u8 bSegmentType; 39 __u8 bSegmentType; 40 /* __u8[0]; segment-specific data */ 40 /* __u8[0]; segment-specific data */ 41 } __attribute__ ((packed)); 41 } __attribute__ ((packed)); 42 42 43 /* 4.3.2.1.1 END SEGMENT */ 43 /* 4.3.2.1.1 END SEGMENT */ 44 struct uac3_cluster_end_segment_descriptor { 44 struct uac3_cluster_end_segment_descriptor { 45 __le16 wLength; 45 __le16 wLength; 46 __u8 bSegmentType; /* Con 46 __u8 bSegmentType; /* Constant END_SEGMENT */ 47 } __attribute__ ((packed)); 47 } __attribute__ ((packed)); 48 48 49 /* 4.3.2.1.3.1 INFORMATION SEGMENT */ 49 /* 4.3.2.1.3.1 INFORMATION SEGMENT */ 50 struct uac3_cluster_information_segment_descri 50 struct uac3_cluster_information_segment_descriptor { 51 __le16 wLength; 51 __le16 wLength; 52 __u8 bSegmentType; 52 __u8 bSegmentType; 53 __u8 bChPurpose; 53 __u8 bChPurpose; 54 __u8 bChRelationship; 54 __u8 bChRelationship; 55 __u8 bChGroupID; 55 __u8 bChGroupID; 56 } __attribute__ ((packed)); 56 } __attribute__ ((packed)); 57 57 58 /* 4.5.2 CLASS-SPECIFIC AC INTERFACE DESCRIPTO 58 /* 4.5.2 CLASS-SPECIFIC AC INTERFACE DESCRIPTOR */ 59 struct uac3_ac_header_descriptor { 59 struct uac3_ac_header_descriptor { 60 __u8 bLength; /* 10 60 __u8 bLength; /* 10 */ 61 __u8 bDescriptorType; /* CS_ 61 __u8 bDescriptorType; /* CS_INTERFACE descriptor type */ 62 __u8 bDescriptorSubtype; /* HEA 62 __u8 bDescriptorSubtype; /* HEADER descriptor subtype */ 63 __u8 bCategory; 63 __u8 bCategory; 64 64 65 /* includes Clock Source, Unit, Termin 65 /* includes Clock Source, Unit, Terminal, and Power Domain desc. */ 66 __le16 wTotalLength; 66 __le16 wTotalLength; 67 67 68 __le32 bmControls; 68 __le32 bmControls; 69 } __attribute__ ((packed)); 69 } __attribute__ ((packed)); 70 70 71 /* 4.5.2.1 INPUT TERMINAL DESCRIPTOR */ 71 /* 4.5.2.1 INPUT TERMINAL DESCRIPTOR */ 72 struct uac3_input_terminal_descriptor { 72 struct uac3_input_terminal_descriptor { 73 __u8 bLength; 73 __u8 bLength; 74 __u8 bDescriptorType; 74 __u8 bDescriptorType; 75 __u8 bDescriptorSubtype; 75 __u8 bDescriptorSubtype; 76 __u8 bTerminalID; 76 __u8 bTerminalID; 77 __le16 wTerminalType; 77 __le16 wTerminalType; 78 __u8 bAssocTerminal; 78 __u8 bAssocTerminal; 79 __u8 bCSourceID; 79 __u8 bCSourceID; 80 __le32 bmControls; 80 __le32 bmControls; 81 __le16 wClusterDescrID; 81 __le16 wClusterDescrID; 82 __le16 wExTerminalDescrID; 82 __le16 wExTerminalDescrID; 83 __le16 wConnectorsDescrID; 83 __le16 wConnectorsDescrID; 84 __le16 wTerminalDescrStr; 84 __le16 wTerminalDescrStr; 85 } __attribute__((packed)); 85 } __attribute__((packed)); 86 86 87 /* 4.5.2.2 OUTPUT TERMINAL DESCRIPTOR */ 87 /* 4.5.2.2 OUTPUT TERMINAL DESCRIPTOR */ 88 struct uac3_output_terminal_descriptor { 88 struct uac3_output_terminal_descriptor { 89 __u8 bLength; 89 __u8 bLength; 90 __u8 bDescriptorType; 90 __u8 bDescriptorType; 91 __u8 bDescriptorSubtype; 91 __u8 bDescriptorSubtype; 92 __u8 bTerminalID; 92 __u8 bTerminalID; 93 __le16 wTerminalType; 93 __le16 wTerminalType; 94 __u8 bAssocTerminal; 94 __u8 bAssocTerminal; 95 __u8 bSourceID; 95 __u8 bSourceID; 96 __u8 bCSourceID; 96 __u8 bCSourceID; 97 __le32 bmControls; 97 __le32 bmControls; 98 __le16 wExTerminalDescrID; 98 __le16 wExTerminalDescrID; 99 __le16 wConnectorsDescrID; 99 __le16 wConnectorsDescrID; 100 __le16 wTerminalDescrStr; 100 __le16 wTerminalDescrStr; 101 } __attribute__((packed)); 101 } __attribute__((packed)); 102 102 103 /* 4.5.2.7 FEATURE UNIT DESCRIPTOR */ 103 /* 4.5.2.7 FEATURE UNIT DESCRIPTOR */ 104 struct uac3_feature_unit_descriptor { 104 struct uac3_feature_unit_descriptor { 105 __u8 bLength; 105 __u8 bLength; 106 __u8 bDescriptorType; 106 __u8 bDescriptorType; 107 __u8 bDescriptorSubtype; 107 __u8 bDescriptorSubtype; 108 __u8 bUnitID; 108 __u8 bUnitID; 109 __u8 bSourceID; 109 __u8 bSourceID; 110 /* bmaControls is actually u32, 110 /* bmaControls is actually u32, 111 * but u8 is needed for the hybrid par 111 * but u8 is needed for the hybrid parser */ 112 __u8 bmaControls[]; /* variable length !! 112 __u8 bmaControls[0]; /* variable length */ 113 /* wFeatureDescrStr omitted */ 113 /* wFeatureDescrStr omitted */ 114 } __attribute__((packed)); 114 } __attribute__((packed)); 115 115 116 #define UAC3_DT_FEATURE_UNIT_SIZE(ch) 116 #define UAC3_DT_FEATURE_UNIT_SIZE(ch) (7 + ((ch) + 1) * 4) 117 117 118 /* As above, but more useful for defining your 118 /* As above, but more useful for defining your own descriptors */ 119 #define DECLARE_UAC3_FEATURE_UNIT_DESCRIPTOR(c 119 #define DECLARE_UAC3_FEATURE_UNIT_DESCRIPTOR(ch) \ 120 struct uac3_feature_unit_descriptor_##ch { 120 struct uac3_feature_unit_descriptor_##ch { \ 121 __u8 bLength; 121 __u8 bLength; \ 122 __u8 bDescriptorType; 122 __u8 bDescriptorType; \ 123 __u8 bDescriptorSubtype; 123 __u8 bDescriptorSubtype; \ 124 __u8 bUnitID; 124 __u8 bUnitID; \ 125 __u8 bSourceID; 125 __u8 bSourceID; \ 126 __le32 bmaControls[ch + 1]; 126 __le32 bmaControls[ch + 1]; \ 127 __le16 wFeatureDescrStr; 127 __le16 wFeatureDescrStr; \ 128 } __attribute__ ((packed)) 128 } __attribute__ ((packed)) 129 129 130 /* 4.5.2.12 CLOCK SOURCE DESCRIPTOR */ 130 /* 4.5.2.12 CLOCK SOURCE DESCRIPTOR */ 131 struct uac3_clock_source_descriptor { 131 struct uac3_clock_source_descriptor { 132 __u8 bLength; 132 __u8 bLength; 133 __u8 bDescriptorType; 133 __u8 bDescriptorType; 134 __u8 bDescriptorSubtype; 134 __u8 bDescriptorSubtype; 135 __u8 bClockID; 135 __u8 bClockID; 136 __u8 bmAttributes; 136 __u8 bmAttributes; 137 __le32 bmControls; 137 __le32 bmControls; 138 __u8 bReferenceTerminal; 138 __u8 bReferenceTerminal; 139 __le16 wClockSourceStr; 139 __le16 wClockSourceStr; 140 } __attribute__((packed)); 140 } __attribute__((packed)); 141 141 142 /* bmAttribute fields */ 142 /* bmAttribute fields */ 143 #define UAC3_CLOCK_SOURCE_TYPE_EXT 0x0 143 #define UAC3_CLOCK_SOURCE_TYPE_EXT 0x0 144 #define UAC3_CLOCK_SOURCE_TYPE_INT 0x1 144 #define UAC3_CLOCK_SOURCE_TYPE_INT 0x1 145 #define UAC3_CLOCK_SOURCE_ASYNC (0 << 145 #define UAC3_CLOCK_SOURCE_ASYNC (0 << 2) 146 #define UAC3_CLOCK_SOURCE_SYNCED_TO_SOF (1 << 146 #define UAC3_CLOCK_SOURCE_SYNCED_TO_SOF (1 << 1) 147 147 148 /* 4.5.2.13 CLOCK SELECTOR DESCRIPTOR */ 148 /* 4.5.2.13 CLOCK SELECTOR DESCRIPTOR */ 149 struct uac3_clock_selector_descriptor { 149 struct uac3_clock_selector_descriptor { 150 __u8 bLength; 150 __u8 bLength; 151 __u8 bDescriptorType; 151 __u8 bDescriptorType; 152 __u8 bDescriptorSubtype; 152 __u8 bDescriptorSubtype; 153 __u8 bClockID; 153 __u8 bClockID; 154 __u8 bNrInPins; 154 __u8 bNrInPins; 155 __u8 baCSourceID[]; 155 __u8 baCSourceID[]; 156 /* bmControls and wCSelectorDescrStr o 156 /* bmControls and wCSelectorDescrStr omitted */ 157 } __attribute__((packed)); 157 } __attribute__((packed)); 158 158 159 /* 4.5.2.14 CLOCK MULTIPLIER DESCRIPTOR */ 159 /* 4.5.2.14 CLOCK MULTIPLIER DESCRIPTOR */ 160 struct uac3_clock_multiplier_descriptor { 160 struct uac3_clock_multiplier_descriptor { 161 __u8 bLength; 161 __u8 bLength; 162 __u8 bDescriptorType; 162 __u8 bDescriptorType; 163 __u8 bDescriptorSubtype; 163 __u8 bDescriptorSubtype; 164 __u8 bClockID; 164 __u8 bClockID; 165 __u8 bCSourceID; 165 __u8 bCSourceID; 166 __le32 bmControls; 166 __le32 bmControls; 167 __le16 wCMultiplierDescrStr; 167 __le16 wCMultiplierDescrStr; 168 } __attribute__((packed)); 168 } __attribute__((packed)); 169 169 170 /* 4.5.2.15 POWER DOMAIN DESCRIPTOR */ 170 /* 4.5.2.15 POWER DOMAIN DESCRIPTOR */ 171 struct uac3_power_domain_descriptor { 171 struct uac3_power_domain_descriptor { 172 __u8 bLength; 172 __u8 bLength; 173 __u8 bDescriptorType; 173 __u8 bDescriptorType; 174 __u8 bDescriptorSubtype; 174 __u8 bDescriptorSubtype; 175 __u8 bPowerDomainID; 175 __u8 bPowerDomainID; 176 __le16 waRecoveryTime1; 176 __le16 waRecoveryTime1; 177 __le16 waRecoveryTime2; 177 __le16 waRecoveryTime2; 178 __u8 bNrEntities; 178 __u8 bNrEntities; 179 __u8 baEntityID[]; 179 __u8 baEntityID[]; 180 /* wPDomainDescrStr omitted */ 180 /* wPDomainDescrStr omitted */ 181 } __attribute__((packed)); 181 } __attribute__((packed)); 182 182 183 /* As above, but more useful for defining your 183 /* As above, but more useful for defining your own descriptors */ 184 #define DECLARE_UAC3_POWER_DOMAIN_DESCRIPTOR(n 184 #define DECLARE_UAC3_POWER_DOMAIN_DESCRIPTOR(n) \ 185 struct uac3_power_domain_descriptor_##n { 185 struct uac3_power_domain_descriptor_##n { \ 186 __u8 bLength; 186 __u8 bLength; \ 187 __u8 bDescriptorType; 187 __u8 bDescriptorType; \ 188 __u8 bDescriptorSubtype; 188 __u8 bDescriptorSubtype; \ 189 __u8 bPowerDomainID; 189 __u8 bPowerDomainID; \ 190 __le16 waRecoveryTime1; 190 __le16 waRecoveryTime1; \ 191 __le16 waRecoveryTime2; 191 __le16 waRecoveryTime2; \ 192 __u8 bNrEntities; 192 __u8 bNrEntities; \ 193 __u8 baEntityID[n]; 193 __u8 baEntityID[n]; \ 194 __le16 wPDomainDescrStr; 194 __le16 wPDomainDescrStr; \ 195 } __attribute__ ((packed)) 195 } __attribute__ ((packed)) 196 196 197 /* 4.7.2 CLASS-SPECIFIC AS INTERFACE DESCRIPTO 197 /* 4.7.2 CLASS-SPECIFIC AS INTERFACE DESCRIPTOR */ 198 struct uac3_as_header_descriptor { 198 struct uac3_as_header_descriptor { 199 __u8 bLength; 199 __u8 bLength; 200 __u8 bDescriptorType; 200 __u8 bDescriptorType; 201 __u8 bDescriptorSubtype; 201 __u8 bDescriptorSubtype; 202 __u8 bTerminalLink; 202 __u8 bTerminalLink; 203 __le32 bmControls; 203 __le32 bmControls; 204 __le16 wClusterDescrID; 204 __le16 wClusterDescrID; 205 __le64 bmFormats; 205 __le64 bmFormats; 206 __u8 bSubslotSize; 206 __u8 bSubslotSize; 207 __u8 bBitResolution; 207 __u8 bBitResolution; 208 __le16 bmAuxProtocols; 208 __le16 bmAuxProtocols; 209 __u8 bControlSize; 209 __u8 bControlSize; 210 } __attribute__((packed)); 210 } __attribute__((packed)); 211 211 212 #define UAC3_FORMAT_TYPE_I_RAW_DATA (1 << 212 #define UAC3_FORMAT_TYPE_I_RAW_DATA (1 << 6) 213 213 214 /* 4.8.1.2 CLASS-SPECIFIC AS ISOCHRONOUS AUDIO 214 /* 4.8.1.2 CLASS-SPECIFIC AS ISOCHRONOUS AUDIO DATA ENDPOINT DESCRIPTOR */ 215 struct uac3_iso_endpoint_descriptor { 215 struct uac3_iso_endpoint_descriptor { 216 __u8 bLength; 216 __u8 bLength; 217 __u8 bDescriptorType; 217 __u8 bDescriptorType; 218 __u8 bDescriptorSubtype; 218 __u8 bDescriptorSubtype; 219 __le32 bmControls; 219 __le32 bmControls; 220 __u8 bLockDelayUnits; 220 __u8 bLockDelayUnits; 221 __le16 wLockDelay; 221 __le16 wLockDelay; 222 } __attribute__((packed)); 222 } __attribute__((packed)); 223 223 224 /* 5.2.1.6.1 INSERTION CONTROL PARAMETER BLOCK << 225 struct uac3_insertion_ctl_blk { << 226 __u8 bSize; << 227 __u8 bmConInserted; << 228 } __attribute__ ((packed)); << 229 << 230 /* 6.1 INTERRUPT DATA MESSAGE */ 224 /* 6.1 INTERRUPT DATA MESSAGE */ 231 struct uac3_interrupt_data_msg { 225 struct uac3_interrupt_data_msg { 232 __u8 bInfo; 226 __u8 bInfo; 233 __u8 bSourceType; 227 __u8 bSourceType; 234 __le16 wValue; 228 __le16 wValue; 235 __le16 wIndex; 229 __le16 wIndex; 236 } __attribute__((packed)); 230 } __attribute__((packed)); 237 231 238 /* A.2 AUDIO AUDIO FUNCTION SUBCLASS CODES */ 232 /* A.2 AUDIO AUDIO FUNCTION SUBCLASS CODES */ 239 #define UAC3_FUNCTION_SUBCLASS_UNDEFINED 233 #define UAC3_FUNCTION_SUBCLASS_UNDEFINED 0x00 240 #define UAC3_FUNCTION_SUBCLASS_FULL_ADC_3_0 234 #define UAC3_FUNCTION_SUBCLASS_FULL_ADC_3_0 0x01 241 /* BADD profiles */ 235 /* BADD profiles */ 242 #define UAC3_FUNCTION_SUBCLASS_GENERIC_IO 236 #define UAC3_FUNCTION_SUBCLASS_GENERIC_IO 0x20 243 #define UAC3_FUNCTION_SUBCLASS_HEADPHONE 237 #define UAC3_FUNCTION_SUBCLASS_HEADPHONE 0x21 244 #define UAC3_FUNCTION_SUBCLASS_SPEAKER 238 #define UAC3_FUNCTION_SUBCLASS_SPEAKER 0x22 245 #define UAC3_FUNCTION_SUBCLASS_MICROPHONE 239 #define UAC3_FUNCTION_SUBCLASS_MICROPHONE 0x23 246 #define UAC3_FUNCTION_SUBCLASS_HEADSET 240 #define UAC3_FUNCTION_SUBCLASS_HEADSET 0x24 247 #define UAC3_FUNCTION_SUBCLASS_HEADSET_ADAPTER 241 #define UAC3_FUNCTION_SUBCLASS_HEADSET_ADAPTER 0x25 248 #define UAC3_FUNCTION_SUBCLASS_SPEAKERPHONE 242 #define UAC3_FUNCTION_SUBCLASS_SPEAKERPHONE 0x26 249 243 250 /* A.7 AUDIO FUNCTION CATEGORY CODES */ 244 /* A.7 AUDIO FUNCTION CATEGORY CODES */ 251 #define UAC3_FUNCTION_SUBCLASS_UNDEFINED 245 #define UAC3_FUNCTION_SUBCLASS_UNDEFINED 0x00 252 #define UAC3_FUNCTION_DESKTOP_SPEAKER 246 #define UAC3_FUNCTION_DESKTOP_SPEAKER 0x01 253 #define UAC3_FUNCTION_HOME_THEATER 247 #define UAC3_FUNCTION_HOME_THEATER 0x02 254 #define UAC3_FUNCTION_MICROPHONE 248 #define UAC3_FUNCTION_MICROPHONE 0x03 255 #define UAC3_FUNCTION_HEADSET 249 #define UAC3_FUNCTION_HEADSET 0x04 256 #define UAC3_FUNCTION_TELEPHONE 250 #define UAC3_FUNCTION_TELEPHONE 0x05 257 #define UAC3_FUNCTION_CONVERTER 251 #define UAC3_FUNCTION_CONVERTER 0x06 258 #define UAC3_FUNCTION_SOUND_RECORDER 252 #define UAC3_FUNCTION_SOUND_RECORDER 0x07 259 #define UAC3_FUNCTION_IO_BOX 253 #define UAC3_FUNCTION_IO_BOX 0x08 260 #define UAC3_FUNCTION_MUSICAL_INSTRUMENT 254 #define UAC3_FUNCTION_MUSICAL_INSTRUMENT 0x09 261 #define UAC3_FUNCTION_PRO_AUDIO 255 #define UAC3_FUNCTION_PRO_AUDIO 0x0a 262 #define UAC3_FUNCTION_AUDIO_VIDEO 256 #define UAC3_FUNCTION_AUDIO_VIDEO 0x0b 263 #define UAC3_FUNCTION_CONTROL_PANEL 257 #define UAC3_FUNCTION_CONTROL_PANEL 0x0c 264 #define UAC3_FUNCTION_HEADPHONE 258 #define UAC3_FUNCTION_HEADPHONE 0x0d 265 #define UAC3_FUNCTION_GENERIC_SPEAKER 259 #define UAC3_FUNCTION_GENERIC_SPEAKER 0x0e 266 #define UAC3_FUNCTION_HEADSET_ADAPTER 260 #define UAC3_FUNCTION_HEADSET_ADAPTER 0x0f 267 #define UAC3_FUNCTION_SPEAKERPHONE 261 #define UAC3_FUNCTION_SPEAKERPHONE 0x10 268 #define UAC3_FUNCTION_OTHER 262 #define UAC3_FUNCTION_OTHER 0xff 269 263 270 /* A.8 AUDIO CLASS-SPECIFIC DESCRIPTOR TYPES * 264 /* A.8 AUDIO CLASS-SPECIFIC DESCRIPTOR TYPES */ 271 #define UAC3_CS_UNDEFINED 0x20 265 #define UAC3_CS_UNDEFINED 0x20 272 #define UAC3_CS_DEVICE 0x21 266 #define UAC3_CS_DEVICE 0x21 273 #define UAC3_CS_CONFIGURATION 0x22 267 #define UAC3_CS_CONFIGURATION 0x22 274 #define UAC3_CS_STRING 0x23 268 #define UAC3_CS_STRING 0x23 275 #define UAC3_CS_INTERFACE 0x24 269 #define UAC3_CS_INTERFACE 0x24 276 #define UAC3_CS_ENDPOINT 0x25 270 #define UAC3_CS_ENDPOINT 0x25 277 #define UAC3_CS_CLUSTER 0x26 271 #define UAC3_CS_CLUSTER 0x26 278 272 279 /* A.10 CLUSTER DESCRIPTOR SEGMENT TYPES */ 273 /* A.10 CLUSTER DESCRIPTOR SEGMENT TYPES */ 280 #define UAC3_SEGMENT_UNDEFINED 0x00 274 #define UAC3_SEGMENT_UNDEFINED 0x00 281 #define UAC3_CLUSTER_DESCRIPTION 0x01 275 #define UAC3_CLUSTER_DESCRIPTION 0x01 282 #define UAC3_CLUSTER_VENDOR_DEFINED 0x1F 276 #define UAC3_CLUSTER_VENDOR_DEFINED 0x1F 283 #define UAC3_CHANNEL_INFORMATION 0x20 277 #define UAC3_CHANNEL_INFORMATION 0x20 284 #define UAC3_CHANNEL_AMBISONIC 0x21 278 #define UAC3_CHANNEL_AMBISONIC 0x21 285 #define UAC3_CHANNEL_DESCRIPTION 0x22 279 #define UAC3_CHANNEL_DESCRIPTION 0x22 286 #define UAC3_CHANNEL_VENDOR_DEFINED 0xFE 280 #define UAC3_CHANNEL_VENDOR_DEFINED 0xFE 287 #define UAC3_END_SEGMENT 0xFF 281 #define UAC3_END_SEGMENT 0xFF 288 282 289 /* A.11 CHANNEL PURPOSE DEFINITIONS */ 283 /* A.11 CHANNEL PURPOSE DEFINITIONS */ 290 #define UAC3_PURPOSE_UNDEFINED 0x00 284 #define UAC3_PURPOSE_UNDEFINED 0x00 291 #define UAC3_PURPOSE_GENERIC_AUDIO 0x01 285 #define UAC3_PURPOSE_GENERIC_AUDIO 0x01 292 #define UAC3_PURPOSE_VOICE 0x02 286 #define UAC3_PURPOSE_VOICE 0x02 293 #define UAC3_PURPOSE_SPEECH 0x03 287 #define UAC3_PURPOSE_SPEECH 0x03 294 #define UAC3_PURPOSE_AMBIENT 0x04 288 #define UAC3_PURPOSE_AMBIENT 0x04 295 #define UAC3_PURPOSE_REFERENCE 0x05 289 #define UAC3_PURPOSE_REFERENCE 0x05 296 #define UAC3_PURPOSE_ULTRASONIC 0x06 290 #define UAC3_PURPOSE_ULTRASONIC 0x06 297 #define UAC3_PURPOSE_VIBROKINETIC 0x07 291 #define UAC3_PURPOSE_VIBROKINETIC 0x07 298 #define UAC3_PURPOSE_NON_AUDIO 0xFF 292 #define UAC3_PURPOSE_NON_AUDIO 0xFF 299 293 300 /* A.12 CHANNEL RELATIONSHIP DEFINITIONS */ 294 /* A.12 CHANNEL RELATIONSHIP DEFINITIONS */ 301 #define UAC3_CH_RELATIONSHIP_UNDEFINED 0x00 295 #define UAC3_CH_RELATIONSHIP_UNDEFINED 0x00 302 #define UAC3_CH_MONO 0x01 296 #define UAC3_CH_MONO 0x01 303 #define UAC3_CH_LEFT 0x02 297 #define UAC3_CH_LEFT 0x02 304 #define UAC3_CH_RIGHT 0x03 298 #define UAC3_CH_RIGHT 0x03 305 #define UAC3_CH_ARRAY 0x04 299 #define UAC3_CH_ARRAY 0x04 306 #define UAC3_CH_PATTERN_X 0x20 300 #define UAC3_CH_PATTERN_X 0x20 307 #define UAC3_CH_PATTERN_Y 0x21 301 #define UAC3_CH_PATTERN_Y 0x21 308 #define UAC3_CH_PATTERN_A 0x22 302 #define UAC3_CH_PATTERN_A 0x22 309 #define UAC3_CH_PATTERN_B 0x23 303 #define UAC3_CH_PATTERN_B 0x23 310 #define UAC3_CH_PATTERN_M 0x24 304 #define UAC3_CH_PATTERN_M 0x24 311 #define UAC3_CH_PATTERN_S 0x25 305 #define UAC3_CH_PATTERN_S 0x25 312 #define UAC3_CH_FRONT_LEFT 0x80 306 #define UAC3_CH_FRONT_LEFT 0x80 313 #define UAC3_CH_FRONT_RIGHT 0x81 307 #define UAC3_CH_FRONT_RIGHT 0x81 314 #define UAC3_CH_FRONT_CENTER 0x82 308 #define UAC3_CH_FRONT_CENTER 0x82 315 #define UAC3_CH_FRONT_LEFT_OF_CENTER 0x83 309 #define UAC3_CH_FRONT_LEFT_OF_CENTER 0x83 316 #define UAC3_CH_FRONT_RIGHT_OF_CENTER 0x84 310 #define UAC3_CH_FRONT_RIGHT_OF_CENTER 0x84 317 #define UAC3_CH_FRONT_WIDE_LEFT 0x85 311 #define UAC3_CH_FRONT_WIDE_LEFT 0x85 318 #define UAC3_CH_FRONT_WIDE_RIGHT 0x86 312 #define UAC3_CH_FRONT_WIDE_RIGHT 0x86 319 #define UAC3_CH_SIDE_LEFT 0x87 313 #define UAC3_CH_SIDE_LEFT 0x87 320 #define UAC3_CH_SIDE_RIGHT 0x88 314 #define UAC3_CH_SIDE_RIGHT 0x88 321 #define UAC3_CH_SURROUND_ARRAY_LEFT 0x89 315 #define UAC3_CH_SURROUND_ARRAY_LEFT 0x89 322 #define UAC3_CH_SURROUND_ARRAY_RIGHT 0x8A 316 #define UAC3_CH_SURROUND_ARRAY_RIGHT 0x8A 323 #define UAC3_CH_BACK_LEFT 0x8B 317 #define UAC3_CH_BACK_LEFT 0x8B 324 #define UAC3_CH_BACK_RIGHT 0x8C 318 #define UAC3_CH_BACK_RIGHT 0x8C 325 #define UAC3_CH_BACK_CENTER 0x8D 319 #define UAC3_CH_BACK_CENTER 0x8D 326 #define UAC3_CH_BACK_LEFT_OF_CENTER 0x8E 320 #define UAC3_CH_BACK_LEFT_OF_CENTER 0x8E 327 #define UAC3_CH_BACK_RIGHT_OF_CENTER 0x8F 321 #define UAC3_CH_BACK_RIGHT_OF_CENTER 0x8F 328 #define UAC3_CH_BACK_WIDE_LEFT 0x90 322 #define UAC3_CH_BACK_WIDE_LEFT 0x90 329 #define UAC3_CH_BACK_WIDE_RIGHT 0x91 323 #define UAC3_CH_BACK_WIDE_RIGHT 0x91 330 #define UAC3_CH_TOP_CENTER 0x92 324 #define UAC3_CH_TOP_CENTER 0x92 331 #define UAC3_CH_TOP_FRONT_LEFT 0x93 325 #define UAC3_CH_TOP_FRONT_LEFT 0x93 332 #define UAC3_CH_TOP_FRONT_RIGHT 0x94 326 #define UAC3_CH_TOP_FRONT_RIGHT 0x94 333 #define UAC3_CH_TOP_FRONT_CENTER 0x95 327 #define UAC3_CH_TOP_FRONT_CENTER 0x95 334 #define UAC3_CH_TOP_FRONT_LOC 0x96 328 #define UAC3_CH_TOP_FRONT_LOC 0x96 335 #define UAC3_CH_TOP_FRONT_ROC 0x97 329 #define UAC3_CH_TOP_FRONT_ROC 0x97 336 #define UAC3_CH_TOP_FRONT_WIDE_LEFT 0x98 330 #define UAC3_CH_TOP_FRONT_WIDE_LEFT 0x98 337 #define UAC3_CH_TOP_FRONT_WIDE_RIGHT 0x99 331 #define UAC3_CH_TOP_FRONT_WIDE_RIGHT 0x99 338 #define UAC3_CH_TOP_SIDE_LEFT 0x9A 332 #define UAC3_CH_TOP_SIDE_LEFT 0x9A 339 #define UAC3_CH_TOP_SIDE_RIGHT 0x9B 333 #define UAC3_CH_TOP_SIDE_RIGHT 0x9B 340 #define UAC3_CH_TOP_SURR_ARRAY_LEFT 0x9C 334 #define UAC3_CH_TOP_SURR_ARRAY_LEFT 0x9C 341 #define UAC3_CH_TOP_SURR_ARRAY_RIGHT 0x9D 335 #define UAC3_CH_TOP_SURR_ARRAY_RIGHT 0x9D 342 #define UAC3_CH_TOP_BACK_LEFT 0x9E 336 #define UAC3_CH_TOP_BACK_LEFT 0x9E 343 #define UAC3_CH_TOP_BACK_RIGHT 0x9F 337 #define UAC3_CH_TOP_BACK_RIGHT 0x9F 344 #define UAC3_CH_TOP_BACK_CENTER 0xA0 338 #define UAC3_CH_TOP_BACK_CENTER 0xA0 345 #define UAC3_CH_TOP_BACK_LOC 0xA1 339 #define UAC3_CH_TOP_BACK_LOC 0xA1 346 #define UAC3_CH_TOP_BACK_ROC 0xA2 340 #define UAC3_CH_TOP_BACK_ROC 0xA2 347 #define UAC3_CH_TOP_BACK_WIDE_LEFT 0xA3 341 #define UAC3_CH_TOP_BACK_WIDE_LEFT 0xA3 348 #define UAC3_CH_TOP_BACK_WIDE_RIGHT 0xA4 342 #define UAC3_CH_TOP_BACK_WIDE_RIGHT 0xA4 349 #define UAC3_CH_BOTTOM_CENTER 0xA5 343 #define UAC3_CH_BOTTOM_CENTER 0xA5 350 #define UAC3_CH_BOTTOM_FRONT_LEFT 0xA6 344 #define UAC3_CH_BOTTOM_FRONT_LEFT 0xA6 351 #define UAC3_CH_BOTTOM_FRONT_RIGHT 0xA7 345 #define UAC3_CH_BOTTOM_FRONT_RIGHT 0xA7 352 #define UAC3_CH_BOTTOM_FRONT_CENTER 0xA8 346 #define UAC3_CH_BOTTOM_FRONT_CENTER 0xA8 353 #define UAC3_CH_BOTTOM_FRONT_LOC 0xA9 347 #define UAC3_CH_BOTTOM_FRONT_LOC 0xA9 354 #define UAC3_CH_BOTTOM_FRONT_ROC 0xAA 348 #define UAC3_CH_BOTTOM_FRONT_ROC 0xAA 355 #define UAC3_CH_BOTTOM_FRONT_WIDE_LEFT 0xAB 349 #define UAC3_CH_BOTTOM_FRONT_WIDE_LEFT 0xAB 356 #define UAC3_CH_BOTTOM_FRONT_WIDE_RIGHT 0xAC 350 #define UAC3_CH_BOTTOM_FRONT_WIDE_RIGHT 0xAC 357 #define UAC3_CH_BOTTOM_SIDE_LEFT 0xAD 351 #define UAC3_CH_BOTTOM_SIDE_LEFT 0xAD 358 #define UAC3_CH_BOTTOM_SIDE_RIGHT 0xAE 352 #define UAC3_CH_BOTTOM_SIDE_RIGHT 0xAE 359 #define UAC3_CH_BOTTOM_SURR_ARRAY_LEFT 0xAF 353 #define UAC3_CH_BOTTOM_SURR_ARRAY_LEFT 0xAF 360 #define UAC3_CH_BOTTOM_SURR_ARRAY_RIGHT 0xB0 354 #define UAC3_CH_BOTTOM_SURR_ARRAY_RIGHT 0xB0 361 #define UAC3_CH_BOTTOM_BACK_LEFT 0xB1 355 #define UAC3_CH_BOTTOM_BACK_LEFT 0xB1 362 #define UAC3_CH_BOTTOM_BACK_RIGHT 0xB2 356 #define UAC3_CH_BOTTOM_BACK_RIGHT 0xB2 363 #define UAC3_CH_BOTTOM_BACK_CENTER 0xB3 357 #define UAC3_CH_BOTTOM_BACK_CENTER 0xB3 364 #define UAC3_CH_BOTTOM_BACK_LOC 0xB4 358 #define UAC3_CH_BOTTOM_BACK_LOC 0xB4 365 #define UAC3_CH_BOTTOM_BACK_ROC 0xB5 359 #define UAC3_CH_BOTTOM_BACK_ROC 0xB5 366 #define UAC3_CH_BOTTOM_BACK_WIDE_LEFT 0xB6 360 #define UAC3_CH_BOTTOM_BACK_WIDE_LEFT 0xB6 367 #define UAC3_CH_BOTTOM_BACK_WIDE_RIGHT 0xB7 361 #define UAC3_CH_BOTTOM_BACK_WIDE_RIGHT 0xB7 368 #define UAC3_CH_LOW_FREQUENCY_EFFECTS 0xB8 362 #define UAC3_CH_LOW_FREQUENCY_EFFECTS 0xB8 369 #define UAC3_CH_LFE_LEFT 0xB9 363 #define UAC3_CH_LFE_LEFT 0xB9 370 #define UAC3_CH_LFE_RIGHT 0xBA 364 #define UAC3_CH_LFE_RIGHT 0xBA 371 #define UAC3_CH_HEADPHONE_LEFT 0xBB 365 #define UAC3_CH_HEADPHONE_LEFT 0xBB 372 #define UAC3_CH_HEADPHONE_RIGHT 0xBC 366 #define UAC3_CH_HEADPHONE_RIGHT 0xBC 373 367 374 /* A.15 AUDIO CLASS-SPECIFIC AC INTERFACE DESC 368 /* A.15 AUDIO CLASS-SPECIFIC AC INTERFACE DESCRIPTOR SUBTYPES */ 375 /* see audio.h for the rest, which is identica 369 /* see audio.h for the rest, which is identical to v1 */ 376 #define UAC3_EXTENDED_TERMINAL 0x04 370 #define UAC3_EXTENDED_TERMINAL 0x04 377 #define UAC3_MIXER_UNIT 0x05 371 #define UAC3_MIXER_UNIT 0x05 378 #define UAC3_SELECTOR_UNIT 0x06 372 #define UAC3_SELECTOR_UNIT 0x06 379 #define UAC3_FEATURE_UNIT 0x07 373 #define UAC3_FEATURE_UNIT 0x07 380 #define UAC3_EFFECT_UNIT 0x08 374 #define UAC3_EFFECT_UNIT 0x08 381 #define UAC3_PROCESSING_UNIT 0x09 375 #define UAC3_PROCESSING_UNIT 0x09 382 #define UAC3_EXTENSION_UNIT 0x0a 376 #define UAC3_EXTENSION_UNIT 0x0a 383 #define UAC3_CLOCK_SOURCE 0x0b 377 #define UAC3_CLOCK_SOURCE 0x0b 384 #define UAC3_CLOCK_SELECTOR 0x0c 378 #define UAC3_CLOCK_SELECTOR 0x0c 385 #define UAC3_CLOCK_MULTIPLIER 0x0d 379 #define UAC3_CLOCK_MULTIPLIER 0x0d 386 #define UAC3_SAMPLE_RATE_CONVERTER 0x0e 380 #define UAC3_SAMPLE_RATE_CONVERTER 0x0e 387 #define UAC3_CONNECTORS 0x0f 381 #define UAC3_CONNECTORS 0x0f 388 #define UAC3_POWER_DOMAIN 0x10 382 #define UAC3_POWER_DOMAIN 0x10 389 383 390 /* A.20 PROCESSING UNIT PROCESS TYPES */ << 391 #define UAC3_PROCESS_UNDEFINED 0x00 << 392 #define UAC3_PROCESS_UP_DOWNMIX 0x01 << 393 #define UAC3_PROCESS_STEREO_EXTENDER 0x02 << 394 #define UAC3_PROCESS_MULTI_FUNCTION 0x03 << 395 << 396 /* A.22 AUDIO CLASS-SPECIFIC REQUEST CODES */ 384 /* A.22 AUDIO CLASS-SPECIFIC REQUEST CODES */ 397 /* see audio-v2.h for the rest, which is ident 385 /* see audio-v2.h for the rest, which is identical to v2 */ 398 #define UAC3_CS_REQ_INTEN 386 #define UAC3_CS_REQ_INTEN 0x04 399 #define UAC3_CS_REQ_STRING 387 #define UAC3_CS_REQ_STRING 0x05 400 #define UAC3_CS_REQ_HIGH_CAPABILITY_DESCRIPTOR 388 #define UAC3_CS_REQ_HIGH_CAPABILITY_DESCRIPTOR 0x06 401 389 402 /* A.23.1 AUDIOCONTROL INTERFACE CONTROL SELEC 390 /* A.23.1 AUDIOCONTROL INTERFACE CONTROL SELECTORS */ 403 #define UAC3_AC_CONTROL_UNDEFINED 391 #define UAC3_AC_CONTROL_UNDEFINED 0x00 404 #define UAC3_AC_ACTIVE_INTERFACE_CONTROL 392 #define UAC3_AC_ACTIVE_INTERFACE_CONTROL 0x01 405 #define UAC3_AC_POWER_DOMAIN_CONTROL 393 #define UAC3_AC_POWER_DOMAIN_CONTROL 0x02 406 << 407 /* A.23.5 TERMINAL CONTROL SELECTORS */ << 408 #define UAC3_TE_UNDEFINED << 409 #define UAC3_TE_INSERTION << 410 #define UAC3_TE_OVERLOAD << 411 #define UAC3_TE_UNDERFLOW << 412 #define UAC3_TE_OVERFLOW << 413 #define UAC3_TE_LATENCY << 414 << 415 /* A.23.10 PROCESSING UNITS CONTROL SELECTROS << 416 << 417 /* Up/Down Mixer */ << 418 #define UAC3_UD_MODE_SELECT << 419 << 420 /* Stereo Extender */ << 421 #define UAC3_EXT_WIDTH_CONTROL << 422 << 423 << 424 /* BADD predefined Unit/Terminal values */ << 425 #define UAC3_BADD_IT_ID1 1 /* Input Te << 426 #define UAC3_BADD_FU_ID2 2 /* Feature << 427 #define UAC3_BADD_OT_ID3 3 /* Output T << 428 #define UAC3_BADD_IT_ID4 4 /* Input Te << 429 #define UAC3_BADD_FU_ID5 5 /* Feature << 430 #define UAC3_BADD_OT_ID6 6 /* Output T << 431 #define UAC3_BADD_FU_ID7 7 /* Feature << 432 #define UAC3_BADD_MU_ID8 8 /* Mixer Un << 433 #define UAC3_BADD_CS_ID9 9 /* Clock So << 434 #define UAC3_BADD_PD_ID10 10 /* Power Do << 435 #define UAC3_BADD_PD_ID11 11 /* Power Do << 436 << 437 /* BADD wMaxPacketSize of AS endpoints */ << 438 #define UAC3_BADD_EP_MAXPSIZE_SYNC_MONO_16 << 439 #define UAC3_BADD_EP_MAXPSIZE_ASYNC_MONO_16 << 440 #define UAC3_BADD_EP_MAXPSIZE_SYNC_MONO_24 << 441 #define UAC3_BADD_EP_MAXPSIZE_ASYNC_MONO_24 << 442 #define UAC3_BADD_EP_MAXPSIZE_SYNC_STEREO_16 << 443 #define UAC3_BADD_EP_MAXPSIZE_ASYNC_STEREO_16 << 444 #define UAC3_BADD_EP_MAXPSIZE_SYNC_STEREO_24 << 445 #define UAC3_BADD_EP_MAXPSIZE_ASYNC_STEREO_24 << 446 << 447 /* BADD sample rate is always fixed to 48kHz * << 448 #define UAC3_BADD_SAMPLING_RATE << 449 << 450 /* BADD power domains recovery times in 50us i << 451 #define UAC3_BADD_PD_RECOVER_D1D0 << 452 #define UAC3_BADD_PD_RECOVER_D2D0 << 453 394 454 #endif /* __LINUX_USB_AUDIO_V3_H */ 395 #endif /* __LINUX_USB_AUDIO_V3_H */ 455 396
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.