summaryrefslogtreecommitdiffstats
path: root/sys/dev/sound/macio/davbusreg.h
blob: a7ccdf16e495d46836eda13c0c4eba2c3f181ee8 (plain)
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
/*-
 * Copyright 2008 by Marco Trillo. All rights reserved.
 *
 * 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. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * 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.
 *
 * $FreeBSD$
 */

/*
 *	Apple DAVbus audio controller.
 */

#ifndef _SOUND_DAVBUS_H
#define _SOUND_DAVBUS_H

/* DAVbus controller registers. */
#define DAVBUS_SOUND_CTRL	0x00
#define DAVBUS_CODEC_CTRL	0x10
#define DAVBUS_CODEC_STATUS	0x20
#define DAVBUS_CLIP_COUNT	0x30
#define DAVBUS_BYTE_SWAP	0x40

/*
 * The DAVbus uses a serial bus time multiplexed in four subframes,
 * but the controller itself uses subframe 0 to communicate with the codec.
 * In some machines, the other subframes may be used by external devices
 * thorugh the DAV interface.
 */
/* DAVBUS_SOUND_CTRL bit definitions. */
#define DAVBUS_INPUT_SUBFRAME0	0x00000001
#define DAVBUS_INPUT_SUBFRAME1	0x00000002
#define DAVBUS_INPUT_SUBFRAME2	0x00000004
#define DAVBUS_INPUT_SUBFRAME3	0x00000008

#define DAVBUS_OUTPUT_SUBFRAME0	0x00000010
#define DAVBUS_OUTPUT_SUBFRAME1	0x00000020
#define DAVBUS_OUTPUT_SUBFRAME2	0x00000040
#define DAVBUS_OUTPUT_SUBFRAME3	0x00000080

#define DAVBUS_RATE_44100	0x00000000
#define DAVBUS_RATE_29400	0x00000100
#define DAVBUS_RATE_22050	0x00000200
#define DAVBUS_RATE_17640	0x00000300
#define DAVBUS_RATE_14700	0x00000400
#define DAVBUS_RATE_11025	0x00000500
#define DAVBUS_RATE_8820	0x00000600
#define DAVBUS_RATE_7350	0x00000700
#define DAVBUS_RATE_MASK	0x00000700

#define DAVBUS_ERROR		0x00000800
#define DAVBUS_PORTCHG		0x00001000
#define DAVBUS_INTR_ERROR	0x00002000	/* interrupt on error */
#define DAVBUS_INTR_PORTCHG	0x00004000	/* interrupt on port change */

#define DAVBUS_STATUS_SUBFRAME	0x00018000	/* mask */

/* DAVBUS_CODEC_CTRL bit definitions. */
#define DAVBUS_CODEC_BUSY	0x01000000


/*
 * Burgundy Codec Control Bits
 */

/* Burgundy transaction bits. */
#define BURGUNDY_CTRL_RESET	0x00100000
#define BURGUNDY_CTRL_WRITE	0x00200000

/* Mute control for each analog output port. */
#define BURGUNDY_MUTE_REG	0x16000
#define BURGUNDY_P13M_EN	0x01
#define BURGUNDY_P14L_EN	0x02
#define BURGUNDY_P14R_EN	0x04
#define BURGUNDY_P15L_EN	0x08
#define BURGUNDY_P15R_EN	0x10
#define BURGUNDY_P16L_EN	0x20
#define BURGUNDY_P16R_EN	0x40
#define BURGUNDY_P17M_EN	0x80

/* Attenuation of each analog output port. */
#define BURGUNDY_OL13_REG	0x16100
#define BURGUNDY_OL14_REG	0x16200
#define BURGUNDY_OL15_REG	0x16300
#define BURGUNDY_OL16_REG	0x16400
#define BURGUNDY_OL17_REG	0x16500

/* Inputs of four digital mixers. */
#define BURGUNDY_MIX0_REG	0x42900
#define BURGUNDY_MIX1_REG	0x42A00
#define BURGUNDY_MIX2_REG	0x42B00
#define BURGUNDY_MIX3_REG	0x42C00
#define BURGUNDY_MIX_IS0	0x00010001
#define BURGUNDY_MIX_IS1	0x00020002
#define BURGUNDY_MIX_IS2	0x00040004
#define BURGUNDY_MIX_IS3	0x00080008
#define BURGUNDY_MIX_IS4	0x00100010
#define BURGUNDY_MIX_ISA	0x01000100 /* Digital stream ISA. */
#define BURGUNDY_MIX_ISB	0x02000200 /* Digital stream ISB. */
#define BURGUNDY_MIX_ISC	0x04000400 /* Digital stream ISC. */
#define BURGUNDY_MIX_ISD	0x08000800 /* Digital stream ISD. */
#define BURGUNDY_MIX_ISE	0x10001000 /* Digital stream ISE. */
#define BURGUNDY_MIX_ISF	0x20002000 /* Digital stream ISF. */
#define BURGUNDY_MIX_ISG	0x40004000 /* Digital stream ISG. */
#define BURGUNDY_MIX_ISH	0x80008000 /* Digital stream ISH. */

/* A digital scalar at the output of each mixer. */
#define BURGUNDY_MXS0L_REG	0x12D00
#define BURGUNDY_MXS0R_REG	0x12D01
#define BURGUNDY_MXS1L_REG	0x12D02
#define BURGUNDY_MXS1R_REG	0x12D03
#define BURGUNDY_MXS2L_REG	0x12E00
#define BURGUNDY_MXS2R_REG	0x12E01
#define BURGUNDY_MXS3L_REG	0x12E02
#define BURGUNDY_MXS3R_REG	0x12E03
#define BURGUNDY_MXS_UNITY	0xDF

/* Demultiplexer. Routes the mixer 0-3 (see above) to output sources.
   Output sources 0-2 can be converted to analog. */
#define BURGUNDY_OS_REG		0x42F00
#define BURGUNDY_OS0_MIX0	0x00000000
#define BURGUNDY_OS0_MIX1	0x00000001
#define BURGUNDY_OS0_MIX2	0x00000002
#define BURGUNDY_OS0_MIX3	0x00000003
#define BURGUNDY_OS1_MIX0       0x00000000
#define BURGUNDY_OS1_MIX1       0x00000004
#define BURGUNDY_OS1_MIX2       0x00000008
#define BURGUNDY_OS1_MIX3       0x0000000C
#define BURGUNDY_OS2_MIX0       0x00000000
#define BURGUNDY_OS2_MIX1       0x00000010
#define BURGUNDY_OS2_MIX2       0x00000020
#define BURGUNDY_OS2_MIX3       0x00000030
#define BURGUNDY_OS3_MIX0       0x00000000
#define BURGUNDY_OS3_MIX1       0x00000040
#define BURGUNDY_OS3_MIX2       0x00000080
#define BURGUNDY_OS3_MIX3       0x000000C0
#define BURGUNDY_OSA_MIX0	0x00000000
#define BURGUNDY_OSA_MIX1	0x00010000	
#define BURGUNDY_OSA_MIX2	0x00020000
#define BURGUNDY_OSA_MIX3	0x00030000
#define BURGUNDY_OSB_MIX0       0x00000000
#define BURGUNDY_OSB_MIX1       0x00040000
#define BURGUNDY_OSB_MIX2	0x00080000
#define BURGUNDY_OSB_MIX3	0x000C0000
#define BURGUNDY_OSC_MIX0       0x00000000
#define BURGUNDY_OSC_MIX1       0x00100000
#define BURGUNDY_OSC_MIX2	0x00200000
#define BURGUNDY_OSC_MIX3	0x00300000
#define BURGUNDY_OSD_MIX0       0x00000000
#define BURGUNDY_OSD_MIX1       0x00400000
#define BURGUNDY_OSD_MIX2	0x00800000
#define BURGUNDY_OSD_MIX3	0x00C00000
#define BURGUNDY_OSE_MIX0       0x00000000
#define BURGUNDY_OSE_MIX1	0x01000000
#define BURGUNDY_OSE_MIX2	0x02000000
#define BURGUNDY_OSE_MIX3	0x03000000
#define BURGUNDY_OSF_MIX0       0x00000000
#define BURGUNDY_OSF_MIX1       0x04000000
#define BURGUNDY_OSF_MIX2	0x08000000
#define BURGUNDY_OSF_MIX3	0x0C000000
#define BURGUNDY_OSG_MIX0       0x00000000
#define BURGUNDY_OSG_MIX1       0x10000000
#define BURGUNDY_OSG_MIX2	0x20000000
#define BURGUNDY_OSG_MIX3	0x30000000
#define BURGUNDY_OSH_MIX0       0x00000000
#define BURGUNDY_OSH_MIX1       0x40000000
#define BURGUNDY_OSH_MIX2	0x80000000
#define BURGUNDY_OSH_MIX3	0xC0000000

/* A digital scalar for output sources 0 to 3. */
#define BURGUNDY_OSS0L_REG	0x13000
#define BURGUNDY_OSS0R_REG	0x13001
#define BURGUNDY_OSS1L_REG	0x13002
#define BURGUNDY_OSS1R_REG	0x13003
#define BURGUNDY_OSS2L_REG	0x13100
#define BURGUNDY_OSS2R_REG	0x13101
#define BURGUNDY_OSS3L_REG	0x13102
#define BURGUNDY_OSS3R_REG	0x13103
#define BURGUNDY_OSS_UNITY	0xDF

/* Digital input streams ISA-ISC. A stream may be derived from data coming 
   from the controller in subframes 0 to 3 as well as from internal 
   output sources OSA-OSD. */
#define BURGUNDY_SDIN_REG	0x17800
#define BURGUNDY_ISA_SF0	0x00
#define BURGUNDY_ISA_OSA	0x02
#define BURGUNDY_ISB_SF1	0x00
#define BURGUNDY_ISB_OSB	0x08
#define BURGUNDY_ISC_SF2	0x00
#define BURGUNDY_ISC_OSC	0x20
#define BURGUNDY_ISD_SF3	0x00
#define BURGUNDY_ISD_OSD	0x80

/* A digital scaler for input streams 0-4 A-H. */
#define BURGUNDY_ISSAL_REG	0x12500
#define BURGUNDY_ISSAR_REG	0x12501
#define BURGUNDY_ISS_UNITY	0xDF

/*
 * Screamer codec control bits 
 * This codec has the following 12-bit control registers:
 *	cc0 cc1 cc2 cc4 cc5 cc6 cc7
 */

/* screamer transaction bits. */
#define SCREAMER_CODEC_ADDR0	0x00000000
#define SCREAMER_CODEC_ADDR1	0x00001000
#define SCREAMER_CODEC_ADDR2	0x00002000
#define SCREAMER_CODEC_ADDR4	0x00004000
#define SCREAMER_CODEC_ADDR5	0x00005000
#define SCREAMER_CODEC_ADDR6	0x00006000
#define SCREAMER_CODEC_ADDR7	0x00007000
#define SCREAMER_CODEC_EMSEL0	0x00000000
#define SCREAMER_CODEC_EMSEL1	0x00400000
#define SCREAMER_CODEC_EMSEL2	0x00800000
#define SCREAMER_CODEC_EMSEL4	0x00c00000


/* cc0 */
/*
 * Bits 7-4 specify the left ADC input gain;
 * bits 3-0 specify the right ADC input gain.
 *
 * The gain is a 4-bit value expressed in units of 1.5 dB, 
 * ranging from 0 dB (0) to +22.5 dB (15).
 */
#define SCREAMER_DEFAULT_CD_GAIN	0x000000bb /* +16.5 dB */
#define SCREAMER_INPUT_CD		0x00000200
#define SCREAMER_INPUT_LINE		0x00000400
#define SCREAMER_INPUT_MICROPHONE	0x00000800
#define SCREAMER_INPUT_MASK		0x00000e00

/* cc1 */
#define SCREAMER_LOOP_THROUGH		0x00000040
#define SCREAMER_MUTE_SPEAKER		0x00000080
#define SCREAMER_MUTE_HEADPHONES	0x00000200
#define SCREAMER_PARALLEL_OUTPUT	0x00000c00
#define SCREAMER_PROG_OUTPUT0      	0x00000400
#define SCREAMER_PROG_OUTPUT1      	0x00000800

/* cc2: headphones/external port attenuation */
/* cc4: internal speaker attenuation */
/*
 * Bits 9-6 specify left DAC output attenuation.
 * Bits 3-0 specify right DAC output attenuation.
 *
 * The attenuation is a 4-bit value expressed in units of -1.5 dB,
 * ranging from 0 dB (0) to -22.5 dB (15).
 */

/* screamer codec status bits. */
#define SCREAMER_STATUS_MASK 	0x00FFFFFF
#define SCREAMER_STATUS_SENSEMASK 	0x0000000F
#define  SCREAMER_STATUS_SENSE0 	0x00000008
#define  SCREAMER_STATUS_SENSE1 	0x00000004
#define  SCREAMER_STATUS_SENSE2 	0x00000002
#define  SCREAMER_STATUS_SENSE3 	0x00000001
#define SCREAMER_STATUS_PARTMASK	0x00000300
#define SCREAMER_STATUS_PARTSHFT	8
#define  SCREAMER_PART_CRYSTAL	0x00000100
#define  SCREAMER_PART_NATIONAL	0x00000200
#define  SCREAMER_PART_TI		0x00000300
#define SCREAMER_STATUS_REVMASK	0x0000F000
#define SCREAMER_STATUS_REVSHFT	12

#endif /* _SOUND_DAVBUS_H */

OpenPOWER on IntegriCloud