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