2 * Copyright (c) by Jaroslav Kysela <perex@perex.cz>,
3 * Takashi Iwai <tiwai@suse.de>
5 * Routines for control of EMU10K1 chips / mixer routines
6 * Multichannel PCM support Copyright (c) Lee Revell <rlrevell@joe-job.com>
8 * Copyright (c) by James Courtier-Dutton <James@superbug.co.uk>
9 * Added EMU 1010 support.
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by
19 * the Free Software Foundation; either version 2 of the License, or
20 * (at your option) any later version.
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
33 #include <sound/driver.h>
34 #include <linux/time.h>
35 #include <linux/init.h>
36 #include <sound/core.h>
37 #include <sound/emu10k1.h>
38 #include <linux/delay.h>
39 #include <sound/tlv.h>
43 #define AC97_ID_STAC9758 0x83847658
45 static const DECLARE_TLV_DB_SCALE(snd_audigy_db_scale2, -10350, 50, 1); /* WM8775 gain scale */
47 static int snd_emu10k1_spdif_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
49 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
54 static int snd_emu10k1_spdif_get(struct snd_kcontrol *kcontrol,
55 struct snd_ctl_elem_value *ucontrol)
57 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
58 unsigned int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
61 spin_lock_irqsave(&emu->reg_lock, flags);
62 ucontrol->value.iec958.status[0] = (emu->spdif_bits[idx] >> 0) & 0xff;
63 ucontrol->value.iec958.status[1] = (emu->spdif_bits[idx] >> 8) & 0xff;
64 ucontrol->value.iec958.status[2] = (emu->spdif_bits[idx] >> 16) & 0xff;
65 ucontrol->value.iec958.status[3] = (emu->spdif_bits[idx] >> 24) & 0xff;
66 spin_unlock_irqrestore(&emu->reg_lock, flags);
70 static int snd_emu10k1_spdif_get_mask(struct snd_kcontrol *kcontrol,
71 struct snd_ctl_elem_value *ucontrol)
73 ucontrol->value.iec958.status[0] = 0xff;
74 ucontrol->value.iec958.status[1] = 0xff;
75 ucontrol->value.iec958.status[2] = 0xff;
76 ucontrol->value.iec958.status[3] = 0xff;
81 * Items labels in enum mixer controls assigning source data to
84 static char *emu1010_src_texts[] = {
141 * List of data sources available for each destination
143 static unsigned int emu1010_src_regs[] = {
144 EMU_SRC_SILENCE,/* 0 */
145 EMU_SRC_DOCK_MIC_A1, /* 1 */
146 EMU_SRC_DOCK_MIC_B1, /* 2 */
147 EMU_SRC_DOCK_ADC1_LEFT1, /* 3 */
148 EMU_SRC_DOCK_ADC1_RIGHT1, /* 4 */
149 EMU_SRC_DOCK_ADC2_LEFT1, /* 5 */
150 EMU_SRC_DOCK_ADC2_RIGHT1, /* 6 */
151 EMU_SRC_DOCK_ADC3_LEFT1, /* 7 */
152 EMU_SRC_DOCK_ADC3_RIGHT1, /* 8 */
153 EMU_SRC_HAMOA_ADC_LEFT1, /* 9 */
154 EMU_SRC_HAMOA_ADC_RIGHT1, /* 10 */
155 EMU_SRC_HANA_SPDIF_LEFT1, /* 11 */
156 EMU_SRC_HANA_SPDIF_RIGHT1, /* 12 */
157 EMU_SRC_HANA_ADAT, /* 13 */
158 EMU_SRC_HANA_ADAT+1, /* 14 */
159 EMU_SRC_HANA_ADAT+2, /* 15 */
160 EMU_SRC_HANA_ADAT+3, /* 16 */
161 EMU_SRC_HANA_ADAT+4, /* 17 */
162 EMU_SRC_HANA_ADAT+5, /* 18 */
163 EMU_SRC_HANA_ADAT+6, /* 19 */
164 EMU_SRC_HANA_ADAT+7, /* 20 */
165 EMU_SRC_ALICE_EMU32A, /* 21 */
166 EMU_SRC_ALICE_EMU32A+1, /* 22 */
167 EMU_SRC_ALICE_EMU32A+2, /* 23 */
168 EMU_SRC_ALICE_EMU32A+3, /* 24 */
169 EMU_SRC_ALICE_EMU32A+4, /* 25 */
170 EMU_SRC_ALICE_EMU32A+5, /* 26 */
171 EMU_SRC_ALICE_EMU32A+6, /* 27 */
172 EMU_SRC_ALICE_EMU32A+7, /* 28 */
173 EMU_SRC_ALICE_EMU32A+8, /* 29 */
174 EMU_SRC_ALICE_EMU32A+9, /* 30 */
175 EMU_SRC_ALICE_EMU32A+0xa, /* 31 */
176 EMU_SRC_ALICE_EMU32A+0xb, /* 32 */
177 EMU_SRC_ALICE_EMU32A+0xc, /* 33 */
178 EMU_SRC_ALICE_EMU32A+0xd, /* 34 */
179 EMU_SRC_ALICE_EMU32A+0xe, /* 35 */
180 EMU_SRC_ALICE_EMU32A+0xf, /* 36 */
181 EMU_SRC_ALICE_EMU32B, /* 37 */
182 EMU_SRC_ALICE_EMU32B+1, /* 38 */
183 EMU_SRC_ALICE_EMU32B+2, /* 39 */
184 EMU_SRC_ALICE_EMU32B+3, /* 40 */
185 EMU_SRC_ALICE_EMU32B+4, /* 41 */
186 EMU_SRC_ALICE_EMU32B+5, /* 42 */
187 EMU_SRC_ALICE_EMU32B+6, /* 43 */
188 EMU_SRC_ALICE_EMU32B+7, /* 44 */
189 EMU_SRC_ALICE_EMU32B+8, /* 45 */
190 EMU_SRC_ALICE_EMU32B+9, /* 46 */
191 EMU_SRC_ALICE_EMU32B+0xa, /* 47 */
192 EMU_SRC_ALICE_EMU32B+0xb, /* 48 */
193 EMU_SRC_ALICE_EMU32B+0xc, /* 49 */
194 EMU_SRC_ALICE_EMU32B+0xd, /* 50 */
195 EMU_SRC_ALICE_EMU32B+0xe, /* 51 */
196 EMU_SRC_ALICE_EMU32B+0xf, /* 52 */
200 * Data destinations - physical EMU outputs.
201 * Each destination has an enum mixer control to choose a data source
203 static unsigned int emu1010_output_dst[] = {
204 EMU_DST_DOCK_DAC1_LEFT1, /* 0 */
205 EMU_DST_DOCK_DAC1_RIGHT1, /* 1 */
206 EMU_DST_DOCK_DAC2_LEFT1, /* 2 */
207 EMU_DST_DOCK_DAC2_RIGHT1, /* 3 */
208 EMU_DST_DOCK_DAC3_LEFT1, /* 4 */
209 EMU_DST_DOCK_DAC3_RIGHT1, /* 5 */
210 EMU_DST_DOCK_DAC4_LEFT1, /* 6 */
211 EMU_DST_DOCK_DAC4_RIGHT1, /* 7 */
212 EMU_DST_DOCK_PHONES_LEFT1, /* 8 */
213 EMU_DST_DOCK_PHONES_RIGHT1, /* 9 */
214 EMU_DST_DOCK_SPDIF_LEFT1, /* 10 */
215 EMU_DST_DOCK_SPDIF_RIGHT1, /* 11 */
216 EMU_DST_HANA_SPDIF_LEFT1, /* 12 */
217 EMU_DST_HANA_SPDIF_RIGHT1, /* 13 */
218 EMU_DST_HAMOA_DAC_LEFT1, /* 14 */
219 EMU_DST_HAMOA_DAC_RIGHT1, /* 15 */
220 EMU_DST_HANA_ADAT, /* 16 */
221 EMU_DST_HANA_ADAT+1, /* 17 */
222 EMU_DST_HANA_ADAT+2, /* 18 */
223 EMU_DST_HANA_ADAT+3, /* 19 */
224 EMU_DST_HANA_ADAT+4, /* 20 */
225 EMU_DST_HANA_ADAT+5, /* 21 */
226 EMU_DST_HANA_ADAT+6, /* 22 */
227 EMU_DST_HANA_ADAT+7, /* 23 */
231 * Data destinations - HANA outputs going to Alice2 (audigy) for
232 * capture (EMU32 + I2S links)
233 * Each destination has an enum mixer control to choose a data source
235 static unsigned int emu1010_input_dst[] = {
236 EMU_DST_ALICE2_EMU32_0,
237 EMU_DST_ALICE2_EMU32_1,
238 EMU_DST_ALICE2_EMU32_2,
239 EMU_DST_ALICE2_EMU32_3,
240 EMU_DST_ALICE2_EMU32_4,
241 EMU_DST_ALICE2_EMU32_5,
242 EMU_DST_ALICE2_EMU32_6,
243 EMU_DST_ALICE2_EMU32_7,
244 EMU_DST_ALICE2_EMU32_8,
245 EMU_DST_ALICE2_EMU32_9,
246 EMU_DST_ALICE2_EMU32_A,
247 EMU_DST_ALICE2_EMU32_B,
248 EMU_DST_ALICE2_EMU32_C,
249 EMU_DST_ALICE2_EMU32_D,
250 EMU_DST_ALICE2_EMU32_E,
251 EMU_DST_ALICE2_EMU32_F,
252 EMU_DST_ALICE_I2S0_LEFT,
253 EMU_DST_ALICE_I2S0_RIGHT,
254 EMU_DST_ALICE_I2S1_LEFT,
255 EMU_DST_ALICE_I2S1_RIGHT,
256 EMU_DST_ALICE_I2S2_LEFT,
257 EMU_DST_ALICE_I2S2_RIGHT,
260 static int snd_emu1010_input_output_source_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
262 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
264 uinfo->value.enumerated.items = 53;
265 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
266 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
267 strcpy(uinfo->value.enumerated.name, emu1010_src_texts[uinfo->value.enumerated.item]);
271 static int snd_emu1010_output_source_get(struct snd_kcontrol *kcontrol,
272 struct snd_ctl_elem_value *ucontrol)
274 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
277 channel = (kcontrol->private_value) & 0xff;
278 ucontrol->value.enumerated.item[0] = emu->emu1010.output_source[channel];
282 static int snd_emu1010_output_source_put(struct snd_kcontrol *kcontrol,
283 struct snd_ctl_elem_value *ucontrol)
285 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
290 channel = (kcontrol->private_value) & 0xff;
291 if (emu->emu1010.output_source[channel] != ucontrol->value.enumerated.item[0]) {
292 val = emu->emu1010.output_source[channel] = ucontrol->value.enumerated.item[0];
294 snd_emu1010_fpga_link_dst_src_write(emu,
295 emu1010_output_dst[channel], emu1010_src_regs[val]);
300 static int snd_emu1010_input_source_get(struct snd_kcontrol *kcontrol,
301 struct snd_ctl_elem_value *ucontrol)
303 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
306 channel = (kcontrol->private_value) & 0xff;
307 ucontrol->value.enumerated.item[0] = emu->emu1010.input_source[channel];
311 static int snd_emu1010_input_source_put(struct snd_kcontrol *kcontrol,
312 struct snd_ctl_elem_value *ucontrol)
314 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
319 channel = (kcontrol->private_value) & 0xff;
320 if (emu->emu1010.input_source[channel] != ucontrol->value.enumerated.item[0]) {
321 val = emu->emu1010.input_source[channel] = ucontrol->value.enumerated.item[0];
323 snd_emu1010_fpga_link_dst_src_write(emu,
324 emu1010_input_dst[channel], emu1010_src_regs[val]);
329 #define EMU1010_SOURCE_OUTPUT(xname,chid) \
331 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
332 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, \
333 .info = snd_emu1010_input_output_source_info, \
334 .get = snd_emu1010_output_source_get, \
335 .put = snd_emu1010_output_source_put, \
336 .private_value = chid \
339 static struct snd_kcontrol_new snd_emu1010_output_enum_ctls[] __devinitdata = {
340 EMU1010_SOURCE_OUTPUT("Dock DAC1 Left Playback Enum", 0),
341 EMU1010_SOURCE_OUTPUT("Dock DAC1 Right Playback Enum", 1),
342 EMU1010_SOURCE_OUTPUT("Dock DAC2 Left Playback Enum", 2),
343 EMU1010_SOURCE_OUTPUT("Dock DAC2 Right Playback Enum", 3),
344 EMU1010_SOURCE_OUTPUT("Dock DAC3 Left Playback Enum", 4),
345 EMU1010_SOURCE_OUTPUT("Dock DAC3 Right Playback Enum", 5),
346 EMU1010_SOURCE_OUTPUT("Dock DAC4 Left Playback Enum", 6),
347 EMU1010_SOURCE_OUTPUT("Dock DAC4 Right Playback Enum", 7),
348 EMU1010_SOURCE_OUTPUT("Dock Phones Left Playback Enum", 8),
349 EMU1010_SOURCE_OUTPUT("Dock Phones Right Playback Enum", 9),
350 EMU1010_SOURCE_OUTPUT("Dock SPDIF Left Playback Enum", 0xa),
351 EMU1010_SOURCE_OUTPUT("Dock SPDIF Right Playback Enum", 0xb),
352 EMU1010_SOURCE_OUTPUT("1010 SPDIF Left Playback Enum", 0xc),
353 EMU1010_SOURCE_OUTPUT("1010 SPDIF Right Playback Enum", 0xd),
354 EMU1010_SOURCE_OUTPUT("0202 DAC Left Playback Enum", 0xe),
355 EMU1010_SOURCE_OUTPUT("0202 DAC Right Playback Enum", 0xf),
356 EMU1010_SOURCE_OUTPUT("1010 ADAT 0 Playback Enum", 0x10),
357 EMU1010_SOURCE_OUTPUT("1010 ADAT 1 Playback Enum", 0x11),
358 EMU1010_SOURCE_OUTPUT("1010 ADAT 2 Playback Enum", 0x12),
359 EMU1010_SOURCE_OUTPUT("1010 ADAT 3 Playback Enum", 0x13),
360 EMU1010_SOURCE_OUTPUT("1010 ADAT 4 Playback Enum", 0x14),
361 EMU1010_SOURCE_OUTPUT("1010 ADAT 5 Playback Enum", 0x15),
362 EMU1010_SOURCE_OUTPUT("1010 ADAT 6 Playback Enum", 0x16),
363 EMU1010_SOURCE_OUTPUT("1010 ADAT 7 Playback Enum", 0x17),
366 #define EMU1010_SOURCE_INPUT(xname,chid) \
368 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
369 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, \
370 .info = snd_emu1010_input_output_source_info, \
371 .get = snd_emu1010_input_source_get, \
372 .put = snd_emu1010_input_source_put, \
373 .private_value = chid \
376 static struct snd_kcontrol_new snd_emu1010_input_enum_ctls[] __devinitdata = {
377 EMU1010_SOURCE_INPUT("DSP 0 Capture Enum", 0),
378 EMU1010_SOURCE_INPUT("DSP 1 Capture Enum", 1),
379 EMU1010_SOURCE_INPUT("DSP 2 Capture Enum", 2),
380 EMU1010_SOURCE_INPUT("DSP 3 Capture Enum", 3),
381 EMU1010_SOURCE_INPUT("DSP 4 Capture Enum", 4),
382 EMU1010_SOURCE_INPUT("DSP 5 Capture Enum", 5),
383 EMU1010_SOURCE_INPUT("DSP 6 Capture Enum", 6),
384 EMU1010_SOURCE_INPUT("DSP 7 Capture Enum", 7),
385 EMU1010_SOURCE_INPUT("DSP 8 Capture Enum", 8),
386 EMU1010_SOURCE_INPUT("DSP 9 Capture Enum", 9),
387 EMU1010_SOURCE_INPUT("DSP A Capture Enum", 0xa),
388 EMU1010_SOURCE_INPUT("DSP B Capture Enum", 0xb),
389 EMU1010_SOURCE_INPUT("DSP C Capture Enum", 0xc),
390 EMU1010_SOURCE_INPUT("DSP D Capture Enum", 0xd),
391 EMU1010_SOURCE_INPUT("DSP E Capture Enum", 0xe),
392 EMU1010_SOURCE_INPUT("DSP F Capture Enum", 0xf),
393 EMU1010_SOURCE_INPUT("DSP 10 Capture Enum", 0x10),
394 EMU1010_SOURCE_INPUT("DSP 11 Capture Enum", 0x11),
395 EMU1010_SOURCE_INPUT("DSP 12 Capture Enum", 0x12),
396 EMU1010_SOURCE_INPUT("DSP 13 Capture Enum", 0x13),
397 EMU1010_SOURCE_INPUT("DSP 14 Capture Enum", 0x14),
398 EMU1010_SOURCE_INPUT("DSP 15 Capture Enum", 0x15),
403 #define snd_emu1010_adc_pads_info snd_ctl_boolean_mono_info
405 static int snd_emu1010_adc_pads_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
407 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
408 unsigned int mask = kcontrol->private_value & 0xff;
409 ucontrol->value.integer.value[0] = (emu->emu1010.adc_pads & mask) ? 1 : 0;
413 static int snd_emu1010_adc_pads_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
415 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
416 unsigned int mask = kcontrol->private_value & 0xff;
417 unsigned int val, cache;
418 val = ucontrol->value.integer.value[0];
419 cache = emu->emu1010.adc_pads;
421 cache = cache | mask;
423 cache = cache & ~mask;
424 if (cache != emu->emu1010.adc_pads) {
425 snd_emu1010_fpga_write(emu, EMU_HANA_ADC_PADS, cache );
426 emu->emu1010.adc_pads = cache;
434 #define EMU1010_ADC_PADS(xname,chid) \
436 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
437 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, \
438 .info = snd_emu1010_adc_pads_info, \
439 .get = snd_emu1010_adc_pads_get, \
440 .put = snd_emu1010_adc_pads_put, \
441 .private_value = chid \
444 static struct snd_kcontrol_new snd_emu1010_adc_pads[] __devinitdata = {
445 EMU1010_ADC_PADS("ADC1 14dB PAD Audio Dock Capture Switch", EMU_HANA_DOCK_ADC_PAD1),
446 EMU1010_ADC_PADS("ADC2 14dB PAD Audio Dock Capture Switch", EMU_HANA_DOCK_ADC_PAD2),
447 EMU1010_ADC_PADS("ADC3 14dB PAD Audio Dock Capture Switch", EMU_HANA_DOCK_ADC_PAD3),
448 EMU1010_ADC_PADS("ADC1 14dB PAD 0202 Capture Switch", EMU_HANA_0202_ADC_PAD1),
451 #define snd_emu1010_dac_pads_info snd_ctl_boolean_mono_info
453 static int snd_emu1010_dac_pads_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
455 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
456 unsigned int mask = kcontrol->private_value & 0xff;
457 ucontrol->value.integer.value[0] = (emu->emu1010.dac_pads & mask) ? 1 : 0;
461 static int snd_emu1010_dac_pads_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
463 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
464 unsigned int mask = kcontrol->private_value & 0xff;
465 unsigned int val, cache;
466 val = ucontrol->value.integer.value[0];
467 cache = emu->emu1010.dac_pads;
469 cache = cache | mask;
471 cache = cache & ~mask;
472 if (cache != emu->emu1010.dac_pads) {
473 snd_emu1010_fpga_write(emu, EMU_HANA_DAC_PADS, cache );
474 emu->emu1010.dac_pads = cache;
482 #define EMU1010_DAC_PADS(xname,chid) \
484 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
485 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, \
486 .info = snd_emu1010_dac_pads_info, \
487 .get = snd_emu1010_dac_pads_get, \
488 .put = snd_emu1010_dac_pads_put, \
489 .private_value = chid \
492 static struct snd_kcontrol_new snd_emu1010_dac_pads[] __devinitdata = {
493 EMU1010_DAC_PADS("DAC1 Audio Dock 14dB PAD Playback Switch", EMU_HANA_DOCK_DAC_PAD1),
494 EMU1010_DAC_PADS("DAC2 Audio Dock 14dB PAD Playback Switch", EMU_HANA_DOCK_DAC_PAD2),
495 EMU1010_DAC_PADS("DAC3 Audio Dock 14dB PAD Playback Switch", EMU_HANA_DOCK_DAC_PAD3),
496 EMU1010_DAC_PADS("DAC4 Audio Dock 14dB PAD Playback Switch", EMU_HANA_DOCK_DAC_PAD4),
497 EMU1010_DAC_PADS("DAC1 0202 14dB PAD Playback Switch", EMU_HANA_0202_DAC_PAD1),
501 static int snd_emu1010_internal_clock_info(struct snd_kcontrol *kcontrol,
502 struct snd_ctl_elem_info *uinfo)
504 static char *texts[4] = {
505 "44100", "48000", "SPDIF", "ADAT"
508 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
510 uinfo->value.enumerated.items = 4;
511 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
512 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
513 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]);
519 static int snd_emu1010_internal_clock_get(struct snd_kcontrol *kcontrol,
520 struct snd_ctl_elem_value *ucontrol)
522 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
524 ucontrol->value.enumerated.item[0] = emu->emu1010.internal_clock;
528 static int snd_emu1010_internal_clock_put(struct snd_kcontrol *kcontrol,
529 struct snd_ctl_elem_value *ucontrol)
531 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
535 val = ucontrol->value.enumerated.item[0] ;
536 change = (emu->emu1010.internal_clock != val);
538 emu->emu1010.internal_clock = val;
543 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_MUTE );
544 /* Default fallback clock 48kHz */
545 snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, EMU_HANA_DEFCLOCK_44_1K );
546 /* Word Clock source, Internal 44.1kHz x1 */
547 snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK,
548 EMU_HANA_WCLOCK_INT_44_1K | EMU_HANA_WCLOCK_1X );
549 /* Set LEDs on Audio Dock */
550 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2,
551 EMU_HANA_DOCK_LEDS_2_44K | EMU_HANA_DOCK_LEDS_2_LOCK );
552 /* Allow DLL to settle */
555 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE );
560 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_MUTE );
561 /* Default fallback clock 48kHz */
562 snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, EMU_HANA_DEFCLOCK_48K );
563 /* Word Clock source, Internal 48kHz x1 */
564 snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK,
565 EMU_HANA_WCLOCK_INT_48K | EMU_HANA_WCLOCK_1X );
566 /* Set LEDs on Audio Dock */
567 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2,
568 EMU_HANA_DOCK_LEDS_2_48K | EMU_HANA_DOCK_LEDS_2_LOCK );
569 /* Allow DLL to settle */
572 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE );
575 case 2: /* Take clock from S/PDIF IN */
577 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_MUTE );
578 /* Default fallback clock 48kHz */
579 snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, EMU_HANA_DEFCLOCK_48K );
580 /* Word Clock source, sync to S/PDIF input */
581 snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK,
582 EMU_HANA_WCLOCK_HANA_SPDIF_IN | EMU_HANA_WCLOCK_1X );
583 /* Set LEDs on Audio Dock */
584 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2,
585 EMU_HANA_DOCK_LEDS_2_EXT | EMU_HANA_DOCK_LEDS_2_LOCK );
586 /* FIXME: We should set EMU_HANA_DOCK_LEDS_2_LOCK only when clock signal is present and valid */
587 /* Allow DLL to settle */
590 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE );
594 /* Take clock from ADAT IN */
596 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_MUTE );
597 /* Default fallback clock 48kHz */
598 snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, EMU_HANA_DEFCLOCK_48K );
599 /* Word Clock source, sync to ADAT input */
600 snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK,
601 EMU_HANA_WCLOCK_HANA_ADAT_IN | EMU_HANA_WCLOCK_1X );
602 /* Set LEDs on Audio Dock */
603 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2, EMU_HANA_DOCK_LEDS_2_EXT | EMU_HANA_DOCK_LEDS_2_LOCK );
604 /* FIXME: We should set EMU_HANA_DOCK_LEDS_2_LOCK only when clock signal is present and valid */
605 /* Allow DLL to settle */
608 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE );
617 static struct snd_kcontrol_new snd_emu1010_internal_clock =
619 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
620 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
621 .name = "Clock Internal Rate",
623 .info = snd_emu1010_internal_clock_info,
624 .get = snd_emu1010_internal_clock_get,
625 .put = snd_emu1010_internal_clock_put
628 static int snd_audigy_i2c_capture_source_info(struct snd_kcontrol *kcontrol,
629 struct snd_ctl_elem_info *uinfo)
632 static char *texts[4] = {
633 "Unknown1", "Unknown2", "Mic", "Line"
636 static char *texts[2] = {
640 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
642 uinfo->value.enumerated.items = 2;
643 if (uinfo->value.enumerated.item > 1)
644 uinfo->value.enumerated.item = 1;
645 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]);
649 static int snd_audigy_i2c_capture_source_get(struct snd_kcontrol *kcontrol,
650 struct snd_ctl_elem_value *ucontrol)
652 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
654 ucontrol->value.enumerated.item[0] = emu->i2c_capture_source;
658 static int snd_audigy_i2c_capture_source_put(struct snd_kcontrol *kcontrol,
659 struct snd_ctl_elem_value *ucontrol)
661 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
662 unsigned int source_id;
663 unsigned int ngain, ogain;
668 /* If the capture source has changed,
669 * update the capture volume from the cached value
670 * for the particular source.
672 source_id = ucontrol->value.enumerated.item[0]; /* Use 2 and 3 */
673 change = (emu->i2c_capture_source != source_id);
675 snd_emu10k1_i2c_write(emu, ADC_MUX, 0); /* Mute input */
676 spin_lock_irqsave(&emu->emu_lock, flags);
677 gpio = inl(emu->port + A_IOCFG);
679 outl(gpio | 0x4, emu->port + A_IOCFG);
681 outl(gpio & ~0x4, emu->port + A_IOCFG);
682 spin_unlock_irqrestore(&emu->emu_lock, flags);
684 ngain = emu->i2c_capture_volume[source_id][0]; /* Left */
685 ogain = emu->i2c_capture_volume[emu->i2c_capture_source][0]; /* Left */
687 snd_emu10k1_i2c_write(emu, ADC_ATTEN_ADCL, ((ngain) & 0xff));
688 ngain = emu->i2c_capture_volume[source_id][1]; /* Right */
689 ogain = emu->i2c_capture_volume[emu->i2c_capture_source][1]; /* Right */
691 snd_emu10k1_i2c_write(emu, ADC_ATTEN_ADCR, ((ngain) & 0xff));
693 source = 1 << (source_id + 2);
694 snd_emu10k1_i2c_write(emu, ADC_MUX, source); /* Set source */
695 emu->i2c_capture_source = source_id;
700 static struct snd_kcontrol_new snd_audigy_i2c_capture_source =
702 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
703 .name = "Capture Source",
704 .info = snd_audigy_i2c_capture_source_info,
705 .get = snd_audigy_i2c_capture_source_get,
706 .put = snd_audigy_i2c_capture_source_put
709 static int snd_audigy_i2c_volume_info(struct snd_kcontrol *kcontrol,
710 struct snd_ctl_elem_info *uinfo)
712 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
714 uinfo->value.integer.min = 0;
715 uinfo->value.integer.max = 255;
719 static int snd_audigy_i2c_volume_get(struct snd_kcontrol *kcontrol,
720 struct snd_ctl_elem_value *ucontrol)
722 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
725 source_id = kcontrol->private_value;
727 ucontrol->value.integer.value[0] = emu->i2c_capture_volume[source_id][0];
728 ucontrol->value.integer.value[1] = emu->i2c_capture_volume[source_id][1];
732 static int snd_audigy_i2c_volume_put(struct snd_kcontrol *kcontrol,
733 struct snd_ctl_elem_value *ucontrol)
735 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
741 source_id = kcontrol->private_value;
742 ogain = emu->i2c_capture_volume[source_id][0]; /* Left */
743 ngain = ucontrol->value.integer.value[0];
746 if (ogain != ngain) {
747 if (emu->i2c_capture_source == source_id)
748 snd_emu10k1_i2c_write(emu, ADC_ATTEN_ADCL, ((ngain) & 0xff) );
749 emu->i2c_capture_volume[source_id][0] = ucontrol->value.integer.value[0];
752 ogain = emu->i2c_capture_volume[source_id][1]; /* Right */
753 ngain = ucontrol->value.integer.value[1];
756 if (ogain != ngain) {
757 if (emu->i2c_capture_source == source_id)
758 snd_emu10k1_i2c_write(emu, ADC_ATTEN_ADCR, ((ngain) & 0xff));
759 emu->i2c_capture_volume[source_id][1] = ucontrol->value.integer.value[1];
766 #define I2C_VOLUME(xname,chid) \
768 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
769 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | \
770 SNDRV_CTL_ELEM_ACCESS_TLV_READ, \
771 .info = snd_audigy_i2c_volume_info, \
772 .get = snd_audigy_i2c_volume_get, \
773 .put = snd_audigy_i2c_volume_put, \
774 .tlv = { .p = snd_audigy_db_scale2 }, \
775 .private_value = chid \
779 static struct snd_kcontrol_new snd_audigy_i2c_volume_ctls[] __devinitdata = {
780 I2C_VOLUME("Mic Capture Volume", 0),
781 I2C_VOLUME("Line Capture Volume", 0)
785 static int snd_audigy_spdif_output_rate_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
787 static char *texts[] = {"44100", "48000", "96000"};
789 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
791 uinfo->value.enumerated.items = 3;
792 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
793 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
794 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]);
798 static int snd_audigy_spdif_output_rate_get(struct snd_kcontrol *kcontrol,
799 struct snd_ctl_elem_value *ucontrol)
801 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
806 spin_lock_irqsave(&emu->reg_lock, flags);
807 tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, 0);
808 switch (tmp & A_SPDIF_RATE_MASK) {
810 ucontrol->value.enumerated.item[0] = 0;
813 ucontrol->value.enumerated.item[0] = 1;
816 ucontrol->value.enumerated.item[0] = 2;
819 ucontrol->value.enumerated.item[0] = 1;
821 spin_unlock_irqrestore(&emu->reg_lock, flags);
825 static int snd_audigy_spdif_output_rate_put(struct snd_kcontrol *kcontrol,
826 struct snd_ctl_elem_value *ucontrol)
828 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
830 unsigned int reg, val, tmp;
833 switch(ucontrol->value.enumerated.item[0]) {
849 spin_lock_irqsave(&emu->reg_lock, flags);
850 reg = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, 0);
851 tmp = reg & ~A_SPDIF_RATE_MASK;
853 if ((change = (tmp != reg)))
854 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, 0, tmp);
855 spin_unlock_irqrestore(&emu->reg_lock, flags);
859 static struct snd_kcontrol_new snd_audigy_spdif_output_rate =
861 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
862 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
863 .name = "Audigy SPDIF Output Sample Rate",
865 .info = snd_audigy_spdif_output_rate_info,
866 .get = snd_audigy_spdif_output_rate_get,
867 .put = snd_audigy_spdif_output_rate_put
871 static int snd_emu10k1_spdif_put(struct snd_kcontrol *kcontrol,
872 struct snd_ctl_elem_value *ucontrol)
874 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
875 unsigned int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
880 val = (ucontrol->value.iec958.status[0] << 0) |
881 (ucontrol->value.iec958.status[1] << 8) |
882 (ucontrol->value.iec958.status[2] << 16) |
883 (ucontrol->value.iec958.status[3] << 24);
884 spin_lock_irqsave(&emu->reg_lock, flags);
885 change = val != emu->spdif_bits[idx];
887 snd_emu10k1_ptr_write(emu, SPCS0 + idx, 0, val);
888 emu->spdif_bits[idx] = val;
890 spin_unlock_irqrestore(&emu->reg_lock, flags);
894 static struct snd_kcontrol_new snd_emu10k1_spdif_mask_control =
896 .access = SNDRV_CTL_ELEM_ACCESS_READ,
897 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
898 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,MASK),
900 .info = snd_emu10k1_spdif_info,
901 .get = snd_emu10k1_spdif_get_mask
904 static struct snd_kcontrol_new snd_emu10k1_spdif_control =
906 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
907 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT),
909 .info = snd_emu10k1_spdif_info,
910 .get = snd_emu10k1_spdif_get,
911 .put = snd_emu10k1_spdif_put
915 static void update_emu10k1_fxrt(struct snd_emu10k1 *emu, int voice, unsigned char *route)
918 snd_emu10k1_ptr_write(emu, A_FXRT1, voice,
919 snd_emu10k1_compose_audigy_fxrt1(route));
920 snd_emu10k1_ptr_write(emu, A_FXRT2, voice,
921 snd_emu10k1_compose_audigy_fxrt2(route));
923 snd_emu10k1_ptr_write(emu, FXRT, voice,
924 snd_emu10k1_compose_send_routing(route));
928 static void update_emu10k1_send_volume(struct snd_emu10k1 *emu, int voice, unsigned char *volume)
930 snd_emu10k1_ptr_write(emu, PTRX_FXSENDAMOUNT_A, voice, volume[0]);
931 snd_emu10k1_ptr_write(emu, PTRX_FXSENDAMOUNT_B, voice, volume[1]);
932 snd_emu10k1_ptr_write(emu, PSST_FXSENDAMOUNT_C, voice, volume[2]);
933 snd_emu10k1_ptr_write(emu, DSL_FXSENDAMOUNT_D, voice, volume[3]);
935 unsigned int val = ((unsigned int)volume[4] << 24) |
936 ((unsigned int)volume[5] << 16) |
937 ((unsigned int)volume[6] << 8) |
938 (unsigned int)volume[7];
939 snd_emu10k1_ptr_write(emu, A_SENDAMOUNTS, voice, val);
943 /* PCM stream controls */
945 static int snd_emu10k1_send_routing_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
947 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
948 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
949 uinfo->count = emu->audigy ? 3*8 : 3*4;
950 uinfo->value.integer.min = 0;
951 uinfo->value.integer.max = emu->audigy ? 0x3f : 0x0f;
955 static int snd_emu10k1_send_routing_get(struct snd_kcontrol *kcontrol,
956 struct snd_ctl_elem_value *ucontrol)
959 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
960 struct snd_emu10k1_pcm_mixer *mix =
961 &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)];
963 int num_efx = emu->audigy ? 8 : 4;
964 int mask = emu->audigy ? 0x3f : 0x0f;
966 spin_lock_irqsave(&emu->reg_lock, flags);
967 for (voice = 0; voice < 3; voice++)
968 for (idx = 0; idx < num_efx; idx++)
969 ucontrol->value.integer.value[(voice * num_efx) + idx] =
970 mix->send_routing[voice][idx] & mask;
971 spin_unlock_irqrestore(&emu->reg_lock, flags);
975 static int snd_emu10k1_send_routing_put(struct snd_kcontrol *kcontrol,
976 struct snd_ctl_elem_value *ucontrol)
979 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
980 struct snd_emu10k1_pcm_mixer *mix =
981 &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)];
982 int change = 0, voice, idx, val;
983 int num_efx = emu->audigy ? 8 : 4;
984 int mask = emu->audigy ? 0x3f : 0x0f;
986 spin_lock_irqsave(&emu->reg_lock, flags);
987 for (voice = 0; voice < 3; voice++)
988 for (idx = 0; idx < num_efx; idx++) {
989 val = ucontrol->value.integer.value[(voice * num_efx) + idx] & mask;
990 if (mix->send_routing[voice][idx] != val) {
991 mix->send_routing[voice][idx] = val;
995 if (change && mix->epcm) {
996 if (mix->epcm->voices[0] && mix->epcm->voices[1]) {
997 update_emu10k1_fxrt(emu, mix->epcm->voices[0]->number,
998 &mix->send_routing[1][0]);
999 update_emu10k1_fxrt(emu, mix->epcm->voices[1]->number,
1000 &mix->send_routing[2][0]);
1001 } else if (mix->epcm->voices[0]) {
1002 update_emu10k1_fxrt(emu, mix->epcm->voices[0]->number,
1003 &mix->send_routing[0][0]);
1006 spin_unlock_irqrestore(&emu->reg_lock, flags);
1010 static struct snd_kcontrol_new snd_emu10k1_send_routing_control =
1012 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE,
1013 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
1014 .name = "EMU10K1 PCM Send Routing",
1016 .info = snd_emu10k1_send_routing_info,
1017 .get = snd_emu10k1_send_routing_get,
1018 .put = snd_emu10k1_send_routing_put
1021 static int snd_emu10k1_send_volume_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1023 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1024 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1025 uinfo->count = emu->audigy ? 3*8 : 3*4;
1026 uinfo->value.integer.min = 0;
1027 uinfo->value.integer.max = 255;
1031 static int snd_emu10k1_send_volume_get(struct snd_kcontrol *kcontrol,
1032 struct snd_ctl_elem_value *ucontrol)
1034 unsigned long flags;
1035 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1036 struct snd_emu10k1_pcm_mixer *mix =
1037 &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)];
1039 int num_efx = emu->audigy ? 8 : 4;
1041 spin_lock_irqsave(&emu->reg_lock, flags);
1042 for (idx = 0; idx < 3*num_efx; idx++)
1043 ucontrol->value.integer.value[idx] = mix->send_volume[idx/num_efx][idx%num_efx];
1044 spin_unlock_irqrestore(&emu->reg_lock, flags);
1048 static int snd_emu10k1_send_volume_put(struct snd_kcontrol *kcontrol,
1049 struct snd_ctl_elem_value *ucontrol)
1051 unsigned long flags;
1052 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1053 struct snd_emu10k1_pcm_mixer *mix =
1054 &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)];
1055 int change = 0, idx, val;
1056 int num_efx = emu->audigy ? 8 : 4;
1058 spin_lock_irqsave(&emu->reg_lock, flags);
1059 for (idx = 0; idx < 3*num_efx; idx++) {
1060 val = ucontrol->value.integer.value[idx] & 255;
1061 if (mix->send_volume[idx/num_efx][idx%num_efx] != val) {
1062 mix->send_volume[idx/num_efx][idx%num_efx] = val;
1066 if (change && mix->epcm) {
1067 if (mix->epcm->voices[0] && mix->epcm->voices[1]) {
1068 update_emu10k1_send_volume(emu, mix->epcm->voices[0]->number,
1069 &mix->send_volume[1][0]);
1070 update_emu10k1_send_volume(emu, mix->epcm->voices[1]->number,
1071 &mix->send_volume[2][0]);
1072 } else if (mix->epcm->voices[0]) {
1073 update_emu10k1_send_volume(emu, mix->epcm->voices[0]->number,
1074 &mix->send_volume[0][0]);
1077 spin_unlock_irqrestore(&emu->reg_lock, flags);
1081 static struct snd_kcontrol_new snd_emu10k1_send_volume_control =
1083 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE,
1084 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
1085 .name = "EMU10K1 PCM Send Volume",
1087 .info = snd_emu10k1_send_volume_info,
1088 .get = snd_emu10k1_send_volume_get,
1089 .put = snd_emu10k1_send_volume_put
1092 static int snd_emu10k1_attn_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1094 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1096 uinfo->value.integer.min = 0;
1097 uinfo->value.integer.max = 0xffff;
1101 static int snd_emu10k1_attn_get(struct snd_kcontrol *kcontrol,
1102 struct snd_ctl_elem_value *ucontrol)
1104 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1105 struct snd_emu10k1_pcm_mixer *mix =
1106 &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)];
1107 unsigned long flags;
1110 spin_lock_irqsave(&emu->reg_lock, flags);
1111 for (idx = 0; idx < 3; idx++)
1112 ucontrol->value.integer.value[idx] = mix->attn[idx];
1113 spin_unlock_irqrestore(&emu->reg_lock, flags);
1117 static int snd_emu10k1_attn_put(struct snd_kcontrol *kcontrol,
1118 struct snd_ctl_elem_value *ucontrol)
1120 unsigned long flags;
1121 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1122 struct snd_emu10k1_pcm_mixer *mix =
1123 &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)];
1124 int change = 0, idx, val;
1126 spin_lock_irqsave(&emu->reg_lock, flags);
1127 for (idx = 0; idx < 3; idx++) {
1128 val = ucontrol->value.integer.value[idx] & 0xffff;
1129 if (mix->attn[idx] != val) {
1130 mix->attn[idx] = val;
1134 if (change && mix->epcm) {
1135 if (mix->epcm->voices[0] && mix->epcm->voices[1]) {
1136 snd_emu10k1_ptr_write(emu, VTFT_VOLUMETARGET, mix->epcm->voices[0]->number, mix->attn[1]);
1137 snd_emu10k1_ptr_write(emu, VTFT_VOLUMETARGET, mix->epcm->voices[1]->number, mix->attn[2]);
1138 } else if (mix->epcm->voices[0]) {
1139 snd_emu10k1_ptr_write(emu, VTFT_VOLUMETARGET, mix->epcm->voices[0]->number, mix->attn[0]);
1142 spin_unlock_irqrestore(&emu->reg_lock, flags);
1146 static struct snd_kcontrol_new snd_emu10k1_attn_control =
1148 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE,
1149 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
1150 .name = "EMU10K1 PCM Volume",
1152 .info = snd_emu10k1_attn_info,
1153 .get = snd_emu10k1_attn_get,
1154 .put = snd_emu10k1_attn_put
1157 /* Mutichannel PCM stream controls */
1159 static int snd_emu10k1_efx_send_routing_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1161 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1162 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1163 uinfo->count = emu->audigy ? 8 : 4;
1164 uinfo->value.integer.min = 0;
1165 uinfo->value.integer.max = emu->audigy ? 0x3f : 0x0f;
1169 static int snd_emu10k1_efx_send_routing_get(struct snd_kcontrol *kcontrol,
1170 struct snd_ctl_elem_value *ucontrol)
1172 unsigned long flags;
1173 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1174 struct snd_emu10k1_pcm_mixer *mix =
1175 &emu->efx_pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)];
1177 int num_efx = emu->audigy ? 8 : 4;
1178 int mask = emu->audigy ? 0x3f : 0x0f;
1180 spin_lock_irqsave(&emu->reg_lock, flags);
1181 for (idx = 0; idx < num_efx; idx++)
1182 ucontrol->value.integer.value[idx] =
1183 mix->send_routing[0][idx] & mask;
1184 spin_unlock_irqrestore(&emu->reg_lock, flags);
1188 static int snd_emu10k1_efx_send_routing_put(struct snd_kcontrol *kcontrol,
1189 struct snd_ctl_elem_value *ucontrol)
1191 unsigned long flags;
1192 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1193 int ch = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
1194 struct snd_emu10k1_pcm_mixer *mix = &emu->efx_pcm_mixer[ch];
1195 int change = 0, idx, val;
1196 int num_efx = emu->audigy ? 8 : 4;
1197 int mask = emu->audigy ? 0x3f : 0x0f;
1199 spin_lock_irqsave(&emu->reg_lock, flags);
1200 for (idx = 0; idx < num_efx; idx++) {
1201 val = ucontrol->value.integer.value[idx] & mask;
1202 if (mix->send_routing[0][idx] != val) {
1203 mix->send_routing[0][idx] = val;
1208 if (change && mix->epcm) {
1209 if (mix->epcm->voices[ch]) {
1210 update_emu10k1_fxrt(emu, mix->epcm->voices[ch]->number,
1211 &mix->send_routing[0][0]);
1214 spin_unlock_irqrestore(&emu->reg_lock, flags);
1218 static struct snd_kcontrol_new snd_emu10k1_efx_send_routing_control =
1220 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE,
1221 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
1222 .name = "Multichannel PCM Send Routing",
1224 .info = snd_emu10k1_efx_send_routing_info,
1225 .get = snd_emu10k1_efx_send_routing_get,
1226 .put = snd_emu10k1_efx_send_routing_put
1229 static int snd_emu10k1_efx_send_volume_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1231 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1232 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1233 uinfo->count = emu->audigy ? 8 : 4;
1234 uinfo->value.integer.min = 0;
1235 uinfo->value.integer.max = 255;
1239 static int snd_emu10k1_efx_send_volume_get(struct snd_kcontrol *kcontrol,
1240 struct snd_ctl_elem_value *ucontrol)
1242 unsigned long flags;
1243 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1244 struct snd_emu10k1_pcm_mixer *mix =
1245 &emu->efx_pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)];
1247 int num_efx = emu->audigy ? 8 : 4;
1249 spin_lock_irqsave(&emu->reg_lock, flags);
1250 for (idx = 0; idx < num_efx; idx++)
1251 ucontrol->value.integer.value[idx] = mix->send_volume[0][idx];
1252 spin_unlock_irqrestore(&emu->reg_lock, flags);
1256 static int snd_emu10k1_efx_send_volume_put(struct snd_kcontrol *kcontrol,
1257 struct snd_ctl_elem_value *ucontrol)
1259 unsigned long flags;
1260 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1261 int ch = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
1262 struct snd_emu10k1_pcm_mixer *mix = &emu->efx_pcm_mixer[ch];
1263 int change = 0, idx, val;
1264 int num_efx = emu->audigy ? 8 : 4;
1266 spin_lock_irqsave(&emu->reg_lock, flags);
1267 for (idx = 0; idx < num_efx; idx++) {
1268 val = ucontrol->value.integer.value[idx] & 255;
1269 if (mix->send_volume[0][idx] != val) {
1270 mix->send_volume[0][idx] = val;
1274 if (change && mix->epcm) {
1275 if (mix->epcm->voices[ch]) {
1276 update_emu10k1_send_volume(emu, mix->epcm->voices[ch]->number,
1277 &mix->send_volume[0][0]);
1280 spin_unlock_irqrestore(&emu->reg_lock, flags);
1285 static struct snd_kcontrol_new snd_emu10k1_efx_send_volume_control =
1287 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE,
1288 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
1289 .name = "Multichannel PCM Send Volume",
1291 .info = snd_emu10k1_efx_send_volume_info,
1292 .get = snd_emu10k1_efx_send_volume_get,
1293 .put = snd_emu10k1_efx_send_volume_put
1296 static int snd_emu10k1_efx_attn_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1298 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1300 uinfo->value.integer.min = 0;
1301 uinfo->value.integer.max = 0xffff;
1305 static int snd_emu10k1_efx_attn_get(struct snd_kcontrol *kcontrol,
1306 struct snd_ctl_elem_value *ucontrol)
1308 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1309 struct snd_emu10k1_pcm_mixer *mix =
1310 &emu->efx_pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)];
1311 unsigned long flags;
1313 spin_lock_irqsave(&emu->reg_lock, flags);
1314 ucontrol->value.integer.value[0] = mix->attn[0];
1315 spin_unlock_irqrestore(&emu->reg_lock, flags);
1319 static int snd_emu10k1_efx_attn_put(struct snd_kcontrol *kcontrol,
1320 struct snd_ctl_elem_value *ucontrol)
1322 unsigned long flags;
1323 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1324 int ch = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
1325 struct snd_emu10k1_pcm_mixer *mix = &emu->efx_pcm_mixer[ch];
1326 int change = 0, val;
1328 spin_lock_irqsave(&emu->reg_lock, flags);
1329 val = ucontrol->value.integer.value[0] & 0xffff;
1330 if (mix->attn[0] != val) {
1334 if (change && mix->epcm) {
1335 if (mix->epcm->voices[ch]) {
1336 snd_emu10k1_ptr_write(emu, VTFT_VOLUMETARGET, mix->epcm->voices[ch]->number, mix->attn[0]);
1339 spin_unlock_irqrestore(&emu->reg_lock, flags);
1343 static struct snd_kcontrol_new snd_emu10k1_efx_attn_control =
1345 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE,
1346 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
1347 .name = "Multichannel PCM Volume",
1349 .info = snd_emu10k1_efx_attn_info,
1350 .get = snd_emu10k1_efx_attn_get,
1351 .put = snd_emu10k1_efx_attn_put
1354 #define snd_emu10k1_shared_spdif_info snd_ctl_boolean_mono_info
1356 static int snd_emu10k1_shared_spdif_get(struct snd_kcontrol *kcontrol,
1357 struct snd_ctl_elem_value *ucontrol)
1359 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1362 ucontrol->value.integer.value[0] = inl(emu->port + A_IOCFG) & A_IOCFG_GPOUT0 ? 1 : 0;
1364 ucontrol->value.integer.value[0] = inl(emu->port + HCFG) & HCFG_GPOUT0 ? 1 : 0;
1368 static int snd_emu10k1_shared_spdif_put(struct snd_kcontrol *kcontrol,
1369 struct snd_ctl_elem_value *ucontrol)
1371 unsigned long flags;
1372 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1373 unsigned int reg, val;
1376 spin_lock_irqsave(&emu->reg_lock, flags);
1377 if ( emu->card_capabilities->i2c_adc) {
1378 /* Do nothing for Audigy 2 ZS Notebook */
1379 } else if (emu->audigy) {
1380 reg = inl(emu->port + A_IOCFG);
1381 val = ucontrol->value.integer.value[0] ? A_IOCFG_GPOUT0 : 0;
1382 change = (reg & A_IOCFG_GPOUT0) != val;
1384 reg &= ~A_IOCFG_GPOUT0;
1386 outl(reg | val, emu->port + A_IOCFG);
1389 reg = inl(emu->port + HCFG);
1390 val = ucontrol->value.integer.value[0] ? HCFG_GPOUT0 : 0;
1391 change |= (reg & HCFG_GPOUT0) != val;
1393 reg &= ~HCFG_GPOUT0;
1395 outl(reg | val, emu->port + HCFG);
1397 spin_unlock_irqrestore(&emu->reg_lock, flags);
1401 static struct snd_kcontrol_new snd_emu10k1_shared_spdif __devinitdata =
1403 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1404 .name = "SB Live Analog/Digital Output Jack",
1405 .info = snd_emu10k1_shared_spdif_info,
1406 .get = snd_emu10k1_shared_spdif_get,
1407 .put = snd_emu10k1_shared_spdif_put
1410 static struct snd_kcontrol_new snd_audigy_shared_spdif __devinitdata =
1412 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1413 .name = "Audigy Analog/Digital Output Jack",
1414 .info = snd_emu10k1_shared_spdif_info,
1415 .get = snd_emu10k1_shared_spdif_get,
1416 .put = snd_emu10k1_shared_spdif_put
1421 static void snd_emu10k1_mixer_free_ac97(struct snd_ac97 *ac97)
1423 struct snd_emu10k1 *emu = ac97->private_data;
1429 static int remove_ctl(struct snd_card *card, const char *name)
1431 struct snd_ctl_elem_id id;
1432 memset(&id, 0, sizeof(id));
1433 strcpy(id.name, name);
1434 id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
1435 return snd_ctl_remove_id(card, &id);
1438 static struct snd_kcontrol *ctl_find(struct snd_card *card, const char *name)
1440 struct snd_ctl_elem_id sid;
1441 memset(&sid, 0, sizeof(sid));
1442 strcpy(sid.name, name);
1443 sid.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
1444 return snd_ctl_find_id(card, &sid);
1447 static int rename_ctl(struct snd_card *card, const char *src, const char *dst)
1449 struct snd_kcontrol *kctl = ctl_find(card, src);
1451 strcpy(kctl->id.name, dst);
1457 int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu,
1458 int pcm_device, int multi_device)
1461 struct snd_kcontrol *kctl;
1462 struct snd_card *card = emu->card;
1464 static char *emu10k1_remove_ctls[] = {
1465 /* no AC97 mono, surround, center/lfe */
1466 "Master Mono Playback Switch",
1467 "Master Mono Playback Volume",
1468 "PCM Out Path & Mute",
1469 "Mono Output Select",
1470 "Front Playback Switch",
1471 "Front Playback Volume",
1472 "Surround Playback Switch",
1473 "Surround Playback Volume",
1474 "Center Playback Switch",
1475 "Center Playback Volume",
1476 "LFE Playback Switch",
1477 "LFE Playback Volume",
1480 static char *emu10k1_rename_ctls[] = {
1481 "Surround Digital Playback Volume", "Surround Playback Volume",
1482 "Center Digital Playback Volume", "Center Playback Volume",
1483 "LFE Digital Playback Volume", "LFE Playback Volume",
1486 static char *audigy_remove_ctls[] = {
1487 /* Master/PCM controls on ac97 of Audigy has no effect */
1488 /* On the Audigy2 the AC97 playback is piped into
1489 * the Philips ADC for 24bit capture */
1490 "PCM Playback Switch",
1491 "PCM Playback Volume",
1492 "Master Mono Playback Switch",
1493 "Master Mono Playback Volume",
1494 "Master Playback Switch",
1495 "Master Playback Volume",
1496 "PCM Out Path & Mute",
1497 "Mono Output Select",
1498 /* remove unused AC97 capture controls */
1503 "Video Playback Switch",
1504 "Video Playback Volume",
1505 "Mic Playback Switch",
1506 "Mic Playback Volume",
1509 static char *audigy_rename_ctls[] = {
1510 /* use conventional names */
1511 "Wave Playback Volume", "PCM Playback Volume",
1512 /* "Wave Capture Volume", "PCM Capture Volume", */
1513 "Wave Master Playback Volume", "Master Playback Volume",
1514 "AMic Playback Volume", "Mic Playback Volume",
1517 static char *audigy_rename_ctls_i2c_adc[] = {
1518 //"Analog Mix Capture Volume","OLD Analog Mix Capture Volume",
1519 "Line Capture Volume", "Analog Mix Capture Volume",
1520 "Wave Playback Volume", "OLD PCM Playback Volume",
1521 "Wave Master Playback Volume", "Master Playback Volume",
1522 "AMic Playback Volume", "Old Mic Playback Volume",
1523 "CD Capture Volume", "IEC958 Optical Capture Volume",
1526 static char *audigy_remove_ctls_i2c_adc[] = {
1527 /* On the Audigy2 ZS Notebook
1528 * Capture via WM8775 */
1529 "Mic Capture Volume",
1530 "Analog Mix Capture Volume",
1531 "Aux Capture Volume",
1532 "IEC958 Optical Capture Volume",
1535 static char *audigy_remove_ctls_1361t_adc[] = {
1536 /* On the Audigy2 the AC97 playback is piped into
1537 * the Philips ADC for 24bit capture */
1538 "PCM Playback Switch",
1539 "PCM Playback Volume",
1540 "Master Mono Playback Switch",
1541 "Master Mono Playback Volume",
1545 "Mic Capture Volume",
1546 "Headphone Playback Switch",
1547 "Headphone Playback Volume",
1548 "3D Control - Center",
1549 "3D Control - Depth",
1550 "3D Control - Switch",
1551 "Line2 Playback Volume",
1552 "Line2 Capture Volume",
1555 static char *audigy_rename_ctls_1361t_adc[] = {
1556 "Master Playback Switch", "Master Capture Switch",
1557 "Master Playback Volume", "Master Capture Volume",
1558 "Wave Master Playback Volume", "Master Playback Volume",
1559 "PC Speaker Playback Switch", "PC Speaker Capture Switch",
1560 "PC Speaker Playback Volume", "PC Speaker Capture Volume",
1561 "Phone Playback Switch", "Phone Capture Switch",
1562 "Phone Playback Volume", "Phone Capture Volume",
1563 "Mic Playback Switch", "Mic Capture Switch",
1564 "Mic Playback Volume", "Mic Capture Volume",
1565 "Line Playback Switch", "Line Capture Switch",
1566 "Line Playback Volume", "Line Capture Volume",
1567 "CD Playback Switch", "CD Capture Switch",
1568 "CD Playback Volume", "CD Capture Volume",
1569 "Aux Playback Switch", "Aux Capture Switch",
1570 "Aux Playback Volume", "Aux Capture Volume",
1571 "Video Playback Switch", "Video Capture Switch",
1572 "Video Playback Volume", "Video Capture Volume",
1577 if (emu->card_capabilities->ac97_chip) {
1578 struct snd_ac97_bus *pbus;
1579 struct snd_ac97_template ac97;
1580 static struct snd_ac97_bus_ops ops = {
1581 .write = snd_emu10k1_ac97_write,
1582 .read = snd_emu10k1_ac97_read,
1585 if ((err = snd_ac97_bus(emu->card, 0, &ops, NULL, &pbus)) < 0)
1587 pbus->no_vra = 1; /* we don't need VRA */
1589 memset(&ac97, 0, sizeof(ac97));
1590 ac97.private_data = emu;
1591 ac97.private_free = snd_emu10k1_mixer_free_ac97;
1592 ac97.scaps = AC97_SCAP_NO_SPDIF;
1593 if ((err = snd_ac97_mixer(pbus, &ac97, &emu->ac97)) < 0) {
1594 if (emu->card_capabilities->ac97_chip == 1)
1596 snd_printd(KERN_INFO "emu10k1: AC97 is optional on this board\n");
1597 snd_printd(KERN_INFO" Proceeding without ac97 mixers...\n");
1598 snd_device_free(emu->card, pbus);
1599 goto no_ac97; /* FIXME: get rid of ugly gotos.. */
1602 /* set master volume to 0 dB */
1603 snd_ac97_write_cache(emu->ac97, AC97_MASTER, 0x0000);
1604 /* set capture source to mic */
1605 snd_ac97_write_cache(emu->ac97, AC97_REC_SEL, 0x0000);
1606 if (emu->card_capabilities->adc_1361t)
1607 c = audigy_remove_ctls_1361t_adc;
1609 c = audigy_remove_ctls;
1612 * Credits for cards based on STAC9758:
1613 * James Courtier-Dutton <James@superbug.demon.co.uk>
1614 * Voluspa <voluspa@comhem.se>
1616 if (emu->ac97->id == AC97_ID_STAC9758) {
1618 snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE|AC97SLOT_REAR_LEFT|AC97SLOT_REAR_RIGHT);
1619 snd_ac97_write_cache(emu->ac97, AC97_HEADPHONE, 0x0202);
1621 /* remove unused AC97 controls */
1622 snd_ac97_write_cache(emu->ac97, AC97_SURROUND_MASTER, 0x0202);
1623 snd_ac97_write_cache(emu->ac97, AC97_CENTER_LFE_MASTER, 0x0202);
1624 c = emu10k1_remove_ctls;
1627 remove_ctl(card, *c);
1628 } else if (emu->card_capabilities->i2c_adc) {
1629 c = audigy_remove_ctls_i2c_adc;
1631 remove_ctl(card, *c);
1634 if (emu->card_capabilities->ecard)
1635 strcpy(emu->card->mixername, "EMU APS");
1636 else if (emu->audigy)
1637 strcpy(emu->card->mixername, "SB Audigy");
1639 strcpy(emu->card->mixername, "Emu10k1");
1643 if (emu->card_capabilities->adc_1361t)
1644 c = audigy_rename_ctls_1361t_adc;
1645 else if (emu->card_capabilities->i2c_adc)
1646 c = audigy_rename_ctls_i2c_adc;
1648 c = audigy_rename_ctls;
1650 c = emu10k1_rename_ctls;
1652 rename_ctl(card, c[0], c[1]);
1654 if (emu->card_capabilities->subsystem == 0x20071102) { /* Audigy 4 Pro */
1655 rename_ctl(card, "Line2 Capture Volume", "Line1/Mic Capture Volume");
1656 rename_ctl(card, "Analog Mix Capture Volume", "Line2 Capture Volume");
1657 rename_ctl(card, "Aux2 Capture Volume", "Line3 Capture Volume");
1658 rename_ctl(card, "Mic Capture Volume", "Unknown1 Capture Volume");
1659 remove_ctl(card, "Headphone Playback Switch");
1660 remove_ctl(card, "Headphone Playback Volume");
1661 remove_ctl(card, "3D Control - Center");
1662 remove_ctl(card, "3D Control - Depth");
1663 remove_ctl(card, "3D Control - Switch");
1665 if ((kctl = emu->ctl_send_routing = snd_ctl_new1(&snd_emu10k1_send_routing_control, emu)) == NULL)
1667 kctl->id.device = pcm_device;
1668 if ((err = snd_ctl_add(card, kctl)))
1670 if ((kctl = emu->ctl_send_volume = snd_ctl_new1(&snd_emu10k1_send_volume_control, emu)) == NULL)
1672 kctl->id.device = pcm_device;
1673 if ((err = snd_ctl_add(card, kctl)))
1675 if ((kctl = emu->ctl_attn = snd_ctl_new1(&snd_emu10k1_attn_control, emu)) == NULL)
1677 kctl->id.device = pcm_device;
1678 if ((err = snd_ctl_add(card, kctl)))
1681 if ((kctl = emu->ctl_efx_send_routing = snd_ctl_new1(&snd_emu10k1_efx_send_routing_control, emu)) == NULL)
1683 kctl->id.device = multi_device;
1684 if ((err = snd_ctl_add(card, kctl)))
1687 if ((kctl = emu->ctl_efx_send_volume = snd_ctl_new1(&snd_emu10k1_efx_send_volume_control, emu)) == NULL)
1689 kctl->id.device = multi_device;
1690 if ((err = snd_ctl_add(card, kctl)))
1693 if ((kctl = emu->ctl_efx_attn = snd_ctl_new1(&snd_emu10k1_efx_attn_control, emu)) == NULL)
1695 kctl->id.device = multi_device;
1696 if ((err = snd_ctl_add(card, kctl)))
1699 /* initialize the routing and volume table for each pcm playback stream */
1700 for (pcm = 0; pcm < 32; pcm++) {
1701 struct snd_emu10k1_pcm_mixer *mix;
1704 mix = &emu->pcm_mixer[pcm];
1707 for (v = 0; v < 4; v++)
1708 mix->send_routing[0][v] =
1709 mix->send_routing[1][v] =
1710 mix->send_routing[2][v] = v;
1712 memset(&mix->send_volume, 0, sizeof(mix->send_volume));
1713 mix->send_volume[0][0] = mix->send_volume[0][1] =
1714 mix->send_volume[1][0] = mix->send_volume[2][1] = 255;
1716 mix->attn[0] = mix->attn[1] = mix->attn[2] = 0xffff;
1719 /* initialize the routing and volume table for the multichannel playback stream */
1720 for (pcm = 0; pcm < NUM_EFX_PLAYBACK; pcm++) {
1721 struct snd_emu10k1_pcm_mixer *mix;
1724 mix = &emu->efx_pcm_mixer[pcm];
1727 mix->send_routing[0][0] = pcm;
1728 mix->send_routing[0][1] = (pcm == 0) ? 1 : 0;
1729 for (v = 0; v < 2; v++)
1730 mix->send_routing[0][2+v] = 13+v;
1732 for (v = 0; v < 4; v++)
1733 mix->send_routing[0][4+v] = 60+v;
1735 memset(&mix->send_volume, 0, sizeof(mix->send_volume));
1736 mix->send_volume[0][0] = 255;
1738 mix->attn[0] = 0xffff;
1741 if (! emu->card_capabilities->ecard) { /* FIXME: APS has these controls? */
1742 /* sb live! and audigy */
1743 if ((kctl = snd_ctl_new1(&snd_emu10k1_spdif_mask_control, emu)) == NULL)
1746 kctl->id.device = emu->pcm_efx->device;
1747 if ((err = snd_ctl_add(card, kctl)))
1749 if ((kctl = snd_ctl_new1(&snd_emu10k1_spdif_control, emu)) == NULL)
1752 kctl->id.device = emu->pcm_efx->device;
1753 if ((err = snd_ctl_add(card, kctl)))
1757 if ( emu->card_capabilities->emu1010) {
1758 ; /* Disable the snd_audigy_spdif_shared_spdif */
1759 } else if (emu->audigy) {
1760 if ((kctl = snd_ctl_new1(&snd_audigy_shared_spdif, emu)) == NULL)
1762 if ((err = snd_ctl_add(card, kctl)))
1765 if ((kctl = snd_ctl_new1(&snd_audigy_spdif_output_rate, emu)) == NULL)
1767 if ((err = snd_ctl_add(card, kctl)))
1770 } else if (! emu->card_capabilities->ecard) {
1772 if ((kctl = snd_ctl_new1(&snd_emu10k1_shared_spdif, emu)) == NULL)
1774 if ((err = snd_ctl_add(card, kctl)))
1777 if (emu->card_capabilities->ca0151_chip) { /* P16V */
1778 if ((err = snd_p16v_mixer(emu)))
1782 if ( emu->card_capabilities->emu1010) {
1785 for (i = 0; i < ARRAY_SIZE(snd_emu1010_output_enum_ctls); i++) {
1786 err = snd_ctl_add(card, snd_ctl_new1(&snd_emu1010_output_enum_ctls[i], emu));
1790 for (i = 0; i < ARRAY_SIZE(snd_emu1010_input_enum_ctls); i++) {
1791 err = snd_ctl_add(card, snd_ctl_new1(&snd_emu1010_input_enum_ctls[i], emu));
1795 for (i = 0; i < ARRAY_SIZE(snd_emu1010_adc_pads); i++) {
1796 err = snd_ctl_add(card, snd_ctl_new1(&snd_emu1010_adc_pads[i], emu));
1800 for (i = 0; i < ARRAY_SIZE(snd_emu1010_dac_pads); i++) {
1801 err = snd_ctl_add(card, snd_ctl_new1(&snd_emu1010_dac_pads[i], emu));
1805 err = snd_ctl_add(card, snd_ctl_new1(&snd_emu1010_internal_clock, emu));
1810 if ( emu->card_capabilities->i2c_adc) {
1813 err = snd_ctl_add(card, snd_ctl_new1(&snd_audigy_i2c_capture_source, emu));
1817 for (i = 0; i < ARRAY_SIZE(snd_audigy_i2c_volume_ctls); i++) {
1818 err = snd_ctl_add(card, snd_ctl_new1(&snd_audigy_i2c_volume_ctls[i], emu));