xref: /linux/sound/pci/echoaudio/echoaudio.c (revision 6e8331ac6973435b1e7604c30f2ad394035b46e1)
1 /*
2  *  ALSA driver for Echoaudio soundcards.
3  *  Copyright (C) 2003-2004 Giuliano Pochini <pochini@shiny.it>
4  *
5  *  This program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; version 2 of the License.
8  *
9  *  This program is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU General Public License for more details.
13  *
14  *  You should have received a copy of the GNU General Public License
15  *  along with this program; if not, write to the Free Software
16  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17  */
18 
19 MODULE_AUTHOR("Giuliano Pochini <pochini@shiny.it>");
20 MODULE_LICENSE("GPL v2");
21 MODULE_DESCRIPTION("Echoaudio " ECHOCARD_NAME " soundcards driver");
22 MODULE_SUPPORTED_DEVICE("{{Echoaudio," ECHOCARD_NAME "}}");
23 MODULE_DEVICE_TABLE(pci, snd_echo_ids);
24 
25 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
26 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
27 static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
28 
29 module_param_array(index, int, NULL, 0444);
30 MODULE_PARM_DESC(index, "Index value for " ECHOCARD_NAME " soundcard.");
31 module_param_array(id, charp, NULL, 0444);
32 MODULE_PARM_DESC(id, "ID string for " ECHOCARD_NAME " soundcard.");
33 module_param_array(enable, bool, NULL, 0444);
34 MODULE_PARM_DESC(enable, "Enable " ECHOCARD_NAME " soundcard.");
35 
36 static unsigned int channels_list[10] = {1, 2, 4, 6, 8, 10, 12, 14, 16, 999999};
37 
38 static int get_firmware(const struct firmware **fw_entry,
39 			const struct firmware *frm, struct echoaudio *chip)
40 {
41 	int err;
42 	char name[30];
43 	DE_ACT(("firmware requested: %s\n", frm->data));
44 	snprintf(name, sizeof(name), "ea/%s", frm->data);
45 	if ((err = request_firmware(fw_entry, name, pci_device(chip))) < 0)
46 		snd_printk(KERN_ERR "get_firmware(): Firmware not available (%d)\n", err);
47 	return err;
48 }
49 
50 static void free_firmware(const struct firmware *fw_entry)
51 {
52 	release_firmware(fw_entry);
53 	DE_ACT(("firmware released\n"));
54 }
55 
56 
57 
58 /******************************************************************************
59 	PCM interface
60 ******************************************************************************/
61 
62 static void audiopipe_free(struct snd_pcm_runtime *runtime)
63 {
64 	struct audiopipe *pipe = runtime->private_data;
65 
66 	if (pipe->sgpage.area)
67 		snd_dma_free_pages(&pipe->sgpage);
68 	kfree(pipe);
69 }
70 
71 
72 
73 static int hw_rule_capture_format_by_channels(struct snd_pcm_hw_params *params,
74 					      struct snd_pcm_hw_rule *rule)
75 {
76 	struct snd_interval *c = hw_param_interval(params,
77 						   SNDRV_PCM_HW_PARAM_CHANNELS);
78 	struct snd_mask *f = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
79 	struct snd_mask fmt;
80 
81 	snd_mask_any(&fmt);
82 
83 #ifndef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
84 	/* >=2 channels cannot be S32_BE */
85 	if (c->min == 2) {
86 		fmt.bits[0] &= ~SNDRV_PCM_FMTBIT_S32_BE;
87 		return snd_mask_refine(f, &fmt);
88 	}
89 #endif
90 	/* > 2 channels cannot be U8 and S32_BE */
91 	if (c->min > 2) {
92 		fmt.bits[0] &= ~(SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S32_BE);
93 		return snd_mask_refine(f, &fmt);
94 	}
95 	/* Mono is ok with any format */
96 	return 0;
97 }
98 
99 
100 
101 static int hw_rule_capture_channels_by_format(struct snd_pcm_hw_params *params,
102 					      struct snd_pcm_hw_rule *rule)
103 {
104 	struct snd_interval *c = hw_param_interval(params,
105 						   SNDRV_PCM_HW_PARAM_CHANNELS);
106 	struct snd_mask *f = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
107 	struct snd_interval ch;
108 
109 	snd_interval_any(&ch);
110 
111 	/* S32_BE is mono (and stereo) only */
112 	if (f->bits[0] == SNDRV_PCM_FMTBIT_S32_BE) {
113 		ch.min = 1;
114 #ifdef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
115 		ch.max = 2;
116 #else
117 		ch.max = 1;
118 #endif
119 		ch.integer = 1;
120 		return snd_interval_refine(c, &ch);
121 	}
122 	/* U8 can be only mono or stereo */
123 	if (f->bits[0] == SNDRV_PCM_FMTBIT_U8) {
124 		ch.min = 1;
125 		ch.max = 2;
126 		ch.integer = 1;
127 		return snd_interval_refine(c, &ch);
128 	}
129 	/* S16_LE, S24_3LE and S32_LE support any number of channels. */
130 	return 0;
131 }
132 
133 
134 
135 static int hw_rule_playback_format_by_channels(struct snd_pcm_hw_params *params,
136 					       struct snd_pcm_hw_rule *rule)
137 {
138 	struct snd_interval *c = hw_param_interval(params,
139 						   SNDRV_PCM_HW_PARAM_CHANNELS);
140 	struct snd_mask *f = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
141 	struct snd_mask fmt;
142 	u64 fmask;
143 	snd_mask_any(&fmt);
144 
145 	fmask = fmt.bits[0] + ((u64)fmt.bits[1] << 32);
146 
147 	/* >2 channels must be S16_LE, S24_3LE or S32_LE */
148 	if (c->min > 2) {
149 		fmask &= SNDRV_PCM_FMTBIT_S16_LE |
150 			 SNDRV_PCM_FMTBIT_S24_3LE |
151 			 SNDRV_PCM_FMTBIT_S32_LE;
152 	/* 1 channel must be S32_BE or S32_LE */
153 	} else if (c->max == 1)
154 		fmask &= SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE;
155 #ifndef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
156 	/* 2 channels cannot be S32_BE */
157 	else if (c->min == 2 && c->max == 2)
158 		fmask &= ~SNDRV_PCM_FMTBIT_S32_BE;
159 #endif
160 	else
161 		return 0;
162 
163 	fmt.bits[0] &= (u32)fmask;
164 	fmt.bits[1] &= (u32)(fmask >> 32);
165 	return snd_mask_refine(f, &fmt);
166 }
167 
168 
169 
170 static int hw_rule_playback_channels_by_format(struct snd_pcm_hw_params *params,
171 					       struct snd_pcm_hw_rule *rule)
172 {
173 	struct snd_interval *c = hw_param_interval(params,
174 						   SNDRV_PCM_HW_PARAM_CHANNELS);
175 	struct snd_mask *f = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
176 	struct snd_interval ch;
177 	u64 fmask;
178 
179 	snd_interval_any(&ch);
180 	ch.integer = 1;
181 	fmask = f->bits[0] + ((u64)f->bits[1] << 32);
182 
183 	/* S32_BE is mono (and stereo) only */
184 	if (fmask == SNDRV_PCM_FMTBIT_S32_BE) {
185 		ch.min = 1;
186 #ifdef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
187 		ch.max = 2;
188 #else
189 		ch.max = 1;
190 #endif
191 	/* U8 is stereo only */
192 	} else if (fmask == SNDRV_PCM_FMTBIT_U8)
193 		ch.min = ch.max = 2;
194 	/* S16_LE and S24_3LE must be at least stereo */
195 	else if (!(fmask & ~(SNDRV_PCM_FMTBIT_S16_LE |
196 			       SNDRV_PCM_FMTBIT_S24_3LE)))
197 		ch.min = 2;
198 	else
199 		return 0;
200 
201 	return snd_interval_refine(c, &ch);
202 }
203 
204 
205 
206 /* Since the sample rate is a global setting, do allow the user to change the
207 sample rate only if there is only one pcm device open. */
208 static int hw_rule_sample_rate(struct snd_pcm_hw_params *params,
209 			       struct snd_pcm_hw_rule *rule)
210 {
211 	struct snd_interval *rate = hw_param_interval(params,
212 						      SNDRV_PCM_HW_PARAM_RATE);
213 	struct echoaudio *chip = rule->private;
214 	struct snd_interval fixed;
215 
216 	if (!chip->can_set_rate) {
217 		snd_interval_any(&fixed);
218 		fixed.min = fixed.max = chip->sample_rate;
219 		return snd_interval_refine(rate, &fixed);
220 	}
221 	return 0;
222 }
223 
224 
225 static int pcm_open(struct snd_pcm_substream *substream,
226 		    signed char max_channels)
227 {
228 	struct echoaudio *chip;
229 	struct snd_pcm_runtime *runtime;
230 	struct audiopipe *pipe;
231 	int err, i;
232 
233 	if (max_channels <= 0)
234 		return -EAGAIN;
235 
236 	chip = snd_pcm_substream_chip(substream);
237 	runtime = substream->runtime;
238 
239 	pipe = kzalloc(sizeof(struct audiopipe), GFP_KERNEL);
240 	if (!pipe)
241 		return -ENOMEM;
242 	pipe->index = -1;		/* Not configured yet */
243 
244 	/* Set up hw capabilities and contraints */
245 	memcpy(&pipe->hw, &pcm_hardware_skel, sizeof(struct snd_pcm_hardware));
246 	DE_HWP(("max_channels=%d\n", max_channels));
247 	pipe->constr.list = channels_list;
248 	pipe->constr.mask = 0;
249 	for (i = 0; channels_list[i] <= max_channels; i++);
250 	pipe->constr.count = i;
251 	if (pipe->hw.channels_max > max_channels)
252 		pipe->hw.channels_max = max_channels;
253 	if (chip->digital_mode == DIGITAL_MODE_ADAT) {
254 		pipe->hw.rate_max = 48000;
255 		pipe->hw.rates &= SNDRV_PCM_RATE_8000_48000;
256 	}
257 
258 	runtime->hw = pipe->hw;
259 	runtime->private_data = pipe;
260 	runtime->private_free = audiopipe_free;
261 	snd_pcm_set_sync(substream);
262 
263 	/* Only mono and any even number of channels are allowed */
264 	if ((err = snd_pcm_hw_constraint_list(runtime, 0,
265 					      SNDRV_PCM_HW_PARAM_CHANNELS,
266 					      &pipe->constr)) < 0)
267 		return err;
268 
269 	/* All periods should have the same size */
270 	if ((err = snd_pcm_hw_constraint_integer(runtime,
271 						 SNDRV_PCM_HW_PARAM_PERIODS)) < 0)
272 		return err;
273 
274 	/* The hw accesses memory in chunks 32 frames long and they should be
275 	32-bytes-aligned. It's not a requirement, but it seems that IRQs are
276 	generated with a resolution of 32 frames. Thus we need the following */
277 	if ((err = snd_pcm_hw_constraint_step(runtime, 0,
278 					      SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
279 					      32)) < 0)
280 		return err;
281 	if ((err = snd_pcm_hw_constraint_step(runtime, 0,
282 					      SNDRV_PCM_HW_PARAM_BUFFER_SIZE,
283 					      32)) < 0)
284 		return err;
285 
286 	if ((err = snd_pcm_hw_rule_add(substream->runtime, 0,
287 				       SNDRV_PCM_HW_PARAM_RATE,
288 					hw_rule_sample_rate, chip,
289 				       SNDRV_PCM_HW_PARAM_RATE, -1)) < 0)
290 		return err;
291 
292 	/* Finally allocate a page for the scatter-gather list */
293 	if ((err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
294 				       snd_dma_pci_data(chip->pci),
295 				       PAGE_SIZE, &pipe->sgpage)) < 0) {
296 		DE_HWP(("s-g list allocation failed\n"));
297 		return err;
298 	}
299 
300 	return 0;
301 }
302 
303 
304 
305 static int pcm_analog_in_open(struct snd_pcm_substream *substream)
306 {
307 	struct echoaudio *chip = snd_pcm_substream_chip(substream);
308 	int err;
309 
310 	DE_ACT(("pcm_analog_in_open\n"));
311 	if ((err = pcm_open(substream, num_analog_busses_in(chip) -
312 			    substream->number)) < 0)
313 		return err;
314 	if ((err = snd_pcm_hw_rule_add(substream->runtime, 0,
315 				       SNDRV_PCM_HW_PARAM_CHANNELS,
316 				       hw_rule_capture_channels_by_format, NULL,
317 				       SNDRV_PCM_HW_PARAM_FORMAT, -1)) < 0)
318 		return err;
319 	if ((err = snd_pcm_hw_rule_add(substream->runtime, 0,
320 				       SNDRV_PCM_HW_PARAM_FORMAT,
321 				       hw_rule_capture_format_by_channels, NULL,
322 				       SNDRV_PCM_HW_PARAM_CHANNELS, -1)) < 0)
323 		return err;
324 	atomic_inc(&chip->opencount);
325 	if (atomic_read(&chip->opencount) > 1 && chip->rate_set)
326 		chip->can_set_rate=0;
327 	DE_HWP(("pcm_analog_in_open  cs=%d  oc=%d  r=%d\n",
328 		chip->can_set_rate, atomic_read(&chip->opencount),
329 		chip->sample_rate));
330 	return 0;
331 }
332 
333 
334 
335 static int pcm_analog_out_open(struct snd_pcm_substream *substream)
336 {
337 	struct echoaudio *chip = snd_pcm_substream_chip(substream);
338 	int max_channels, err;
339 
340 #ifdef ECHOCARD_HAS_VMIXER
341 	max_channels = num_pipes_out(chip);
342 #else
343 	max_channels = num_analog_busses_out(chip);
344 #endif
345 	DE_ACT(("pcm_analog_out_open\n"));
346 	if ((err = pcm_open(substream, max_channels - substream->number)) < 0)
347 		return err;
348 	if ((err = snd_pcm_hw_rule_add(substream->runtime, 0,
349 				       SNDRV_PCM_HW_PARAM_CHANNELS,
350 				       hw_rule_playback_channels_by_format,
351 				       NULL,
352 				       SNDRV_PCM_HW_PARAM_FORMAT, -1)) < 0)
353 		return err;
354 	if ((err = snd_pcm_hw_rule_add(substream->runtime, 0,
355 				       SNDRV_PCM_HW_PARAM_FORMAT,
356 				       hw_rule_playback_format_by_channels,
357 				       NULL,
358 				       SNDRV_PCM_HW_PARAM_CHANNELS, -1)) < 0)
359 		return err;
360 	atomic_inc(&chip->opencount);
361 	if (atomic_read(&chip->opencount) > 1 && chip->rate_set)
362 		chip->can_set_rate=0;
363 	DE_HWP(("pcm_analog_out_open  cs=%d  oc=%d  r=%d\n",
364 		chip->can_set_rate, atomic_read(&chip->opencount),
365 		chip->sample_rate));
366 	return 0;
367 }
368 
369 
370 
371 #ifdef ECHOCARD_HAS_DIGITAL_IO
372 
373 static int pcm_digital_in_open(struct snd_pcm_substream *substream)
374 {
375 	struct echoaudio *chip = snd_pcm_substream_chip(substream);
376 	int err, max_channels;
377 
378 	DE_ACT(("pcm_digital_in_open\n"));
379 	max_channels = num_digital_busses_in(chip) - substream->number;
380 	down(&chip->mode_mutex);
381 	if (chip->digital_mode == DIGITAL_MODE_ADAT)
382 		err = pcm_open(substream, max_channels);
383 	else	/* If the card has ADAT, subtract the 6 channels
384 		 * that S/PDIF doesn't have
385 		 */
386 		err = pcm_open(substream, max_channels - ECHOCARD_HAS_ADAT);
387 
388 	if (err < 0)
389 		goto din_exit;
390 
391 	if ((err = snd_pcm_hw_rule_add(substream->runtime, 0,
392 				       SNDRV_PCM_HW_PARAM_CHANNELS,
393 				       hw_rule_capture_channels_by_format, NULL,
394 				       SNDRV_PCM_HW_PARAM_FORMAT, -1)) < 0)
395 		goto din_exit;
396 	if ((err = snd_pcm_hw_rule_add(substream->runtime, 0,
397 				       SNDRV_PCM_HW_PARAM_FORMAT,
398 				       hw_rule_capture_format_by_channels, NULL,
399 				       SNDRV_PCM_HW_PARAM_CHANNELS, -1)) < 0)
400 		goto din_exit;
401 
402 	atomic_inc(&chip->opencount);
403 	if (atomic_read(&chip->opencount) > 1 && chip->rate_set)
404 		chip->can_set_rate=0;
405 
406 din_exit:
407 	up(&chip->mode_mutex);
408 	return err;
409 }
410 
411 
412 
413 #ifndef ECHOCARD_HAS_VMIXER	/* See the note in snd_echo_new_pcm() */
414 
415 static int pcm_digital_out_open(struct snd_pcm_substream *substream)
416 {
417 	struct echoaudio *chip = snd_pcm_substream_chip(substream);
418 	int err, max_channels;
419 
420 	DE_ACT(("pcm_digital_out_open\n"));
421 	max_channels = num_digital_busses_out(chip) - substream->number;
422 	down(&chip->mode_mutex);
423 	if (chip->digital_mode == DIGITAL_MODE_ADAT)
424 		err = pcm_open(substream, max_channels);
425 	else	/* If the card has ADAT, subtract the 6 channels
426 		 * that S/PDIF doesn't have
427 		 */
428 		err = pcm_open(substream, max_channels - ECHOCARD_HAS_ADAT);
429 
430 	if (err < 0)
431 		goto dout_exit;
432 
433 	if ((err = snd_pcm_hw_rule_add(substream->runtime, 0,
434 				       SNDRV_PCM_HW_PARAM_CHANNELS,
435 				       hw_rule_playback_channels_by_format,
436 				       NULL, SNDRV_PCM_HW_PARAM_FORMAT,
437 				       -1)) < 0)
438 		goto dout_exit;
439 	if ((err = snd_pcm_hw_rule_add(substream->runtime, 0,
440 				       SNDRV_PCM_HW_PARAM_FORMAT,
441 				       hw_rule_playback_format_by_channels,
442 				       NULL, SNDRV_PCM_HW_PARAM_CHANNELS,
443 				       -1)) < 0)
444 		goto dout_exit;
445 	atomic_inc(&chip->opencount);
446 	if (atomic_read(&chip->opencount) > 1 && chip->rate_set)
447 		chip->can_set_rate=0;
448 dout_exit:
449 	up(&chip->mode_mutex);
450 	return err;
451 }
452 
453 #endif /* !ECHOCARD_HAS_VMIXER */
454 
455 #endif /* ECHOCARD_HAS_DIGITAL_IO */
456 
457 
458 
459 static int pcm_close(struct snd_pcm_substream *substream)
460 {
461 	struct echoaudio *chip = snd_pcm_substream_chip(substream);
462 	int oc;
463 
464 	/* Nothing to do here. Audio is already off and pipe will be
465 	 * freed by its callback
466 	 */
467 	DE_ACT(("pcm_close\n"));
468 
469 	atomic_dec(&chip->opencount);
470 	oc = atomic_read(&chip->opencount);
471 	DE_ACT(("pcm_close  oc=%d  cs=%d  rs=%d\n", oc,
472 		chip->can_set_rate, chip->rate_set));
473 	if (oc < 2)
474 		chip->can_set_rate = 1;
475 	if (oc == 0)
476 		chip->rate_set = 0;
477 	DE_ACT(("pcm_close2 oc=%d  cs=%d  rs=%d\n", oc,
478 		chip->can_set_rate,chip->rate_set));
479 
480 	return 0;
481 }
482 
483 
484 
485 /* Channel allocation and scatter-gather list setup */
486 static int init_engine(struct snd_pcm_substream *substream,
487 		       struct snd_pcm_hw_params *hw_params,
488 		       int pipe_index, int interleave)
489 {
490 	struct echoaudio *chip;
491 	int err, per, rest, page, edge, offs;
492 	struct snd_sg_buf *sgbuf;
493 	struct audiopipe *pipe;
494 
495 	chip = snd_pcm_substream_chip(substream);
496 	pipe = (struct audiopipe *) substream->runtime->private_data;
497 
498 	/* Sets up che hardware. If it's already initialized, reset and
499 	 * redo with the new parameters
500 	 */
501 	spin_lock_irq(&chip->lock);
502 	if (pipe->index >= 0) {
503 		DE_HWP(("hwp_ie free(%d)\n", pipe->index));
504 		err = free_pipes(chip, pipe);
505 		snd_assert(!err);
506 		chip->substream[pipe->index] = NULL;
507 	}
508 
509 	err = allocate_pipes(chip, pipe, pipe_index, interleave);
510 	if (err < 0) {
511 		spin_unlock_irq(&chip->lock);
512 		DE_ACT((KERN_NOTICE "allocate_pipes(%d) err=%d\n",
513 			pipe_index, err));
514 		return err;
515 	}
516 	spin_unlock_irq(&chip->lock);
517 	DE_ACT((KERN_NOTICE "allocate_pipes()=%d\n", pipe_index));
518 
519 	DE_HWP(("pcm_hw_params (bufsize=%dB periods=%d persize=%dB)\n",
520 		params_buffer_bytes(hw_params), params_periods(hw_params),
521 		params_period_bytes(hw_params)));
522 	err = snd_pcm_lib_malloc_pages(substream,
523 				       params_buffer_bytes(hw_params));
524 	if (err < 0) {
525 		snd_printk(KERN_ERR "malloc_pages err=%d\n", err);
526 		spin_lock_irq(&chip->lock);
527 		free_pipes(chip, pipe);
528 		spin_unlock_irq(&chip->lock);
529 		pipe->index = -1;
530 		return err;
531 	}
532 
533 	sgbuf = snd_pcm_substream_sgbuf(substream);
534 
535 	DE_HWP(("pcm_hw_params table size=%d pages=%d\n",
536 		sgbuf->size, sgbuf->pages));
537 	sglist_init(chip, pipe);
538 	edge = PAGE_SIZE;
539 	for (offs = page = per = 0; offs < params_buffer_bytes(hw_params);
540 	     per++) {
541 		rest = params_period_bytes(hw_params);
542 		if (offs + rest > params_buffer_bytes(hw_params))
543 			rest = params_buffer_bytes(hw_params) - offs;
544 		while (rest) {
545 			if (rest <= edge - offs) {
546 				sglist_add_mapping(chip, pipe,
547 						   snd_sgbuf_get_addr(sgbuf, offs),
548 						   rest);
549 				sglist_add_irq(chip, pipe);
550 				offs += rest;
551 				rest = 0;
552 			} else {
553 				sglist_add_mapping(chip, pipe,
554 						   snd_sgbuf_get_addr(sgbuf, offs),
555 						   edge - offs);
556 				rest -= edge - offs;
557 				offs = edge;
558 			}
559 			if (offs == edge) {
560 				edge += PAGE_SIZE;
561 				page++;
562 			}
563 		}
564 	}
565 
566 	/* Close the ring buffer */
567 	sglist_wrap(chip, pipe);
568 
569 	/* This stuff is used by the irq handler, so it must be
570 	 * initialized before chip->substream
571 	 */
572 	chip->last_period[pipe_index] = 0;
573 	pipe->last_counter = 0;
574 	pipe->position = 0;
575 	smp_wmb();
576 	chip->substream[pipe_index] = substream;
577 	chip->rate_set = 1;
578 	spin_lock_irq(&chip->lock);
579 	set_sample_rate(chip, hw_params->rate_num / hw_params->rate_den);
580 	spin_unlock_irq(&chip->lock);
581 	DE_HWP(("pcm_hw_params ok\n"));
582 	return 0;
583 }
584 
585 
586 
587 static int pcm_analog_in_hw_params(struct snd_pcm_substream *substream,
588 				   struct snd_pcm_hw_params *hw_params)
589 {
590 	struct echoaudio *chip = snd_pcm_substream_chip(substream);
591 
592 	return init_engine(substream, hw_params, px_analog_in(chip) +
593 			substream->number, params_channels(hw_params));
594 }
595 
596 
597 
598 static int pcm_analog_out_hw_params(struct snd_pcm_substream *substream,
599 				    struct snd_pcm_hw_params *hw_params)
600 {
601 	return init_engine(substream, hw_params, substream->number,
602 			   params_channels(hw_params));
603 }
604 
605 
606 
607 #ifdef ECHOCARD_HAS_DIGITAL_IO
608 
609 static int pcm_digital_in_hw_params(struct snd_pcm_substream *substream,
610 				    struct snd_pcm_hw_params *hw_params)
611 {
612 	struct echoaudio *chip = snd_pcm_substream_chip(substream);
613 
614 	return init_engine(substream, hw_params, px_digital_in(chip) +
615 			substream->number, params_channels(hw_params));
616 }
617 
618 
619 
620 #ifndef ECHOCARD_HAS_VMIXER	/* See the note in snd_echo_new_pcm() */
621 static int pcm_digital_out_hw_params(struct snd_pcm_substream *substream,
622 				     struct snd_pcm_hw_params *hw_params)
623 {
624 	struct echoaudio *chip = snd_pcm_substream_chip(substream);
625 
626 	return init_engine(substream, hw_params, px_digital_out(chip) +
627 			substream->number, params_channels(hw_params));
628 }
629 #endif /* !ECHOCARD_HAS_VMIXER */
630 
631 #endif /* ECHOCARD_HAS_DIGITAL_IO */
632 
633 
634 
635 static int pcm_hw_free(struct snd_pcm_substream *substream)
636 {
637 	struct echoaudio *chip;
638 	struct audiopipe *pipe;
639 
640 	chip = snd_pcm_substream_chip(substream);
641 	pipe = (struct audiopipe *) substream->runtime->private_data;
642 
643 	spin_lock_irq(&chip->lock);
644 	if (pipe->index >= 0) {
645 		DE_HWP(("pcm_hw_free(%d)\n", pipe->index));
646 		free_pipes(chip, pipe);
647 		chip->substream[pipe->index] = NULL;
648 		pipe->index = -1;
649 	}
650 	spin_unlock_irq(&chip->lock);
651 
652 	DE_HWP(("pcm_hw_freed\n"));
653 	snd_pcm_lib_free_pages(substream);
654 	return 0;
655 }
656 
657 
658 
659 static int pcm_prepare(struct snd_pcm_substream *substream)
660 {
661 	struct echoaudio *chip = snd_pcm_substream_chip(substream);
662 	struct snd_pcm_runtime *runtime = substream->runtime;
663 	struct audioformat format;
664 	int pipe_index = ((struct audiopipe *)runtime->private_data)->index;
665 
666 	DE_HWP(("Prepare rate=%d format=%d channels=%d\n",
667 		runtime->rate, runtime->format, runtime->channels));
668 	format.interleave = runtime->channels;
669 	format.data_are_bigendian = 0;
670 	format.mono_to_stereo = 0;
671 	switch (runtime->format) {
672 	case SNDRV_PCM_FORMAT_U8:
673 		format.bits_per_sample = 8;
674 		break;
675 	case SNDRV_PCM_FORMAT_S16_LE:
676 		format.bits_per_sample = 16;
677 		break;
678 	case SNDRV_PCM_FORMAT_S24_3LE:
679 		format.bits_per_sample = 24;
680 		break;
681 	case SNDRV_PCM_FORMAT_S32_BE:
682 		format.data_are_bigendian = 1;
683 	case SNDRV_PCM_FORMAT_S32_LE:
684 		format.bits_per_sample = 32;
685 		break;
686 	default:
687 		DE_HWP(("Prepare error: unsupported format %d\n",
688 			runtime->format));
689 		return -EINVAL;
690 	}
691 
692 	snd_assert(pipe_index < px_num(chip), return -EINVAL);
693 	snd_assert(is_pipe_allocated(chip, pipe_index), return -EINVAL);
694 	set_audio_format(chip, pipe_index, &format);
695 	return 0;
696 }
697 
698 
699 
700 static int pcm_trigger(struct snd_pcm_substream *substream, int cmd)
701 {
702 	struct echoaudio *chip = snd_pcm_substream_chip(substream);
703 	struct snd_pcm_runtime *runtime = substream->runtime;
704 	struct audiopipe *pipe = runtime->private_data;
705 	int i, err;
706 	u32 channelmask = 0;
707 	struct list_head *pos;
708 	struct snd_pcm_substream *s;
709 
710 	snd_pcm_group_for_each(pos, substream) {
711 		s = snd_pcm_group_substream_entry(pos);
712 		for (i = 0; i < DSP_MAXPIPES; i++) {
713 			if (s == chip->substream[i]) {
714 				channelmask |= 1 << i;
715 				snd_pcm_trigger_done(s, substream);
716 			}
717 		}
718 	}
719 
720 	spin_lock(&chip->lock);
721 	switch (cmd) {
722 	case SNDRV_PCM_TRIGGER_START:
723 	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
724 		DE_ACT(("pcm_trigger start\n"));
725 		for (i = 0; i < DSP_MAXPIPES; i++) {
726 			if (channelmask & (1 << i)) {
727 				pipe = chip->substream[i]->runtime->private_data;
728 				switch (pipe->state) {
729 				case PIPE_STATE_STOPPED:
730 					chip->last_period[i] = 0;
731 					pipe->last_counter = 0;
732 					pipe->position = 0;
733 					*pipe->dma_counter = 0;
734 				case PIPE_STATE_PAUSED:
735 					pipe->state = PIPE_STATE_STARTED;
736 					break;
737 				case PIPE_STATE_STARTED:
738 					break;
739 				}
740 			}
741 		}
742 		err = start_transport(chip, channelmask,
743 				      chip->pipe_cyclic_mask);
744 		break;
745 	case SNDRV_PCM_TRIGGER_STOP:
746 		DE_ACT(("pcm_trigger stop\n"));
747 		for (i = 0; i < DSP_MAXPIPES; i++) {
748 			if (channelmask & (1 << i)) {
749 				pipe = chip->substream[i]->runtime->private_data;
750 				pipe->state = PIPE_STATE_STOPPED;
751 			}
752 		}
753 		err = stop_transport(chip, channelmask);
754 		break;
755 	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
756 		DE_ACT(("pcm_trigger pause\n"));
757 		for (i = 0; i < DSP_MAXPIPES; i++) {
758 			if (channelmask & (1 << i)) {
759 				pipe = chip->substream[i]->runtime->private_data;
760 				pipe->state = PIPE_STATE_PAUSED;
761 			}
762 		}
763 		err = pause_transport(chip, channelmask);
764 		break;
765 	default:
766 		err = -EINVAL;
767 	}
768 	spin_unlock(&chip->lock);
769 	return err;
770 }
771 
772 
773 
774 static snd_pcm_uframes_t pcm_pointer(struct snd_pcm_substream *substream)
775 {
776 	struct snd_pcm_runtime *runtime = substream->runtime;
777 	struct audiopipe *pipe = runtime->private_data;
778 	size_t cnt, bufsize, pos;
779 
780 	cnt = le32_to_cpu(*pipe->dma_counter);
781 	pipe->position += cnt - pipe->last_counter;
782 	pipe->last_counter = cnt;
783 	bufsize = substream->runtime->buffer_size;
784 	pos = bytes_to_frames(substream->runtime, pipe->position);
785 
786 	while (pos >= bufsize) {
787 		pipe->position -= frames_to_bytes(substream->runtime, bufsize);
788 		pos -= bufsize;
789 	}
790 	return pos;
791 }
792 
793 
794 
795 /* pcm *_ops structures */
796 static struct snd_pcm_ops analog_playback_ops = {
797 	.open = pcm_analog_out_open,
798 	.close = pcm_close,
799 	.ioctl = snd_pcm_lib_ioctl,
800 	.hw_params = pcm_analog_out_hw_params,
801 	.hw_free = pcm_hw_free,
802 	.prepare = pcm_prepare,
803 	.trigger = pcm_trigger,
804 	.pointer = pcm_pointer,
805 	.page = snd_pcm_sgbuf_ops_page,
806 };
807 static struct snd_pcm_ops analog_capture_ops = {
808 	.open = pcm_analog_in_open,
809 	.close = pcm_close,
810 	.ioctl = snd_pcm_lib_ioctl,
811 	.hw_params = pcm_analog_in_hw_params,
812 	.hw_free = pcm_hw_free,
813 	.prepare = pcm_prepare,
814 	.trigger = pcm_trigger,
815 	.pointer = pcm_pointer,
816 	.page = snd_pcm_sgbuf_ops_page,
817 };
818 #ifdef ECHOCARD_HAS_DIGITAL_IO
819 #ifndef ECHOCARD_HAS_VMIXER
820 static struct snd_pcm_ops digital_playback_ops = {
821 	.open = pcm_digital_out_open,
822 	.close = pcm_close,
823 	.ioctl = snd_pcm_lib_ioctl,
824 	.hw_params = pcm_digital_out_hw_params,
825 	.hw_free = pcm_hw_free,
826 	.prepare = pcm_prepare,
827 	.trigger = pcm_trigger,
828 	.pointer = pcm_pointer,
829 	.page = snd_pcm_sgbuf_ops_page,
830 };
831 #endif /* !ECHOCARD_HAS_VMIXER */
832 static struct snd_pcm_ops digital_capture_ops = {
833 	.open = pcm_digital_in_open,
834 	.close = pcm_close,
835 	.ioctl = snd_pcm_lib_ioctl,
836 	.hw_params = pcm_digital_in_hw_params,
837 	.hw_free = pcm_hw_free,
838 	.prepare = pcm_prepare,
839 	.trigger = pcm_trigger,
840 	.pointer = pcm_pointer,
841 	.page = snd_pcm_sgbuf_ops_page,
842 };
843 #endif /* ECHOCARD_HAS_DIGITAL_IO */
844 
845 
846 
847 /* Preallocate memory only for the first substream because it's the most
848  * used one
849  */
850 static int snd_echo_preallocate_pages(struct snd_pcm *pcm, struct device *dev)
851 {
852 	struct snd_pcm_substream *ss;
853 	int stream, err;
854 
855 	for (stream = 0; stream < 2; stream++)
856 		for (ss = pcm->streams[stream].substream; ss; ss = ss->next) {
857 			err = snd_pcm_lib_preallocate_pages(ss, SNDRV_DMA_TYPE_DEV_SG,
858 							    dev,
859 							    ss->number ? 0 : 128<<10,
860 							    256<<10);
861 			if (err < 0)
862 				return err;
863 		}
864 	return 0;
865 }
866 
867 
868 
869 /*<--snd_echo_probe() */
870 static int __devinit snd_echo_new_pcm(struct echoaudio *chip)
871 {
872 	struct snd_pcm *pcm;
873 	int err;
874 
875 #ifdef ECHOCARD_HAS_VMIXER
876 	/* This card has a Vmixer, that is there is no direct mapping from PCM
877 	streams to physical outputs. The user can mix the streams as he wishes
878 	via control interface and it's possible to send any stream to any
879 	output, thus it makes no sense to keep analog and digital outputs
880 	separated */
881 
882 	/* PCM#0 Virtual outputs and analog inputs */
883 	if ((err = snd_pcm_new(chip->card, "PCM", 0, num_pipes_out(chip),
884 				num_analog_busses_in(chip), &pcm)) < 0)
885 		return err;
886 	pcm->private_data = chip;
887 	chip->analog_pcm = pcm;
888 	strcpy(pcm->name, chip->card->shortname);
889 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &analog_playback_ops);
890 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &analog_capture_ops);
891 	if ((err = snd_echo_preallocate_pages(pcm, snd_dma_pci_data(chip->pci))) < 0)
892 		return err;
893 	DE_INIT(("Analog PCM ok\n"));
894 
895 #ifdef ECHOCARD_HAS_DIGITAL_IO
896 	/* PCM#1 Digital inputs, no outputs */
897 	if ((err = snd_pcm_new(chip->card, "Digital PCM", 1, 0,
898 			       num_digital_busses_in(chip), &pcm)) < 0)
899 		return err;
900 	pcm->private_data = chip;
901 	chip->digital_pcm = pcm;
902 	strcpy(pcm->name, chip->card->shortname);
903 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &digital_capture_ops);
904 	if ((err = snd_echo_preallocate_pages(pcm, snd_dma_pci_data(chip->pci))) < 0)
905 		return err;
906 	DE_INIT(("Digital PCM ok\n"));
907 #endif /* ECHOCARD_HAS_DIGITAL_IO */
908 
909 #else /* ECHOCARD_HAS_VMIXER */
910 
911 	/* The card can manage substreams formed by analog and digital channels
912 	at the same time, but I prefer to keep analog and digital channels
913 	separated, because that mixed thing is confusing and useless. So we
914 	register two PCM devices: */
915 
916 	/* PCM#0 Analog i/o */
917 	if ((err = snd_pcm_new(chip->card, "Analog PCM", 0,
918 			       num_analog_busses_out(chip),
919 			       num_analog_busses_in(chip), &pcm)) < 0)
920 		return err;
921 	pcm->private_data = chip;
922 	chip->analog_pcm = pcm;
923 	strcpy(pcm->name, chip->card->shortname);
924 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &analog_playback_ops);
925 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &analog_capture_ops);
926 	if ((err = snd_echo_preallocate_pages(pcm, snd_dma_pci_data(chip->pci))) < 0)
927 		return err;
928 	DE_INIT(("Analog PCM ok\n"));
929 
930 #ifdef ECHOCARD_HAS_DIGITAL_IO
931 	/* PCM#1 Digital i/o */
932 	if ((err = snd_pcm_new(chip->card, "Digital PCM", 1,
933 			       num_digital_busses_out(chip),
934 			       num_digital_busses_in(chip), &pcm)) < 0)
935 		return err;
936 	pcm->private_data = chip;
937 	chip->digital_pcm = pcm;
938 	strcpy(pcm->name, chip->card->shortname);
939 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &digital_playback_ops);
940 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &digital_capture_ops);
941 	if ((err = snd_echo_preallocate_pages(pcm, snd_dma_pci_data(chip->pci))) < 0)
942 		return err;
943 	DE_INIT(("Digital PCM ok\n"));
944 #endif /* ECHOCARD_HAS_DIGITAL_IO */
945 
946 #endif /* ECHOCARD_HAS_VMIXER */
947 
948 	return 0;
949 }
950 
951 
952 
953 
954 /******************************************************************************
955 	Control interface
956 ******************************************************************************/
957 
958 /******************* PCM output volume *******************/
959 static int snd_echo_output_gain_info(struct snd_kcontrol *kcontrol,
960 				     struct snd_ctl_elem_info *uinfo)
961 {
962 	struct echoaudio *chip;
963 
964 	chip = snd_kcontrol_chip(kcontrol);
965 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
966 	uinfo->count = num_busses_out(chip);
967 	uinfo->value.integer.min = ECHOGAIN_MINOUT;
968 	uinfo->value.integer.max = ECHOGAIN_MAXOUT;
969 	return 0;
970 }
971 
972 static int snd_echo_output_gain_get(struct snd_kcontrol *kcontrol,
973 				    struct snd_ctl_elem_value *ucontrol)
974 {
975 	struct echoaudio *chip;
976 	int c;
977 
978 	chip = snd_kcontrol_chip(kcontrol);
979 	for (c = 0; c < num_busses_out(chip); c++)
980 		ucontrol->value.integer.value[c] = chip->output_gain[c];
981 	return 0;
982 }
983 
984 static int snd_echo_output_gain_put(struct snd_kcontrol *kcontrol,
985 				    struct snd_ctl_elem_value *ucontrol)
986 {
987 	struct echoaudio *chip;
988 	int c, changed, gain;
989 
990 	changed = 0;
991 	chip = snd_kcontrol_chip(kcontrol);
992 	spin_lock_irq(&chip->lock);
993 	for (c = 0; c < num_busses_out(chip); c++) {
994 		gain = ucontrol->value.integer.value[c];
995 		/* Ignore out of range values */
996 		if (gain < ECHOGAIN_MINOUT || gain > ECHOGAIN_MAXOUT)
997 			continue;
998 		if (chip->output_gain[c] != gain) {
999 			set_output_gain(chip, c, gain);
1000 			changed = 1;
1001 		}
1002 	}
1003 	if (changed)
1004 		update_output_line_level(chip);
1005 	spin_unlock_irq(&chip->lock);
1006 	return changed;
1007 }
1008 
1009 #ifdef ECHOCARD_HAS_VMIXER
1010 /* On Vmixer cards this one controls the line-out volume */
1011 static struct snd_kcontrol_new snd_echo_line_output_gain __devinitdata = {
1012 	.name = "Line Playback Volume",
1013 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1014 	.info = snd_echo_output_gain_info,
1015 	.get = snd_echo_output_gain_get,
1016 	.put = snd_echo_output_gain_put,
1017 };
1018 #else
1019 static struct snd_kcontrol_new snd_echo_pcm_output_gain __devinitdata = {
1020 	.name = "PCM Playback Volume",
1021 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1022 	.info = snd_echo_output_gain_info,
1023 	.get = snd_echo_output_gain_get,
1024 	.put = snd_echo_output_gain_put,
1025 };
1026 #endif
1027 
1028 
1029 
1030 #ifdef ECHOCARD_HAS_INPUT_GAIN
1031 
1032 /******************* Analog input volume *******************/
1033 static int snd_echo_input_gain_info(struct snd_kcontrol *kcontrol,
1034 				    struct snd_ctl_elem_info *uinfo)
1035 {
1036 	struct echoaudio *chip;
1037 
1038 	chip = snd_kcontrol_chip(kcontrol);
1039 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1040 	uinfo->count = num_analog_busses_in(chip);
1041 	uinfo->value.integer.min = ECHOGAIN_MININP;
1042 	uinfo->value.integer.max = ECHOGAIN_MAXINP;
1043 	return 0;
1044 }
1045 
1046 static int snd_echo_input_gain_get(struct snd_kcontrol *kcontrol,
1047 				   struct snd_ctl_elem_value *ucontrol)
1048 {
1049 	struct echoaudio *chip;
1050 	int c;
1051 
1052 	chip = snd_kcontrol_chip(kcontrol);
1053 	for (c = 0; c < num_analog_busses_in(chip); c++)
1054 		ucontrol->value.integer.value[c] = chip->input_gain[c];
1055 	return 0;
1056 }
1057 
1058 static int snd_echo_input_gain_put(struct snd_kcontrol *kcontrol,
1059 				   struct snd_ctl_elem_value *ucontrol)
1060 {
1061 	struct echoaudio *chip;
1062 	int c, gain, changed;
1063 
1064 	changed = 0;
1065 	chip = snd_kcontrol_chip(kcontrol);
1066 	spin_lock_irq(&chip->lock);
1067 	for (c = 0; c < num_analog_busses_in(chip); c++) {
1068 		gain = ucontrol->value.integer.value[c];
1069 		/* Ignore out of range values */
1070 		if (gain < ECHOGAIN_MININP || gain > ECHOGAIN_MAXINP)
1071 			continue;
1072 		if (chip->input_gain[c] != gain) {
1073 			set_input_gain(chip, c, gain);
1074 			changed = 1;
1075 		}
1076 	}
1077 	if (changed)
1078 		update_input_line_level(chip);
1079 	spin_unlock_irq(&chip->lock);
1080 	return changed;
1081 }
1082 
1083 static struct snd_kcontrol_new snd_echo_line_input_gain __devinitdata = {
1084 	.name = "Line Capture Volume",
1085 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1086 	.info = snd_echo_input_gain_info,
1087 	.get = snd_echo_input_gain_get,
1088 	.put = snd_echo_input_gain_put,
1089 };
1090 
1091 #endif /* ECHOCARD_HAS_INPUT_GAIN */
1092 
1093 
1094 
1095 #ifdef ECHOCARD_HAS_OUTPUT_NOMINAL_LEVEL
1096 
1097 /************ Analog output nominal level (+4dBu / -10dBV) ***************/
1098 static int snd_echo_output_nominal_info (struct snd_kcontrol *kcontrol,
1099 					 struct snd_ctl_elem_info *uinfo)
1100 {
1101 	struct echoaudio *chip;
1102 
1103 	chip = snd_kcontrol_chip(kcontrol);
1104 	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1105 	uinfo->count = num_analog_busses_out(chip);
1106 	uinfo->value.integer.min = 0;
1107 	uinfo->value.integer.max = 1;
1108 	return 0;
1109 }
1110 
1111 static int snd_echo_output_nominal_get(struct snd_kcontrol *kcontrol,
1112 				       struct snd_ctl_elem_value *ucontrol)
1113 {
1114 	struct echoaudio *chip;
1115 	int c;
1116 
1117 	chip = snd_kcontrol_chip(kcontrol);
1118 	for (c = 0; c < num_analog_busses_out(chip); c++)
1119 		ucontrol->value.integer.value[c] = chip->nominal_level[c];
1120 	return 0;
1121 }
1122 
1123 static int snd_echo_output_nominal_put(struct snd_kcontrol *kcontrol,
1124 				       struct snd_ctl_elem_value *ucontrol)
1125 {
1126 	struct echoaudio *chip;
1127 	int c, changed;
1128 
1129 	changed = 0;
1130 	chip = snd_kcontrol_chip(kcontrol);
1131 	spin_lock_irq(&chip->lock);
1132 	for (c = 0; c < num_analog_busses_out(chip); c++) {
1133 		if (chip->nominal_level[c] != ucontrol->value.integer.value[c]) {
1134 			set_nominal_level(chip, c,
1135 					  ucontrol->value.integer.value[c]);
1136 			changed = 1;
1137 		}
1138 	}
1139 	if (changed)
1140 		update_output_line_level(chip);
1141 	spin_unlock_irq(&chip->lock);
1142 	return changed;
1143 }
1144 
1145 static struct snd_kcontrol_new snd_echo_output_nominal_level __devinitdata = {
1146 	.name = "Line Playback Switch (-10dBV)",
1147 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1148 	.info = snd_echo_output_nominal_info,
1149 	.get = snd_echo_output_nominal_get,
1150 	.put = snd_echo_output_nominal_put,
1151 };
1152 
1153 #endif /* ECHOCARD_HAS_OUTPUT_NOMINAL_LEVEL */
1154 
1155 
1156 
1157 #ifdef ECHOCARD_HAS_INPUT_NOMINAL_LEVEL
1158 
1159 /*************** Analog input nominal level (+4dBu / -10dBV) ***************/
1160 static int snd_echo_input_nominal_info(struct snd_kcontrol *kcontrol,
1161 				       struct snd_ctl_elem_info *uinfo)
1162 {
1163 	struct echoaudio *chip;
1164 
1165 	chip = snd_kcontrol_chip(kcontrol);
1166 	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1167 	uinfo->count = num_analog_busses_in(chip);
1168 	uinfo->value.integer.min = 0;
1169 	uinfo->value.integer.max = 1;
1170 	return 0;
1171 }
1172 
1173 static int snd_echo_input_nominal_get(struct snd_kcontrol *kcontrol,
1174 				      struct snd_ctl_elem_value *ucontrol)
1175 {
1176 	struct echoaudio *chip;
1177 	int c;
1178 
1179 	chip = snd_kcontrol_chip(kcontrol);
1180 	for (c = 0; c < num_analog_busses_in(chip); c++)
1181 		ucontrol->value.integer.value[c] =
1182 			chip->nominal_level[bx_analog_in(chip) + c];
1183 	return 0;
1184 }
1185 
1186 static int snd_echo_input_nominal_put(struct snd_kcontrol *kcontrol,
1187 				      struct snd_ctl_elem_value *ucontrol)
1188 {
1189 	struct echoaudio *chip;
1190 	int c, changed;
1191 
1192 	changed = 0;
1193 	chip = snd_kcontrol_chip(kcontrol);
1194 	spin_lock_irq(&chip->lock);
1195 	for (c = 0; c < num_analog_busses_in(chip); c++) {
1196 		if (chip->nominal_level[bx_analog_in(chip) + c] !=
1197 		    ucontrol->value.integer.value[c]) {
1198 			set_nominal_level(chip, bx_analog_in(chip) + c,
1199 					  ucontrol->value.integer.value[c]);
1200 			changed = 1;
1201 		}
1202 	}
1203 	if (changed)
1204 		update_output_line_level(chip);	/* "Output" is not a mistake
1205 						 * here.
1206 						 */
1207 	spin_unlock_irq(&chip->lock);
1208 	return changed;
1209 }
1210 
1211 static struct snd_kcontrol_new snd_echo_intput_nominal_level __devinitdata = {
1212 	.name = "Line Capture Switch (-10dBV)",
1213 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1214 	.info = snd_echo_input_nominal_info,
1215 	.get = snd_echo_input_nominal_get,
1216 	.put = snd_echo_input_nominal_put,
1217 };
1218 
1219 #endif /* ECHOCARD_HAS_INPUT_NOMINAL_LEVEL */
1220 
1221 
1222 
1223 #ifdef ECHOCARD_HAS_MONITOR
1224 
1225 /******************* Monitor mixer *******************/
1226 static int snd_echo_mixer_info(struct snd_kcontrol *kcontrol,
1227 			       struct snd_ctl_elem_info *uinfo)
1228 {
1229 	struct echoaudio *chip;
1230 
1231 	chip = snd_kcontrol_chip(kcontrol);
1232 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1233 	uinfo->count = 1;
1234 	uinfo->value.integer.min = ECHOGAIN_MINOUT;
1235 	uinfo->value.integer.max = ECHOGAIN_MAXOUT;
1236 	uinfo->dimen.d[0] = num_busses_out(chip);
1237 	uinfo->dimen.d[1] = num_busses_in(chip);
1238 	return 0;
1239 }
1240 
1241 static int snd_echo_mixer_get(struct snd_kcontrol *kcontrol,
1242 			      struct snd_ctl_elem_value *ucontrol)
1243 {
1244 	struct echoaudio *chip;
1245 
1246 	chip = snd_kcontrol_chip(kcontrol);
1247 	ucontrol->value.integer.value[0] =
1248 		chip->monitor_gain[ucontrol->id.index / num_busses_in(chip)]
1249 			[ucontrol->id.index % num_busses_in(chip)];
1250 	return 0;
1251 }
1252 
1253 static int snd_echo_mixer_put(struct snd_kcontrol *kcontrol,
1254 			      struct snd_ctl_elem_value *ucontrol)
1255 {
1256 	struct echoaudio *chip;
1257 	int changed,  gain;
1258 	short out, in;
1259 
1260 	changed = 0;
1261 	chip = snd_kcontrol_chip(kcontrol);
1262 	out = ucontrol->id.index / num_busses_in(chip);
1263 	in = ucontrol->id.index % num_busses_in(chip);
1264 	gain = ucontrol->value.integer.value[0];
1265 	if (gain < ECHOGAIN_MINOUT || gain > ECHOGAIN_MAXOUT)
1266 		return -EINVAL;
1267 	if (chip->monitor_gain[out][in] != gain) {
1268 		spin_lock_irq(&chip->lock);
1269 		set_monitor_gain(chip, out, in, gain);
1270 		update_output_line_level(chip);
1271 		spin_unlock_irq(&chip->lock);
1272 		changed = 1;
1273 	}
1274 	return changed;
1275 }
1276 
1277 static struct snd_kcontrol_new snd_echo_monitor_mixer __devinitdata = {
1278 	.name = "Monitor Mixer Volume",
1279 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1280 	.info = snd_echo_mixer_info,
1281 	.get = snd_echo_mixer_get,
1282 	.put = snd_echo_mixer_put,
1283 };
1284 
1285 #endif /* ECHOCARD_HAS_MONITOR */
1286 
1287 
1288 
1289 #ifdef ECHOCARD_HAS_VMIXER
1290 
1291 /******************* Vmixer *******************/
1292 static int snd_echo_vmixer_info(struct snd_kcontrol *kcontrol,
1293 				struct snd_ctl_elem_info *uinfo)
1294 {
1295 	struct echoaudio *chip;
1296 
1297 	chip = snd_kcontrol_chip(kcontrol);
1298 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1299 	uinfo->count = 1;
1300 	uinfo->value.integer.min = ECHOGAIN_MINOUT;
1301 	uinfo->value.integer.max = ECHOGAIN_MAXOUT;
1302 	uinfo->dimen.d[0] = num_busses_out(chip);
1303 	uinfo->dimen.d[1] = num_pipes_out(chip);
1304 	return 0;
1305 }
1306 
1307 static int snd_echo_vmixer_get(struct snd_kcontrol *kcontrol,
1308 			       struct snd_ctl_elem_value *ucontrol)
1309 {
1310 	struct echoaudio *chip;
1311 
1312 	chip = snd_kcontrol_chip(kcontrol);
1313 	ucontrol->value.integer.value[0] =
1314 		chip->vmixer_gain[ucontrol->id.index / num_pipes_out(chip)]
1315 			[ucontrol->id.index % num_pipes_out(chip)];
1316 	return 0;
1317 }
1318 
1319 static int snd_echo_vmixer_put(struct snd_kcontrol *kcontrol,
1320 			       struct snd_ctl_elem_value *ucontrol)
1321 {
1322 	struct echoaudio *chip;
1323 	int gain, changed;
1324 	short vch, out;
1325 
1326 	changed = 0;
1327 	chip = snd_kcontrol_chip(kcontrol);
1328 	out = ucontrol->id.index / num_pipes_out(chip);
1329 	vch = ucontrol->id.index % num_pipes_out(chip);
1330 	gain = ucontrol->value.integer.value[0];
1331 	if (gain < ECHOGAIN_MINOUT || gain > ECHOGAIN_MAXOUT)
1332 		return -EINVAL;
1333 	if (chip->vmixer_gain[out][vch] != ucontrol->value.integer.value[0]) {
1334 		spin_lock_irq(&chip->lock);
1335 		set_vmixer_gain(chip, out, vch, ucontrol->value.integer.value[0]);
1336 		update_vmixer_level(chip);
1337 		spin_unlock_irq(&chip->lock);
1338 		changed = 1;
1339 	}
1340 	return changed;
1341 }
1342 
1343 static struct snd_kcontrol_new snd_echo_vmixer __devinitdata = {
1344 	.name = "VMixer Volume",
1345 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1346 	.info = snd_echo_vmixer_info,
1347 	.get = snd_echo_vmixer_get,
1348 	.put = snd_echo_vmixer_put,
1349 };
1350 
1351 #endif /* ECHOCARD_HAS_VMIXER */
1352 
1353 
1354 
1355 #ifdef ECHOCARD_HAS_DIGITAL_MODE_SWITCH
1356 
1357 /******************* Digital mode switch *******************/
1358 static int snd_echo_digital_mode_info(struct snd_kcontrol *kcontrol,
1359 				      struct snd_ctl_elem_info *uinfo)
1360 {
1361 	static char *names[4] = {
1362 		"S/PDIF Coaxial", "S/PDIF Optical", "ADAT Optical",
1363 		"S/PDIF Cdrom"
1364 	};
1365 	struct echoaudio *chip;
1366 
1367 	chip = snd_kcontrol_chip(kcontrol);
1368 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
1369 	uinfo->value.enumerated.items = chip->num_digital_modes;
1370 	uinfo->count = 1;
1371 	if (uinfo->value.enumerated.item >= chip->num_digital_modes)
1372 		uinfo->value.enumerated.item = chip->num_digital_modes - 1;
1373 	strcpy(uinfo->value.enumerated.name, names[
1374 			chip->digital_mode_list[uinfo->value.enumerated.item]]);
1375 	return 0;
1376 }
1377 
1378 static int snd_echo_digital_mode_get(struct snd_kcontrol *kcontrol,
1379 				     struct snd_ctl_elem_value *ucontrol)
1380 {
1381 	struct echoaudio *chip;
1382 	int i, mode;
1383 
1384 	chip = snd_kcontrol_chip(kcontrol);
1385 	mode = chip->digital_mode;
1386 	for (i = chip->num_digital_modes - 1; i >= 0; i--)
1387 		if (mode == chip->digital_mode_list[i]) {
1388 			ucontrol->value.enumerated.item[0] = i;
1389 			break;
1390 		}
1391 	return 0;
1392 }
1393 
1394 static int snd_echo_digital_mode_put(struct snd_kcontrol *kcontrol,
1395 				     struct snd_ctl_elem_value *ucontrol)
1396 {
1397 	struct echoaudio *chip;
1398 	int changed;
1399 	unsigned short emode, dmode;
1400 
1401 	changed = 0;
1402 	chip = snd_kcontrol_chip(kcontrol);
1403 
1404 	emode = ucontrol->value.enumerated.item[0];
1405 	if (emode >= chip->num_digital_modes)
1406 		return -EINVAL;
1407 	dmode = chip->digital_mode_list[emode];
1408 
1409 	if (dmode != chip->digital_mode) {
1410 		/* mode_mutex is required to make this operation atomic wrt
1411 		pcm_digital_*_open() and set_input_clock() functions. */
1412 		down(&chip->mode_mutex);
1413 
1414 		/* Do not allow the user to change the digital mode when a pcm
1415 		device is open because it also changes the number of channels
1416 		and the allowed sample rates */
1417 		if (atomic_read(&chip->opencount)) {
1418 			changed = -EAGAIN;
1419 		} else {
1420 			changed = set_digital_mode(chip, dmode);
1421 			/* If we had to change the clock source, report it */
1422 			if (changed > 0 && chip->clock_src_ctl) {
1423 				snd_ctl_notify(chip->card,
1424 					       SNDRV_CTL_EVENT_MASK_VALUE,
1425 					       &chip->clock_src_ctl->id);
1426 				DE_ACT(("SDM() =%d\n", changed));
1427 			}
1428 			if (changed >= 0)
1429 				changed = 1;	/* No errors */
1430 		}
1431 		up(&chip->mode_mutex);
1432 	}
1433 	return changed;
1434 }
1435 
1436 static struct snd_kcontrol_new snd_echo_digital_mode_switch __devinitdata = {
1437 	.name = "Digital mode Switch",
1438 	.iface = SNDRV_CTL_ELEM_IFACE_CARD,
1439 	.info = snd_echo_digital_mode_info,
1440 	.get = snd_echo_digital_mode_get,
1441 	.put = snd_echo_digital_mode_put,
1442 };
1443 
1444 #endif /* ECHOCARD_HAS_DIGITAL_MODE_SWITCH */
1445 
1446 
1447 
1448 #ifdef ECHOCARD_HAS_DIGITAL_IO
1449 
1450 /******************* S/PDIF mode switch *******************/
1451 static int snd_echo_spdif_mode_info(struct snd_kcontrol *kcontrol,
1452 				    struct snd_ctl_elem_info *uinfo)
1453 {
1454 	static char *names[2] = {"Consumer", "Professional"};
1455 
1456 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
1457 	uinfo->value.enumerated.items = 2;
1458 	uinfo->count = 1;
1459 	if (uinfo->value.enumerated.item)
1460 		uinfo->value.enumerated.item = 1;
1461 	strcpy(uinfo->value.enumerated.name,
1462 	       names[uinfo->value.enumerated.item]);
1463 	return 0;
1464 }
1465 
1466 static int snd_echo_spdif_mode_get(struct snd_kcontrol *kcontrol,
1467 				   struct snd_ctl_elem_value *ucontrol)
1468 {
1469 	struct echoaudio *chip;
1470 
1471 	chip = snd_kcontrol_chip(kcontrol);
1472 	ucontrol->value.enumerated.item[0] = !!chip->professional_spdif;
1473 	return 0;
1474 }
1475 
1476 static int snd_echo_spdif_mode_put(struct snd_kcontrol *kcontrol,
1477 				   struct snd_ctl_elem_value *ucontrol)
1478 {
1479 	struct echoaudio *chip;
1480 	int mode;
1481 
1482 	chip = snd_kcontrol_chip(kcontrol);
1483 	mode = !!ucontrol->value.enumerated.item[0];
1484 	if (mode != chip->professional_spdif) {
1485 		spin_lock_irq(&chip->lock);
1486 		set_professional_spdif(chip, mode);
1487 		spin_unlock_irq(&chip->lock);
1488 		return 1;
1489 	}
1490 	return 0;
1491 }
1492 
1493 static struct snd_kcontrol_new snd_echo_spdif_mode_switch __devinitdata = {
1494 	.name = "S/PDIF mode Switch",
1495 	.iface = SNDRV_CTL_ELEM_IFACE_CARD,
1496 	.info = snd_echo_spdif_mode_info,
1497 	.get = snd_echo_spdif_mode_get,
1498 	.put = snd_echo_spdif_mode_put,
1499 };
1500 
1501 #endif /* ECHOCARD_HAS_DIGITAL_IO */
1502 
1503 
1504 
1505 #ifdef ECHOCARD_HAS_EXTERNAL_CLOCK
1506 
1507 /******************* Select input clock source *******************/
1508 static int snd_echo_clock_source_info(struct snd_kcontrol *kcontrol,
1509 				      struct snd_ctl_elem_info *uinfo)
1510 {
1511 	static char *names[8] = {
1512 		"Internal", "Word", "Super", "S/PDIF", "ADAT", "ESync",
1513 		"ESync96", "MTC"
1514 	};
1515 	struct echoaudio *chip;
1516 
1517 	chip = snd_kcontrol_chip(kcontrol);
1518 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
1519 	uinfo->value.enumerated.items = chip->num_clock_sources;
1520 	uinfo->count = 1;
1521 	if (uinfo->value.enumerated.item >= chip->num_clock_sources)
1522 		uinfo->value.enumerated.item = chip->num_clock_sources - 1;
1523 	strcpy(uinfo->value.enumerated.name, names[
1524 			chip->clock_source_list[uinfo->value.enumerated.item]]);
1525 	return 0;
1526 }
1527 
1528 static int snd_echo_clock_source_get(struct snd_kcontrol *kcontrol,
1529 				     struct snd_ctl_elem_value *ucontrol)
1530 {
1531 	struct echoaudio *chip;
1532 	int i, clock;
1533 
1534 	chip = snd_kcontrol_chip(kcontrol);
1535 	clock = chip->input_clock;
1536 
1537 	for (i = 0; i < chip->num_clock_sources; i++)
1538 		if (clock == chip->clock_source_list[i])
1539 			ucontrol->value.enumerated.item[0] = i;
1540 
1541 	return 0;
1542 }
1543 
1544 static int snd_echo_clock_source_put(struct snd_kcontrol *kcontrol,
1545 				     struct snd_ctl_elem_value *ucontrol)
1546 {
1547 	struct echoaudio *chip;
1548 	int changed;
1549 	unsigned int eclock, dclock;
1550 
1551 	changed = 0;
1552 	chip = snd_kcontrol_chip(kcontrol);
1553 	eclock = ucontrol->value.enumerated.item[0];
1554 	if (eclock >= chip->input_clock_types)
1555 		return -EINVAL;
1556 	dclock = chip->clock_source_list[eclock];
1557 	if (chip->input_clock != dclock) {
1558 		down(&chip->mode_mutex);
1559 		spin_lock_irq(&chip->lock);
1560 		if ((changed = set_input_clock(chip, dclock)) == 0)
1561 			changed = 1;	/* no errors */
1562 		spin_unlock_irq(&chip->lock);
1563 		up(&chip->mode_mutex);
1564 	}
1565 
1566 	if (changed < 0)
1567 		DE_ACT(("seticlk val%d err 0x%x\n", dclock, changed));
1568 
1569 	return changed;
1570 }
1571 
1572 static struct snd_kcontrol_new snd_echo_clock_source_switch __devinitdata = {
1573 	.name = "Sample Clock Source",
1574 	.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1575 	.info = snd_echo_clock_source_info,
1576 	.get = snd_echo_clock_source_get,
1577 	.put = snd_echo_clock_source_put,
1578 };
1579 
1580 #endif /* ECHOCARD_HAS_EXTERNAL_CLOCK */
1581 
1582 
1583 
1584 #ifdef ECHOCARD_HAS_PHANTOM_POWER
1585 
1586 /******************* Phantom power switch *******************/
1587 static int snd_echo_phantom_power_info(struct snd_kcontrol *kcontrol,
1588 				       struct snd_ctl_elem_info *uinfo)
1589 {
1590 	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1591 	uinfo->count = 1;
1592 	uinfo->value.integer.min = 0;
1593 	uinfo->value.integer.max = 1;
1594 	return 0;
1595 }
1596 
1597 static int snd_echo_phantom_power_get(struct snd_kcontrol *kcontrol,
1598 				      struct snd_ctl_elem_value *ucontrol)
1599 {
1600 	struct echoaudio *chip = snd_kcontrol_chip(kcontrol);
1601 
1602 	ucontrol->value.integer.value[0] = chip->phantom_power;
1603 	return 0;
1604 }
1605 
1606 static int snd_echo_phantom_power_put(struct snd_kcontrol *kcontrol,
1607 				      struct snd_ctl_elem_value *ucontrol)
1608 {
1609 	struct echoaudio *chip = snd_kcontrol_chip(kcontrol);
1610 	int power, changed = 0;
1611 
1612 	power = !!ucontrol->value.integer.value[0];
1613 	if (chip->phantom_power != power) {
1614 		spin_lock_irq(&chip->lock);
1615 		changed = set_phantom_power(chip, power);
1616 		spin_unlock_irq(&chip->lock);
1617 		if (changed == 0)
1618 			changed = 1;	/* no errors */
1619 	}
1620 	return changed;
1621 }
1622 
1623 static struct snd_kcontrol_new snd_echo_phantom_power_switch __devinitdata = {
1624 	.name = "Phantom power Switch",
1625 	.iface = SNDRV_CTL_ELEM_IFACE_CARD,
1626 	.info = snd_echo_phantom_power_info,
1627 	.get = snd_echo_phantom_power_get,
1628 	.put = snd_echo_phantom_power_put,
1629 };
1630 
1631 #endif /* ECHOCARD_HAS_PHANTOM_POWER */
1632 
1633 
1634 
1635 #ifdef ECHOCARD_HAS_DIGITAL_IN_AUTOMUTE
1636 
1637 /******************* Digital input automute switch *******************/
1638 static int snd_echo_automute_info(struct snd_kcontrol *kcontrol,
1639 				  struct snd_ctl_elem_info *uinfo)
1640 {
1641 	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1642 	uinfo->count = 1;
1643 	uinfo->value.integer.min = 0;
1644 	uinfo->value.integer.max = 1;
1645 	return 0;
1646 }
1647 
1648 static int snd_echo_automute_get(struct snd_kcontrol *kcontrol,
1649 				 struct snd_ctl_elem_value *ucontrol)
1650 {
1651 	struct echoaudio *chip = snd_kcontrol_chip(kcontrol);
1652 
1653 	ucontrol->value.integer.value[0] = chip->digital_in_automute;
1654 	return 0;
1655 }
1656 
1657 static int snd_echo_automute_put(struct snd_kcontrol *kcontrol,
1658 				 struct snd_ctl_elem_value *ucontrol)
1659 {
1660 	struct echoaudio *chip = snd_kcontrol_chip(kcontrol);
1661 	int automute, changed = 0;
1662 
1663 	automute = !!ucontrol->value.integer.value[0];
1664 	if (chip->digital_in_automute != automute) {
1665 		spin_lock_irq(&chip->lock);
1666 		changed = set_input_auto_mute(chip, automute);
1667 		spin_unlock_irq(&chip->lock);
1668 		if (changed == 0)
1669 			changed = 1;	/* no errors */
1670 	}
1671 	return changed;
1672 }
1673 
1674 static struct snd_kcontrol_new snd_echo_automute_switch __devinitdata = {
1675 	.name = "Digital Capture Switch (automute)",
1676 	.iface = SNDRV_CTL_ELEM_IFACE_CARD,
1677 	.info = snd_echo_automute_info,
1678 	.get = snd_echo_automute_get,
1679 	.put = snd_echo_automute_put,
1680 };
1681 
1682 #endif /* ECHOCARD_HAS_DIGITAL_IN_AUTOMUTE */
1683 
1684 
1685 
1686 /******************* VU-meters switch *******************/
1687 static int snd_echo_vumeters_switch_info(struct snd_kcontrol *kcontrol,
1688 					 struct snd_ctl_elem_info *uinfo)
1689 {
1690 	struct echoaudio *chip;
1691 
1692 	chip = snd_kcontrol_chip(kcontrol);
1693 	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1694 	uinfo->count = 1;
1695 	uinfo->value.integer.min = 0;
1696 	uinfo->value.integer.max = 1;
1697 	return 0;
1698 }
1699 
1700 static int snd_echo_vumeters_switch_put(struct snd_kcontrol *kcontrol,
1701 					struct snd_ctl_elem_value *ucontrol)
1702 {
1703 	struct echoaudio *chip;
1704 
1705 	chip = snd_kcontrol_chip(kcontrol);
1706 	spin_lock_irq(&chip->lock);
1707 	set_meters_on(chip, ucontrol->value.integer.value[0]);
1708 	spin_unlock_irq(&chip->lock);
1709 	return 1;
1710 }
1711 
1712 static struct snd_kcontrol_new snd_echo_vumeters_switch __devinitdata = {
1713 	.name = "VU-meters Switch",
1714 	.iface = SNDRV_CTL_ELEM_IFACE_CARD,
1715 	.access = SNDRV_CTL_ELEM_ACCESS_WRITE,
1716 	.info = snd_echo_vumeters_switch_info,
1717 	.put = snd_echo_vumeters_switch_put,
1718 };
1719 
1720 
1721 
1722 /***** Read VU-meters (input, output, analog and digital together) *****/
1723 static int snd_echo_vumeters_info(struct snd_kcontrol *kcontrol,
1724 				  struct snd_ctl_elem_info *uinfo)
1725 {
1726 	struct echoaudio *chip;
1727 
1728 	chip = snd_kcontrol_chip(kcontrol);
1729 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1730 	uinfo->count = 96;
1731 	uinfo->value.integer.min = ECHOGAIN_MINOUT;
1732 	uinfo->value.integer.max = 0;
1733 #ifdef ECHOCARD_HAS_VMIXER
1734 	uinfo->dimen.d[0] = 3;	/* Out, In, Virt */
1735 #else
1736 	uinfo->dimen.d[0] = 2;	/* Out, In */
1737 #endif
1738 	uinfo->dimen.d[1] = 16;	/* 16 channels */
1739 	uinfo->dimen.d[2] = 2;	/* 0=level, 1=peak */
1740 	return 0;
1741 }
1742 
1743 static int snd_echo_vumeters_get(struct snd_kcontrol *kcontrol,
1744 				 struct snd_ctl_elem_value *ucontrol)
1745 {
1746 	struct echoaudio *chip;
1747 
1748 	chip = snd_kcontrol_chip(kcontrol);
1749 	get_audio_meters(chip, ucontrol->value.integer.value);
1750 	return 0;
1751 }
1752 
1753 static struct snd_kcontrol_new snd_echo_vumeters __devinitdata = {
1754 	.name = "VU-meters",
1755 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1756 	.access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1757 	.info = snd_echo_vumeters_info,
1758 	.get = snd_echo_vumeters_get,
1759 };
1760 
1761 
1762 
1763 /*** Channels info - it exports informations about the number of channels ***/
1764 static int snd_echo_channels_info_info(struct snd_kcontrol *kcontrol,
1765 				       struct snd_ctl_elem_info *uinfo)
1766 {
1767 	struct echoaudio *chip;
1768 
1769 	chip = snd_kcontrol_chip(kcontrol);
1770 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1771 	uinfo->count = 6;
1772 	uinfo->value.integer.min = 0;
1773 	uinfo->value.integer.max = 1 << ECHO_CLOCK_NUMBER;
1774 	return 0;
1775 }
1776 
1777 static int snd_echo_channels_info_get(struct snd_kcontrol *kcontrol,
1778 				      struct snd_ctl_elem_value *ucontrol)
1779 {
1780 	struct echoaudio *chip;
1781 	int detected, clocks, bit, src;
1782 
1783 	chip = snd_kcontrol_chip(kcontrol);
1784 	ucontrol->value.integer.value[0] = num_busses_in(chip);
1785 	ucontrol->value.integer.value[1] = num_analog_busses_in(chip);
1786 	ucontrol->value.integer.value[2] = num_busses_out(chip);
1787 	ucontrol->value.integer.value[3] = num_analog_busses_out(chip);
1788 	ucontrol->value.integer.value[4] = num_pipes_out(chip);
1789 
1790 	/* Compute the bitmask of the currently valid input clocks */
1791 	detected = detect_input_clocks(chip);
1792 	clocks = 0;
1793 	src = chip->num_clock_sources - 1;
1794 	for (bit = ECHO_CLOCK_NUMBER - 1; bit >= 0; bit--)
1795 		if (detected & (1 << bit))
1796 			for (; src >= 0; src--)
1797 				if (bit == chip->clock_source_list[src]) {
1798 					clocks |= 1 << src;
1799 					break;
1800 				}
1801 	ucontrol->value.integer.value[5] = clocks;
1802 
1803 	return 0;
1804 }
1805 
1806 static struct snd_kcontrol_new snd_echo_channels_info __devinitdata = {
1807 	.name = "Channels info",
1808 	.iface = SNDRV_CTL_ELEM_IFACE_HWDEP,
1809 	.access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1810 	.info = snd_echo_channels_info_info,
1811 	.get = snd_echo_channels_info_get,
1812 };
1813 
1814 
1815 
1816 
1817 /******************************************************************************
1818 	IRQ Handler
1819 ******************************************************************************/
1820 
1821 static irqreturn_t snd_echo_interrupt(int irq, void *dev_id,
1822 				      struct pt_regs *regs)
1823 {
1824 	struct echoaudio *chip = dev_id;
1825 	struct snd_pcm_substream *substream;
1826 	int period, ss, st;
1827 
1828 	spin_lock(&chip->lock);
1829 	st = service_irq(chip);
1830 	if (st < 0) {
1831 		spin_unlock(&chip->lock);
1832 		return IRQ_NONE;
1833 	}
1834 	/* The hardware doesn't tell us which substream caused the irq,
1835 	thus we have to check all running substreams. */
1836 	for (ss = 0; ss < DSP_MAXPIPES; ss++) {
1837 		if ((substream = chip->substream[ss])) {
1838 			period = pcm_pointer(substream) /
1839 				substream->runtime->period_size;
1840 			if (period != chip->last_period[ss]) {
1841 				chip->last_period[ss] = period;
1842 				spin_unlock(&chip->lock);
1843 				snd_pcm_period_elapsed(substream);
1844 				spin_lock(&chip->lock);
1845 			}
1846 		}
1847 	}
1848 	spin_unlock(&chip->lock);
1849 
1850 #ifdef ECHOCARD_HAS_MIDI
1851 	if (st > 0 && chip->midi_in) {
1852 		snd_rawmidi_receive(chip->midi_in, chip->midi_buffer, st);
1853 		DE_MID(("rawmidi_iread=%d\n", st));
1854 	}
1855 #endif
1856 	return IRQ_HANDLED;
1857 }
1858 
1859 
1860 
1861 
1862 /******************************************************************************
1863 	Module construction / destruction
1864 ******************************************************************************/
1865 
1866 static int snd_echo_free(struct echoaudio *chip)
1867 {
1868 	DE_INIT(("Stop DSP...\n"));
1869 	if (chip->comm_page) {
1870 		rest_in_peace(chip);
1871 		snd_dma_free_pages(&chip->commpage_dma_buf);
1872 	}
1873 	DE_INIT(("Stopped.\n"));
1874 
1875 	if (chip->irq >= 0)
1876 		free_irq(chip->irq, (void *)chip);
1877 
1878 	if (chip->dsp_registers)
1879 		iounmap(chip->dsp_registers);
1880 
1881 	if (chip->iores)
1882 		release_and_free_resource(chip->iores);
1883 
1884 	DE_INIT(("MMIO freed.\n"));
1885 
1886 	pci_disable_device(chip->pci);
1887 
1888 	/* release chip data */
1889 	kfree(chip);
1890 	DE_INIT(("Chip freed.\n"));
1891 	return 0;
1892 }
1893 
1894 
1895 
1896 static int snd_echo_dev_free(struct snd_device *device)
1897 {
1898 	struct echoaudio *chip = device->device_data;
1899 
1900 	DE_INIT(("snd_echo_dev_free()...\n"));
1901 	return snd_echo_free(chip);
1902 }
1903 
1904 
1905 
1906 /* <--snd_echo_probe() */
1907 static __devinit int snd_echo_create(struct snd_card *card,
1908 				     struct pci_dev *pci,
1909 				     struct echoaudio **rchip)
1910 {
1911 	struct echoaudio *chip;
1912 	int err;
1913 	size_t sz;
1914 	static struct snd_device_ops ops = {
1915 		.dev_free = snd_echo_dev_free,
1916 	};
1917 
1918 	*rchip = NULL;
1919 
1920 	pci_write_config_byte(pci, PCI_LATENCY_TIMER, 0xC0);
1921 
1922 	if ((err = pci_enable_device(pci)) < 0)
1923 		return err;
1924 	pci_set_master(pci);
1925 
1926 	/* allocate a chip-specific data */
1927 	chip = kzalloc(sizeof(*chip), GFP_KERNEL);
1928 	if (!chip) {
1929 		pci_disable_device(pci);
1930 		return -ENOMEM;
1931 	}
1932 	DE_INIT(("chip=%p\n", chip));
1933 
1934 	spin_lock_init(&chip->lock);
1935 	chip->card = card;
1936 	chip->pci = pci;
1937 	chip->irq = -1;
1938 
1939 	/* PCI resource allocation */
1940 	chip->dsp_registers_phys = pci_resource_start(pci, 0);
1941 	sz = pci_resource_len(pci, 0);
1942 	if (sz > PAGE_SIZE)
1943 		sz = PAGE_SIZE;		/* We map only the required part */
1944 
1945 	if ((chip->iores = request_mem_region(chip->dsp_registers_phys, sz,
1946 					      ECHOCARD_NAME)) == NULL) {
1947 		snd_echo_free(chip);
1948 		snd_printk(KERN_ERR "cannot get memory region\n");
1949 		return -EBUSY;
1950 	}
1951 	chip->dsp_registers = (volatile u32 __iomem *)
1952 		ioremap_nocache(chip->dsp_registers_phys, sz);
1953 
1954 	if (request_irq(pci->irq, snd_echo_interrupt, IRQF_DISABLED | IRQF_SHARED,
1955 						ECHOCARD_NAME, (void *)chip)) {
1956 		snd_echo_free(chip);
1957 		snd_printk(KERN_ERR "cannot grab irq\n");
1958 		return -EBUSY;
1959 	}
1960 	chip->irq = pci->irq;
1961 	DE_INIT(("pci=%p irq=%d subdev=%04x Init hardware...\n",
1962 		 chip->pci, chip->irq, chip->pci->subsystem_device));
1963 
1964 	/* Create the DSP comm page - this is the area of memory used for most
1965 	of the communication with the DSP, which accesses it via bus mastering */
1966 	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(chip->pci),
1967 				sizeof(struct comm_page),
1968 				&chip->commpage_dma_buf) < 0) {
1969 		snd_echo_free(chip);
1970 		snd_printk(KERN_ERR "cannot allocate the comm page\n");
1971 		return -ENOMEM;
1972 	}
1973 	chip->comm_page_phys = chip->commpage_dma_buf.addr;
1974 	chip->comm_page = (struct comm_page *)chip->commpage_dma_buf.area;
1975 
1976 	err = init_hw(chip, chip->pci->device, chip->pci->subsystem_device);
1977 	if (err) {
1978 		DE_INIT(("init_hw err=%d\n", err));
1979 		snd_echo_free(chip);
1980 		return err;
1981 	}
1982 	DE_INIT(("Card init OK\n"));
1983 
1984 	if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
1985 		snd_echo_free(chip);
1986 		return err;
1987 	}
1988 	atomic_set(&chip->opencount, 0);
1989 	init_MUTEX(&chip->mode_mutex);
1990 	chip->can_set_rate = 1;
1991 	*rchip = chip;
1992 	/* Init done ! */
1993 	return 0;
1994 }
1995 
1996 
1997 
1998 /* constructor */
1999 static int __devinit snd_echo_probe(struct pci_dev *pci,
2000 				    const struct pci_device_id *pci_id)
2001 {
2002 	static int dev;
2003 	struct snd_card *card;
2004 	struct echoaudio *chip;
2005 	char *dsp;
2006 	int i, err;
2007 
2008 	if (dev >= SNDRV_CARDS)
2009 		return -ENODEV;
2010 	if (!enable[dev]) {
2011 		dev++;
2012 		return -ENOENT;
2013 	}
2014 
2015 	DE_INIT(("Echoaudio driver starting...\n"));
2016 	i = 0;
2017 	card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0);
2018 	if (card == NULL)
2019 		return -ENOMEM;
2020 
2021 	if ((err = snd_echo_create(card, pci, &chip)) < 0) {
2022 		snd_card_free(card);
2023 		return err;
2024 	}
2025 
2026 	strcpy(card->driver, "Echo_" ECHOCARD_NAME);
2027 	strcpy(card->shortname, chip->card_name);
2028 
2029 	dsp = "56301";
2030 	if (pci_id->device == 0x3410)
2031 		dsp = "56361";
2032 
2033 	sprintf(card->longname, "%s rev.%d (DSP%s) at 0x%lx irq %i",
2034 		card->shortname, pci_id->subdevice & 0x000f, dsp,
2035 		chip->dsp_registers_phys, chip->irq);
2036 
2037 	if ((err = snd_echo_new_pcm(chip)) < 0) {
2038 		snd_printk(KERN_ERR "new pcm error %d\n", err);
2039 		snd_card_free(card);
2040 		return err;
2041 	}
2042 
2043 #ifdef ECHOCARD_HAS_MIDI
2044 	if (chip->has_midi) {	/* Some Mia's do not have midi */
2045 		if ((err = snd_echo_midi_create(card, chip)) < 0) {
2046 			snd_printk(KERN_ERR "new midi error %d\n", err);
2047 			snd_card_free(card);
2048 			return err;
2049 		}
2050 	}
2051 #endif
2052 
2053 #ifdef ECHOCARD_HAS_VMIXER
2054 	snd_echo_vmixer.count = num_pipes_out(chip) * num_busses_out(chip);
2055 	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_line_output_gain, chip))) < 0)
2056 		goto ctl_error;
2057 	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_vmixer, chip))) < 0)
2058 		goto ctl_error;
2059 #else
2060 	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_pcm_output_gain, chip))) < 0)
2061 		goto ctl_error;
2062 #endif
2063 
2064 #ifdef ECHOCARD_HAS_INPUT_GAIN
2065 	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_line_input_gain, chip))) < 0)
2066 		goto ctl_error;
2067 #endif
2068 
2069 #ifdef ECHOCARD_HAS_INPUT_NOMINAL_LEVEL
2070 	if (!chip->hasnt_input_nominal_level)
2071 		if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_intput_nominal_level, chip))) < 0)
2072 			goto ctl_error;
2073 #endif
2074 
2075 #ifdef ECHOCARD_HAS_OUTPUT_NOMINAL_LEVEL
2076 	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_output_nominal_level, chip))) < 0)
2077 		goto ctl_error;
2078 #endif
2079 
2080 	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_vumeters_switch, chip))) < 0)
2081 		goto ctl_error;
2082 
2083 	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_vumeters, chip))) < 0)
2084 		goto ctl_error;
2085 
2086 #ifdef ECHOCARD_HAS_MONITOR
2087 	snd_echo_monitor_mixer.count = num_busses_in(chip) * num_busses_out(chip);
2088 	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_monitor_mixer, chip))) < 0)
2089 		goto ctl_error;
2090 #endif
2091 
2092 #ifdef ECHOCARD_HAS_DIGITAL_IN_AUTOMUTE
2093 	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_automute_switch, chip))) < 0)
2094 		goto ctl_error;
2095 #endif
2096 
2097 	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_channels_info, chip))) < 0)
2098 		goto ctl_error;
2099 
2100 #ifdef ECHOCARD_HAS_DIGITAL_MODE_SWITCH
2101 	/* Creates a list of available digital modes */
2102 	chip->num_digital_modes = 0;
2103 	for (i = 0; i < 6; i++)
2104 		if (chip->digital_modes & (1 << i))
2105 			chip->digital_mode_list[chip->num_digital_modes++] = i;
2106 
2107 	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_digital_mode_switch, chip))) < 0)
2108 		goto ctl_error;
2109 #endif /* ECHOCARD_HAS_DIGITAL_MODE_SWITCH */
2110 
2111 #ifdef ECHOCARD_HAS_EXTERNAL_CLOCK
2112 	/* Creates a list of available clock sources */
2113 	chip->num_clock_sources = 0;
2114 	for (i = 0; i < 10; i++)
2115 		if (chip->input_clock_types & (1 << i))
2116 			chip->clock_source_list[chip->num_clock_sources++] = i;
2117 
2118 	if (chip->num_clock_sources > 1) {
2119 		chip->clock_src_ctl = snd_ctl_new1(&snd_echo_clock_source_switch, chip);
2120 		if ((err = snd_ctl_add(chip->card, chip->clock_src_ctl)) < 0)
2121 			goto ctl_error;
2122 	}
2123 #endif /* ECHOCARD_HAS_EXTERNAL_CLOCK */
2124 
2125 #ifdef ECHOCARD_HAS_DIGITAL_IO
2126 	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_spdif_mode_switch, chip))) < 0)
2127 		goto ctl_error;
2128 #endif
2129 
2130 #ifdef ECHOCARD_HAS_PHANTOM_POWER
2131 	if (chip->has_phantom_power)
2132 		if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_phantom_power_switch, chip))) < 0)
2133 			goto ctl_error;
2134 #endif
2135 
2136 	if ((err = snd_card_register(card)) < 0) {
2137 		snd_card_free(card);
2138 		goto ctl_error;
2139 	}
2140 	snd_printk(KERN_INFO "Card registered: %s\n", card->longname);
2141 
2142 	pci_set_drvdata(pci, chip);
2143 	dev++;
2144 	return 0;
2145 
2146 ctl_error:
2147 	snd_printk(KERN_ERR "new control error %d\n", err);
2148 	snd_card_free(card);
2149 	return err;
2150 }
2151 
2152 
2153 
2154 static void __devexit snd_echo_remove(struct pci_dev *pci)
2155 {
2156 	struct echoaudio *chip;
2157 
2158 	chip = pci_get_drvdata(pci);
2159 	if (chip)
2160 		snd_card_free(chip->card);
2161 	pci_set_drvdata(pci, NULL);
2162 }
2163 
2164 
2165 
2166 /******************************************************************************
2167 	Everything starts and ends here
2168 ******************************************************************************/
2169 
2170 /* pci_driver definition */
2171 static struct pci_driver driver = {
2172 	.name = "Echoaudio " ECHOCARD_NAME,
2173 	.id_table = snd_echo_ids,
2174 	.probe = snd_echo_probe,
2175 	.remove = __devexit_p(snd_echo_remove),
2176 };
2177 
2178 
2179 
2180 /* initialization of the module */
2181 static int __init alsa_card_echo_init(void)
2182 {
2183 	return pci_register_driver(&driver);
2184 }
2185 
2186 
2187 
2188 /* clean up the module */
2189 static void __exit alsa_card_echo_exit(void)
2190 {
2191 	pci_unregister_driver(&driver);
2192 }
2193 
2194 
2195 module_init(alsa_card_echo_init)
2196 module_exit(alsa_card_echo_exit)
2197