1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
|
/* $NetBSD: hdaudioreg.h,v 1.4 2022/03/21 09:12:10 jmcneill Exp $ */
/*
* Copyright (c) 2009 Precedence Technologies Ltd <support@precedence.co.uk>
* Copyright (c) 2009 Jared D. McNeill <jmcneill@invisible.ca>
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Precedence Technologies Ltd
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef _HDAUDIOREG_H
#define _HDAUDIOREG_H
#include <sys/cdefs.h>
#include <sys/types.h>
/*
* High Definition Audio Memory Mapped Configuration Registers
*/
#define HDAUDIO_MMIO_GCAP 0x000
#define HDAUDIO_GCAP_64OK(x) ((x) & 1)
#define HDAUDIO_GCAP_NSDO(x) ((((x) & 6) != 0) ? ((x) & 6) : 1)
#define HDAUDIO_GCAP_BSS(x) (((x) >> 3) & 0x1f)
#define HDAUDIO_GCAP_ISS(x) (((x) >> 8) & 0x0f)
#define HDAUDIO_GCAP_OSS(x) (((x) >> 12) & 0x0f)
#define HDAUDIO_MMIO_VMIN 0x002
#define HDAUDIO_MMIO_VMAJ 0x003
#define HDAUDIO_MMIO_OUTPAY 0x004
#define HDAUDIO_MMIO_INPAY 0x006
#define HDAUDIO_MMIO_GCTL 0x008
#define HDAUDIO_GCTL_UNSOL_EN (1 << 8)
#define HDAUDIO_GCTL_FLUSH_CTL (1 << 1)
#define HDAUDIO_GCTL_CRST (1 << 0)
#define HDAUDIO_MMIO_WAKEEN 0x00c
#define HDAUDIO_MMIO_STATESTS 0x00e
#define HDAUDIO_STATESTS_SDIWAKE 0x7fff
#define HDAUDIO_MMIO_GSTS 0x010
#define HDAUDIO_MMIO_INTCTL 0x020
#define HDAUDIO_INTCTL_GIE (1u << 31)
#define HDAUDIO_INTCTL_CIE (1 << 30)
#define HDAUDIO_MMIO_INTSTS 0x024
#define HDAUDIO_INTSTS_GIS (1u << 31)
#define HDAUDIO_INTSTS_CIS (1 << 30)
#define HDAUDIO_INTSTS_SIS_MASK 0x3fffffff
#define HDAUDIO_MMIO_WALCLK 0x030
#define HDAUDIO_MMIO_SYNC 0x034
#define HDAUDIO_MMIO_CORBLBASE 0x040
#define HDAUDIO_MMIO_CORBUBASE 0x044
#define HDAUDIO_MMIO_CORBWP 0x048
#define HDAUDIO_MMIO_CORBRP 0x04a
#define HDAUDIO_CORBRP_RP_RESET (1 << 15)
#define HDAUDIO_MMIO_CORBCTL 0x04c
#define HDAUDIO_CORBCTL_RUN (1 << 1)
#define HDAUDIO_CORBCTL_CMEI_EN (1 << 0)
#define HDAUDIO_MMIO_CORBST 0x04d
#define HDAUDIO_MMIO_CORBSIZE 0x04e
#define HDAUDIO_MMIO_RIRBLBASE 0x050
#define HDAUDIO_MMIO_RIRBUBASE 0x054
#define HDAUDIO_MMIO_RIRBWP 0x058
#define HDAUDIO_RIRBWP_WP_RESET (1 << 15)
#define HDAUDIO_MMIO_RINTCNT 0x05a
#define HDAUDIO_MMIO_RIRBCTL 0x05c
#define HDAUDIO_RIRBCTL_ROI_EN (1 << 2)
#define HDAUDIO_RIRBCTL_RUN (1 << 1)
#define HDAUDIO_RIRBCTL_INT_EN (1 << 0)
#define HDAUDIO_MMIO_RIRBSTS 0x05d
#define HDAUDIO_RIRBSTS_RIRBOIS (1 << 2)
#define HDAUDIO_RIRBSTS_RINTFL (1 << 0)
#define HDAUDIO_MMIO_RIRBSIZE 0x05e
#define HDAUDIO_MMIO_IC 0x060
#define HDAUDIO_MMIO_IR 0x064
#define HDAUDIO_MMIO_IRS 0x068
#define HDAUDIO_MMIO_DPLBASE 0x070
#define HDAUDIO_MMIO_DPUBASE 0x074
#define HDAUDIO_MMIO_SD_SIZE 0x20
#define HDAUDIO_MMIO_SD_BASE 0x080
#define HDAUDIO_SD_REG(off, x) \
(HDAUDIO_MMIO_SD_BASE + ((x) * HDAUDIO_MMIO_SD_SIZE) + (off))
#define HDAUDIO_SD_CTL0(x) HDAUDIO_SD_REG(0x00, x)
#define HDAUDIO_CTL_SRST (1 << 0)
#define HDAUDIO_CTL_RUN (1 << 1)
#define HDAUDIO_CTL_IOCE (1 << 2)
#define HDAUDIO_CTL_FEIE (1 << 3)
#define HDAUDIO_CTL_DEIE (1 << 4)
#define HDAUDIO_SD_CTL1(x) HDAUDIO_SD_REG(0x01, x)
#define HDAUDIO_SD_CTL2(x) HDAUDIO_SD_REG(0x02, x)
#define HDAUDIO_SD_STS(x) HDAUDIO_SD_REG(0x03, x)
#define HDAUDIO_STS_FIFORDY (1 << 5)
#define HDAUDIO_STS_DESE (1 << 4)
#define HDAUDIO_STS_FIFOE (1 << 3)
#define HDAUDIO_STS_BCIS (1 << 2)
#define HDAUDIO_SD_LPIB(x) HDAUDIO_SD_REG(0x04, x)
#define HDAUDIO_SD_CBL(x) HDAUDIO_SD_REG(0x08, x)
#define HDAUDIO_SD_LVI(x) HDAUDIO_SD_REG(0x0c, x)
#define HDAUDIO_SD_FIFOW(x) HDAUDIO_SD_REG(0x0e, x)
#define HDAUDIO_SD_FIFOS(x) HDAUDIO_SD_REG(0x10, x)
#define HDAUDIO_SD_FMT(x) HDAUDIO_SD_REG(0x12, x)
#define HDAUDIO_FMT_TYPE_MASK 0x8000
#define HDAUDIO_FMT_TYPE_PCM 0x0000
#define HDAUDIO_FMT_TYPE_NONPCM 0x8000
#define HDAUDIO_FMT_BASE_MASK 0x4000
#define HDAUDIO_FMT_BASE_48 0x0000
#define HDAUDIO_FMT_BASE_44 0x4000
#define HDAUDIO_FMT_MULT_MASK 0x3800
#define HDAUDIO_FMT_MULT(x) ((((x) - 1) << 11) & HDAUDIO_FMT_MULT_MASK)
#define HDAUDIO_FMT_DIV_MASK 0x0700
#define HDAUDIO_FMT_DIV(x) ((((x) - 1) << 8) & HDAUDIO_FMT_DIV_MASK)
#define HDAUDIO_FMT_BITS_MASK 0x0070
#define HDAUDIO_FMT_BITS_8_16 (0 << 4)
#define HDAUDIO_FMT_BITS_16_16 (1 << 4)
#define HDAUDIO_FMT_BITS_20_32 (2 << 4)
#define HDAUDIO_FMT_BITS_24_32 (3 << 4)
#define HDAUDIO_FMT_BITS_32_32 (4 << 4)
#define HDAUDIO_FMT_CHAN_MASK 0x000f
#define HDAUDIO_FMT_CHAN(x) (((x) - 1) & HDAUDIO_FMT_CHAN_MASK)
#define HDAUDIO_SD_BDPL(x) HDAUDIO_SD_REG(0x18, x)
#define HDAUDIO_SD_BDPU(x) HDAUDIO_SD_REG(0x1c, x)
/*
* Codec Parameters and Controls
*/
#define CORB_GET_PARAMETER 0xf00
#define COP_VENDOR_ID 0x00
#define COP_REVISION_ID 0x02
#define COP_SUBORDINATE_NODE_COUNT 0x04
#define COP_NODECNT_STARTNODE(x) (((x) >> 16) & 0xff)
#define COP_NODECNT_NUMNODES(x) (((x) >> 0) & 0xff)
#define COP_FUNCTION_GROUP_TYPE 0x05
#define COP_AUDIO_FUNCTION_GROUP_CAPABILITIES 0x08
#define COP_AUDIO_WIDGET_CAPABILITIES 0x09
#define COP_AWCAP_CHANNEL_COUNT(x) \
(((((x) & (0x7 << 13)) >> 12) | ((x) & 0x1)) + 1)
#define COP_AWCAP_INAMP_PRESENT (1 << 1)
#define COP_AWCAP_OUTAMP_PRESENT (1 << 2)
#define COP_AWCAP_AMP_PARAM_OVERRIDE (1 << 3)
#define COP_AWCAP_FORMAT_OVERRIDE (1 << 4)
#define COP_AWCAP_STRIPE (1 << 5)
#define COP_AWCAP_PROC_WIDGET (1 << 6)
#define COP_AWCAP_UNSOL_CAPABLE (1 << 7)
#define COP_AWCAP_CONN_LIST (1 << 8)
#define COP_AWCAP_DIGITAL (1 << 9)
#define COP_AWCAP_POWER_CNTRL (1 << 10)
#define COP_AWCAP_LR_SWAP (1 << 11)
#define COP_AWCAP_CP_CAPS (1 << 12)
#define COP_AWCAP_CHAN_COUNT_EXT(x) (((x) >> 13) & 0x7)
#define COP_AWCAP_DELAY(x) (((x) >> 16) & 0xf)
#define COP_AWCAP_TYPE(x) (((x) >> 20) & 0xf)
#define COP_AWCAP_TYPE_MASK 0x00f00000
#define COP_AWCAP_TYPE_SHIFT 20
#define COP_AWCAP_TYPE_AUDIO_OUTPUT 0x0
#define COP_AWCAP_TYPE_AUDIO_INPUT 0x1
#define COP_AWCAP_TYPE_AUDIO_MIXER 0x2
#define COP_AWCAP_TYPE_AUDIO_SELECTOR 0x3
#define COP_AWCAP_TYPE_PIN_COMPLEX 0x4
#define COP_AWCAP_TYPE_POWER_WIDGET 0x5
#define COP_AWCAP_TYPE_VOLUME_KNOB 0x6
#define COP_AWCAP_TYPE_BEEP_GENERATOR 0x7
#define COP_AWCAP_TYPE_VENDOR_DEFINED 0xf
#define COP_SUPPORTED_PCM_SIZE_RATES 0x0a
#define COP_SUPPORTED_STREAM_FORMATS 0x0b
#define COP_STREAM_FORMAT_PCM (1 << 0)
#define COP_STREAM_FORMAT_FLOAT32 (1 << 1)
#define COP_STREAM_FORMAT_AC3 (1 << 2)
#define COP_PIN_CAPABILITIES 0x0c
#define COP_PINCAP_IMPEDANCE_SENSE_CAPABLE (1 << 0)
#define COP_PINCAP_TRIGGER_REQD (1 << 1)
#define COP_PINCAP_PRESENSE_DETECT_CAPABLE (1 << 2)
#define COP_PINCAP_HEADPHONE_DRIVE_CAPABLE (1 << 3)
#define COP_PINCAP_OUTPUT_CAPABLE (1 << 4)
#define COP_PINCAP_INPUT_CAPABLE (1 << 5)
#define COP_PINCAP_BALANCED_IO_PINS (1 << 6)
#define COP_PINCAP_HDMI (1 << 7)
#define COP_PINCAP_VREF_CONTROL(x) (((x) >> 8) & 0xff)
#define COP_VREF_HIZ (1 << 0)
#define COP_VREF_50 (1 << 1)
#define COP_VREF_GROUND (1 << 2)
#define COP_VREF_80 (1 << 4)
#define COP_VREF_100 (1 << 5)
#define COP_PINCAP_EAPD_CAPABLE (1 << 16)
#define COP_PINCAP_DP (1 << 24)
#define COP_PINCAP_HBR (1 << 27)
#define COP_AMPLIFIER_CAPABILITIES_INAMP 0x0d
#define COP_AMPLIFIER_CAPABILITIES_OUTAMP 0x12
#define COP_AMPCAP_OFFSET(x) (((x) >> 0) & 0x7f)
#define COP_AMPCAP_NUM_STEPS(x) (((x) >> 8) & 0x7f)
#define COP_AMPCAP_STEP_SIZE(x) (((x) >> 16) & 0x7f)
#define COP_AMPCAP_MUTE_CAPABLE(x) (((x) >> 31) & 0x1)
#define COP_CONNECTION_LIST_LENGTH 0x0e
#define COP_CONNECTION_LIST_LENGTH_LEN(x) ((x) & 0x7f)
#define COP_CONNECTION_LIST_LENGTH_LONG_FORM (1 << 7)
#define COP_SUPPORTED_POWER_STATES 0x0f
#define COP_PROCESSING_CAPABILITIES 0x10
#define COP_GPIO_COUNT 0x11
#define COP_GPIO_COUNT_NUM_GPIO(x) ((x) & 0xff)
#define COP_VOLUME_KNOB_CAPABILITIES 0x13
#define COP_HDMI_LPCM_CAD 0x20
#define COP_LPCM_CAD_44_1_MS (1u << 31)
#define COP_LPCM_CAD_44_1 (1 << 30)
#define COP_LPCM_CAD_192K_24BIT (1 << 29)
#define COP_LPCM_CAD_192K_20BIT (1 << 28)
#define COP_LPCM_CAD_192K_MAXCHAN(x) (((x) >> 24) & 0xf)
#define COP_LPCM_CAD_192K_MAXCHAN_CP(x) (((x) >> 20) & 0xf)
#define COP_LPCM_CAD_96K_24BIT (1 << 19)
#define COP_LPCM_CAD_96K_20BIT (1 << 18)
#define COP_LPCM_CAD_96K_MAXCHAN(x) (((x) >> 14) & 0xf)
#define COP_LPCM_CAD_96K_MAXCHAN_CP(x) (((x) >> 10) & 0xf)
#define COP_LPCM_CAD_48K_24BIT (1 << 9)
#define COP_LPCM_CAD_48K_20BIT (1 << 8)
#define COP_LPCM_CAD_48K_MAXCHAN(x) (((x) >> 4) & 0xf)
#define COP_LPCM_CAD_48K_MAXCHAN_CP(x) (((x) >> 0) & 0xf)
#define CORB_GET_CONNECTION_SELECT_CONTROL 0xf01
#define CORB_SET_CONNECTION_SELECT_CONTROL 0x701
#define CORB_GET_CONNECTION_LIST_ENTRY 0xf02
#define CORB_GET_PROCESSING_STATE 0xf03
#define CORB_SET_PROCESSING_STATE 0x703
#define CORB_GET_COEFFICIENT_INDEX 0xd00
#define CORB_SET_COEFFICIENT_INDEX 0x500
#define CORB_GET_PROCESSING_COEFFICIENT 0xc00
#define CORB_SET_PROCESSING_COEFFICIENT 0x400
#define CORB_GET_AMPLIFIER_GAIN_MUTE 0xb00
#define CORB_SET_AMPLIFIER_GAIN_MUTE 0x300
#define CORB_GET_CONVERTER_FORMAT 0xa00
#define CORB_SET_CONVERTER_FORMAT 0x200
#define CORB_GET_DIGITAL_CONVERTER_CONTROL 0xf0d
#define CORB_SET_DIGITAL_CONVERTER_CONTROL_1 0x70d
#define COP_DIGITAL_CONVCTRL1_DIGEN (1 << 0)
#define COP_DIGITAL_CONVCTRL1_V (1 << 1)
#define COP_DIGITAL_CONVCTRL1_VCFG (1 << 2)
#define COP_DIGITAL_CONVCTRL1_PRE (1 << 3)
#define COP_DIGITAL_CONVCTRL1_COPY (1 << 4)
#define COP_DIGITAL_CONVCTRL1_NAUDIO (1 << 5)
#define COP_DIGITAL_CONVCTRL1_PRO (1 << 6)
#define COP_DIGITAL_CONVCTRL1_L (1 << 7)
#define CORB_SET_DIGITAL_CONVERTER_CONTROL_2 0x70e
#define COP_DIGITAL_CONVCTRL2_CC_MASK 0x7f
#define CORB_GET_POWER_STATE 0xf05
#define CORB_SET_POWER_STATE 0x705
#define COP_POWER_STATE_D0 0x00
#define COP_POWER_STATE_D1 0x01
#define COP_POWER_STATE_D2 0x02
#define COP_POWER_STATE_D3 0x03
#define CORB_GET_CONVERTER_STREAM_CHANNEL 0xf06
#define CORB_SET_CONVERTER_STREAM_CHANNEL 0x706
#define CORB_GET_INPUT_CONVERTER_SDI_SELECT 0xf04
#define CORB_SET_INPUT_CONVERTER_SDI_SELECT 0x704
#define CORB_GET_PIN_WIDGET_CONTROL 0xf07
#define CORB_SET_PIN_WIDGET_CONTROL 0x707
#define COP_PWC_VREF_ENABLE_MASK 0x7
#define COP_PWC_VREF_HIZ 0x00
#define COP_PWC_VREF_50 0x01
#define COP_PWC_VREF_GND 0x02
#define COP_PWC_VREF_80 0x04
#define COP_PWC_VREF_100 0x05
#define COP_PWC_IN_ENABLE (1 << 5)
#define COP_PWC_OUT_ENABLE (1 << 6)
#define COP_PWC_HPHN_ENABLE (1 << 7)
#define COP_PWC_EPT_MASK 0x3
#define COP_PWC_EPT_NATIVE 0x0
#define COP_PWC_EPT_HIGH_BIT_RATE 0x3
#define CORB_GET_UNSOLICITED_RESPONSE 0xf08
#define CORB_SET_UNSOLICITED_RESPONSE 0x708
#define COP_SET_UNSOLICITED_RESPONSE_ENABLE (1 << 7)
#define CORB_GET_PIN_SENSE 0xf09
#define COP_GET_PIN_SENSE_PRESENSE_DETECT (1u << 31)
#define COP_GET_PIN_SENSE_ELD_VALID (1 << 30) /* digital */
#define COP_GET_PIN_SENSE_IMPEDENCE_SENSE(x) ((x) & 0x7fffffff) /* analog */
#define CORB_SET_PIN_SENSE 0x709
#define CORB_GET_EAPD_BTL_ENABLE 0xf0c
#define CORB_SET_EAPD_BTL_ENABLE 0x70c
#define COP_EAPD_ENABLE_BTL (1 << 0)
#define COP_EAPD_ENABLE_EAPD (1 << 1)
#define COP_EAPD_ENABLE_LR_SWAP (1 << 2)
#define CORB_GET_GPI_DATA 0xf10
#define CORB_SET_GPI_DATA 0x710
#define CORB_GET_GPI_WAKE_ENABLE_MASK 0xf11
#define CORB_SET_GPI_WAKE_ENABLE_MASK 0x711
#define CORB_GET_GPI_UNSOLICITED_ENABLE_MASK 0xf12
#define CORB_SET_GPI_UNSOLICITED_ENABLE_MASK 0x712
#define CORB_GET_GPI_STICKY_MASK 0xf13
#define CORB_SET_GPI_STICKY_MASK 0x713
#define CORB_GET_GPO_DATA 0xf14
#define CORB_SET_GPO_DATA 0x714
#define CORB_GET_GPIO_DATA 0xf15
#define CORB_SET_GPIO_DATA 0x715
#define CORB_GET_GPIO_ENABLE_MASK 0xf16
#define CORB_SET_GPIO_ENABLE_MASK 0x716
#define CORB_GET_GPIO_DIRECTION 0xf17
#define CORB_SET_GPIO_DIRECTION 0x717
#define CORB_GET_GPIO_WAKE_ENABLE_MASK 0xf18
#define CORB_SET_GPIO_WAKE_ENABLE_MASK 0x718
#define CORB_GET_GPIO_UNSOLICITED_ENABLE_MASK 0xf19
#define CORB_SET_GPIO_UNSOLICITED_ENABLE_MASK 0x719
#define CORB_GET_GPIO_STICKY_MASK 0xf1a
#define CORB_SET_GPIO_STICKY_MASK 0x71a
#define CORB_GET_BEEP_GENERATION 0xf0a
#define CORB_SET_BEEP_GENERATION 0x70a
#define CORB_GET_VOLUME_KNOB 0xf0f
#define CORB_SET_VOLUME_KNOB 0x70f
#define CORB_GET_SUBSYSTEM_ID 0xf20
#define CORB_SET_SUBSYSTEM_ID_1 0x720
#define CORB_SET_SUBSYSTEM_ID_2 0x721
#define CORB_SET_SUBSYSTEM_ID_3 0x722
#define CORB_SET_SUBSYSTEM_ID_4 0x723
#define CORB_GET_CONFIGURATION_DEFAULT 0xf1c
#define COP_CFG_SEQUENCE(x) (((x) >> 0) & 0xf)
#define COP_CFG_DEFAULT_ASSOCIATION(x) (((x) >> 4) & 0xf)
#define COP_CFG_MISC(x) (((x) >> 8) & 0xf)
#define COP_CFG_COLOR(x) (((x) >> 12) & 0xf)
#define COP_CFG_CONNECTION_TYPE(x) (((x) >> 16) & 0xf)
#define COP_CONN_TYPE_UNKNOWN 0x0
#define COP_CONN_TYPE_18INCH 0x1
#define COP_CONN_TYPE_14INCH 0x2
#define COP_CONN_TYPE_ATAPI_INTERNAL 0x3
#define COP_CONN_TYPE_RCA 0x4
#define COP_CONN_TYPE_OPTICAL 0x5
#define COP_CONN_TYPE_OTHER_DIGITAL 0x6
#define COP_CONN_TYPE_OTHER_ANALOG 0x7
#define COP_CONN_TYPE_DIN 0x8
#define COP_CONN_TYPE_XLR 0x9
#define COP_CONN_TYPE_RJ11 0xa
#define COP_CONN_TYPE_COMBINATION 0xb
#define COP_CONN_TYPE_OTHER 0xf
#define COP_CFG_DEFAULT_DEVICE(x) (((x) >> 20) & 0xf)
#define COP_DEVICE_MASK 0x00f00000
#define COP_DEVICE_SHIFT 20
#define COP_DEVICE_LINE_OUT 0x0
#define COP_DEVICE_SPEAKER 0x1
#define COP_DEVICE_HP_OUT 0x2
#define COP_DEVICE_CD 0x3
#define COP_DEVICE_SPDIF_OUT 0x4
#define COP_DEVICE_DIGITAL_OTHER_OUT 0x5
#define COP_DEVICE_MODEM_LINE_SIDE 0x6
#define COP_DEVICE_MODEM_HANDSET_SIDE 0x7
#define COP_DEVICE_LINE_IN 0x8
#define COP_DEVICE_AUX 0x9
#define COP_DEVICE_MIC_IN 0xa
#define COP_DEVICE_TELEPHONY 0xb
#define COP_DEVICE_SPDIF_IN 0xc
#define COP_DEVICE_DIGITAL_OTHER_IN 0xd
#define COP_DEVICE_OTHER 0xf
#define COP_CFG_LOCATION(x) (((x) >> 24) & 0x3f)
#define COP_CFG_PORT_CONNECTIVITY(x) (((x) >> 30) & 0x3)
#define COP_PORT_JACK 0x0
#define COP_PORT_NONE 0x1
#define COP_PORT_FIXED_FUNCTION 0x2
#define COP_PORT_BOTH 0x3
#define CORB_SET_CONFIGURATION_DEFAULT_1 0x71c
#define CORB_SET_CONFIGURATION_DEFAULT_2 0x71d
#define CORB_SET_CONFIGURATION_DEFAULT_3 0x71e
#define CORB_SET_CONFIGURATION_DEFAULT_4 0x71f
#define CORB_GET_STRIPE_CONTROL 0xf24
#define CORB_SET_STRIPE_CONTROL 0x720
#define CORB_EXECUTE_RESET 0x7ff
#define CORB_GET_CONVERTER_CHANNEL_COUNT 0xf2d
#define CORB_SET_CONVERTER_CHANNEL_COUNT 0x72d
#define CORB_GET_HDMI_DIP_SIZE 0xf2e
#define COP_DIP_ELD_SIZE (1 << 3)
#define COP_DIP_PI_GP(x) ((x) & 0x7)
#define COP_DIP_PI_AUDIO_INFO COP_DIP_PI_GP(0)
#define COP_DIP_BUFFER_SIZE(x) ((x) & 0xff)
#define CORB_GET_HDMI_ELD_DATA 0xf2f
#define COP_ELD_VALID (1u << 31)
#define COP_ELD_DATA(x) (((x) >> 0) & 0xff)
#define CORB_GET_HDMI_DIP_INDEX 0xf30
#define CORB_SET_HDMI_DIP_INDEX 0x730
#define COP_DIP_INDEX_BYTE_SHIFT 0
#define COP_DIP_INDEX_BYTE_MASK 0xf
#define COP_DIP_INDEX_PACKET_INDEX_SHIFT 4
#define COP_DIP_INDEX_PACKET_INDEX_MASK 0xf
#define CORB_GET_HDMI_DIP_DATA 0xf31
#define CORB_SET_HDMI_DIP_DATA 0x731
#define CORB_GET_HDMI_DIP_XMIT_CTRL 0xf32
#define CORB_SET_HDMI_DIP_XMIT_CTRL 0x732
#define COP_DIP_XMIT_CTRL_DISABLE (0x0 << 6)
#define COP_DIP_XMIT_CTRL_ONCE (0x2 << 6)
#define COP_DIP_XMIT_CTRL_BEST_EFFORT (0x3 << 6)
#define CORB_GET_PROTECTION_CONTROL 0xf33
#define CORB_SET_PROTECTION_CONTROL 0x733
#define COP_PROTECTION_CONTROL_CES_ON (1 << 9)
#define COP_PROTECTION_CONTROL_READY (1 << 8)
#define COP_PROTECTION_CONTROL_URSUBTAG_SHIFT 3
#define COP_PROTECTION_CONTROL_URSUBTAG_MASK 0x1f
#define COP_PROTECTION_CONTROL_CPSTATE_MASK 0x3
#define COP_PROTECTION_CONTROL_CPSTATE_DONTCARE (0 << 0)
#define COP_PROTECTION_CONTROL_CPSTATE_OFF (2 << 0)
#define COP_PROTECTION_CONTROL_CPSTATE_ON (3 << 0)
#define CORB_ASP_GET_CHANNEL_MAPPING 0xf34
#define CORB_ASP_SET_CHANNEL_MAPPING 0x734
/*
* RIRB Entry Format
*/
struct rirb_entry {
uint32_t resp;
uint32_t resp_ex;
#define RIRB_CODEC_ID(entry) ((entry)->resp_ex & 0xf)
#define RIRB_UNSOL(entry) ((entry)->resp_ex & 0x10)
} __packed;
#endif /* !_HDAUDIOREG_H */
|