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 #define ESS_ACMD_DAC8WRITE 0x10
76 #define ESS_ACMD_DAC16WRITE 0x11
77 #define ESS_ACMD_DMA8OUT 0x14
78 #define ESS_ACMD_DMA16OUT 0x15
79 #define ESS_ACMD_AUTODMA8OUT 0x1C
80 #define ESS_ACMD_AUTODMA16OUT 0x1D
81 #define ESS_ACMD_ADC8READ 0x20
82 #define ESS_ACMD_ADC16READ 0x21
83 #define ESS_ACMD_DMA8IN 0x24
84 #define ESS_ACMD_DMA16IN 0x25
85 #define ESS_ACMD_AUTODMA8IN 0x2C
86 #define ESS_ACMD_AUTODMA16IN 0x2D
87 #define ESS_ACMD_SETTIMECONST1 0x40
88 #define ESS_ACMD_SETTIMECONST15 0x41
89 #define ESS_ACMD_SETFILTER 0x42
90 #define ESS_ACMD_BLOCKSIZE 0x48
91
92 #define ESS_ACMD_DMA4OUT 0x74
93 #define ESS_ACMD_DMA4OUTREF 0x75
94 #define ESS_ACMD_DMA2_6OUT 0x76
95 #define ESS_ACMD_DMA2_6OUTREF 0x77
96 #define ESS_ACMD_DMA2OUT 0x7A
97 #define ESS_ACMD_DMA2OUTREF 0x7B
98 #define ESS_ACMD_SILENCEOUT 0x80
99 #define ESS_ACMD_START_AUTO_OUT 0x90
100 #define ESS_ACMD_START_OUT 0x91
101 #define ESS_ACMD_START_AUTO_IN 0x98
102 #define ESS_ACMD_START_IN 0x99
103
104 #define ESS_XCMD_SAMPLE_RATE 0xA1
105 #define ESS_XCMD_FILTER_CLOCK 0xA2
106 #define ESS_XCMD_XFER_COUNTLO 0xA4
107 #define ESS_XCMD_XFER_COUNTHI 0xA5
108 #define ESS_XCMD_AUDIO_CTRL 0xA8
109 #define ESS_AUDIO_CTRL_MONITOR 0x08
110 #define ESS_AUDIO_CTRL_MONO 0x02
111 #define ESS_AUDIO_CTRL_STEREO 0x01
112 #define ESS_XCMD_PREAMP_CTRL 0xA9
113 #define ESS_PREAMP_CTRL_ENABLE 0x04
114
115 #define ESS_XCMD_IRQ_CTRL 0xB1
116 #define ESS_IRQ_CTRL_INTRA 0x00
117 #define ESS_IRQ_CTRL_INTRB 0x04
118 #define ESS_IRQ_CTRL_INTRC 0x08
119 #define ESS_IRQ_CTRL_INTRD 0x0C
120 #define ESS_IRQ_CTRL_MASK 0x10
121 #define ESS_IRQ_CTRL_EXT 0x40
122 #define ESS_XCMD_DRQ_CTRL 0xB2
123 #define ESS_DRQ_CTRL_DRQA 0x04
124 #define ESS_DRQ_CTRL_DRQB 0x08
125 #define ESS_DRQ_CTRL_DRQC 0x0C
126 #define ESS_DRQ_CTRL_PU 0x10
127 #define ESS_DRQ_CTRL_EXT 0x40
128 #define ESS_XCMD_VOLIN_CTRL 0xB4
129 #define ESS_1788_XCMD_AUDIO_CTRL0 0xB6
130 #define ESS_CTRL0_SIGNED 0x00
131 #define ESS_CTRL0_UNSIGNED 0x80
132 #define ESS_XCMD_AUDIO1_CTRL1 0xB7
133 #define ESS_AUDIO1_CTRL1_FIFO_CONNECT 0x80
134 #define ESS_AUDIO1_CTRL1_FIFO_MONO 0x40
135 #define ESS_AUDIO1_CTRL1_FIFO_SIGNED 0x20
136 #define ESS_AUDIO1_CTRL1_FIFO_STEREO 0x08
137 #define ESS_AUDIO1_CTRL1_FIFO_SIZE 0x04
138 #define ESS_XCMD_AUDIO1_CTRL2 0xB8
139 #define ESS_AUDIO1_CTRL2_FIFO_ENABLE 0x01
140 #define ESS_AUDIO1_CTRL2_DMA_READ 0x02
141 #define ESS_AUDIO1_CTRL2_AUTO_INIT 0x04
142 #define ESS_AUDIO1_CTRL2_ADC_ENABLE 0x08
143 #define ESS_XCMD_DEMAND_CTRL 0xB9
144 #define ESS_DEMAND_CTRL_SINGLE 0x00
145 #define ESS_DEMAND_CTRL_DEMAND_2 0x01
146 #define ESS_DEMAND_CTRL_DEMAND_4 0x02
147
148 #define ESS_ACMD_ENABLE_EXT 0xC6
149 #define ESS_ACMD_DISABLE_EXT 0xC7
150
151 #define ESS_ACMD_PAUSE_DMA 0xD0
152 #define ESS_ACMD_ENABLE_SPKR 0xD1
153 #define ESS_ACMD_DISABLE_SPKR 0xD3
154 #define ESS_ACMD_CONT_DMA 0xD4
155 #define ESS_ACMD_SPKR_STATUS 0xD8
156 #define ESS_SPKR_OFF 0x00
157 #define ESS_SPKR_ON 0xFF
158 #define ESS_ACMD_VERSION 0xE1
159 #define ESS_ACMD_LEGACY_ID 0xE7
160
161 #define ESS_MINRATE 4000
162 #define ESS_MAXRATE 44100
163
164
165
166
167 #define ESS_BASE_VALID(base) ((base) == 0x220 || (base) == 0x230 || (base) == 0x240 || (base) == 0x250)
168 #define ESS_IRQ1_VALID(irq) ((irq) == 5 || (irq) == 7 || (irq) == 9 || (irq) == 10)
169
170 #define ESS_IRQ2_VALID(irq) ((irq) == 15)
171
172 #define ESS_IRQ12_VALID(irq) ((irq) == 5 || (irq) == 7 || (irq) == 9 || (irq) == 10 || (irq) == 15)
173
174 #define ESS_DRQ1_VALID(chan) ((chan) == 0 || (chan) == 1 || (chan) == 3)
175
176 #define ESS_DRQ2_VALID(chan) ((chan) == 0 || (chan) == 1 || (chan) == 3 || (chan) == 5)
177
178 #define ESS_USE_AUDIO1(model) (((model) == ESS_1788) || ((model) == ESS_1868) || ((model) ==ESS_1878) || ((model) == ESS_1869) || ((model) == ESS_1879))
179
180
181
182
183 #define ESS_4BIT_GAIN(x) ((x) & 0xf0)
184 #define ESS_3BIT_GAIN(x) (((x) & 0xe0) >> 1)
185 #define ESS_STEREO_GAIN(l, r) ((l) | ((r) >> 4))
186 #define ESS_MONO_GAIN(x) ((x) >> 4)
187
188 #ifdef ESS_AMODE_LOW
189
190
191
192 #define ESS_CONFIG_KEY_BASE 0x229
193 #define ESS_CONFIG_KEY_PORTS 3
194 #else
195
196
197
198 #define ESS_SCR_ACCESS_BASE 0xF9
199 #define ESS_SCR_ACCESS_PORTS 3
200 #define ESS_SCR_LOCK 0
201 #define ESS_SCR_UNLOCK 2
202
203 #define ESS_SCR_BASE 0xE0
204 #define ESS_SCR_PORTS 2
205 #define ESS_SCR_INDEX 0
206 #define ESS_SCR_DATA 1
207
208
209
210
211 #define ESS_SCR_AUDIO_ENABLE 0x04
212 #define ESS_SCR_AUDIO_220 0x00
213 #define ESS_SCR_AUDIO_230 0x01
214 #define ESS_SCR_AUDIO_240 0x02
215 #define ESS_SCR_AUDIO_250 0x03
216 #endif
217
218
219
220
221 #define ESS_READ_TIMEOUT 5000
222 #define ESS_WRITE_TIMEOUT 5000
223
224
225 #define ESS_NPORT 16
226 #define ESS_DSP_RESET 0x06
227 #define ESS_RESET_EXT 0x03
228 #define ESS_MAGIC 0xAA
229
230 #define ESS_DSP_READ 0x0A
231 #define ESS_DSP_WRITE 0x0C
232
233 #define ESS_CLEAR_INTR 0x0E
234
235 #define ESS_DSP_RW_STATUS 0x0C
236 #define ESS_DSP_WRITE_BUSY 0x80
237 #define ESS_DSP_READ_READY 0x40
238 #define ESS_DSP_READ_FULL 0x20
239 #define ESS_DSP_READ_EMPTY 0x10
240 #define ESS_DSP_READ_HALF 0x08
241 #define ESS_DSP_READ_IRQ 0x04
242 #define ESS_DSP_READ_HALF_IRQ 0x02
243 #define ESS_DSP_READ_OFLOW 0x01
244 #define ESS_DSP_READ_ANYIRQ (ESS_DSP_READ_IRQ | \
245 ESS_DSP_READ_HALF_IRQ | \
246 ESS_DSP_READ_OFLOW)
247
248 #define ESS_MIX_REG_SELECT 0x04
249 #define ESS_MIX_REG_DATA 0x05
250 #define ESS_MIX_RESET 0x00
251
252
253
254
255
256 #define ESS_MREG_VOLUME_VOICE 0x14
257 #define ESS_MREG_VOLUME_MIC 0x1A
258 #define ESS_MREG_ADC_SOURCE 0x1C
259 #define ESS_SOURCE_MIC 0x00
260 #define ESS_SOURCE_CD 0x02
261 #define ESS_SOURCE_LINE 0x06
262 #define ESS_SOURCE_MIXER 0x07
263 #define ESS_MREG_VOLUME_MASTER 0x32
264 #define ESS_MREG_VOLUME_SYNTH 0x36
265 #define ESS_MREG_VOLUME_CD 0x38
266 #define ESS_MREG_VOLUME_AUXB 0x3A
267 #define ESS_MREG_VOLUME_PCSPKR 0x3C
268 #define ESS_MREG_VOLUME_LINE 0x3E
269 #define ESS_MREG_VOLUME_LEFT 0x60
270 #define ESS_MREG_VOLUME_RIGHT 0x62
271 #define ESS_VOLUME_MUTE 0x40
272 #define ESS_MREG_VOLUME_CTRL 0x64
273 #define ESS_MREG_SAMPLE_RATE 0x70
274 #define ESS_MREG_FILTER_CLOCK 0x72
275 #define ESS_MREG_XFER_COUNTLO 0x74
276 #define ESS_MREG_XFER_COUNTHI 0x76
277 #define ESS_MREG_AUDIO2_CTRL1 0x78
278 #define ESS_AUDIO2_CTRL1_SINGLE 0x00
279 #define ESS_AUDIO2_CTRL1_DEMAND_2 0x40
280 #define ESS_AUDIO2_CTRL1_DEMAND_4 0x80
281 #define ESS_AUDIO2_CTRL1_DEMAND_8 0xC0
282 #define ESS_AUDIO2_CTRL1_XFER_SIZE 0x20
283 #define ESS_AUDIO2_CTRL1_AUTO_INIT 0x10
284 #define ESS_AUDIO2_CTRL1_FIFO_ENABLE 0x02
285 #define ESS_AUDIO2_CTRL1_DAC_ENABLE 0x01
286 #define ESS_MREG_AUDIO2_CTRL2 0x7A
287 #define ESS_AUDIO2_CTRL2_FIFO_SIZE 0x01
288 #define ESS_AUDIO2_CTRL2_CHANNELS 0x02
289 #define ESS_AUDIO2_CTRL2_FIFO_SIGNED 0x04
290 #define ESS_AUDIO2_CTRL2_DMA_ENABLE 0x20
291 #define ESS_AUDIO2_CTRL2_IRQ2_ENABLE 0x40
292 #define ESS_AUDIO2_CTRL2_IRQ_LATCH 0x80
293 #define ESS_MREG_AUDIO2_CTRL3 0x7D
294 #define ESS_AUDIO2_CTRL3_DRQA 0x00
295 #define ESS_AUDIO2_CTRL3_DRQB 0x01
296 #define ESS_AUDIO2_CTRL3_DRQC 0x02
297 #define ESS_AUDIO2_CTRL3_DRQD 0x03
298 #define ESS_AUDIO2_CTRL3_DRQ_PD 0x04
299 #define ESS_MREG_INTR_ST 0x7F
300 #define ESS_IS_SELECT_IRQ 0x01
301 #define ESS_IS_ES1888 0x00
302 #define ESS_IS_INTRA 0x02
303 #define ESS_IS_INTRB 0x04
304 #define ESS_IS_INTRC 0x06
305 #define ESS_IS_INTRD 0x08
306 #define ESS_IS_INTRE 0x0A