1187692Snwhitehorn/*-
2187692Snwhitehorn * Copyright 2008 by Marco Trillo. All rights reserved.
3187692Snwhitehorn *
4187692Snwhitehorn * Redistribution and use in source and binary forms, with or without
5187692Snwhitehorn * modification, are permitted provided that the following conditions
6187692Snwhitehorn * are met:
7187692Snwhitehorn * 1. Redistributions of source code must retain the above copyright
8187692Snwhitehorn *    notice, this list of conditions and the following disclaimer.
9187692Snwhitehorn * 2. Redistributions in binary form must reproduce the above copyright
10187692Snwhitehorn *    notice, this list of conditions and the following disclaimer in the
11187692Snwhitehorn *    documentation and/or other materials provided with the distribution.
12187692Snwhitehorn *
13187692Snwhitehorn * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14187692Snwhitehorn * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15187692Snwhitehorn * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16187692Snwhitehorn * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17187692Snwhitehorn * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
18187692Snwhitehorn * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19187692Snwhitehorn * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
20187692Snwhitehorn * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
21187692Snwhitehorn * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22187692Snwhitehorn * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23187692Snwhitehorn * SUCH DAMAGE.
24187692Snwhitehorn *
25187692Snwhitehorn * $FreeBSD: releng/10.3/sys/dev/sound/macio/davbusreg.h 187692 2009-01-25 18:20:15Z nwhitehorn $
26187692Snwhitehorn */
27187692Snwhitehorn
28187692Snwhitehorn/*
29187692Snwhitehorn *	Apple DAVbus audio controller.
30187692Snwhitehorn */
31187692Snwhitehorn
32187692Snwhitehorn#ifndef _SOUND_DAVBUS_H
33187692Snwhitehorn#define _SOUND_DAVBUS_H
34187692Snwhitehorn
35187692Snwhitehorn/* DAVbus controller registers. */
36187692Snwhitehorn#define DAVBUS_SOUND_CTRL	0x00
37187692Snwhitehorn#define DAVBUS_CODEC_CTRL	0x10
38187692Snwhitehorn#define DAVBUS_CODEC_STATUS	0x20
39187692Snwhitehorn#define DAVBUS_CLIP_COUNT	0x30
40187692Snwhitehorn#define DAVBUS_BYTE_SWAP	0x40
41187692Snwhitehorn
42187692Snwhitehorn/*
43187692Snwhitehorn * The DAVbus uses a serial bus time multiplexed in four subframes,
44187692Snwhitehorn * but the controller itself uses subframe 0 to communicate with the codec.
45187692Snwhitehorn * In some machines, the other subframes may be used by external devices
46187692Snwhitehorn * thorugh the DAV interface.
47187692Snwhitehorn */
48187692Snwhitehorn/* DAVBUS_SOUND_CTRL bit definitions. */
49187692Snwhitehorn#define DAVBUS_INPUT_SUBFRAME0	0x00000001
50187692Snwhitehorn#define DAVBUS_INPUT_SUBFRAME1	0x00000002
51187692Snwhitehorn#define DAVBUS_INPUT_SUBFRAME2	0x00000004
52187692Snwhitehorn#define DAVBUS_INPUT_SUBFRAME3	0x00000008
53187692Snwhitehorn
54187692Snwhitehorn#define DAVBUS_OUTPUT_SUBFRAME0	0x00000010
55187692Snwhitehorn#define DAVBUS_OUTPUT_SUBFRAME1	0x00000020
56187692Snwhitehorn#define DAVBUS_OUTPUT_SUBFRAME2	0x00000040
57187692Snwhitehorn#define DAVBUS_OUTPUT_SUBFRAME3	0x00000080
58187692Snwhitehorn
59187692Snwhitehorn#define DAVBUS_RATE_44100	0x00000000
60187692Snwhitehorn#define DAVBUS_RATE_29400	0x00000100
61187692Snwhitehorn#define DAVBUS_RATE_22050	0x00000200
62187692Snwhitehorn#define DAVBUS_RATE_17640	0x00000300
63187692Snwhitehorn#define DAVBUS_RATE_14700	0x00000400
64187692Snwhitehorn#define DAVBUS_RATE_11025	0x00000500
65187692Snwhitehorn#define DAVBUS_RATE_8820	0x00000600
66187692Snwhitehorn#define DAVBUS_RATE_7350	0x00000700
67187692Snwhitehorn#define DAVBUS_RATE_MASK	0x00000700
68187692Snwhitehorn
69187692Snwhitehorn#define DAVBUS_ERROR		0x00000800
70187692Snwhitehorn#define DAVBUS_PORTCHG		0x00001000
71187692Snwhitehorn#define DAVBUS_INTR_ERROR	0x00002000	/* interrupt on error */
72187692Snwhitehorn#define DAVBUS_INTR_PORTCHG	0x00004000	/* interrupt on port change */
73187692Snwhitehorn
74187692Snwhitehorn#define DAVBUS_STATUS_SUBFRAME	0x00018000	/* mask */
75187692Snwhitehorn
76187692Snwhitehorn/* DAVBUS_CODEC_CTRL bit definitions. */
77187692Snwhitehorn#define DAVBUS_CODEC_BUSY	0x01000000
78187692Snwhitehorn
79187692Snwhitehorn
80187692Snwhitehorn/*
81187692Snwhitehorn * Burgundy Codec Control Bits
82187692Snwhitehorn */
83187692Snwhitehorn
84187692Snwhitehorn/* Burgundy transaction bits. */
85187692Snwhitehorn#define BURGUNDY_CTRL_RESET	0x00100000
86187692Snwhitehorn#define BURGUNDY_CTRL_WRITE	0x00200000
87187692Snwhitehorn
88187692Snwhitehorn/* Mute control for each analog output port. */
89187692Snwhitehorn#define BURGUNDY_MUTE_REG	0x16000
90187692Snwhitehorn#define BURGUNDY_P13M_EN	0x01
91187692Snwhitehorn#define BURGUNDY_P14L_EN	0x02
92187692Snwhitehorn#define BURGUNDY_P14R_EN	0x04
93187692Snwhitehorn#define BURGUNDY_P15L_EN	0x08
94187692Snwhitehorn#define BURGUNDY_P15R_EN	0x10
95187692Snwhitehorn#define BURGUNDY_P16L_EN	0x20
96187692Snwhitehorn#define BURGUNDY_P16R_EN	0x40
97187692Snwhitehorn#define BURGUNDY_P17M_EN	0x80
98187692Snwhitehorn
99187692Snwhitehorn/* Attenuation of each analog output port. */
100187692Snwhitehorn#define BURGUNDY_OL13_REG	0x16100
101187692Snwhitehorn#define BURGUNDY_OL14_REG	0x16200
102187692Snwhitehorn#define BURGUNDY_OL15_REG	0x16300
103187692Snwhitehorn#define BURGUNDY_OL16_REG	0x16400
104187692Snwhitehorn#define BURGUNDY_OL17_REG	0x16500
105187692Snwhitehorn
106187692Snwhitehorn/* Inputs of four digital mixers. */
107187692Snwhitehorn#define BURGUNDY_MIX0_REG	0x42900
108187692Snwhitehorn#define BURGUNDY_MIX1_REG	0x42A00
109187692Snwhitehorn#define BURGUNDY_MIX2_REG	0x42B00
110187692Snwhitehorn#define BURGUNDY_MIX3_REG	0x42C00
111187692Snwhitehorn#define BURGUNDY_MIX_IS0	0x00010001
112187692Snwhitehorn#define BURGUNDY_MIX_IS1	0x00020002
113187692Snwhitehorn#define BURGUNDY_MIX_IS2	0x00040004
114187692Snwhitehorn#define BURGUNDY_MIX_IS3	0x00080008
115187692Snwhitehorn#define BURGUNDY_MIX_IS4	0x00100010
116187692Snwhitehorn#define BURGUNDY_MIX_ISA	0x01000100 /* Digital stream ISA. */
117187692Snwhitehorn#define BURGUNDY_MIX_ISB	0x02000200 /* Digital stream ISB. */
118187692Snwhitehorn#define BURGUNDY_MIX_ISC	0x04000400 /* Digital stream ISC. */
119187692Snwhitehorn#define BURGUNDY_MIX_ISD	0x08000800 /* Digital stream ISD. */
120187692Snwhitehorn#define BURGUNDY_MIX_ISE	0x10001000 /* Digital stream ISE. */
121187692Snwhitehorn#define BURGUNDY_MIX_ISF	0x20002000 /* Digital stream ISF. */
122187692Snwhitehorn#define BURGUNDY_MIX_ISG	0x40004000 /* Digital stream ISG. */
123187692Snwhitehorn#define BURGUNDY_MIX_ISH	0x80008000 /* Digital stream ISH. */
124187692Snwhitehorn
125187692Snwhitehorn/* A digital scalar at the output of each mixer. */
126187692Snwhitehorn#define BURGUNDY_MXS0L_REG	0x12D00
127187692Snwhitehorn#define BURGUNDY_MXS0R_REG	0x12D01
128187692Snwhitehorn#define BURGUNDY_MXS1L_REG	0x12D02
129187692Snwhitehorn#define BURGUNDY_MXS1R_REG	0x12D03
130187692Snwhitehorn#define BURGUNDY_MXS2L_REG	0x12E00
131187692Snwhitehorn#define BURGUNDY_MXS2R_REG	0x12E01
132187692Snwhitehorn#define BURGUNDY_MXS3L_REG	0x12E02
133187692Snwhitehorn#define BURGUNDY_MXS3R_REG	0x12E03
134187692Snwhitehorn#define BURGUNDY_MXS_UNITY	0xDF
135187692Snwhitehorn
136187692Snwhitehorn/* Demultiplexer. Routes the mixer 0-3 (see above) to output sources.
137187692Snwhitehorn   Output sources 0-2 can be converted to analog. */
138187692Snwhitehorn#define BURGUNDY_OS_REG		0x42F00
139187692Snwhitehorn#define BURGUNDY_OS0_MIX0	0x00000000
140187692Snwhitehorn#define BURGUNDY_OS0_MIX1	0x00000001
141187692Snwhitehorn#define BURGUNDY_OS0_MIX2	0x00000002
142187692Snwhitehorn#define BURGUNDY_OS0_MIX3	0x00000003
143187692Snwhitehorn#define BURGUNDY_OS1_MIX0       0x00000000
144187692Snwhitehorn#define BURGUNDY_OS1_MIX1       0x00000004
145187692Snwhitehorn#define BURGUNDY_OS1_MIX2       0x00000008
146187692Snwhitehorn#define BURGUNDY_OS1_MIX3       0x0000000C
147187692Snwhitehorn#define BURGUNDY_OS2_MIX0       0x00000000
148187692Snwhitehorn#define BURGUNDY_OS2_MIX1       0x00000010
149187692Snwhitehorn#define BURGUNDY_OS2_MIX2       0x00000020
150187692Snwhitehorn#define BURGUNDY_OS2_MIX3       0x00000030
151187692Snwhitehorn#define BURGUNDY_OS3_MIX0       0x00000000
152187692Snwhitehorn#define BURGUNDY_OS3_MIX1       0x00000040
153187692Snwhitehorn#define BURGUNDY_OS3_MIX2       0x00000080
154187692Snwhitehorn#define BURGUNDY_OS3_MIX3       0x000000C0
155187692Snwhitehorn#define BURGUNDY_OSA_MIX0	0x00000000
156187692Snwhitehorn#define BURGUNDY_OSA_MIX1	0x00010000
157187692Snwhitehorn#define BURGUNDY_OSA_MIX2	0x00020000
158187692Snwhitehorn#define BURGUNDY_OSA_MIX3	0x00030000
159187692Snwhitehorn#define BURGUNDY_OSB_MIX0       0x00000000
160187692Snwhitehorn#define BURGUNDY_OSB_MIX1       0x00040000
161187692Snwhitehorn#define BURGUNDY_OSB_MIX2	0x00080000
162187692Snwhitehorn#define BURGUNDY_OSB_MIX3	0x000C0000
163187692Snwhitehorn#define BURGUNDY_OSC_MIX0       0x00000000
164187692Snwhitehorn#define BURGUNDY_OSC_MIX1       0x00100000
165187692Snwhitehorn#define BURGUNDY_OSC_MIX2	0x00200000
166187692Snwhitehorn#define BURGUNDY_OSC_MIX3	0x00300000
167187692Snwhitehorn#define BURGUNDY_OSD_MIX0       0x00000000
168187692Snwhitehorn#define BURGUNDY_OSD_MIX1       0x00400000
169187692Snwhitehorn#define BURGUNDY_OSD_MIX2	0x00800000
170187692Snwhitehorn#define BURGUNDY_OSD_MIX3	0x00C00000
171187692Snwhitehorn#define BURGUNDY_OSE_MIX0       0x00000000
172187692Snwhitehorn#define BURGUNDY_OSE_MIX1	0x01000000
173187692Snwhitehorn#define BURGUNDY_OSE_MIX2	0x02000000
174187692Snwhitehorn#define BURGUNDY_OSE_MIX3	0x03000000
175187692Snwhitehorn#define BURGUNDY_OSF_MIX0       0x00000000
176187692Snwhitehorn#define BURGUNDY_OSF_MIX1       0x04000000
177187692Snwhitehorn#define BURGUNDY_OSF_MIX2	0x08000000
178187692Snwhitehorn#define BURGUNDY_OSF_MIX3	0x0C000000
179187692Snwhitehorn#define BURGUNDY_OSG_MIX0       0x00000000
180187692Snwhitehorn#define BURGUNDY_OSG_MIX1       0x10000000
181187692Snwhitehorn#define BURGUNDY_OSG_MIX2	0x20000000
182187692Snwhitehorn#define BURGUNDY_OSG_MIX3	0x30000000
183187692Snwhitehorn#define BURGUNDY_OSH_MIX0       0x00000000
184187692Snwhitehorn#define BURGUNDY_OSH_MIX1       0x40000000
185187692Snwhitehorn#define BURGUNDY_OSH_MIX2	0x80000000
186187692Snwhitehorn#define BURGUNDY_OSH_MIX3	0xC0000000
187187692Snwhitehorn
188187692Snwhitehorn/* A digital scalar for output sources 0 to 3. */
189187692Snwhitehorn#define BURGUNDY_OSS0L_REG	0x13000
190187692Snwhitehorn#define BURGUNDY_OSS0R_REG	0x13001
191187692Snwhitehorn#define BURGUNDY_OSS1L_REG	0x13002
192187692Snwhitehorn#define BURGUNDY_OSS1R_REG	0x13003
193187692Snwhitehorn#define BURGUNDY_OSS2L_REG	0x13100
194187692Snwhitehorn#define BURGUNDY_OSS2R_REG	0x13101
195187692Snwhitehorn#define BURGUNDY_OSS3L_REG	0x13102
196187692Snwhitehorn#define BURGUNDY_OSS3R_REG	0x13103
197187692Snwhitehorn#define BURGUNDY_OSS_UNITY	0xDF
198187692Snwhitehorn
199187692Snwhitehorn/* Digital input streams ISA-ISC. A stream may be derived from data coming
200187692Snwhitehorn   from the controller in subframes 0 to 3 as well as from internal
201187692Snwhitehorn   output sources OSA-OSD. */
202187692Snwhitehorn#define BURGUNDY_SDIN_REG	0x17800
203187692Snwhitehorn#define BURGUNDY_ISA_SF0	0x00
204187692Snwhitehorn#define BURGUNDY_ISA_OSA	0x02
205187692Snwhitehorn#define BURGUNDY_ISB_SF1	0x00
206187692Snwhitehorn#define BURGUNDY_ISB_OSB	0x08
207187692Snwhitehorn#define BURGUNDY_ISC_SF2	0x00
208187692Snwhitehorn#define BURGUNDY_ISC_OSC	0x20
209187692Snwhitehorn#define BURGUNDY_ISD_SF3	0x00
210187692Snwhitehorn#define BURGUNDY_ISD_OSD	0x80
211187692Snwhitehorn
212187692Snwhitehorn/* A digital scaler for input streams 0-4 A-H. */
213187692Snwhitehorn#define BURGUNDY_ISSAL_REG	0x12500
214187692Snwhitehorn#define BURGUNDY_ISSAR_REG	0x12501
215187692Snwhitehorn#define BURGUNDY_ISS_UNITY	0xDF
216187692Snwhitehorn
217187692Snwhitehorn/*
218187692Snwhitehorn * Screamer codec control bits
219187692Snwhitehorn * This codec has the following 12-bit control registers:
220187692Snwhitehorn *	cc0 cc1 cc2 cc4 cc5 cc6 cc7
221187692Snwhitehorn */
222187692Snwhitehorn
223187692Snwhitehorn/* screamer transaction bits. */
224187692Snwhitehorn#define SCREAMER_CODEC_ADDR0	0x00000000
225187692Snwhitehorn#define SCREAMER_CODEC_ADDR1	0x00001000
226187692Snwhitehorn#define SCREAMER_CODEC_ADDR2	0x00002000
227187692Snwhitehorn#define SCREAMER_CODEC_ADDR4	0x00004000
228187692Snwhitehorn#define SCREAMER_CODEC_ADDR5	0x00005000
229187692Snwhitehorn#define SCREAMER_CODEC_ADDR6	0x00006000
230187692Snwhitehorn#define SCREAMER_CODEC_ADDR7	0x00007000
231187692Snwhitehorn#define SCREAMER_CODEC_EMSEL0	0x00000000
232187692Snwhitehorn#define SCREAMER_CODEC_EMSEL1	0x00400000
233187692Snwhitehorn#define SCREAMER_CODEC_EMSEL2	0x00800000
234187692Snwhitehorn#define SCREAMER_CODEC_EMSEL4	0x00c00000
235187692Snwhitehorn
236187692Snwhitehorn
237187692Snwhitehorn/* cc0 */
238187692Snwhitehorn/*
239187692Snwhitehorn * Bits 7-4 specify the left ADC input gain;
240187692Snwhitehorn * bits 3-0 specify the right ADC input gain.
241187692Snwhitehorn *
242187692Snwhitehorn * The gain is a 4-bit value expressed in units of 1.5 dB,
243187692Snwhitehorn * ranging from 0 dB (0) to +22.5 dB (15).
244187692Snwhitehorn */
245187692Snwhitehorn#define SCREAMER_DEFAULT_CD_GAIN	0x000000bb /* +16.5 dB */
246187692Snwhitehorn#define SCREAMER_INPUT_CD		0x00000200
247187692Snwhitehorn#define SCREAMER_INPUT_LINE		0x00000400
248187692Snwhitehorn#define SCREAMER_INPUT_MICROPHONE	0x00000800
249187692Snwhitehorn#define SCREAMER_INPUT_MASK		0x00000e00
250187692Snwhitehorn
251187692Snwhitehorn/* cc1 */
252187692Snwhitehorn#define SCREAMER_LOOP_THROUGH		0x00000040
253187692Snwhitehorn#define SCREAMER_MUTE_SPEAKER		0x00000080
254187692Snwhitehorn#define SCREAMER_MUTE_HEADPHONES	0x00000200
255187692Snwhitehorn#define SCREAMER_PARALLEL_OUTPUT	0x00000c00
256187692Snwhitehorn#define SCREAMER_PROG_OUTPUT0      	0x00000400
257187692Snwhitehorn#define SCREAMER_PROG_OUTPUT1      	0x00000800
258187692Snwhitehorn
259187692Snwhitehorn/* cc2: headphones/external port attenuation */
260187692Snwhitehorn/* cc4: internal speaker attenuation */
261187692Snwhitehorn/*
262187692Snwhitehorn * Bits 9-6 specify left DAC output attenuation.
263187692Snwhitehorn * Bits 3-0 specify right DAC output attenuation.
264187692Snwhitehorn *
265187692Snwhitehorn * The attenuation is a 4-bit value expressed in units of -1.5 dB,
266187692Snwhitehorn * ranging from 0 dB (0) to -22.5 dB (15).
267187692Snwhitehorn */
268187692Snwhitehorn
269187692Snwhitehorn/* screamer codec status bits. */
270187692Snwhitehorn#define SCREAMER_STATUS_MASK 	0x00FFFFFF
271187692Snwhitehorn#define SCREAMER_STATUS_SENSEMASK 	0x0000000F
272187692Snwhitehorn#define  SCREAMER_STATUS_SENSE0 	0x00000008
273187692Snwhitehorn#define  SCREAMER_STATUS_SENSE1 	0x00000004
274187692Snwhitehorn#define  SCREAMER_STATUS_SENSE2 	0x00000002
275187692Snwhitehorn#define  SCREAMER_STATUS_SENSE3 	0x00000001
276187692Snwhitehorn#define SCREAMER_STATUS_PARTMASK	0x00000300
277187692Snwhitehorn#define SCREAMER_STATUS_PARTSHFT	8
278187692Snwhitehorn#define  SCREAMER_PART_CRYSTAL	0x00000100
279187692Snwhitehorn#define  SCREAMER_PART_NATIONAL	0x00000200
280187692Snwhitehorn#define  SCREAMER_PART_TI		0x00000300
281187692Snwhitehorn#define SCREAMER_STATUS_REVMASK	0x0000F000
282187692Snwhitehorn#define SCREAMER_STATUS_REVSHFT	12
283187692Snwhitehorn
284187692Snwhitehorn#endif /* _SOUND_DAVBUS_H */
285187692Snwhitehorn
286