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