xref: /netbsd-src/sys/arch/hppa/gsc/harmonyreg.h (revision 6d3ceb1d619615401b17c9aa3e4bc674a1cb048b)
1 /*	$NetBSD: harmonyreg.h,v 1.1 2014/02/24 07:23:43 skrll Exp $	*/
2 
3 /*	$OpenBSD: harmonyreg.h,v 1.5 2003/06/02 19:54:29 jason Exp $	*/
4 
5 /*
6  * Copyright (c) 2003 Jason L. Wright (jason@thought.net)
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
22  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  */
30 
31 /*
32  * Harmony CS4215/AD1849 register definitions based on:
33  *  "712 I/O Subsystem ERS", Revision 1.1, 12 February 1993
34  */
35 
36 /* harmony always uses a 4K buffer */
37 #define	HARMONY_BUFSIZE			4096
38 
39 #define	HARMONY_NREGS	0x40
40 
41 #define	HARMONY_ID		0x00		/* identification */
42 #define	HARMONY_RESET		0x04		/* reset */
43 #define	HARMONY_CNTL		0x08		/* control */
44 #define	HARMONY_GAINCTL		0x0c		/* gain control */
45 #define	HARMONY_PNXTADD		0x10		/* play next address */
46 #define	HARMONY_PCURADD		0x14		/* play current address */
47 #define	HARMONY_RNXTADD		0x18		/* record next address */
48 #define	HARMONY_RCURADD		0x1c		/* record current address */
49 #define	HARMONY_DSTATUS		0x20		/* device status */
50 #define	HARMONY_OV		0x24		/* overrange input */
51 #define	HARMONY_PIO		0x28		/* general purpose i/o */
52 #define	HARMONY_DIAG		0x3c		/* chi diagnostic */
53 
54 /* HARMONY_ID */
55 #define	ID_REV_MASK		0x00ff0000	/* revision mask: */
56 #define	ID_REV_SHIFT		16
57 #define	ID_REV_TS		0x00150000	/*  teleshare installed */
58 #define	ID_REV_NOTS		0x00140000	/*  teleshare not installed */
59 #define	ID_CHIID		0x0000f000	/* CHI identification */
60 #define	ID_CHIID_SHIFT		12
61 
62 /* HARMONY_RESET */
63 #define	RESET_RST		0x00000001	/* reset codec */
64 
65 /* HARMONY_CNTL */
66 #define	CNTL_C			0x80000000	/* control mode */
67 #define	CNTL_CODEC_REV_MASK	0x0ff00000	/* codec revision */
68 #define	CNTL_CODEC_REV_SHIFT	20
69 #define	CNTL_EXP_3		0x00020000	/* expansion bit 3 */
70 #define	CNTL_EXP_2		0x00010000	/* expansion bit 2 */
71 #define	CNTL_EXP_1		0x00008000	/* expansion bit 1 */
72 #define	CNTL_EXP_0		0x00004000	/* expansion bit 0 */
73 #define	CNTL_AC			0x00002000	/* autocalibration ad1849 */
74 #define	CNTL_AD			0x00001000	/* ad1849 compat? */
75 #define	CNTL_OLB		0x00000800	/* output level */
76 #define	CNTL_ITS		0x00000400	/* codec immediate tristate */
77 #define	CNTL_LS_MASK		0x00000300	/* loopback select: */
78 #define	CNTL_LS_NONE		0x00000000	/*  none */
79 #define	CNTL_LS_INTERNAL	0x00000100	/*  internal */
80 #define	CNTL_LS_DIGITAL		0x00000200	/*  digital */
81 #define	CNTL_LS_ANALOG		0x00000300	/*  analog */
82 #define	CNTL_FORMAT_MASK	0x000000c0	/* encoding format: */
83 #define	CNTL_FORMAT_SLINEAR16BE	0x00000000	/*  16 bit signed linear be */
84 #define	CNTL_FORMAT_ULAW	0x00000040	/*  8 bit ulaw */
85 #define	CNTL_FORMAT_ALAW	0x00000080	/*  8 bit alaw */
86 #define	CNTL_FORMAT_ULINEAR8	0x000000c0	/*  8 bit unsigned linear */
87 #define	CNTL_CHANS_MASK		0x00000020	/* number of channels: */
88 #define	CNTL_CHANS_MONO		0x00000000	/*  mono */
89 #define	CNTL_CHANS_STEREO	0x00000020	/*  stereo */
90 #define	CNTL_RATE_MASK		0x0000001f	/* sample rate (kHz): */
91 #define	CNTL_RATE_5125		0x00000010	/*  5.5125 */
92 #define	CNTL_RATE_6615		0x00000017	/*  6.615 */
93 #define	CNTL_RATE_8000		0x00000008	/*  8 */
94 #define	CNTL_RATE_9600		0x0000000f	/*  9.6 */
95 #define	CNTL_RATE_11025		0x00000011	/*  11.025 */
96 #define	CNTL_RATE_16000		0x00000009	/*  16 */
97 #define	CNTL_RATE_18900		0x00000012	/*  18.9 */
98 #define	CNTL_RATE_22050		0x00000013	/*  22.05 */
99 #define	CNTL_RATE_27428		0x0000000a	/*  27.42857 */
100 #define	CNTL_RATE_32000		0x0000000b	/*  32 */
101 #define	CNTL_RATE_33075		0x00000016	/*  33.075 */
102 #define	CNTL_RATE_37800		0x00000014	/*  37.8 */
103 #define	CNTL_RATE_44100		0x00000015	/*  44.1 */
104 #define	CNTL_RATE_48000		0x0000000e	/*  48 */
105 
106 /* HARMONY_GAINCTL */
107 #define	GAINCTL_HE		0x08000000	/* headphones enable */
108 #define	GAINCTL_LE		0x04000000	/* line output enable */
109 #define	GAINCTL_SE		0x02000000	/* speaker enable */
110 #define	GAINCTL_IS_MASK		0x01000000	/* input select: */
111 #define	GAINCTL_IS_LINE		0x00000000	/*  line input */
112 #define	GAINCTL_IS_MICROPHONE	0x01000000	/*  microphone */
113 #define	GAINCTL_INPUT_LEFT_M	0x0000f000	/* left input gain */
114 #define	GAINCTL_INPUT_LEFT_S	12
115 #define	GAINCTL_INPUT_RIGHT_M	0x000f0000	/* left input gain */
116 #define	GAINCTL_INPUT_RIGHT_S	16
117 #define	GAINCTL_INPUT_BITS	4
118 #define	GAINCTL_MONITOR_M	0x00f00000	/* monitor gain (inverted) */
119 #define	GAINCTL_MONITOR_S	20
120 #define	GAINCTL_MONITOR_BITS	4
121 #define	GAINCTL_OUTPUT_LEFT_M	0x00000fc0	/* left out gain (inverted) */
122 #define	GAINCTL_OUTPUT_LEFT_S	6
123 #define	GAINCTL_OUTPUT_RIGHT_M	0x0000003f	/* right out gain (inverted) */
124 #define	GAINCTL_OUTPUT_RIGHT_S	0
125 #define	GAINCTL_OUTPUT_BITS	6
126 
127 /* HARMONY_PCURADD */
128 #define	PCURADD_BUFMASK		(~(HARMONY_BUFSIZE - 1))
129 
130 /* HARMONY_RCURADD */
131 #define	RCURADD_BUFMASK		(~(HARMONY_BUFSIZE - 1))
132 
133 /* HARMONY_DSTATUS */
134 #define	DSTATUS_IE		0x80000000	/* interrupt enable */
135 #define	DSTATUS_PN		0x00000200	/* playback next empty */
136 #define	DSTATUS_PC		0x00000100	/* playback dma active */
137 #define	DSTATUS_RN		0x00000002	/* record next empty */
138 #define	DSTATUS_RC		0x00000001	/* record dma active */
139 
140 /* HARMONY_OV */
141 #define	OV_OV			0x00000001	/* input over range */
142 
143 /* HARMONY_PIO */
144 #define	PIO_PO			0x00000002	/* parallel output */
145 #define	PIO_PI			0x00000001	/* parallel input */
146 
147 /* HARMONY_DIAG */
148 #define	DIAG_CO			0x00000001	/* sclk from codec */
149 
150 /* CS4215_REV */
151 #define	CS4215_REV_VER		0x0f
152 #define	CS4215_REV_VER_C	0x00		/* CS4215 rev C */
153 #define	CS4215_REV_VER_D	0x01		/* CS4215 rev D */
154 #define	CS4215_REV_VER_E	0x02		/* CS4215 rev E/AD1849K */
155