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
21MODULE_AUTHOR("Giuliano Pochini <pochini@shiny.it>");
22MODULE_LICENSE("GPL v2");
23MODULE_DESCRIPTION("Echoaudio " ECHOCARD_NAME " soundcards driver");
24MODULE_SUPPORTED_DEVICE("{{Echoaudio," ECHOCARD_NAME "}}");
25MODULE_DEVICE_TABLE(pci, snd_echo_ids);
26
27static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
28static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
29static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
30
31module_param_array(index, int, NULL, 0444);
32MODULE_PARM_DESC(index, "Index value for " ECHOCARD_NAME " soundcard.");
33module_param_array(id, charp, NULL, 0444);
34MODULE_PARM_DESC(id, "ID string for " ECHOCARD_NAME " soundcard.");
35module_param_array(enable, bool, NULL, 0444);
36MODULE_PARM_DESC(enable, "Enable " ECHOCARD_NAME " soundcard.");
37
38static unsigned int channels_list[10] = {1, 2, 4, 6, 8, 10, 12, 14, 16, 999999};
39static const DECLARE_TLV_DB_SCALE(db_scale_output_gain, -12800, 100, 1);
40
41
42
43static 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, pci_device(chip));
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
75static 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
87static 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
107static 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
118static 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
146static 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
180static 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
215static 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
252sample rate only if there is only one pcm device open. */
253static 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
270static 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
350static 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
379static 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
416static 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
448din_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
457static 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;
489dout_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
500static 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 */
526static 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
621static 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
632static 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
643static 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() */
655static 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
669static 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
692static 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	case SNDRV_PCM_FORMAT_S32_LE:
717		format.bits_per_sample = 32;
718		break;
719	default:
720		dev_err(chip->card->dev,
721			"Prepare error: unsupported format %d\n",
722			runtime->format);
723		return -EINVAL;
724	}
725
726	if (snd_BUG_ON(pipe_index >= px_num(chip)))
727		return -EINVAL;
728	if (snd_BUG_ON(!is_pipe_allocated(chip, pipe_index)))
729		return -EINVAL;
730	set_audio_format(chip, pipe_index, &format);
731	return 0;
732}
733
734
735
736static int pcm_trigger(struct snd_pcm_substream *substream, int cmd)
737{
738	struct echoaudio *chip = snd_pcm_substream_chip(substream);
739	struct snd_pcm_runtime *runtime = substream->runtime;
740	struct audiopipe *pipe = runtime->private_data;
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				case PIPE_STATE_PAUSED:
769					pipe->state = PIPE_STATE_STARTED;
770					break;
771				case PIPE_STATE_STARTED:
772					break;
773				}
774			}
775		}
776		err = start_transport(chip, channelmask,
777				      chip->pipe_cyclic_mask);
778		break;
779	case SNDRV_PCM_TRIGGER_SUSPEND:
780	case SNDRV_PCM_TRIGGER_STOP:
781		for (i = 0; i < DSP_MAXPIPES; i++) {
782			if (channelmask & (1 << i)) {
783				pipe = chip->substream[i]->runtime->private_data;
784				pipe->state = PIPE_STATE_STOPPED;
785			}
786		}
787		err = stop_transport(chip, channelmask);
788		break;
789	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
790		for (i = 0; i < DSP_MAXPIPES; i++) {
791			if (channelmask & (1 << i)) {
792				pipe = chip->substream[i]->runtime->private_data;
793				pipe->state = PIPE_STATE_PAUSED;
794			}
795		}
796		err = pause_transport(chip, channelmask);
797		break;
798	default:
799		err = -EINVAL;
800	}
801	spin_unlock(&chip->lock);
802	return err;
803}
804
805
806
807static snd_pcm_uframes_t pcm_pointer(struct snd_pcm_substream *substream)
808{
809	struct snd_pcm_runtime *runtime = substream->runtime;
810	struct audiopipe *pipe = runtime->private_data;
811	size_t cnt, bufsize, pos;
812
813	cnt = le32_to_cpu(*pipe->dma_counter);
814	pipe->position += cnt - pipe->last_counter;
815	pipe->last_counter = cnt;
816	bufsize = substream->runtime->buffer_size;
817	pos = bytes_to_frames(substream->runtime, pipe->position);
818
819	while (pos >= bufsize) {
820		pipe->position -= frames_to_bytes(substream->runtime, bufsize);
821		pos -= bufsize;
822	}
823	return pos;
824}
825
826
827
828/* pcm *_ops structures */
829static struct snd_pcm_ops analog_playback_ops = {
830	.open = pcm_analog_out_open,
831	.close = pcm_close,
832	.ioctl = snd_pcm_lib_ioctl,
833	.hw_params = pcm_analog_out_hw_params,
834	.hw_free = pcm_hw_free,
835	.prepare = pcm_prepare,
836	.trigger = pcm_trigger,
837	.pointer = pcm_pointer,
838	.page = snd_pcm_sgbuf_ops_page,
839};
840static struct snd_pcm_ops analog_capture_ops = {
841	.open = pcm_analog_in_open,
842	.close = pcm_close,
843	.ioctl = snd_pcm_lib_ioctl,
844	.hw_params = pcm_analog_in_hw_params,
845	.hw_free = pcm_hw_free,
846	.prepare = pcm_prepare,
847	.trigger = pcm_trigger,
848	.pointer = pcm_pointer,
849	.page = snd_pcm_sgbuf_ops_page,
850};
851#ifdef ECHOCARD_HAS_DIGITAL_IO
852#ifndef ECHOCARD_HAS_VMIXER
853static struct snd_pcm_ops digital_playback_ops = {
854	.open = pcm_digital_out_open,
855	.close = pcm_close,
856	.ioctl = snd_pcm_lib_ioctl,
857	.hw_params = pcm_digital_out_hw_params,
858	.hw_free = pcm_hw_free,
859	.prepare = pcm_prepare,
860	.trigger = pcm_trigger,
861	.pointer = pcm_pointer,
862	.page = snd_pcm_sgbuf_ops_page,
863};
864#endif /* !ECHOCARD_HAS_VMIXER */
865static struct snd_pcm_ops digital_capture_ops = {
866	.open = pcm_digital_in_open,
867	.close = pcm_close,
868	.ioctl = snd_pcm_lib_ioctl,
869	.hw_params = pcm_digital_in_hw_params,
870	.hw_free = pcm_hw_free,
871	.prepare = pcm_prepare,
872	.trigger = pcm_trigger,
873	.pointer = pcm_pointer,
874	.page = snd_pcm_sgbuf_ops_page,
875};
876#endif /* ECHOCARD_HAS_DIGITAL_IO */
877
878
879
880/* Preallocate memory only for the first substream because it's the most
881 * used one
882 */
883static int snd_echo_preallocate_pages(struct snd_pcm *pcm, struct device *dev)
884{
885	struct snd_pcm_substream *ss;
886	int stream, err;
887
888	for (stream = 0; stream < 2; stream++)
889		for (ss = pcm->streams[stream].substream; ss; ss = ss->next) {
890			err = snd_pcm_lib_preallocate_pages(ss, SNDRV_DMA_TYPE_DEV_SG,
891							    dev,
892							    ss->number ? 0 : 128<<10,
893							    256<<10);
894			if (err < 0)
895				return err;
896		}
897	return 0;
898}
899
900
901
902/*<--snd_echo_probe() */
903static int snd_echo_new_pcm(struct echoaudio *chip)
904{
905	struct snd_pcm *pcm;
906	int err;
907
908#ifdef ECHOCARD_HAS_VMIXER
909	/* This card has a Vmixer, that is there is no direct mapping from PCM
910	streams to physical outputs. The user can mix the streams as he wishes
911	via control interface and it's possible to send any stream to any
912	output, thus it makes no sense to keep analog and digital outputs
913	separated */
914
915	/* PCM#0 Virtual outputs and analog inputs */
916	if ((err = snd_pcm_new(chip->card, "PCM", 0, num_pipes_out(chip),
917				num_analog_busses_in(chip), &pcm)) < 0)
918		return err;
919	pcm->private_data = chip;
920	chip->analog_pcm = pcm;
921	strcpy(pcm->name, chip->card->shortname);
922	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &analog_playback_ops);
923	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &analog_capture_ops);
924	if ((err = snd_echo_preallocate_pages(pcm, snd_dma_pci_data(chip->pci))) < 0)
925		return err;
926
927#ifdef ECHOCARD_HAS_DIGITAL_IO
928	/* PCM#1 Digital inputs, no outputs */
929	if ((err = snd_pcm_new(chip->card, "Digital PCM", 1, 0,
930			       num_digital_busses_in(chip), &pcm)) < 0)
931		return err;
932	pcm->private_data = chip;
933	chip->digital_pcm = pcm;
934	strcpy(pcm->name, chip->card->shortname);
935	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &digital_capture_ops);
936	if ((err = snd_echo_preallocate_pages(pcm, snd_dma_pci_data(chip->pci))) < 0)
937		return err;
938#endif /* ECHOCARD_HAS_DIGITAL_IO */
939
940#else /* ECHOCARD_HAS_VMIXER */
941
942	/* The card can manage substreams formed by analog and digital channels
943	at the same time, but I prefer to keep analog and digital channels
944	separated, because that mixed thing is confusing and useless. So we
945	register two PCM devices: */
946
947	/* PCM#0 Analog i/o */
948	if ((err = snd_pcm_new(chip->card, "Analog PCM", 0,
949			       num_analog_busses_out(chip),
950			       num_analog_busses_in(chip), &pcm)) < 0)
951		return err;
952	pcm->private_data = chip;
953	chip->analog_pcm = pcm;
954	strcpy(pcm->name, chip->card->shortname);
955	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &analog_playback_ops);
956	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &analog_capture_ops);
957	if ((err = snd_echo_preallocate_pages(pcm, snd_dma_pci_data(chip->pci))) < 0)
958		return err;
959
960#ifdef ECHOCARD_HAS_DIGITAL_IO
961	/* PCM#1 Digital i/o */
962	if ((err = snd_pcm_new(chip->card, "Digital PCM", 1,
963			       num_digital_busses_out(chip),
964			       num_digital_busses_in(chip), &pcm)) < 0)
965		return err;
966	pcm->private_data = chip;
967	chip->digital_pcm = pcm;
968	strcpy(pcm->name, chip->card->shortname);
969	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &digital_playback_ops);
970	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &digital_capture_ops);
971	if ((err = snd_echo_preallocate_pages(pcm, snd_dma_pci_data(chip->pci))) < 0)
972		return err;
973#endif /* ECHOCARD_HAS_DIGITAL_IO */
974
975#endif /* ECHOCARD_HAS_VMIXER */
976
977	return 0;
978}
979
980
981
982
983/******************************************************************************
984	Control interface
985******************************************************************************/
986
987#if !defined(ECHOCARD_HAS_VMIXER) || defined(ECHOCARD_HAS_LINE_OUT_GAIN)
988
989/******************* PCM output volume *******************/
990static int snd_echo_output_gain_info(struct snd_kcontrol *kcontrol,
991				     struct snd_ctl_elem_info *uinfo)
992{
993	struct echoaudio *chip;
994
995	chip = snd_kcontrol_chip(kcontrol);
996	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
997	uinfo->count = num_busses_out(chip);
998	uinfo->value.integer.min = ECHOGAIN_MINOUT;
999	uinfo->value.integer.max = ECHOGAIN_MAXOUT;
1000	return 0;
1001}
1002
1003static int snd_echo_output_gain_get(struct snd_kcontrol *kcontrol,
1004				    struct snd_ctl_elem_value *ucontrol)
1005{
1006	struct echoaudio *chip;
1007	int c;
1008
1009	chip = snd_kcontrol_chip(kcontrol);
1010	for (c = 0; c < num_busses_out(chip); c++)
1011		ucontrol->value.integer.value[c] = chip->output_gain[c];
1012	return 0;
1013}
1014
1015static int snd_echo_output_gain_put(struct snd_kcontrol *kcontrol,
1016				    struct snd_ctl_elem_value *ucontrol)
1017{
1018	struct echoaudio *chip;
1019	int c, changed, gain;
1020
1021	changed = 0;
1022	chip = snd_kcontrol_chip(kcontrol);
1023	spin_lock_irq(&chip->lock);
1024	for (c = 0; c < num_busses_out(chip); c++) {
1025		gain = ucontrol->value.integer.value[c];
1026		/* Ignore out of range values */
1027		if (gain < ECHOGAIN_MINOUT || gain > ECHOGAIN_MAXOUT)
1028			continue;
1029		if (chip->output_gain[c] != gain) {
1030			set_output_gain(chip, c, gain);
1031			changed = 1;
1032		}
1033	}
1034	if (changed)
1035		update_output_line_level(chip);
1036	spin_unlock_irq(&chip->lock);
1037	return changed;
1038}
1039
1040#ifdef ECHOCARD_HAS_LINE_OUT_GAIN
1041/* On the Mia this one controls the line-out volume */
1042static struct snd_kcontrol_new snd_echo_line_output_gain = {
1043	.name = "Line Playback Volume",
1044	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1045	.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
1046		  SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1047	.info = snd_echo_output_gain_info,
1048	.get = snd_echo_output_gain_get,
1049	.put = snd_echo_output_gain_put,
1050	.tlv = {.p = db_scale_output_gain},
1051};
1052#else
1053static struct snd_kcontrol_new snd_echo_pcm_output_gain = {
1054	.name = "PCM Playback Volume",
1055	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1056	.access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1057	.info = snd_echo_output_gain_info,
1058	.get = snd_echo_output_gain_get,
1059	.put = snd_echo_output_gain_put,
1060	.tlv = {.p = db_scale_output_gain},
1061};
1062#endif
1063
1064#endif /* !ECHOCARD_HAS_VMIXER || ECHOCARD_HAS_LINE_OUT_GAIN */
1065
1066
1067
1068#ifdef ECHOCARD_HAS_INPUT_GAIN
1069
1070/******************* Analog input volume *******************/
1071static int snd_echo_input_gain_info(struct snd_kcontrol *kcontrol,
1072				    struct snd_ctl_elem_info *uinfo)
1073{
1074	struct echoaudio *chip;
1075
1076	chip = snd_kcontrol_chip(kcontrol);
1077	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1078	uinfo->count = num_analog_busses_in(chip);
1079	uinfo->value.integer.min = ECHOGAIN_MININP;
1080	uinfo->value.integer.max = ECHOGAIN_MAXINP;
1081	return 0;
1082}
1083
1084static int snd_echo_input_gain_get(struct snd_kcontrol *kcontrol,
1085				   struct snd_ctl_elem_value *ucontrol)
1086{
1087	struct echoaudio *chip;
1088	int c;
1089
1090	chip = snd_kcontrol_chip(kcontrol);
1091	for (c = 0; c < num_analog_busses_in(chip); c++)
1092		ucontrol->value.integer.value[c] = chip->input_gain[c];
1093	return 0;
1094}
1095
1096static int snd_echo_input_gain_put(struct snd_kcontrol *kcontrol,
1097				   struct snd_ctl_elem_value *ucontrol)
1098{
1099	struct echoaudio *chip;
1100	int c, gain, changed;
1101
1102	changed = 0;
1103	chip = snd_kcontrol_chip(kcontrol);
1104	spin_lock_irq(&chip->lock);
1105	for (c = 0; c < num_analog_busses_in(chip); c++) {
1106		gain = ucontrol->value.integer.value[c];
1107		/* Ignore out of range values */
1108		if (gain < ECHOGAIN_MININP || gain > ECHOGAIN_MAXINP)
1109			continue;
1110		if (chip->input_gain[c] != gain) {
1111			set_input_gain(chip, c, gain);
1112			changed = 1;
1113		}
1114	}
1115	if (changed)
1116		update_input_line_level(chip);
1117	spin_unlock_irq(&chip->lock);
1118	return changed;
1119}
1120
1121static const DECLARE_TLV_DB_SCALE(db_scale_input_gain, -2500, 50, 0);
1122
1123static struct snd_kcontrol_new snd_echo_line_input_gain = {
1124	.name = "Line Capture Volume",
1125	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1126	.access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1127	.info = snd_echo_input_gain_info,
1128	.get = snd_echo_input_gain_get,
1129	.put = snd_echo_input_gain_put,
1130	.tlv = {.p = db_scale_input_gain},
1131};
1132
1133#endif /* ECHOCARD_HAS_INPUT_GAIN */
1134
1135
1136
1137#ifdef ECHOCARD_HAS_OUTPUT_NOMINAL_LEVEL
1138
1139/************ Analog output nominal level (+4dBu / -10dBV) ***************/
1140static int snd_echo_output_nominal_info (struct snd_kcontrol *kcontrol,
1141					 struct snd_ctl_elem_info *uinfo)
1142{
1143	struct echoaudio *chip;
1144
1145	chip = snd_kcontrol_chip(kcontrol);
1146	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1147	uinfo->count = num_analog_busses_out(chip);
1148	uinfo->value.integer.min = 0;
1149	uinfo->value.integer.max = 1;
1150	return 0;
1151}
1152
1153static int snd_echo_output_nominal_get(struct snd_kcontrol *kcontrol,
1154				       struct snd_ctl_elem_value *ucontrol)
1155{
1156	struct echoaudio *chip;
1157	int c;
1158
1159	chip = snd_kcontrol_chip(kcontrol);
1160	for (c = 0; c < num_analog_busses_out(chip); c++)
1161		ucontrol->value.integer.value[c] = chip->nominal_level[c];
1162	return 0;
1163}
1164
1165static int snd_echo_output_nominal_put(struct snd_kcontrol *kcontrol,
1166				       struct snd_ctl_elem_value *ucontrol)
1167{
1168	struct echoaudio *chip;
1169	int c, changed;
1170
1171	changed = 0;
1172	chip = snd_kcontrol_chip(kcontrol);
1173	spin_lock_irq(&chip->lock);
1174	for (c = 0; c < num_analog_busses_out(chip); c++) {
1175		if (chip->nominal_level[c] != ucontrol->value.integer.value[c]) {
1176			set_nominal_level(chip, c,
1177					  ucontrol->value.integer.value[c]);
1178			changed = 1;
1179		}
1180	}
1181	if (changed)
1182		update_output_line_level(chip);
1183	spin_unlock_irq(&chip->lock);
1184	return changed;
1185}
1186
1187static struct snd_kcontrol_new snd_echo_output_nominal_level = {
1188	.name = "Line Playback Switch (-10dBV)",
1189	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1190	.info = snd_echo_output_nominal_info,
1191	.get = snd_echo_output_nominal_get,
1192	.put = snd_echo_output_nominal_put,
1193};
1194
1195#endif /* ECHOCARD_HAS_OUTPUT_NOMINAL_LEVEL */
1196
1197
1198
1199#ifdef ECHOCARD_HAS_INPUT_NOMINAL_LEVEL
1200
1201/*************** Analog input nominal level (+4dBu / -10dBV) ***************/
1202static int snd_echo_input_nominal_info(struct snd_kcontrol *kcontrol,
1203				       struct snd_ctl_elem_info *uinfo)
1204{
1205	struct echoaudio *chip;
1206
1207	chip = snd_kcontrol_chip(kcontrol);
1208	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1209	uinfo->count = num_analog_busses_in(chip);
1210	uinfo->value.integer.min = 0;
1211	uinfo->value.integer.max = 1;
1212	return 0;
1213}
1214
1215static int snd_echo_input_nominal_get(struct snd_kcontrol *kcontrol,
1216				      struct snd_ctl_elem_value *ucontrol)
1217{
1218	struct echoaudio *chip;
1219	int c;
1220
1221	chip = snd_kcontrol_chip(kcontrol);
1222	for (c = 0; c < num_analog_busses_in(chip); c++)
1223		ucontrol->value.integer.value[c] =
1224			chip->nominal_level[bx_analog_in(chip) + c];
1225	return 0;
1226}
1227
1228static int snd_echo_input_nominal_put(struct snd_kcontrol *kcontrol,
1229				      struct snd_ctl_elem_value *ucontrol)
1230{
1231	struct echoaudio *chip;
1232	int c, changed;
1233
1234	changed = 0;
1235	chip = snd_kcontrol_chip(kcontrol);
1236	spin_lock_irq(&chip->lock);
1237	for (c = 0; c < num_analog_busses_in(chip); c++) {
1238		if (chip->nominal_level[bx_analog_in(chip) + c] !=
1239		    ucontrol->value.integer.value[c]) {
1240			set_nominal_level(chip, bx_analog_in(chip) + c,
1241					  ucontrol->value.integer.value[c]);
1242			changed = 1;
1243		}
1244	}
1245	if (changed)
1246		update_output_line_level(chip);	/* "Output" is not a mistake
1247						 * here.
1248						 */
1249	spin_unlock_irq(&chip->lock);
1250	return changed;
1251}
1252
1253static struct snd_kcontrol_new snd_echo_intput_nominal_level = {
1254	.name = "Line Capture Switch (-10dBV)",
1255	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1256	.info = snd_echo_input_nominal_info,
1257	.get = snd_echo_input_nominal_get,
1258	.put = snd_echo_input_nominal_put,
1259};
1260
1261#endif /* ECHOCARD_HAS_INPUT_NOMINAL_LEVEL */
1262
1263
1264
1265#ifdef ECHOCARD_HAS_MONITOR
1266
1267/******************* Monitor mixer *******************/
1268static int snd_echo_mixer_info(struct snd_kcontrol *kcontrol,
1269			       struct snd_ctl_elem_info *uinfo)
1270{
1271	struct echoaudio *chip;
1272
1273	chip = snd_kcontrol_chip(kcontrol);
1274	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1275	uinfo->count = 1;
1276	uinfo->value.integer.min = ECHOGAIN_MINOUT;
1277	uinfo->value.integer.max = ECHOGAIN_MAXOUT;
1278	uinfo->dimen.d[0] = num_busses_out(chip);
1279	uinfo->dimen.d[1] = num_busses_in(chip);
1280	return 0;
1281}
1282
1283static int snd_echo_mixer_get(struct snd_kcontrol *kcontrol,
1284			      struct snd_ctl_elem_value *ucontrol)
1285{
1286	struct echoaudio *chip = snd_kcontrol_chip(kcontrol);
1287	unsigned int out = ucontrol->id.index / num_busses_in(chip);
1288	unsigned int in = ucontrol->id.index % num_busses_in(chip);
1289
1290	if (out >= ECHO_MAXAUDIOOUTPUTS || in >= ECHO_MAXAUDIOINPUTS)
1291		return -EINVAL;
1292
1293	ucontrol->value.integer.value[0] = chip->monitor_gain[out][in];
1294	return 0;
1295}
1296
1297static int snd_echo_mixer_put(struct snd_kcontrol *kcontrol,
1298			      struct snd_ctl_elem_value *ucontrol)
1299{
1300	struct echoaudio *chip;
1301	int changed,  gain;
1302	unsigned int out, in;
1303
1304	changed = 0;
1305	chip = snd_kcontrol_chip(kcontrol);
1306	out = ucontrol->id.index / num_busses_in(chip);
1307	in = ucontrol->id.index % num_busses_in(chip);
1308	if (out >= ECHO_MAXAUDIOOUTPUTS || in >= ECHO_MAXAUDIOINPUTS)
1309		return -EINVAL;
1310	gain = ucontrol->value.integer.value[0];
1311	if (gain < ECHOGAIN_MINOUT || gain > ECHOGAIN_MAXOUT)
1312		return -EINVAL;
1313	if (chip->monitor_gain[out][in] != gain) {
1314		spin_lock_irq(&chip->lock);
1315		set_monitor_gain(chip, out, in, gain);
1316		update_output_line_level(chip);
1317		spin_unlock_irq(&chip->lock);
1318		changed = 1;
1319	}
1320	return changed;
1321}
1322
1323static struct snd_kcontrol_new snd_echo_monitor_mixer = {
1324	.name = "Monitor Mixer Volume",
1325	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1326	.access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1327	.info = snd_echo_mixer_info,
1328	.get = snd_echo_mixer_get,
1329	.put = snd_echo_mixer_put,
1330	.tlv = {.p = db_scale_output_gain},
1331};
1332
1333#endif /* ECHOCARD_HAS_MONITOR */
1334
1335
1336
1337#ifdef ECHOCARD_HAS_VMIXER
1338
1339/******************* Vmixer *******************/
1340static int snd_echo_vmixer_info(struct snd_kcontrol *kcontrol,
1341				struct snd_ctl_elem_info *uinfo)
1342{
1343	struct echoaudio *chip;
1344
1345	chip = snd_kcontrol_chip(kcontrol);
1346	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1347	uinfo->count = 1;
1348	uinfo->value.integer.min = ECHOGAIN_MINOUT;
1349	uinfo->value.integer.max = ECHOGAIN_MAXOUT;
1350	uinfo->dimen.d[0] = num_busses_out(chip);
1351	uinfo->dimen.d[1] = num_pipes_out(chip);
1352	return 0;
1353}
1354
1355static int snd_echo_vmixer_get(struct snd_kcontrol *kcontrol,
1356			       struct snd_ctl_elem_value *ucontrol)
1357{
1358	struct echoaudio *chip;
1359
1360	chip = snd_kcontrol_chip(kcontrol);
1361	ucontrol->value.integer.value[0] =
1362		chip->vmixer_gain[ucontrol->id.index / num_pipes_out(chip)]
1363			[ucontrol->id.index % num_pipes_out(chip)];
1364	return 0;
1365}
1366
1367static int snd_echo_vmixer_put(struct snd_kcontrol *kcontrol,
1368			       struct snd_ctl_elem_value *ucontrol)
1369{
1370	struct echoaudio *chip;
1371	int gain, changed;
1372	short vch, out;
1373
1374	changed = 0;
1375	chip = snd_kcontrol_chip(kcontrol);
1376	out = ucontrol->id.index / num_pipes_out(chip);
1377	vch = ucontrol->id.index % num_pipes_out(chip);
1378	gain = ucontrol->value.integer.value[0];
1379	if (gain < ECHOGAIN_MINOUT || gain > ECHOGAIN_MAXOUT)
1380		return -EINVAL;
1381	if (chip->vmixer_gain[out][vch] != ucontrol->value.integer.value[0]) {
1382		spin_lock_irq(&chip->lock);
1383		set_vmixer_gain(chip, out, vch, ucontrol->value.integer.value[0]);
1384		update_vmixer_level(chip);
1385		spin_unlock_irq(&chip->lock);
1386		changed = 1;
1387	}
1388	return changed;
1389}
1390
1391static struct snd_kcontrol_new snd_echo_vmixer = {
1392	.name = "VMixer Volume",
1393	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1394	.access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1395	.info = snd_echo_vmixer_info,
1396	.get = snd_echo_vmixer_get,
1397	.put = snd_echo_vmixer_put,
1398	.tlv = {.p = db_scale_output_gain},
1399};
1400
1401#endif /* ECHOCARD_HAS_VMIXER */
1402
1403
1404
1405#ifdef ECHOCARD_HAS_DIGITAL_MODE_SWITCH
1406
1407/******************* Digital mode switch *******************/
1408static int snd_echo_digital_mode_info(struct snd_kcontrol *kcontrol,
1409				      struct snd_ctl_elem_info *uinfo)
1410{
1411	static const char * const names[4] = {
1412		"S/PDIF Coaxial", "S/PDIF Optical", "ADAT Optical",
1413		"S/PDIF Cdrom"
1414	};
1415	struct echoaudio *chip;
1416
1417	chip = snd_kcontrol_chip(kcontrol);
1418	return snd_ctl_enum_info(uinfo, 1, chip->num_digital_modes, names);
1419}
1420
1421static int snd_echo_digital_mode_get(struct snd_kcontrol *kcontrol,
1422				     struct snd_ctl_elem_value *ucontrol)
1423{
1424	struct echoaudio *chip;
1425	int i, mode;
1426
1427	chip = snd_kcontrol_chip(kcontrol);
1428	mode = chip->digital_mode;
1429	for (i = chip->num_digital_modes - 1; i >= 0; i--)
1430		if (mode == chip->digital_mode_list[i]) {
1431			ucontrol->value.enumerated.item[0] = i;
1432			break;
1433		}
1434	return 0;
1435}
1436
1437static int snd_echo_digital_mode_put(struct snd_kcontrol *kcontrol,
1438				     struct snd_ctl_elem_value *ucontrol)
1439{
1440	struct echoaudio *chip;
1441	int changed;
1442	unsigned short emode, dmode;
1443
1444	changed = 0;
1445	chip = snd_kcontrol_chip(kcontrol);
1446
1447	emode = ucontrol->value.enumerated.item[0];
1448	if (emode >= chip->num_digital_modes)
1449		return -EINVAL;
1450	dmode = chip->digital_mode_list[emode];
1451
1452	if (dmode != chip->digital_mode) {
1453		/* mode_mutex is required to make this operation atomic wrt
1454		pcm_digital_*_open() and set_input_clock() functions. */
1455		mutex_lock(&chip->mode_mutex);
1456
1457		/* Do not allow the user to change the digital mode when a pcm
1458		device is open because it also changes the number of channels
1459		and the allowed sample rates */
1460		if (atomic_read(&chip->opencount)) {
1461			changed = -EAGAIN;
1462		} else {
1463			changed = set_digital_mode(chip, dmode);
1464			/* If we had to change the clock source, report it */
1465			if (changed > 0 && chip->clock_src_ctl) {
1466				snd_ctl_notify(chip->card,
1467					       SNDRV_CTL_EVENT_MASK_VALUE,
1468					       &chip->clock_src_ctl->id);
1469				dev_dbg(chip->card->dev,
1470					"SDM() =%d\n", changed);
1471			}
1472			if (changed >= 0)
1473				changed = 1;	/* No errors */
1474		}
1475		mutex_unlock(&chip->mode_mutex);
1476	}
1477	return changed;
1478}
1479
1480static struct snd_kcontrol_new snd_echo_digital_mode_switch = {
1481	.name = "Digital mode Switch",
1482	.iface = SNDRV_CTL_ELEM_IFACE_CARD,
1483	.info = snd_echo_digital_mode_info,
1484	.get = snd_echo_digital_mode_get,
1485	.put = snd_echo_digital_mode_put,
1486};
1487
1488#endif /* ECHOCARD_HAS_DIGITAL_MODE_SWITCH */
1489
1490
1491
1492#ifdef ECHOCARD_HAS_DIGITAL_IO
1493
1494/******************* S/PDIF mode switch *******************/
1495static int snd_echo_spdif_mode_info(struct snd_kcontrol *kcontrol,
1496				    struct snd_ctl_elem_info *uinfo)
1497{
1498	static const char * const names[2] = {"Consumer", "Professional"};
1499
1500	return snd_ctl_enum_info(uinfo, 1, 2, names);
1501}
1502
1503static int snd_echo_spdif_mode_get(struct snd_kcontrol *kcontrol,
1504				   struct snd_ctl_elem_value *ucontrol)
1505{
1506	struct echoaudio *chip;
1507
1508	chip = snd_kcontrol_chip(kcontrol);
1509	ucontrol->value.enumerated.item[0] = !!chip->professional_spdif;
1510	return 0;
1511}
1512
1513static int snd_echo_spdif_mode_put(struct snd_kcontrol *kcontrol,
1514				   struct snd_ctl_elem_value *ucontrol)
1515{
1516	struct echoaudio *chip;
1517	int mode;
1518
1519	chip = snd_kcontrol_chip(kcontrol);
1520	mode = !!ucontrol->value.enumerated.item[0];
1521	if (mode != chip->professional_spdif) {
1522		spin_lock_irq(&chip->lock);
1523		set_professional_spdif(chip, mode);
1524		spin_unlock_irq(&chip->lock);
1525		return 1;
1526	}
1527	return 0;
1528}
1529
1530static struct snd_kcontrol_new snd_echo_spdif_mode_switch = {
1531	.name = "S/PDIF mode Switch",
1532	.iface = SNDRV_CTL_ELEM_IFACE_CARD,
1533	.info = snd_echo_spdif_mode_info,
1534	.get = snd_echo_spdif_mode_get,
1535	.put = snd_echo_spdif_mode_put,
1536};
1537
1538#endif /* ECHOCARD_HAS_DIGITAL_IO */
1539
1540
1541
1542#ifdef ECHOCARD_HAS_EXTERNAL_CLOCK
1543
1544/******************* Select input clock source *******************/
1545static int snd_echo_clock_source_info(struct snd_kcontrol *kcontrol,
1546				      struct snd_ctl_elem_info *uinfo)
1547{
1548	static const char * const names[8] = {
1549		"Internal", "Word", "Super", "S/PDIF", "ADAT", "ESync",
1550		"ESync96", "MTC"
1551	};
1552	struct echoaudio *chip;
1553
1554	chip = snd_kcontrol_chip(kcontrol);
1555	return snd_ctl_enum_info(uinfo, 1, chip->num_clock_sources, names);
1556}
1557
1558static int snd_echo_clock_source_get(struct snd_kcontrol *kcontrol,
1559				     struct snd_ctl_elem_value *ucontrol)
1560{
1561	struct echoaudio *chip;
1562	int i, clock;
1563
1564	chip = snd_kcontrol_chip(kcontrol);
1565	clock = chip->input_clock;
1566
1567	for (i = 0; i < chip->num_clock_sources; i++)
1568		if (clock == chip->clock_source_list[i])
1569			ucontrol->value.enumerated.item[0] = i;
1570
1571	return 0;
1572}
1573
1574static int snd_echo_clock_source_put(struct snd_kcontrol *kcontrol,
1575				     struct snd_ctl_elem_value *ucontrol)
1576{
1577	struct echoaudio *chip;
1578	int changed;
1579	unsigned int eclock, dclock;
1580
1581	changed = 0;
1582	chip = snd_kcontrol_chip(kcontrol);
1583	eclock = ucontrol->value.enumerated.item[0];
1584	if (eclock >= chip->input_clock_types)
1585		return -EINVAL;
1586	dclock = chip->clock_source_list[eclock];
1587	if (chip->input_clock != dclock) {
1588		mutex_lock(&chip->mode_mutex);
1589		spin_lock_irq(&chip->lock);
1590		if ((changed = set_input_clock(chip, dclock)) == 0)
1591			changed = 1;	/* no errors */
1592		spin_unlock_irq(&chip->lock);
1593		mutex_unlock(&chip->mode_mutex);
1594	}
1595
1596	if (changed < 0)
1597		dev_dbg(chip->card->dev,
1598			"seticlk val%d err 0x%x\n", dclock, changed);
1599
1600	return changed;
1601}
1602
1603static struct snd_kcontrol_new snd_echo_clock_source_switch = {
1604	.name = "Sample Clock Source",
1605	.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1606	.info = snd_echo_clock_source_info,
1607	.get = snd_echo_clock_source_get,
1608	.put = snd_echo_clock_source_put,
1609};
1610
1611#endif /* ECHOCARD_HAS_EXTERNAL_CLOCK */
1612
1613
1614
1615#ifdef ECHOCARD_HAS_PHANTOM_POWER
1616
1617/******************* Phantom power switch *******************/
1618#define snd_echo_phantom_power_info	snd_ctl_boolean_mono_info
1619
1620static int snd_echo_phantom_power_get(struct snd_kcontrol *kcontrol,
1621				      struct snd_ctl_elem_value *ucontrol)
1622{
1623	struct echoaudio *chip = snd_kcontrol_chip(kcontrol);
1624
1625	ucontrol->value.integer.value[0] = chip->phantom_power;
1626	return 0;
1627}
1628
1629static int snd_echo_phantom_power_put(struct snd_kcontrol *kcontrol,
1630				      struct snd_ctl_elem_value *ucontrol)
1631{
1632	struct echoaudio *chip = snd_kcontrol_chip(kcontrol);
1633	int power, changed = 0;
1634
1635	power = !!ucontrol->value.integer.value[0];
1636	if (chip->phantom_power != power) {
1637		spin_lock_irq(&chip->lock);
1638		changed = set_phantom_power(chip, power);
1639		spin_unlock_irq(&chip->lock);
1640		if (changed == 0)
1641			changed = 1;	/* no errors */
1642	}
1643	return changed;
1644}
1645
1646static struct snd_kcontrol_new snd_echo_phantom_power_switch = {
1647	.name = "Phantom power Switch",
1648	.iface = SNDRV_CTL_ELEM_IFACE_CARD,
1649	.info = snd_echo_phantom_power_info,
1650	.get = snd_echo_phantom_power_get,
1651	.put = snd_echo_phantom_power_put,
1652};
1653
1654#endif /* ECHOCARD_HAS_PHANTOM_POWER */
1655
1656
1657
1658#ifdef ECHOCARD_HAS_DIGITAL_IN_AUTOMUTE
1659
1660/******************* Digital input automute switch *******************/
1661#define snd_echo_automute_info		snd_ctl_boolean_mono_info
1662
1663static int snd_echo_automute_get(struct snd_kcontrol *kcontrol,
1664				 struct snd_ctl_elem_value *ucontrol)
1665{
1666	struct echoaudio *chip = snd_kcontrol_chip(kcontrol);
1667
1668	ucontrol->value.integer.value[0] = chip->digital_in_automute;
1669	return 0;
1670}
1671
1672static int snd_echo_automute_put(struct snd_kcontrol *kcontrol,
1673				 struct snd_ctl_elem_value *ucontrol)
1674{
1675	struct echoaudio *chip = snd_kcontrol_chip(kcontrol);
1676	int automute, changed = 0;
1677
1678	automute = !!ucontrol->value.integer.value[0];
1679	if (chip->digital_in_automute != automute) {
1680		spin_lock_irq(&chip->lock);
1681		changed = set_input_auto_mute(chip, automute);
1682		spin_unlock_irq(&chip->lock);
1683		if (changed == 0)
1684			changed = 1;	/* no errors */
1685	}
1686	return changed;
1687}
1688
1689static struct snd_kcontrol_new snd_echo_automute_switch = {
1690	.name = "Digital Capture Switch (automute)",
1691	.iface = SNDRV_CTL_ELEM_IFACE_CARD,
1692	.info = snd_echo_automute_info,
1693	.get = snd_echo_automute_get,
1694	.put = snd_echo_automute_put,
1695};
1696
1697#endif /* ECHOCARD_HAS_DIGITAL_IN_AUTOMUTE */
1698
1699
1700
1701/******************* VU-meters switch *******************/
1702#define snd_echo_vumeters_switch_info		snd_ctl_boolean_mono_info
1703
1704static int snd_echo_vumeters_switch_put(struct snd_kcontrol *kcontrol,
1705					struct snd_ctl_elem_value *ucontrol)
1706{
1707	struct echoaudio *chip;
1708
1709	chip = snd_kcontrol_chip(kcontrol);
1710	spin_lock_irq(&chip->lock);
1711	set_meters_on(chip, ucontrol->value.integer.value[0]);
1712	spin_unlock_irq(&chip->lock);
1713	return 1;
1714}
1715
1716static struct snd_kcontrol_new snd_echo_vumeters_switch = {
1717	.name = "VU-meters Switch",
1718	.iface = SNDRV_CTL_ELEM_IFACE_CARD,
1719	.access = SNDRV_CTL_ELEM_ACCESS_WRITE,
1720	.info = snd_echo_vumeters_switch_info,
1721	.put = snd_echo_vumeters_switch_put,
1722};
1723
1724
1725
1726/***** Read VU-meters (input, output, analog and digital together) *****/
1727static int snd_echo_vumeters_info(struct snd_kcontrol *kcontrol,
1728				  struct snd_ctl_elem_info *uinfo)
1729{
1730	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1731	uinfo->count = 96;
1732	uinfo->value.integer.min = ECHOGAIN_MINOUT;
1733	uinfo->value.integer.max = 0;
1734#ifdef ECHOCARD_HAS_VMIXER
1735	uinfo->dimen.d[0] = 3;	/* Out, In, Virt */
1736#else
1737	uinfo->dimen.d[0] = 2;	/* Out, In */
1738#endif
1739	uinfo->dimen.d[1] = 16;	/* 16 channels */
1740	uinfo->dimen.d[2] = 2;	/* 0=level, 1=peak */
1741	return 0;
1742}
1743
1744static int snd_echo_vumeters_get(struct snd_kcontrol *kcontrol,
1745				 struct snd_ctl_elem_value *ucontrol)
1746{
1747	struct echoaudio *chip;
1748
1749	chip = snd_kcontrol_chip(kcontrol);
1750	get_audio_meters(chip, ucontrol->value.integer.value);
1751	return 0;
1752}
1753
1754static struct snd_kcontrol_new snd_echo_vumeters = {
1755	.name = "VU-meters",
1756	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1757	.access = SNDRV_CTL_ELEM_ACCESS_READ |
1758		  SNDRV_CTL_ELEM_ACCESS_VOLATILE |
1759		  SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1760	.info = snd_echo_vumeters_info,
1761	.get = snd_echo_vumeters_get,
1762	.tlv = {.p = db_scale_output_gain},
1763};
1764
1765
1766
1767/*** Channels info - it exports informations about the number of channels ***/
1768static int snd_echo_channels_info_info(struct snd_kcontrol *kcontrol,
1769				       struct snd_ctl_elem_info *uinfo)
1770{
1771	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1772	uinfo->count = 6;
1773	uinfo->value.integer.min = 0;
1774	uinfo->value.integer.max = 1 << ECHO_CLOCK_NUMBER;
1775	return 0;
1776}
1777
1778static int snd_echo_channels_info_get(struct snd_kcontrol *kcontrol,
1779				      struct snd_ctl_elem_value *ucontrol)
1780{
1781	struct echoaudio *chip;
1782	int detected, clocks, bit, src;
1783
1784	chip = snd_kcontrol_chip(kcontrol);
1785	ucontrol->value.integer.value[0] = num_busses_in(chip);
1786	ucontrol->value.integer.value[1] = num_analog_busses_in(chip);
1787	ucontrol->value.integer.value[2] = num_busses_out(chip);
1788	ucontrol->value.integer.value[3] = num_analog_busses_out(chip);
1789	ucontrol->value.integer.value[4] = num_pipes_out(chip);
1790
1791	/* Compute the bitmask of the currently valid input clocks */
1792	detected = detect_input_clocks(chip);
1793	clocks = 0;
1794	src = chip->num_clock_sources - 1;
1795	for (bit = ECHO_CLOCK_NUMBER - 1; bit >= 0; bit--)
1796		if (detected & (1 << bit))
1797			for (; src >= 0; src--)
1798				if (bit == chip->clock_source_list[src]) {
1799					clocks |= 1 << src;
1800					break;
1801				}
1802	ucontrol->value.integer.value[5] = clocks;
1803
1804	return 0;
1805}
1806
1807static struct snd_kcontrol_new snd_echo_channels_info = {
1808	.name = "Channels info",
1809	.iface = SNDRV_CTL_ELEM_IFACE_HWDEP,
1810	.access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1811	.info = snd_echo_channels_info_info,
1812	.get = snd_echo_channels_info_get,
1813};
1814
1815
1816
1817
1818/******************************************************************************
1819	IRQ Handler
1820******************************************************************************/
1821
1822static irqreturn_t snd_echo_interrupt(int irq, void *dev_id)
1823{
1824	struct echoaudio *chip = dev_id;
1825	struct snd_pcm_substream *substream;
1826	int period, ss, st;
1827
1828	spin_lock(&chip->lock);
1829	st = service_irq(chip);
1830	if (st < 0) {
1831		spin_unlock(&chip->lock);
1832		return IRQ_NONE;
1833	}
1834	/* The hardware doesn't tell us which substream caused the irq,
1835	thus we have to check all running substreams. */
1836	for (ss = 0; ss < DSP_MAXPIPES; ss++) {
1837		substream = chip->substream[ss];
1838		if (substream && ((struct audiopipe *)substream->runtime->
1839				private_data)->state == PIPE_STATE_STARTED) {
1840			period = pcm_pointer(substream) /
1841				substream->runtime->period_size;
1842			if (period != chip->last_period[ss]) {
1843				chip->last_period[ss] = period;
1844				spin_unlock(&chip->lock);
1845				snd_pcm_period_elapsed(substream);
1846				spin_lock(&chip->lock);
1847			}
1848		}
1849	}
1850	spin_unlock(&chip->lock);
1851
1852#ifdef ECHOCARD_HAS_MIDI
1853	if (st > 0 && chip->midi_in) {
1854		snd_rawmidi_receive(chip->midi_in, chip->midi_buffer, st);
1855		dev_dbg(chip->card->dev, "rawmidi_iread=%d\n", st);
1856	}
1857#endif
1858	return IRQ_HANDLED;
1859}
1860
1861
1862
1863
1864/******************************************************************************
1865	Module construction / destruction
1866******************************************************************************/
1867
1868static int snd_echo_free(struct echoaudio *chip)
1869{
1870	if (chip->comm_page)
1871		rest_in_peace(chip);
1872
1873	if (chip->irq >= 0)
1874		free_irq(chip->irq, chip);
1875
1876	if (chip->comm_page)
1877		snd_dma_free_pages(&chip->commpage_dma_buf);
1878
1879	iounmap(chip->dsp_registers);
1880	release_and_free_resource(chip->iores);
1881	pci_disable_device(chip->pci);
1882
1883	/* release chip data */
1884	free_firmware_cache(chip);
1885	kfree(chip);
1886	return 0;
1887}
1888
1889
1890
1891static int snd_echo_dev_free(struct snd_device *device)
1892{
1893	struct echoaudio *chip = device->device_data;
1894
1895	return snd_echo_free(chip);
1896}
1897
1898
1899
1900/* <--snd_echo_probe() */
1901static int snd_echo_create(struct snd_card *card,
1902			   struct pci_dev *pci,
1903			   struct echoaudio **rchip)
1904{
1905	struct echoaudio *chip;
1906	int err;
1907	size_t sz;
1908	static struct snd_device_ops ops = {
1909		.dev_free = snd_echo_dev_free,
1910	};
1911
1912	*rchip = NULL;
1913
1914	pci_write_config_byte(pci, PCI_LATENCY_TIMER, 0xC0);
1915
1916	if ((err = pci_enable_device(pci)) < 0)
1917		return err;
1918	pci_set_master(pci);
1919
1920	/* Allocate chip if needed */
1921	if (!*rchip) {
1922		chip = kzalloc(sizeof(*chip), GFP_KERNEL);
1923		if (!chip) {
1924			pci_disable_device(pci);
1925			return -ENOMEM;
1926		}
1927		dev_dbg(card->dev, "chip=%p\n", chip);
1928		spin_lock_init(&chip->lock);
1929		chip->card = card;
1930		chip->pci = pci;
1931		chip->irq = -1;
1932		atomic_set(&chip->opencount, 0);
1933		mutex_init(&chip->mode_mutex);
1934		chip->can_set_rate = 1;
1935	} else {
1936		/* If this was called from the resume function, chip is
1937		 * already allocated and it contains current card settings.
1938		 */
1939		chip = *rchip;
1940	}
1941
1942	/* PCI resource allocation */
1943	chip->dsp_registers_phys = pci_resource_start(pci, 0);
1944	sz = pci_resource_len(pci, 0);
1945	if (sz > PAGE_SIZE)
1946		sz = PAGE_SIZE;		/* We map only the required part */
1947
1948	if ((chip->iores = request_mem_region(chip->dsp_registers_phys, sz,
1949					      ECHOCARD_NAME)) == NULL) {
1950		dev_err(chip->card->dev, "cannot get memory region\n");
1951		snd_echo_free(chip);
1952		return -EBUSY;
1953	}
1954	chip->dsp_registers = (volatile u32 __iomem *)
1955		ioremap_nocache(chip->dsp_registers_phys, sz);
1956
1957	if (request_irq(pci->irq, snd_echo_interrupt, IRQF_SHARED,
1958			KBUILD_MODNAME, chip)) {
1959		dev_err(chip->card->dev, "cannot grab irq\n");
1960		snd_echo_free(chip);
1961		return -EBUSY;
1962	}
1963	chip->irq = pci->irq;
1964	dev_dbg(card->dev, "pci=%p irq=%d subdev=%04x Init hardware...\n",
1965		chip->pci, chip->irq, chip->pci->subsystem_device);
1966
1967	/* Create the DSP comm page - this is the area of memory used for most
1968	of the communication with the DSP, which accesses it via bus mastering */
1969	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(chip->pci),
1970				sizeof(struct comm_page),
1971				&chip->commpage_dma_buf) < 0) {
1972		dev_err(chip->card->dev, "cannot allocate the comm page\n");
1973		snd_echo_free(chip);
1974		return -ENOMEM;
1975	}
1976	chip->comm_page_phys = chip->commpage_dma_buf.addr;
1977	chip->comm_page = (struct comm_page *)chip->commpage_dma_buf.area;
1978
1979	err = init_hw(chip, chip->pci->device, chip->pci->subsystem_device);
1980	if (err >= 0)
1981		err = set_mixer_defaults(chip);
1982	if (err < 0) {
1983		dev_err(card->dev, "init_hw err=%d\n", err);
1984		snd_echo_free(chip);
1985		return err;
1986	}
1987
1988	if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
1989		snd_echo_free(chip);
1990		return err;
1991	}
1992	*rchip = chip;
1993	/* Init done ! */
1994	return 0;
1995}
1996
1997
1998
1999/* constructor */
2000static int snd_echo_probe(struct pci_dev *pci,
2001			  const struct pci_device_id *pci_id)
2002{
2003	static int dev;
2004	struct snd_card *card;
2005	struct echoaudio *chip;
2006	char *dsp;
2007	int i, err;
2008
2009	if (dev >= SNDRV_CARDS)
2010		return -ENODEV;
2011	if (!enable[dev]) {
2012		dev++;
2013		return -ENOENT;
2014	}
2015
2016	i = 0;
2017	err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
2018			   0, &card);
2019	if (err < 0)
2020		return err;
2021
2022	chip = NULL;	/* Tells snd_echo_create to allocate chip */
2023	if ((err = snd_echo_create(card, pci, &chip)) < 0) {
2024		snd_card_free(card);
2025		return err;
2026	}
2027
2028	strcpy(card->driver, "Echo_" ECHOCARD_NAME);
2029	strcpy(card->shortname, chip->card_name);
2030
2031	dsp = "56301";
2032	if (pci_id->device == 0x3410)
2033		dsp = "56361";
2034
2035	sprintf(card->longname, "%s rev.%d (DSP%s) at 0x%lx irq %i",
2036		card->shortname, pci_id->subdevice & 0x000f, dsp,
2037		chip->dsp_registers_phys, chip->irq);
2038
2039	if ((err = snd_echo_new_pcm(chip)) < 0) {
2040		dev_err(chip->card->dev, "new pcm error %d\n", err);
2041		snd_card_free(card);
2042		return err;
2043	}
2044
2045#ifdef ECHOCARD_HAS_MIDI
2046	if (chip->has_midi) {	/* Some Mia's do not have midi */
2047		if ((err = snd_echo_midi_create(card, chip)) < 0) {
2048			dev_err(chip->card->dev, "new midi error %d\n", err);
2049			snd_card_free(card);
2050			return err;
2051		}
2052	}
2053#endif
2054
2055#ifdef ECHOCARD_HAS_VMIXER
2056	snd_echo_vmixer.count = num_pipes_out(chip) * num_busses_out(chip);
2057	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_vmixer, chip))) < 0)
2058		goto ctl_error;
2059#ifdef ECHOCARD_HAS_LINE_OUT_GAIN
2060	err = snd_ctl_add(chip->card,
2061			  snd_ctl_new1(&snd_echo_line_output_gain, chip));
2062	if (err < 0)
2063		goto ctl_error;
2064#endif
2065#else /* ECHOCARD_HAS_VMIXER */
2066	err = snd_ctl_add(chip->card,
2067			  snd_ctl_new1(&snd_echo_pcm_output_gain, chip));
2068	if (err < 0)
2069		goto ctl_error;
2070#endif /* ECHOCARD_HAS_VMIXER */
2071
2072#ifdef ECHOCARD_HAS_INPUT_GAIN
2073	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_line_input_gain, chip))) < 0)
2074		goto ctl_error;
2075#endif
2076
2077#ifdef ECHOCARD_HAS_INPUT_NOMINAL_LEVEL
2078	if (!chip->hasnt_input_nominal_level)
2079		if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_intput_nominal_level, chip))) < 0)
2080			goto ctl_error;
2081#endif
2082
2083#ifdef ECHOCARD_HAS_OUTPUT_NOMINAL_LEVEL
2084	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_output_nominal_level, chip))) < 0)
2085		goto ctl_error;
2086#endif
2087
2088	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_vumeters_switch, chip))) < 0)
2089		goto ctl_error;
2090
2091	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_vumeters, chip))) < 0)
2092		goto ctl_error;
2093
2094#ifdef ECHOCARD_HAS_MONITOR
2095	snd_echo_monitor_mixer.count = num_busses_in(chip) * num_busses_out(chip);
2096	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_monitor_mixer, chip))) < 0)
2097		goto ctl_error;
2098#endif
2099
2100#ifdef ECHOCARD_HAS_DIGITAL_IN_AUTOMUTE
2101	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_automute_switch, chip))) < 0)
2102		goto ctl_error;
2103#endif
2104
2105	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_channels_info, chip))) < 0)
2106		goto ctl_error;
2107
2108#ifdef ECHOCARD_HAS_DIGITAL_MODE_SWITCH
2109	/* Creates a list of available digital modes */
2110	chip->num_digital_modes = 0;
2111	for (i = 0; i < 6; i++)
2112		if (chip->digital_modes & (1 << i))
2113			chip->digital_mode_list[chip->num_digital_modes++] = i;
2114
2115	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_digital_mode_switch, chip))) < 0)
2116		goto ctl_error;
2117#endif /* ECHOCARD_HAS_DIGITAL_MODE_SWITCH */
2118
2119#ifdef ECHOCARD_HAS_EXTERNAL_CLOCK
2120	/* Creates a list of available clock sources */
2121	chip->num_clock_sources = 0;
2122	for (i = 0; i < 10; i++)
2123		if (chip->input_clock_types & (1 << i))
2124			chip->clock_source_list[chip->num_clock_sources++] = i;
2125
2126	if (chip->num_clock_sources > 1) {
2127		chip->clock_src_ctl = snd_ctl_new1(&snd_echo_clock_source_switch, chip);
2128		if ((err = snd_ctl_add(chip->card, chip->clock_src_ctl)) < 0)
2129			goto ctl_error;
2130	}
2131#endif /* ECHOCARD_HAS_EXTERNAL_CLOCK */
2132
2133#ifdef ECHOCARD_HAS_DIGITAL_IO
2134	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_spdif_mode_switch, chip))) < 0)
2135		goto ctl_error;
2136#endif
2137
2138#ifdef ECHOCARD_HAS_PHANTOM_POWER
2139	if (chip->has_phantom_power)
2140		if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_phantom_power_switch, chip))) < 0)
2141			goto ctl_error;
2142#endif
2143
2144	err = snd_card_register(card);
2145	if (err < 0)
2146		goto ctl_error;
2147	dev_info(card->dev, "Card registered: %s\n", card->longname);
2148
2149	pci_set_drvdata(pci, chip);
2150	dev++;
2151	return 0;
2152
2153ctl_error:
2154	dev_err(card->dev, "new control error %d\n", err);
2155	snd_card_free(card);
2156	return err;
2157}
2158
2159
2160
2161#if defined(CONFIG_PM_SLEEP)
2162
2163static int snd_echo_suspend(struct device *dev)
2164{
2165	struct echoaudio *chip = dev_get_drvdata(dev);
2166
2167	snd_pcm_suspend_all(chip->analog_pcm);
2168	snd_pcm_suspend_all(chip->digital_pcm);
2169
2170#ifdef ECHOCARD_HAS_MIDI
2171	/* This call can sleep */
2172	if (chip->midi_out)
2173		snd_echo_midi_output_trigger(chip->midi_out, 0);
2174#endif
2175	spin_lock_irq(&chip->lock);
2176	if (wait_handshake(chip)) {
2177		spin_unlock_irq(&chip->lock);
2178		return -EIO;
2179	}
2180	clear_handshake(chip);
2181	if (send_vector(chip, DSP_VC_GO_COMATOSE) < 0) {
2182		spin_unlock_irq(&chip->lock);
2183		return -EIO;
2184	}
2185	spin_unlock_irq(&chip->lock);
2186
2187	chip->dsp_code = NULL;
2188	free_irq(chip->irq, chip);
2189	chip->irq = -1;
2190	return 0;
2191}
2192
2193
2194
2195static int snd_echo_resume(struct device *dev)
2196{
2197	struct pci_dev *pci = to_pci_dev(dev);
2198	struct echoaudio *chip = dev_get_drvdata(dev);
2199	struct comm_page *commpage, *commpage_bak;
2200	u32 pipe_alloc_mask;
2201	int err;
2202
2203	commpage_bak = kmalloc(sizeof(struct echoaudio), GFP_KERNEL);
2204	if (commpage_bak == NULL)
2205		return -ENOMEM;
2206	commpage = chip->comm_page;
2207	memcpy(commpage_bak, commpage, sizeof(struct comm_page));
2208
2209	err = init_hw(chip, chip->pci->device, chip->pci->subsystem_device);
2210	if (err < 0) {
2211		kfree(commpage_bak);
2212		dev_err(dev, "resume init_hw err=%d\n", err);
2213		snd_echo_free(chip);
2214		return err;
2215	}
2216
2217	/* Temporarily set chip->pipe_alloc_mask=0 otherwise
2218	 * restore_dsp_settings() fails.
2219	 */
2220	pipe_alloc_mask = chip->pipe_alloc_mask;
2221	chip->pipe_alloc_mask = 0;
2222	err = restore_dsp_rettings(chip);
2223	chip->pipe_alloc_mask = pipe_alloc_mask;
2224	if (err < 0) {
2225		kfree(commpage_bak);
2226		return err;
2227	}
2228
2229	memcpy(&commpage->audio_format, &commpage_bak->audio_format,
2230		sizeof(commpage->audio_format));
2231	memcpy(&commpage->sglist_addr, &commpage_bak->sglist_addr,
2232		sizeof(commpage->sglist_addr));
2233	memcpy(&commpage->midi_output, &commpage_bak->midi_output,
2234		sizeof(commpage->midi_output));
2235	kfree(commpage_bak);
2236
2237	if (request_irq(pci->irq, snd_echo_interrupt, IRQF_SHARED,
2238			KBUILD_MODNAME, chip)) {
2239		dev_err(chip->card->dev, "cannot grab irq\n");
2240		snd_echo_free(chip);
2241		return -EBUSY;
2242	}
2243	chip->irq = pci->irq;
2244	dev_dbg(dev, "resume irq=%d\n", chip->irq);
2245
2246#ifdef ECHOCARD_HAS_MIDI
2247	if (chip->midi_input_enabled)
2248		enable_midi_input(chip, TRUE);
2249	if (chip->midi_out)
2250		snd_echo_midi_output_trigger(chip->midi_out, 1);
2251#endif
2252
2253	return 0;
2254}
2255
2256static SIMPLE_DEV_PM_OPS(snd_echo_pm, snd_echo_suspend, snd_echo_resume);
2257#define SND_ECHO_PM_OPS	&snd_echo_pm
2258#else
2259#define SND_ECHO_PM_OPS	NULL
2260#endif /* CONFIG_PM_SLEEP */
2261
2262
2263static void snd_echo_remove(struct pci_dev *pci)
2264{
2265	struct echoaudio *chip;
2266
2267	chip = pci_get_drvdata(pci);
2268	if (chip)
2269		snd_card_free(chip->card);
2270}
2271
2272
2273
2274/******************************************************************************
2275	Everything starts and ends here
2276******************************************************************************/
2277
2278/* pci_driver definition */
2279static struct pci_driver echo_driver = {
2280	.name = KBUILD_MODNAME,
2281	.id_table = snd_echo_ids,
2282	.probe = snd_echo_probe,
2283	.remove = snd_echo_remove,
2284	.driver = {
2285		.pm = SND_ECHO_PM_OPS,
2286	},
2287};
2288
2289module_pci_driver(echo_driver);
2290