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