accel/qaic: Add AIC200 support
[drm/drm-misc.git] / sound / pci / echoaudio / echoaudio.c
blob7484de255a3eda85b3dd5d20c4e6274ae7045da4
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * ALSA driver for Echoaudio soundcards.
4 * Copyright (C) 2003-2004 Giuliano Pochini <pochini@shiny.it>
5 * Copyright (C) 2020 Mark Hills <mark@xwax.org>
6 */
8 #include <linux/module.h>
10 MODULE_AUTHOR("Giuliano Pochini <pochini@shiny.it>");
11 MODULE_LICENSE("GPL v2");
12 MODULE_DESCRIPTION("Echoaudio " ECHOCARD_NAME " soundcards driver");
13 MODULE_DEVICE_TABLE(pci, snd_echo_ids);
15 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
16 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
17 static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
19 module_param_array(index, int, NULL, 0444);
20 MODULE_PARM_DESC(index, "Index value for " ECHOCARD_NAME " soundcard.");
21 module_param_array(id, charp, NULL, 0444);
22 MODULE_PARM_DESC(id, "ID string for " ECHOCARD_NAME " soundcard.");
23 module_param_array(enable, bool, NULL, 0444);
24 MODULE_PARM_DESC(enable, "Enable " ECHOCARD_NAME " soundcard.");
26 static const unsigned int channels_list[10] = {1, 2, 4, 6, 8, 10, 12, 14, 16, 999999};
27 static const DECLARE_TLV_DB_SCALE(db_scale_output_gain, -12800, 100, 1);
31 static int get_firmware(const struct firmware **fw_entry,
32 struct echoaudio *chip, const short fw_index)
34 int err;
35 char name[30];
37 if (chip->fw_cache[fw_index]) {
38 dev_dbg(chip->card->dev,
39 "firmware requested: %s is cached\n",
40 card_fw[fw_index].data);
41 *fw_entry = chip->fw_cache[fw_index];
42 return 0;
45 dev_dbg(chip->card->dev,
46 "firmware requested: %s\n", card_fw[fw_index].data);
47 snprintf(name, sizeof(name), "ea/%s", card_fw[fw_index].data);
48 err = request_firmware(fw_entry, name, &chip->pci->dev);
49 if (err < 0)
50 dev_err(chip->card->dev,
51 "get_firmware(): Firmware not available (%d)\n", err);
52 else
53 chip->fw_cache[fw_index] = *fw_entry;
54 return err;
59 static void free_firmware(const struct firmware *fw_entry,
60 struct echoaudio *chip)
62 dev_dbg(chip->card->dev, "firmware not released (kept in cache)\n");
67 static void free_firmware_cache(struct echoaudio *chip)
69 int i;
71 for (i = 0; i < 8 ; i++)
72 if (chip->fw_cache[i]) {
73 release_firmware(chip->fw_cache[i]);
74 dev_dbg(chip->card->dev, "release_firmware(%d)\n", i);
80 /******************************************************************************
81 PCM interface
82 ******************************************************************************/
84 static void audiopipe_free(struct snd_pcm_runtime *runtime)
86 struct audiopipe *pipe = runtime->private_data;
88 if (pipe->sgpage.area)
89 snd_dma_free_pages(&pipe->sgpage);
90 kfree(pipe);
95 static int hw_rule_capture_format_by_channels(struct snd_pcm_hw_params *params,
96 struct snd_pcm_hw_rule *rule)
98 struct snd_interval *c = hw_param_interval(params,
99 SNDRV_PCM_HW_PARAM_CHANNELS);
100 struct snd_mask *f = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
101 struct snd_mask fmt;
103 snd_mask_any(&fmt);
105 #ifndef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
106 /* >=2 channels cannot be S32_BE */
107 if (c->min == 2) {
108 fmt.bits[0] &= ~SNDRV_PCM_FMTBIT_S32_BE;
109 return snd_mask_refine(f, &fmt);
111 #endif
112 /* > 2 channels cannot be U8 and S32_BE */
113 if (c->min > 2) {
114 fmt.bits[0] &= ~(SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S32_BE);
115 return snd_mask_refine(f, &fmt);
117 /* Mono is ok with any format */
118 return 0;
123 static int hw_rule_capture_channels_by_format(struct snd_pcm_hw_params *params,
124 struct snd_pcm_hw_rule *rule)
126 struct snd_interval *c = hw_param_interval(params,
127 SNDRV_PCM_HW_PARAM_CHANNELS);
128 struct snd_mask *f = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
129 struct snd_interval ch;
131 snd_interval_any(&ch);
133 /* S32_BE is mono (and stereo) only */
134 if (f->bits[0] == SNDRV_PCM_FMTBIT_S32_BE) {
135 ch.min = 1;
136 #ifdef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
137 ch.max = 2;
138 #else
139 ch.max = 1;
140 #endif
141 ch.integer = 1;
142 return snd_interval_refine(c, &ch);
144 /* U8 can be only mono or stereo */
145 if (f->bits[0] == SNDRV_PCM_FMTBIT_U8) {
146 ch.min = 1;
147 ch.max = 2;
148 ch.integer = 1;
149 return snd_interval_refine(c, &ch);
151 /* S16_LE, S24_3LE and S32_LE support any number of channels. */
152 return 0;
157 static int hw_rule_playback_format_by_channels(struct snd_pcm_hw_params *params,
158 struct snd_pcm_hw_rule *rule)
160 struct snd_interval *c = hw_param_interval(params,
161 SNDRV_PCM_HW_PARAM_CHANNELS);
162 struct snd_mask *f = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
163 struct snd_mask fmt;
164 u64 fmask;
165 snd_mask_any(&fmt);
167 fmask = fmt.bits[0] + ((u64)fmt.bits[1] << 32);
169 /* >2 channels must be S16_LE, S24_3LE or S32_LE */
170 if (c->min > 2) {
171 fmask &= SNDRV_PCM_FMTBIT_S16_LE |
172 SNDRV_PCM_FMTBIT_S24_3LE |
173 SNDRV_PCM_FMTBIT_S32_LE;
174 /* 1 channel must be S32_BE or S32_LE */
175 } else if (c->max == 1)
176 fmask &= SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE;
177 #ifndef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
178 /* 2 channels cannot be S32_BE */
179 else if (c->min == 2 && c->max == 2)
180 fmask &= ~SNDRV_PCM_FMTBIT_S32_BE;
181 #endif
182 else
183 return 0;
185 fmt.bits[0] &= (u32)fmask;
186 fmt.bits[1] &= (u32)(fmask >> 32);
187 return snd_mask_refine(f, &fmt);
192 static int hw_rule_playback_channels_by_format(struct snd_pcm_hw_params *params,
193 struct snd_pcm_hw_rule *rule)
195 struct snd_interval *c = hw_param_interval(params,
196 SNDRV_PCM_HW_PARAM_CHANNELS);
197 struct snd_mask *f = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
198 struct snd_interval ch;
199 u64 fmask;
201 snd_interval_any(&ch);
202 ch.integer = 1;
203 fmask = f->bits[0] + ((u64)f->bits[1] << 32);
205 /* S32_BE is mono (and stereo) only */
206 if (fmask == SNDRV_PCM_FMTBIT_S32_BE) {
207 ch.min = 1;
208 #ifdef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
209 ch.max = 2;
210 #else
211 ch.max = 1;
212 #endif
213 /* U8 is stereo only */
214 } else if (fmask == SNDRV_PCM_FMTBIT_U8)
215 ch.min = ch.max = 2;
216 /* S16_LE and S24_3LE must be at least stereo */
217 else if (!(fmask & ~(SNDRV_PCM_FMTBIT_S16_LE |
218 SNDRV_PCM_FMTBIT_S24_3LE)))
219 ch.min = 2;
220 else
221 return 0;
223 return snd_interval_refine(c, &ch);
228 /* Since the sample rate is a global setting, do allow the user to change the
229 sample rate only if there is only one pcm device open. */
230 static int hw_rule_sample_rate(struct snd_pcm_hw_params *params,
231 struct snd_pcm_hw_rule *rule)
233 struct snd_interval *rate = hw_param_interval(params,
234 SNDRV_PCM_HW_PARAM_RATE);
235 struct echoaudio *chip = rule->private;
236 struct snd_interval fixed;
237 int err;
239 mutex_lock(&chip->mode_mutex);
241 if (chip->can_set_rate) {
242 err = 0;
243 } else {
244 snd_interval_any(&fixed);
245 fixed.min = fixed.max = chip->sample_rate;
246 err = snd_interval_refine(rate, &fixed);
249 mutex_unlock(&chip->mode_mutex);
250 return err;
254 static int pcm_open(struct snd_pcm_substream *substream,
255 signed char max_channels)
257 struct echoaudio *chip;
258 struct snd_pcm_runtime *runtime;
259 struct audiopipe *pipe;
260 int err, i;
262 if (max_channels <= 0)
263 return -EAGAIN;
265 chip = snd_pcm_substream_chip(substream);
266 runtime = substream->runtime;
268 pipe = kzalloc(sizeof(struct audiopipe), GFP_KERNEL);
269 if (!pipe)
270 return -ENOMEM;
271 pipe->index = -1; /* Not configured yet */
273 /* Set up hw capabilities and contraints */
274 memcpy(&pipe->hw, &pcm_hardware_skel, sizeof(struct snd_pcm_hardware));
275 dev_dbg(chip->card->dev, "max_channels=%d\n", max_channels);
276 pipe->constr.list = channels_list;
277 pipe->constr.mask = 0;
278 for (i = 0; channels_list[i] <= max_channels; i++);
279 pipe->constr.count = i;
280 if (pipe->hw.channels_max > max_channels)
281 pipe->hw.channels_max = max_channels;
282 if (chip->digital_mode == DIGITAL_MODE_ADAT) {
283 pipe->hw.rate_max = 48000;
284 pipe->hw.rates &= SNDRV_PCM_RATE_8000_48000;
287 runtime->hw = pipe->hw;
288 runtime->private_data = pipe;
289 runtime->private_free = audiopipe_free;
290 snd_pcm_set_sync(substream);
292 /* Only mono and any even number of channels are allowed */
293 err = snd_pcm_hw_constraint_list(runtime, 0,
294 SNDRV_PCM_HW_PARAM_CHANNELS,
295 &pipe->constr);
296 if (err < 0)
297 return err;
299 /* All periods should have the same size */
300 err = snd_pcm_hw_constraint_integer(runtime,
301 SNDRV_PCM_HW_PARAM_PERIODS);
302 if (err < 0)
303 return err;
305 /* The hw accesses memory in chunks 32 frames long and they should be
306 32-bytes-aligned. It's not a requirement, but it seems that IRQs are
307 generated with a resolution of 32 frames. Thus we need the following */
308 err = snd_pcm_hw_constraint_step(runtime, 0,
309 SNDRV_PCM_HW_PARAM_PERIOD_SIZE, 32);
310 if (err < 0)
311 return err;
312 err = snd_pcm_hw_constraint_step(runtime, 0,
313 SNDRV_PCM_HW_PARAM_BUFFER_SIZE, 32);
314 if (err < 0)
315 return err;
317 err = snd_pcm_hw_rule_add(substream->runtime, 0,
318 SNDRV_PCM_HW_PARAM_RATE,
319 hw_rule_sample_rate, chip,
320 SNDRV_PCM_HW_PARAM_RATE, -1);
321 if (err < 0)
322 return err;
324 /* Allocate a page for the scatter-gather list */
325 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
326 &chip->pci->dev,
327 PAGE_SIZE, &pipe->sgpage);
328 if (err < 0) {
329 dev_err(chip->card->dev, "s-g list allocation failed\n");
330 return err;
334 * Sole ownership required to set the rate
337 dev_dbg(chip->card->dev, "pcm_open opencount=%d can_set_rate=%d, rate_set=%d",
338 chip->opencount, chip->can_set_rate, chip->rate_set);
340 chip->opencount++;
341 if (chip->opencount > 1 && chip->rate_set)
342 chip->can_set_rate = 0;
344 return 0;
349 static int pcm_analog_in_open(struct snd_pcm_substream *substream)
351 struct echoaudio *chip = snd_pcm_substream_chip(substream);
352 int err;
354 err = pcm_open(substream,
355 num_analog_busses_in(chip) - substream->number);
356 if (err < 0)
357 return err;
358 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);
362 if (err < 0)
363 return err;
364 err = snd_pcm_hw_rule_add(substream->runtime, 0,
365 SNDRV_PCM_HW_PARAM_FORMAT,
366 hw_rule_capture_format_by_channels, NULL,
367 SNDRV_PCM_HW_PARAM_CHANNELS, -1);
368 if (err < 0)
369 return err;
371 return 0;
376 static int pcm_analog_out_open(struct snd_pcm_substream *substream)
378 struct echoaudio *chip = snd_pcm_substream_chip(substream);
379 int max_channels, err;
381 #ifdef ECHOCARD_HAS_VMIXER
382 max_channels = num_pipes_out(chip);
383 #else
384 max_channels = num_analog_busses_out(chip);
385 #endif
386 err = pcm_open(substream, max_channels - substream->number);
387 if (err < 0)
388 return err;
389 err = snd_pcm_hw_rule_add(substream->runtime, 0,
390 SNDRV_PCM_HW_PARAM_CHANNELS,
391 hw_rule_playback_channels_by_format,
392 NULL,
393 SNDRV_PCM_HW_PARAM_FORMAT, -1);
394 if (err < 0)
395 return err;
396 err = snd_pcm_hw_rule_add(substream->runtime, 0,
397 SNDRV_PCM_HW_PARAM_FORMAT,
398 hw_rule_playback_format_by_channels,
399 NULL,
400 SNDRV_PCM_HW_PARAM_CHANNELS, -1);
401 if (err < 0)
402 return err;
404 return 0;
409 #ifdef ECHOCARD_HAS_DIGITAL_IO
411 static int pcm_digital_in_open(struct snd_pcm_substream *substream)
413 struct echoaudio *chip = snd_pcm_substream_chip(substream);
414 int err, max_channels;
416 max_channels = num_digital_busses_in(chip) - substream->number;
417 mutex_lock(&chip->mode_mutex);
418 if (chip->digital_mode == DIGITAL_MODE_ADAT)
419 err = pcm_open(substream, max_channels);
420 else /* If the card has ADAT, subtract the 6 channels
421 * that S/PDIF doesn't have
423 err = pcm_open(substream, max_channels - ECHOCARD_HAS_ADAT);
425 if (err < 0)
426 goto din_exit;
428 err = snd_pcm_hw_rule_add(substream->runtime, 0,
429 SNDRV_PCM_HW_PARAM_CHANNELS,
430 hw_rule_capture_channels_by_format, NULL,
431 SNDRV_PCM_HW_PARAM_FORMAT, -1);
432 if (err < 0)
433 goto din_exit;
434 err = snd_pcm_hw_rule_add(substream->runtime, 0,
435 SNDRV_PCM_HW_PARAM_FORMAT,
436 hw_rule_capture_format_by_channels, NULL,
437 SNDRV_PCM_HW_PARAM_CHANNELS, -1);
438 if (err < 0)
439 goto din_exit;
441 din_exit:
442 mutex_unlock(&chip->mode_mutex);
443 return err;
448 #ifndef ECHOCARD_HAS_VMIXER /* See the note in snd_echo_new_pcm() */
450 static int pcm_digital_out_open(struct snd_pcm_substream *substream)
452 struct echoaudio *chip = snd_pcm_substream_chip(substream);
453 int err, max_channels;
455 max_channels = num_digital_busses_out(chip) - substream->number;
456 mutex_lock(&chip->mode_mutex);
457 if (chip->digital_mode == DIGITAL_MODE_ADAT)
458 err = pcm_open(substream, max_channels);
459 else /* If the card has ADAT, subtract the 6 channels
460 * that S/PDIF doesn't have
462 err = pcm_open(substream, max_channels - ECHOCARD_HAS_ADAT);
464 if (err < 0)
465 goto dout_exit;
467 err = snd_pcm_hw_rule_add(substream->runtime, 0,
468 SNDRV_PCM_HW_PARAM_CHANNELS,
469 hw_rule_playback_channels_by_format,
470 NULL, SNDRV_PCM_HW_PARAM_FORMAT,
471 -1);
472 if (err < 0)
473 goto dout_exit;
474 err = snd_pcm_hw_rule_add(substream->runtime, 0,
475 SNDRV_PCM_HW_PARAM_FORMAT,
476 hw_rule_playback_format_by_channels,
477 NULL, SNDRV_PCM_HW_PARAM_CHANNELS,
478 -1);
479 if (err < 0)
480 goto dout_exit;
482 dout_exit:
483 mutex_unlock(&chip->mode_mutex);
484 return err;
487 #endif /* !ECHOCARD_HAS_VMIXER */
489 #endif /* ECHOCARD_HAS_DIGITAL_IO */
493 static int pcm_close(struct snd_pcm_substream *substream)
495 struct echoaudio *chip = snd_pcm_substream_chip(substream);
497 /* Nothing to do here. Audio is already off and pipe will be
498 * freed by its callback
501 mutex_lock(&chip->mode_mutex);
503 dev_dbg(chip->card->dev, "pcm_open opencount=%d can_set_rate=%d, rate_set=%d",
504 chip->opencount, chip->can_set_rate, chip->rate_set);
506 chip->opencount--;
508 switch (chip->opencount) {
509 case 1:
510 chip->can_set_rate = 1;
511 break;
513 case 0:
514 chip->rate_set = 0;
515 break;
518 mutex_unlock(&chip->mode_mutex);
519 return 0;
524 /* Channel allocation and scatter-gather list setup */
525 static int init_engine(struct snd_pcm_substream *substream,
526 struct snd_pcm_hw_params *hw_params,
527 int pipe_index, int interleave)
529 struct echoaudio *chip;
530 int err, per, rest, page, edge, offs;
531 struct audiopipe *pipe;
533 chip = snd_pcm_substream_chip(substream);
534 pipe = (struct audiopipe *) substream->runtime->private_data;
536 /* Sets up che hardware. If it's already initialized, reset and
537 * redo with the new parameters
539 spin_lock_irq(&chip->lock);
540 if (pipe->index >= 0) {
541 dev_dbg(chip->card->dev, "hwp_ie free(%d)\n", pipe->index);
542 err = free_pipes(chip, pipe);
543 snd_BUG_ON(err);
544 chip->substream[pipe->index] = NULL;
547 err = allocate_pipes(chip, pipe, pipe_index, interleave);
548 if (err < 0) {
549 spin_unlock_irq(&chip->lock);
550 dev_err(chip->card->dev, "allocate_pipes(%d) err=%d\n",
551 pipe_index, err);
552 return err;
554 spin_unlock_irq(&chip->lock);
555 dev_dbg(chip->card->dev, "allocate_pipes()=%d\n", pipe_index);
557 dev_dbg(chip->card->dev,
558 "pcm_hw_params (bufsize=%dB periods=%d persize=%dB)\n",
559 params_buffer_bytes(hw_params), params_periods(hw_params),
560 params_period_bytes(hw_params));
562 sglist_init(chip, pipe);
563 edge = PAGE_SIZE;
564 for (offs = page = per = 0; offs < params_buffer_bytes(hw_params);
565 per++) {
566 rest = params_period_bytes(hw_params);
567 if (offs + rest > params_buffer_bytes(hw_params))
568 rest = params_buffer_bytes(hw_params) - offs;
569 while (rest) {
570 dma_addr_t addr;
571 addr = snd_pcm_sgbuf_get_addr(substream, offs);
572 if (rest <= edge - offs) {
573 sglist_add_mapping(chip, pipe, addr, rest);
574 sglist_add_irq(chip, pipe);
575 offs += rest;
576 rest = 0;
577 } else {
578 sglist_add_mapping(chip, pipe, addr,
579 edge - offs);
580 rest -= edge - offs;
581 offs = edge;
583 if (offs == edge) {
584 edge += PAGE_SIZE;
585 page++;
590 /* Close the ring buffer */
591 sglist_wrap(chip, pipe);
593 /* This stuff is used by the irq handler, so it must be
594 * initialized before chip->substream
596 pipe->last_period = 0;
597 pipe->last_counter = 0;
598 pipe->position = 0;
599 smp_wmb();
600 chip->substream[pipe_index] = substream;
601 chip->rate_set = 1;
602 spin_lock_irq(&chip->lock);
603 set_sample_rate(chip, hw_params->rate_num / hw_params->rate_den);
604 spin_unlock_irq(&chip->lock);
605 return 0;
610 static int pcm_analog_in_hw_params(struct snd_pcm_substream *substream,
611 struct snd_pcm_hw_params *hw_params)
613 struct echoaudio *chip = snd_pcm_substream_chip(substream);
615 return init_engine(substream, hw_params, px_analog_in(chip) +
616 substream->number, params_channels(hw_params));
621 static int pcm_analog_out_hw_params(struct snd_pcm_substream *substream,
622 struct snd_pcm_hw_params *hw_params)
624 return init_engine(substream, hw_params, substream->number,
625 params_channels(hw_params));
630 #ifdef ECHOCARD_HAS_DIGITAL_IO
632 static int pcm_digital_in_hw_params(struct snd_pcm_substream *substream,
633 struct snd_pcm_hw_params *hw_params)
635 struct echoaudio *chip = snd_pcm_substream_chip(substream);
637 return init_engine(substream, hw_params, px_digital_in(chip) +
638 substream->number, params_channels(hw_params));
643 #ifndef ECHOCARD_HAS_VMIXER /* See the note in snd_echo_new_pcm() */
644 static int pcm_digital_out_hw_params(struct snd_pcm_substream *substream,
645 struct snd_pcm_hw_params *hw_params)
647 struct echoaudio *chip = snd_pcm_substream_chip(substream);
649 return init_engine(substream, hw_params, px_digital_out(chip) +
650 substream->number, params_channels(hw_params));
652 #endif /* !ECHOCARD_HAS_VMIXER */
654 #endif /* ECHOCARD_HAS_DIGITAL_IO */
658 static int pcm_hw_free(struct snd_pcm_substream *substream)
660 struct echoaudio *chip;
661 struct audiopipe *pipe;
663 chip = snd_pcm_substream_chip(substream);
664 pipe = (struct audiopipe *) substream->runtime->private_data;
666 spin_lock_irq(&chip->lock);
667 if (pipe->index >= 0) {
668 dev_dbg(chip->card->dev, "pcm_hw_free(%d)\n", pipe->index);
669 free_pipes(chip, pipe);
670 chip->substream[pipe->index] = NULL;
671 pipe->index = -1;
673 spin_unlock_irq(&chip->lock);
675 return 0;
680 static int pcm_prepare(struct snd_pcm_substream *substream)
682 struct echoaudio *chip = snd_pcm_substream_chip(substream);
683 struct snd_pcm_runtime *runtime = substream->runtime;
684 struct audioformat format;
685 int pipe_index = ((struct audiopipe *)runtime->private_data)->index;
687 dev_dbg(chip->card->dev, "Prepare rate=%d format=%d channels=%d\n",
688 runtime->rate, runtime->format, runtime->channels);
689 format.interleave = runtime->channels;
690 format.data_are_bigendian = 0;
691 format.mono_to_stereo = 0;
692 switch (runtime->format) {
693 case SNDRV_PCM_FORMAT_U8:
694 format.bits_per_sample = 8;
695 break;
696 case SNDRV_PCM_FORMAT_S16_LE:
697 format.bits_per_sample = 16;
698 break;
699 case SNDRV_PCM_FORMAT_S24_3LE:
700 format.bits_per_sample = 24;
701 break;
702 case SNDRV_PCM_FORMAT_S32_BE:
703 format.data_are_bigendian = 1;
704 fallthrough;
705 case SNDRV_PCM_FORMAT_S32_LE:
706 format.bits_per_sample = 32;
707 break;
708 default:
709 dev_err(chip->card->dev,
710 "Prepare error: unsupported format %d\n",
711 runtime->format);
712 return -EINVAL;
715 if (snd_BUG_ON(pipe_index >= px_num(chip)))
716 return -EINVAL;
719 * We passed checks we can do independently; now take
720 * exclusive control
723 spin_lock_irq(&chip->lock);
725 if (snd_BUG_ON(!is_pipe_allocated(chip, pipe_index))) {
726 spin_unlock_irq(&chip->lock);
727 return -EINVAL;
730 set_audio_format(chip, pipe_index, &format);
731 spin_unlock_irq(&chip->lock);
733 return 0;
738 static int pcm_trigger(struct snd_pcm_substream *substream, int cmd)
740 struct echoaudio *chip = snd_pcm_substream_chip(substream);
741 struct audiopipe *pipe;
742 int i, err;
743 u32 channelmask = 0;
744 struct snd_pcm_substream *s;
746 snd_pcm_group_for_each_entry(s, substream) {
747 for (i = 0; i < DSP_MAXPIPES; i++) {
748 if (s == chip->substream[i]) {
749 channelmask |= 1 << i;
750 snd_pcm_trigger_done(s, substream);
755 spin_lock(&chip->lock);
756 switch (cmd) {
757 case SNDRV_PCM_TRIGGER_RESUME:
758 case SNDRV_PCM_TRIGGER_START:
759 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
760 for (i = 0; i < DSP_MAXPIPES; i++) {
761 if (channelmask & (1 << i)) {
762 pipe = chip->substream[i]->runtime->private_data;
763 switch (pipe->state) {
764 case PIPE_STATE_STOPPED:
765 pipe->last_period = 0;
766 pipe->last_counter = 0;
767 pipe->position = 0;
768 *pipe->dma_counter = 0;
769 fallthrough;
770 case PIPE_STATE_PAUSED:
771 pipe->state = PIPE_STATE_STARTED;
772 break;
773 case PIPE_STATE_STARTED:
774 break;
778 err = start_transport(chip, channelmask,
779 chip->pipe_cyclic_mask);
780 break;
781 case SNDRV_PCM_TRIGGER_SUSPEND:
782 case SNDRV_PCM_TRIGGER_STOP:
783 for (i = 0; i < DSP_MAXPIPES; i++) {
784 if (channelmask & (1 << i)) {
785 pipe = chip->substream[i]->runtime->private_data;
786 pipe->state = PIPE_STATE_STOPPED;
789 err = stop_transport(chip, channelmask);
790 break;
791 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
792 for (i = 0; i < DSP_MAXPIPES; i++) {
793 if (channelmask & (1 << i)) {
794 pipe = chip->substream[i]->runtime->private_data;
795 pipe->state = PIPE_STATE_PAUSED;
798 err = pause_transport(chip, channelmask);
799 break;
800 default:
801 err = -EINVAL;
803 spin_unlock(&chip->lock);
804 return err;
809 static snd_pcm_uframes_t pcm_pointer(struct snd_pcm_substream *substream)
811 struct snd_pcm_runtime *runtime = substream->runtime;
812 struct audiopipe *pipe = runtime->private_data;
813 u32 counter, step;
816 * IRQ handling runs concurrently. Do not share tracking of
817 * counter with it, which would race or require locking
820 counter = le32_to_cpu(*pipe->dma_counter); /* presumed atomic */
822 step = counter - pipe->last_counter; /* handles wrapping */
823 pipe->last_counter = counter;
825 /* counter doesn't neccessarily wrap on a multiple of
826 * buffer_size, so can't derive the position; must
827 * accumulate */
829 pipe->position += step;
830 pipe->position %= frames_to_bytes(runtime, runtime->buffer_size); /* wrap */
832 return bytes_to_frames(runtime, pipe->position);
837 /* pcm *_ops structures */
838 static const struct snd_pcm_ops analog_playback_ops = {
839 .open = pcm_analog_out_open,
840 .close = pcm_close,
841 .hw_params = pcm_analog_out_hw_params,
842 .hw_free = pcm_hw_free,
843 .prepare = pcm_prepare,
844 .trigger = pcm_trigger,
845 .pointer = pcm_pointer,
847 static const struct snd_pcm_ops analog_capture_ops = {
848 .open = pcm_analog_in_open,
849 .close = pcm_close,
850 .hw_params = pcm_analog_in_hw_params,
851 .hw_free = pcm_hw_free,
852 .prepare = pcm_prepare,
853 .trigger = pcm_trigger,
854 .pointer = pcm_pointer,
856 #ifdef ECHOCARD_HAS_DIGITAL_IO
857 #ifndef ECHOCARD_HAS_VMIXER
858 static const struct snd_pcm_ops digital_playback_ops = {
859 .open = pcm_digital_out_open,
860 .close = pcm_close,
861 .hw_params = pcm_digital_out_hw_params,
862 .hw_free = pcm_hw_free,
863 .prepare = pcm_prepare,
864 .trigger = pcm_trigger,
865 .pointer = pcm_pointer,
867 #endif /* !ECHOCARD_HAS_VMIXER */
868 static const struct snd_pcm_ops digital_capture_ops = {
869 .open = pcm_digital_in_open,
870 .close = pcm_close,
871 .hw_params = pcm_digital_in_hw_params,
872 .hw_free = pcm_hw_free,
873 .prepare = pcm_prepare,
874 .trigger = pcm_trigger,
875 .pointer = pcm_pointer,
877 #endif /* ECHOCARD_HAS_DIGITAL_IO */
881 /* Preallocate memory only for the first substream because it's the most
882 * used one
884 static void snd_echo_preallocate_pages(struct snd_pcm *pcm, struct device *dev)
886 struct snd_pcm_substream *ss;
887 int stream;
889 for (stream = 0; stream < 2; stream++)
890 for (ss = pcm->streams[stream].substream; ss; ss = ss->next)
891 snd_pcm_set_managed_buffer(ss, SNDRV_DMA_TYPE_DEV_SG,
892 dev,
893 ss->number ? 0 : 128<<10,
894 256<<10);
899 /*<--snd_echo_probe() */
900 static int snd_echo_new_pcm(struct echoaudio *chip)
902 struct snd_pcm *pcm;
903 int err;
905 #ifdef ECHOCARD_HAS_VMIXER
906 /* This card has a Vmixer, that is there is no direct mapping from PCM
907 streams to physical outputs. The user can mix the streams as he wishes
908 via control interface and it's possible to send any stream to any
909 output, thus it makes no sense to keep analog and digital outputs
910 separated */
912 /* PCM#0 Virtual outputs and analog inputs */
913 err = snd_pcm_new(chip->card, "PCM", 0, num_pipes_out(chip),
914 num_analog_busses_in(chip), &pcm);
915 if (err < 0)
916 return err;
917 pcm->private_data = chip;
918 chip->analog_pcm = pcm;
919 strcpy(pcm->name, chip->card->shortname);
920 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &analog_playback_ops);
921 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &analog_capture_ops);
922 snd_echo_preallocate_pages(pcm, &chip->pci->dev);
924 #ifdef ECHOCARD_HAS_DIGITAL_IO
925 /* PCM#1 Digital inputs, no outputs */
926 err = snd_pcm_new(chip->card, "Digital PCM", 1, 0,
927 num_digital_busses_in(chip), &pcm);
928 if (err < 0)
929 return err;
930 pcm->private_data = chip;
931 chip->digital_pcm = pcm;
932 strcpy(pcm->name, chip->card->shortname);
933 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &digital_capture_ops);
934 snd_echo_preallocate_pages(pcm, &chip->pci->dev);
935 #endif /* ECHOCARD_HAS_DIGITAL_IO */
937 #else /* ECHOCARD_HAS_VMIXER */
939 /* The card can manage substreams formed by analog and digital channels
940 at the same time, but I prefer to keep analog and digital channels
941 separated, because that mixed thing is confusing and useless. So we
942 register two PCM devices: */
944 /* PCM#0 Analog i/o */
945 err = snd_pcm_new(chip->card, "Analog PCM", 0,
946 num_analog_busses_out(chip),
947 num_analog_busses_in(chip), &pcm);
948 if (err < 0)
949 return err;
950 pcm->private_data = chip;
951 chip->analog_pcm = pcm;
952 strcpy(pcm->name, chip->card->shortname);
953 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &analog_playback_ops);
954 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &analog_capture_ops);
955 snd_echo_preallocate_pages(pcm, &chip->pci->dev);
957 #ifdef ECHOCARD_HAS_DIGITAL_IO
958 /* PCM#1 Digital i/o */
959 err = snd_pcm_new(chip->card, "Digital PCM", 1,
960 num_digital_busses_out(chip),
961 num_digital_busses_in(chip), &pcm);
962 if (err < 0)
963 return err;
964 pcm->private_data = chip;
965 chip->digital_pcm = pcm;
966 strcpy(pcm->name, chip->card->shortname);
967 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &digital_playback_ops);
968 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &digital_capture_ops);
969 snd_echo_preallocate_pages(pcm, &chip->pci->dev);
970 #endif /* ECHOCARD_HAS_DIGITAL_IO */
972 #endif /* ECHOCARD_HAS_VMIXER */
974 return 0;
980 /******************************************************************************
981 Control interface
982 ******************************************************************************/
984 #if !defined(ECHOCARD_HAS_VMIXER) || defined(ECHOCARD_HAS_LINE_OUT_GAIN)
986 /******************* PCM output volume *******************/
987 static int snd_echo_output_gain_info(struct snd_kcontrol *kcontrol,
988 struct snd_ctl_elem_info *uinfo)
990 struct echoaudio *chip;
992 chip = snd_kcontrol_chip(kcontrol);
993 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
994 uinfo->count = num_busses_out(chip);
995 uinfo->value.integer.min = ECHOGAIN_MINOUT;
996 uinfo->value.integer.max = ECHOGAIN_MAXOUT;
997 return 0;
1000 static int snd_echo_output_gain_get(struct snd_kcontrol *kcontrol,
1001 struct snd_ctl_elem_value *ucontrol)
1003 struct echoaudio *chip;
1004 int c;
1006 chip = snd_kcontrol_chip(kcontrol);
1007 for (c = 0; c < num_busses_out(chip); c++)
1008 ucontrol->value.integer.value[c] = chip->output_gain[c];
1009 return 0;
1012 static int snd_echo_output_gain_put(struct snd_kcontrol *kcontrol,
1013 struct snd_ctl_elem_value *ucontrol)
1015 struct echoaudio *chip;
1016 int c, changed, gain;
1018 changed = 0;
1019 chip = snd_kcontrol_chip(kcontrol);
1020 spin_lock_irq(&chip->lock);
1021 for (c = 0; c < num_busses_out(chip); c++) {
1022 gain = ucontrol->value.integer.value[c];
1023 /* Ignore out of range values */
1024 if (gain < ECHOGAIN_MINOUT || gain > ECHOGAIN_MAXOUT)
1025 continue;
1026 if (chip->output_gain[c] != gain) {
1027 set_output_gain(chip, c, gain);
1028 changed = 1;
1031 if (changed)
1032 update_output_line_level(chip);
1033 spin_unlock_irq(&chip->lock);
1034 return changed;
1037 #ifdef ECHOCARD_HAS_LINE_OUT_GAIN
1038 /* On the Mia this one controls the line-out volume */
1039 static const struct snd_kcontrol_new snd_echo_line_output_gain = {
1040 .name = "Line Playback Volume",
1041 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1042 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
1043 SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1044 .info = snd_echo_output_gain_info,
1045 .get = snd_echo_output_gain_get,
1046 .put = snd_echo_output_gain_put,
1047 .tlv = {.p = db_scale_output_gain},
1049 #else
1050 static const struct snd_kcontrol_new snd_echo_pcm_output_gain = {
1051 .name = "PCM Playback Volume",
1052 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1053 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1054 .info = snd_echo_output_gain_info,
1055 .get = snd_echo_output_gain_get,
1056 .put = snd_echo_output_gain_put,
1057 .tlv = {.p = db_scale_output_gain},
1059 #endif
1061 #endif /* !ECHOCARD_HAS_VMIXER || ECHOCARD_HAS_LINE_OUT_GAIN */
1065 #ifdef ECHOCARD_HAS_INPUT_GAIN
1067 /******************* Analog input volume *******************/
1068 static int snd_echo_input_gain_info(struct snd_kcontrol *kcontrol,
1069 struct snd_ctl_elem_info *uinfo)
1071 struct echoaudio *chip;
1073 chip = snd_kcontrol_chip(kcontrol);
1074 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1075 uinfo->count = num_analog_busses_in(chip);
1076 uinfo->value.integer.min = ECHOGAIN_MININP;
1077 uinfo->value.integer.max = ECHOGAIN_MAXINP;
1078 return 0;
1081 static int snd_echo_input_gain_get(struct snd_kcontrol *kcontrol,
1082 struct snd_ctl_elem_value *ucontrol)
1084 struct echoaudio *chip;
1085 int c;
1087 chip = snd_kcontrol_chip(kcontrol);
1088 for (c = 0; c < num_analog_busses_in(chip); c++)
1089 ucontrol->value.integer.value[c] = chip->input_gain[c];
1090 return 0;
1093 static int snd_echo_input_gain_put(struct snd_kcontrol *kcontrol,
1094 struct snd_ctl_elem_value *ucontrol)
1096 struct echoaudio *chip;
1097 int c, gain, changed;
1099 changed = 0;
1100 chip = snd_kcontrol_chip(kcontrol);
1101 spin_lock_irq(&chip->lock);
1102 for (c = 0; c < num_analog_busses_in(chip); c++) {
1103 gain = ucontrol->value.integer.value[c];
1104 /* Ignore out of range values */
1105 if (gain < ECHOGAIN_MININP || gain > ECHOGAIN_MAXINP)
1106 continue;
1107 if (chip->input_gain[c] != gain) {
1108 set_input_gain(chip, c, gain);
1109 changed = 1;
1112 if (changed)
1113 update_input_line_level(chip);
1114 spin_unlock_irq(&chip->lock);
1115 return changed;
1118 static const DECLARE_TLV_DB_SCALE(db_scale_input_gain, -2500, 50, 0);
1120 static const struct snd_kcontrol_new snd_echo_line_input_gain = {
1121 .name = "Line Capture Volume",
1122 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1123 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1124 .info = snd_echo_input_gain_info,
1125 .get = snd_echo_input_gain_get,
1126 .put = snd_echo_input_gain_put,
1127 .tlv = {.p = db_scale_input_gain},
1130 #endif /* ECHOCARD_HAS_INPUT_GAIN */
1134 #ifdef ECHOCARD_HAS_OUTPUT_NOMINAL_LEVEL
1136 /************ Analog output nominal level (+4dBu / -10dBV) ***************/
1137 static int snd_echo_output_nominal_info (struct snd_kcontrol *kcontrol,
1138 struct snd_ctl_elem_info *uinfo)
1140 struct echoaudio *chip;
1142 chip = snd_kcontrol_chip(kcontrol);
1143 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1144 uinfo->count = num_analog_busses_out(chip);
1145 uinfo->value.integer.min = 0;
1146 uinfo->value.integer.max = 1;
1147 return 0;
1150 static int snd_echo_output_nominal_get(struct snd_kcontrol *kcontrol,
1151 struct snd_ctl_elem_value *ucontrol)
1153 struct echoaudio *chip;
1154 int c;
1156 chip = snd_kcontrol_chip(kcontrol);
1157 for (c = 0; c < num_analog_busses_out(chip); c++)
1158 ucontrol->value.integer.value[c] = chip->nominal_level[c];
1159 return 0;
1162 static int snd_echo_output_nominal_put(struct snd_kcontrol *kcontrol,
1163 struct snd_ctl_elem_value *ucontrol)
1165 struct echoaudio *chip;
1166 int c, changed;
1168 changed = 0;
1169 chip = snd_kcontrol_chip(kcontrol);
1170 spin_lock_irq(&chip->lock);
1171 for (c = 0; c < num_analog_busses_out(chip); c++) {
1172 if (chip->nominal_level[c] != ucontrol->value.integer.value[c]) {
1173 set_nominal_level(chip, c,
1174 ucontrol->value.integer.value[c]);
1175 changed = 1;
1178 if (changed)
1179 update_output_line_level(chip);
1180 spin_unlock_irq(&chip->lock);
1181 return changed;
1184 static const struct snd_kcontrol_new snd_echo_output_nominal_level = {
1185 .name = "Line Playback Switch (-10dBV)",
1186 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1187 .info = snd_echo_output_nominal_info,
1188 .get = snd_echo_output_nominal_get,
1189 .put = snd_echo_output_nominal_put,
1192 #endif /* ECHOCARD_HAS_OUTPUT_NOMINAL_LEVEL */
1196 #ifdef ECHOCARD_HAS_INPUT_NOMINAL_LEVEL
1198 /*************** Analog input nominal level (+4dBu / -10dBV) ***************/
1199 static int snd_echo_input_nominal_info(struct snd_kcontrol *kcontrol,
1200 struct snd_ctl_elem_info *uinfo)
1202 struct echoaudio *chip;
1204 chip = snd_kcontrol_chip(kcontrol);
1205 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1206 uinfo->count = num_analog_busses_in(chip);
1207 uinfo->value.integer.min = 0;
1208 uinfo->value.integer.max = 1;
1209 return 0;
1212 static int snd_echo_input_nominal_get(struct snd_kcontrol *kcontrol,
1213 struct snd_ctl_elem_value *ucontrol)
1215 struct echoaudio *chip;
1216 int c;
1218 chip = snd_kcontrol_chip(kcontrol);
1219 for (c = 0; c < num_analog_busses_in(chip); c++)
1220 ucontrol->value.integer.value[c] =
1221 chip->nominal_level[bx_analog_in(chip) + c];
1222 return 0;
1225 static int snd_echo_input_nominal_put(struct snd_kcontrol *kcontrol,
1226 struct snd_ctl_elem_value *ucontrol)
1228 struct echoaudio *chip;
1229 int c, changed;
1231 changed = 0;
1232 chip = snd_kcontrol_chip(kcontrol);
1233 spin_lock_irq(&chip->lock);
1234 for (c = 0; c < num_analog_busses_in(chip); c++) {
1235 if (chip->nominal_level[bx_analog_in(chip) + c] !=
1236 ucontrol->value.integer.value[c]) {
1237 set_nominal_level(chip, bx_analog_in(chip) + c,
1238 ucontrol->value.integer.value[c]);
1239 changed = 1;
1242 if (changed)
1243 update_output_line_level(chip); /* "Output" is not a mistake
1244 * here.
1246 spin_unlock_irq(&chip->lock);
1247 return changed;
1250 static const struct snd_kcontrol_new snd_echo_intput_nominal_level = {
1251 .name = "Line Capture Switch (-10dBV)",
1252 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1253 .info = snd_echo_input_nominal_info,
1254 .get = snd_echo_input_nominal_get,
1255 .put = snd_echo_input_nominal_put,
1258 #endif /* ECHOCARD_HAS_INPUT_NOMINAL_LEVEL */
1262 #ifdef ECHOCARD_HAS_MONITOR
1264 /******************* Monitor mixer *******************/
1265 static int snd_echo_mixer_info(struct snd_kcontrol *kcontrol,
1266 struct snd_ctl_elem_info *uinfo)
1268 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1269 uinfo->count = 1;
1270 uinfo->value.integer.min = ECHOGAIN_MINOUT;
1271 uinfo->value.integer.max = ECHOGAIN_MAXOUT;
1272 return 0;
1275 static int snd_echo_mixer_get(struct snd_kcontrol *kcontrol,
1276 struct snd_ctl_elem_value *ucontrol)
1278 struct echoaudio *chip = snd_kcontrol_chip(kcontrol);
1279 unsigned int out = ucontrol->id.index / num_busses_in(chip);
1280 unsigned int in = ucontrol->id.index % num_busses_in(chip);
1282 if (out >= ECHO_MAXAUDIOOUTPUTS || in >= ECHO_MAXAUDIOINPUTS)
1283 return -EINVAL;
1285 ucontrol->value.integer.value[0] = chip->monitor_gain[out][in];
1286 return 0;
1289 static int snd_echo_mixer_put(struct snd_kcontrol *kcontrol,
1290 struct snd_ctl_elem_value *ucontrol)
1292 struct echoaudio *chip;
1293 int changed, gain;
1294 unsigned int out, in;
1296 changed = 0;
1297 chip = snd_kcontrol_chip(kcontrol);
1298 out = ucontrol->id.index / num_busses_in(chip);
1299 in = ucontrol->id.index % num_busses_in(chip);
1300 if (out >= ECHO_MAXAUDIOOUTPUTS || in >= ECHO_MAXAUDIOINPUTS)
1301 return -EINVAL;
1302 gain = ucontrol->value.integer.value[0];
1303 if (gain < ECHOGAIN_MINOUT || gain > ECHOGAIN_MAXOUT)
1304 return -EINVAL;
1305 if (chip->monitor_gain[out][in] != gain) {
1306 spin_lock_irq(&chip->lock);
1307 set_monitor_gain(chip, out, in, gain);
1308 update_output_line_level(chip);
1309 spin_unlock_irq(&chip->lock);
1310 changed = 1;
1312 return changed;
1315 static struct snd_kcontrol_new snd_echo_monitor_mixer = {
1316 .name = "Monitor Mixer Volume",
1317 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1318 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1319 .info = snd_echo_mixer_info,
1320 .get = snd_echo_mixer_get,
1321 .put = snd_echo_mixer_put,
1322 .tlv = {.p = db_scale_output_gain},
1325 #endif /* ECHOCARD_HAS_MONITOR */
1329 #ifdef ECHOCARD_HAS_VMIXER
1331 /******************* Vmixer *******************/
1332 static int snd_echo_vmixer_info(struct snd_kcontrol *kcontrol,
1333 struct snd_ctl_elem_info *uinfo)
1335 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1336 uinfo->count = 1;
1337 uinfo->value.integer.min = ECHOGAIN_MINOUT;
1338 uinfo->value.integer.max = ECHOGAIN_MAXOUT;
1339 return 0;
1342 static int snd_echo_vmixer_get(struct snd_kcontrol *kcontrol,
1343 struct snd_ctl_elem_value *ucontrol)
1345 struct echoaudio *chip;
1347 chip = snd_kcontrol_chip(kcontrol);
1348 ucontrol->value.integer.value[0] =
1349 chip->vmixer_gain[ucontrol->id.index / num_pipes_out(chip)]
1350 [ucontrol->id.index % num_pipes_out(chip)];
1351 return 0;
1354 static int snd_echo_vmixer_put(struct snd_kcontrol *kcontrol,
1355 struct snd_ctl_elem_value *ucontrol)
1357 struct echoaudio *chip;
1358 int gain, changed;
1359 short vch, out;
1361 changed = 0;
1362 chip = snd_kcontrol_chip(kcontrol);
1363 out = ucontrol->id.index / num_pipes_out(chip);
1364 vch = ucontrol->id.index % num_pipes_out(chip);
1365 gain = ucontrol->value.integer.value[0];
1366 if (gain < ECHOGAIN_MINOUT || gain > ECHOGAIN_MAXOUT)
1367 return -EINVAL;
1368 if (chip->vmixer_gain[out][vch] != ucontrol->value.integer.value[0]) {
1369 spin_lock_irq(&chip->lock);
1370 set_vmixer_gain(chip, out, vch, ucontrol->value.integer.value[0]);
1371 update_vmixer_level(chip);
1372 spin_unlock_irq(&chip->lock);
1373 changed = 1;
1375 return changed;
1378 static struct snd_kcontrol_new snd_echo_vmixer = {
1379 .name = "VMixer Volume",
1380 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1381 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1382 .info = snd_echo_vmixer_info,
1383 .get = snd_echo_vmixer_get,
1384 .put = snd_echo_vmixer_put,
1385 .tlv = {.p = db_scale_output_gain},
1388 #endif /* ECHOCARD_HAS_VMIXER */
1392 #ifdef ECHOCARD_HAS_DIGITAL_MODE_SWITCH
1394 /******************* Digital mode switch *******************/
1395 static int snd_echo_digital_mode_info(struct snd_kcontrol *kcontrol,
1396 struct snd_ctl_elem_info *uinfo)
1398 static const char * const names[4] = {
1399 "S/PDIF Coaxial", "S/PDIF Optical", "ADAT Optical",
1400 "S/PDIF Cdrom"
1402 struct echoaudio *chip;
1404 chip = snd_kcontrol_chip(kcontrol);
1405 return snd_ctl_enum_info(uinfo, 1, chip->num_digital_modes, names);
1408 static int snd_echo_digital_mode_get(struct snd_kcontrol *kcontrol,
1409 struct snd_ctl_elem_value *ucontrol)
1411 struct echoaudio *chip;
1412 int i, mode;
1414 chip = snd_kcontrol_chip(kcontrol);
1415 mode = chip->digital_mode;
1416 for (i = chip->num_digital_modes - 1; i >= 0; i--)
1417 if (mode == chip->digital_mode_list[i]) {
1418 ucontrol->value.enumerated.item[0] = i;
1419 break;
1421 return 0;
1424 static int snd_echo_digital_mode_put(struct snd_kcontrol *kcontrol,
1425 struct snd_ctl_elem_value *ucontrol)
1427 struct echoaudio *chip;
1428 int changed;
1429 unsigned short emode, dmode;
1431 changed = 0;
1432 chip = snd_kcontrol_chip(kcontrol);
1434 emode = ucontrol->value.enumerated.item[0];
1435 if (emode >= chip->num_digital_modes)
1436 return -EINVAL;
1437 dmode = chip->digital_mode_list[emode];
1439 if (dmode != chip->digital_mode) {
1440 /* mode_mutex is required to make this operation atomic wrt
1441 pcm_digital_*_open() and set_input_clock() functions. */
1442 mutex_lock(&chip->mode_mutex);
1444 /* Do not allow the user to change the digital mode when a pcm
1445 device is open because it also changes the number of channels
1446 and the allowed sample rates */
1447 if (chip->opencount) {
1448 changed = -EAGAIN;
1449 } else {
1450 changed = set_digital_mode(chip, dmode);
1451 /* If we had to change the clock source, report it */
1452 if (changed > 0 && chip->clock_src_ctl) {
1453 snd_ctl_notify(chip->card,
1454 SNDRV_CTL_EVENT_MASK_VALUE,
1455 &chip->clock_src_ctl->id);
1456 dev_dbg(chip->card->dev,
1457 "SDM() =%d\n", changed);
1459 if (changed >= 0)
1460 changed = 1; /* No errors */
1462 mutex_unlock(&chip->mode_mutex);
1464 return changed;
1467 static const struct snd_kcontrol_new snd_echo_digital_mode_switch = {
1468 .name = "Digital mode Switch",
1469 .iface = SNDRV_CTL_ELEM_IFACE_CARD,
1470 .info = snd_echo_digital_mode_info,
1471 .get = snd_echo_digital_mode_get,
1472 .put = snd_echo_digital_mode_put,
1475 #endif /* ECHOCARD_HAS_DIGITAL_MODE_SWITCH */
1479 #ifdef ECHOCARD_HAS_DIGITAL_IO
1481 /******************* S/PDIF mode switch *******************/
1482 static int snd_echo_spdif_mode_info(struct snd_kcontrol *kcontrol,
1483 struct snd_ctl_elem_info *uinfo)
1485 static const char * const names[2] = {"Consumer", "Professional"};
1487 return snd_ctl_enum_info(uinfo, 1, 2, names);
1490 static int snd_echo_spdif_mode_get(struct snd_kcontrol *kcontrol,
1491 struct snd_ctl_elem_value *ucontrol)
1493 struct echoaudio *chip;
1495 chip = snd_kcontrol_chip(kcontrol);
1496 ucontrol->value.enumerated.item[0] = !!chip->professional_spdif;
1497 return 0;
1500 static int snd_echo_spdif_mode_put(struct snd_kcontrol *kcontrol,
1501 struct snd_ctl_elem_value *ucontrol)
1503 struct echoaudio *chip;
1504 int mode;
1506 chip = snd_kcontrol_chip(kcontrol);
1507 mode = !!ucontrol->value.enumerated.item[0];
1508 if (mode != chip->professional_spdif) {
1509 spin_lock_irq(&chip->lock);
1510 set_professional_spdif(chip, mode);
1511 spin_unlock_irq(&chip->lock);
1512 return 1;
1514 return 0;
1517 static const struct snd_kcontrol_new snd_echo_spdif_mode_switch = {
1518 .name = "S/PDIF mode Switch",
1519 .iface = SNDRV_CTL_ELEM_IFACE_CARD,
1520 .info = snd_echo_spdif_mode_info,
1521 .get = snd_echo_spdif_mode_get,
1522 .put = snd_echo_spdif_mode_put,
1525 #endif /* ECHOCARD_HAS_DIGITAL_IO */
1529 #ifdef ECHOCARD_HAS_EXTERNAL_CLOCK
1531 /******************* Select input clock source *******************/
1532 static int snd_echo_clock_source_info(struct snd_kcontrol *kcontrol,
1533 struct snd_ctl_elem_info *uinfo)
1535 static const char * const names[8] = {
1536 "Internal", "Word", "Super", "S/PDIF", "ADAT", "ESync",
1537 "ESync96", "MTC"
1539 struct echoaudio *chip;
1541 chip = snd_kcontrol_chip(kcontrol);
1542 return snd_ctl_enum_info(uinfo, 1, chip->num_clock_sources, names);
1545 static int snd_echo_clock_source_get(struct snd_kcontrol *kcontrol,
1546 struct snd_ctl_elem_value *ucontrol)
1548 struct echoaudio *chip;
1549 int i, clock;
1551 chip = snd_kcontrol_chip(kcontrol);
1552 clock = chip->input_clock;
1554 for (i = 0; i < chip->num_clock_sources; i++)
1555 if (clock == chip->clock_source_list[i])
1556 ucontrol->value.enumerated.item[0] = i;
1558 return 0;
1561 static int snd_echo_clock_source_put(struct snd_kcontrol *kcontrol,
1562 struct snd_ctl_elem_value *ucontrol)
1564 struct echoaudio *chip;
1565 int changed;
1566 unsigned int eclock, dclock;
1568 changed = 0;
1569 chip = snd_kcontrol_chip(kcontrol);
1570 eclock = ucontrol->value.enumerated.item[0];
1571 if (eclock >= chip->input_clock_types)
1572 return -EINVAL;
1573 dclock = chip->clock_source_list[eclock];
1574 if (chip->input_clock != dclock) {
1575 mutex_lock(&chip->mode_mutex);
1576 spin_lock_irq(&chip->lock);
1577 changed = set_input_clock(chip, dclock);
1578 if (!changed)
1579 changed = 1; /* no errors */
1580 spin_unlock_irq(&chip->lock);
1581 mutex_unlock(&chip->mode_mutex);
1584 if (changed < 0)
1585 dev_dbg(chip->card->dev,
1586 "seticlk val%d err 0x%x\n", dclock, changed);
1588 return changed;
1591 static const struct snd_kcontrol_new snd_echo_clock_source_switch = {
1592 .name = "Sample Clock Source",
1593 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
1594 .info = snd_echo_clock_source_info,
1595 .get = snd_echo_clock_source_get,
1596 .put = snd_echo_clock_source_put,
1599 #endif /* ECHOCARD_HAS_EXTERNAL_CLOCK */
1603 #ifdef ECHOCARD_HAS_PHANTOM_POWER
1605 /******************* Phantom power switch *******************/
1606 #define snd_echo_phantom_power_info snd_ctl_boolean_mono_info
1608 static int snd_echo_phantom_power_get(struct snd_kcontrol *kcontrol,
1609 struct snd_ctl_elem_value *ucontrol)
1611 struct echoaudio *chip = snd_kcontrol_chip(kcontrol);
1613 ucontrol->value.integer.value[0] = chip->phantom_power;
1614 return 0;
1617 static int snd_echo_phantom_power_put(struct snd_kcontrol *kcontrol,
1618 struct snd_ctl_elem_value *ucontrol)
1620 struct echoaudio *chip = snd_kcontrol_chip(kcontrol);
1621 int power, changed = 0;
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 */
1631 return changed;
1634 static const struct snd_kcontrol_new snd_echo_phantom_power_switch = {
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,
1642 #endif /* ECHOCARD_HAS_PHANTOM_POWER */
1646 #ifdef ECHOCARD_HAS_DIGITAL_IN_AUTOMUTE
1648 /******************* Digital input automute switch *******************/
1649 #define snd_echo_automute_info snd_ctl_boolean_mono_info
1651 static int snd_echo_automute_get(struct snd_kcontrol *kcontrol,
1652 struct snd_ctl_elem_value *ucontrol)
1654 struct echoaudio *chip = snd_kcontrol_chip(kcontrol);
1656 ucontrol->value.integer.value[0] = chip->digital_in_automute;
1657 return 0;
1660 static int snd_echo_automute_put(struct snd_kcontrol *kcontrol,
1661 struct snd_ctl_elem_value *ucontrol)
1663 struct echoaudio *chip = snd_kcontrol_chip(kcontrol);
1664 int automute, changed = 0;
1666 automute = !!ucontrol->value.integer.value[0];
1667 if (chip->digital_in_automute != automute) {
1668 spin_lock_irq(&chip->lock);
1669 changed = set_input_auto_mute(chip, automute);
1670 spin_unlock_irq(&chip->lock);
1671 if (changed == 0)
1672 changed = 1; /* no errors */
1674 return changed;
1677 static const struct snd_kcontrol_new snd_echo_automute_switch = {
1678 .name = "Digital Capture Switch (automute)",
1679 .iface = SNDRV_CTL_ELEM_IFACE_CARD,
1680 .info = snd_echo_automute_info,
1681 .get = snd_echo_automute_get,
1682 .put = snd_echo_automute_put,
1685 #endif /* ECHOCARD_HAS_DIGITAL_IN_AUTOMUTE */
1689 /******************* VU-meters switch *******************/
1690 #define snd_echo_vumeters_switch_info snd_ctl_boolean_mono_info
1692 static int snd_echo_vumeters_switch_put(struct snd_kcontrol *kcontrol,
1693 struct snd_ctl_elem_value *ucontrol)
1695 struct echoaudio *chip;
1697 chip = snd_kcontrol_chip(kcontrol);
1698 spin_lock_irq(&chip->lock);
1699 set_meters_on(chip, ucontrol->value.integer.value[0]);
1700 spin_unlock_irq(&chip->lock);
1701 return 1;
1704 static const struct snd_kcontrol_new snd_echo_vumeters_switch = {
1705 .name = "VU-meters Switch",
1706 .iface = SNDRV_CTL_ELEM_IFACE_CARD,
1707 .access = SNDRV_CTL_ELEM_ACCESS_WRITE,
1708 .info = snd_echo_vumeters_switch_info,
1709 .put = snd_echo_vumeters_switch_put,
1714 /***** Read VU-meters (input, output, analog and digital together) *****/
1715 static int snd_echo_vumeters_info(struct snd_kcontrol *kcontrol,
1716 struct snd_ctl_elem_info *uinfo)
1718 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1719 uinfo->count = 96;
1720 uinfo->value.integer.min = ECHOGAIN_MINOUT;
1721 uinfo->value.integer.max = 0;
1722 return 0;
1725 static int snd_echo_vumeters_get(struct snd_kcontrol *kcontrol,
1726 struct snd_ctl_elem_value *ucontrol)
1728 struct echoaudio *chip;
1730 chip = snd_kcontrol_chip(kcontrol);
1731 get_audio_meters(chip, ucontrol->value.integer.value);
1732 return 0;
1735 static const struct snd_kcontrol_new snd_echo_vumeters = {
1736 .name = "VU-meters",
1737 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1738 .access = SNDRV_CTL_ELEM_ACCESS_READ |
1739 SNDRV_CTL_ELEM_ACCESS_VOLATILE |
1740 SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1741 .info = snd_echo_vumeters_info,
1742 .get = snd_echo_vumeters_get,
1743 .tlv = {.p = db_scale_output_gain},
1748 /*** Channels info - it exports informations about the number of channels ***/
1749 static int snd_echo_channels_info_info(struct snd_kcontrol *kcontrol,
1750 struct snd_ctl_elem_info *uinfo)
1752 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1753 uinfo->count = 6;
1754 uinfo->value.integer.min = 0;
1755 uinfo->value.integer.max = 1 << ECHO_CLOCK_NUMBER;
1756 return 0;
1759 static int snd_echo_channels_info_get(struct snd_kcontrol *kcontrol,
1760 struct snd_ctl_elem_value *ucontrol)
1762 struct echoaudio *chip;
1763 int detected, clocks, bit, src;
1765 chip = snd_kcontrol_chip(kcontrol);
1766 ucontrol->value.integer.value[0] = num_busses_in(chip);
1767 ucontrol->value.integer.value[1] = num_analog_busses_in(chip);
1768 ucontrol->value.integer.value[2] = num_busses_out(chip);
1769 ucontrol->value.integer.value[3] = num_analog_busses_out(chip);
1770 ucontrol->value.integer.value[4] = num_pipes_out(chip);
1772 /* Compute the bitmask of the currently valid input clocks */
1773 detected = detect_input_clocks(chip);
1774 clocks = 0;
1775 src = chip->num_clock_sources - 1;
1776 for (bit = ECHO_CLOCK_NUMBER - 1; bit >= 0; bit--)
1777 if (detected & (1 << bit))
1778 for (; src >= 0; src--)
1779 if (bit == chip->clock_source_list[src]) {
1780 clocks |= 1 << src;
1781 break;
1783 ucontrol->value.integer.value[5] = clocks;
1785 return 0;
1788 static const struct snd_kcontrol_new snd_echo_channels_info = {
1789 .name = "Channels info",
1790 .iface = SNDRV_CTL_ELEM_IFACE_HWDEP,
1791 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1792 .info = snd_echo_channels_info_info,
1793 .get = snd_echo_channels_info_get,
1799 /******************************************************************************
1800 IRQ Handling
1801 ******************************************************************************/
1802 /* Check if a period has elapsed since last interrupt
1804 * Don't make any updates to state; PCM core handles this with the
1805 * correct locks.
1807 * \return true if a period has elapsed, otherwise false
1809 static bool period_has_elapsed(struct snd_pcm_substream *substream)
1811 struct snd_pcm_runtime *runtime = substream->runtime;
1812 struct audiopipe *pipe = runtime->private_data;
1813 u32 counter, step;
1814 size_t period_bytes;
1816 if (pipe->state != PIPE_STATE_STARTED)
1817 return false;
1819 period_bytes = frames_to_bytes(runtime, runtime->period_size);
1821 counter = le32_to_cpu(*pipe->dma_counter); /* presumed atomic */
1823 step = counter - pipe->last_period; /* handles wrapping */
1824 step -= step % period_bytes; /* acknowledge whole periods only */
1826 if (step == 0)
1827 return false; /* haven't advanced a whole period yet */
1829 pipe->last_period += step; /* used exclusively by us */
1830 return true;
1833 static irqreturn_t snd_echo_interrupt(int irq, void *dev_id)
1835 struct echoaudio *chip = dev_id;
1836 int ss, st;
1838 spin_lock(&chip->lock);
1839 st = service_irq(chip);
1840 if (st < 0) {
1841 spin_unlock(&chip->lock);
1842 return IRQ_NONE;
1844 /* The hardware doesn't tell us which substream caused the irq,
1845 thus we have to check all running substreams. */
1846 for (ss = 0; ss < DSP_MAXPIPES; ss++) {
1847 struct snd_pcm_substream *substream;
1849 substream = chip->substream[ss];
1850 if (substream && period_has_elapsed(substream)) {
1851 spin_unlock(&chip->lock);
1852 snd_pcm_period_elapsed(substream);
1853 spin_lock(&chip->lock);
1856 spin_unlock(&chip->lock);
1858 #ifdef ECHOCARD_HAS_MIDI
1859 if (st > 0 && chip->midi_in) {
1860 snd_rawmidi_receive(chip->midi_in, chip->midi_buffer, st);
1861 dev_dbg(chip->card->dev, "rawmidi_iread=%d\n", st);
1863 #endif
1864 return IRQ_HANDLED;
1870 /******************************************************************************
1871 Module construction / destruction
1872 ******************************************************************************/
1874 static void snd_echo_free(struct snd_card *card)
1876 struct echoaudio *chip = card->private_data;
1878 if (chip->comm_page)
1879 rest_in_peace(chip);
1881 if (chip->irq >= 0)
1882 free_irq(chip->irq, chip);
1884 /* release chip data */
1885 free_firmware_cache(chip);
1888 /* <--snd_echo_probe() */
1889 static int snd_echo_create(struct snd_card *card,
1890 struct pci_dev *pci)
1892 struct echoaudio *chip = card->private_data;
1893 int err;
1894 size_t sz;
1896 pci_write_config_byte(pci, PCI_LATENCY_TIMER, 0xC0);
1898 err = pcim_enable_device(pci);
1899 if (err < 0)
1900 return err;
1901 pci_set_master(pci);
1903 /* Allocate chip if needed */
1904 spin_lock_init(&chip->lock);
1905 chip->card = card;
1906 chip->pci = pci;
1907 chip->irq = -1;
1908 chip->opencount = 0;
1909 mutex_init(&chip->mode_mutex);
1910 chip->can_set_rate = 1;
1912 /* PCI resource allocation */
1913 err = pci_request_regions(pci, ECHOCARD_NAME);
1914 if (err < 0)
1915 return err;
1917 chip->dsp_registers_phys = pci_resource_start(pci, 0);
1918 sz = pci_resource_len(pci, 0);
1919 if (sz > PAGE_SIZE)
1920 sz = PAGE_SIZE; /* We map only the required part */
1922 chip->dsp_registers = devm_ioremap(&pci->dev, chip->dsp_registers_phys, sz);
1923 if (!chip->dsp_registers) {
1924 dev_err(chip->card->dev, "ioremap failed\n");
1925 return -ENOMEM;
1928 if (request_irq(pci->irq, snd_echo_interrupt, IRQF_SHARED,
1929 KBUILD_MODNAME, chip)) {
1930 dev_err(chip->card->dev, "cannot grab irq\n");
1931 return -EBUSY;
1933 chip->irq = pci->irq;
1934 card->sync_irq = chip->irq;
1935 dev_dbg(card->dev, "pci=%p irq=%d subdev=%04x Init hardware...\n",
1936 chip->pci, chip->irq, chip->pci->subsystem_device);
1938 card->private_free = snd_echo_free;
1940 /* Create the DSP comm page - this is the area of memory used for most
1941 of the communication with the DSP, which accesses it via bus mastering */
1942 chip->commpage_dma_buf =
1943 snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV,
1944 sizeof(struct comm_page));
1945 if (!chip->commpage_dma_buf)
1946 return -ENOMEM;
1947 chip->comm_page_phys = chip->commpage_dma_buf->addr;
1948 chip->comm_page = (struct comm_page *)chip->commpage_dma_buf->area;
1950 err = init_hw(chip, chip->pci->device, chip->pci->subsystem_device);
1951 if (err >= 0)
1952 err = set_mixer_defaults(chip);
1953 if (err < 0) {
1954 dev_err(card->dev, "init_hw err=%d\n", err);
1955 return err;
1958 return 0;
1961 /* constructor */
1962 static int __snd_echo_probe(struct pci_dev *pci,
1963 const struct pci_device_id *pci_id)
1965 static int dev;
1966 struct snd_card *card;
1967 struct echoaudio *chip;
1968 char *dsp;
1969 __maybe_unused int i;
1970 int err;
1972 if (dev >= SNDRV_CARDS)
1973 return -ENODEV;
1974 if (!enable[dev]) {
1975 dev++;
1976 return -ENOENT;
1979 i = 0;
1980 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
1981 sizeof(*chip), &card);
1982 if (err < 0)
1983 return err;
1984 chip = card->private_data;
1986 err = snd_echo_create(card, pci);
1987 if (err < 0)
1988 return err;
1990 strcpy(card->driver, "Echo_" ECHOCARD_NAME);
1991 strcpy(card->shortname, chip->card_name);
1993 dsp = "56301";
1994 if (pci_id->device == 0x3410)
1995 dsp = "56361";
1997 sprintf(card->longname, "%s rev.%d (DSP%s) at 0x%lx irq %i",
1998 card->shortname, pci_id->subdevice & 0x000f, dsp,
1999 chip->dsp_registers_phys, chip->irq);
2001 err = snd_echo_new_pcm(chip);
2002 if (err < 0) {
2003 dev_err(chip->card->dev, "new pcm error %d\n", err);
2004 return err;
2007 #ifdef ECHOCARD_HAS_MIDI
2008 if (chip->has_midi) { /* Some Mia's do not have midi */
2009 err = snd_echo_midi_create(card, chip);
2010 if (err < 0) {
2011 dev_err(chip->card->dev, "new midi error %d\n", err);
2012 return err;
2015 #endif
2017 #ifdef ECHOCARD_HAS_VMIXER
2018 snd_echo_vmixer.count = num_pipes_out(chip) * num_busses_out(chip);
2019 err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_vmixer, chip));
2020 if (err < 0)
2021 return err;
2022 #ifdef ECHOCARD_HAS_LINE_OUT_GAIN
2023 err = snd_ctl_add(chip->card,
2024 snd_ctl_new1(&snd_echo_line_output_gain, chip));
2025 if (err < 0)
2026 return err;
2027 #endif
2028 #else /* ECHOCARD_HAS_VMIXER */
2029 err = snd_ctl_add(chip->card,
2030 snd_ctl_new1(&snd_echo_pcm_output_gain, chip));
2031 if (err < 0)
2032 return err;
2033 #endif /* ECHOCARD_HAS_VMIXER */
2035 #ifdef ECHOCARD_HAS_INPUT_GAIN
2036 err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_line_input_gain, chip));
2037 if (err < 0)
2038 return err;
2039 #endif
2041 #ifdef ECHOCARD_HAS_INPUT_NOMINAL_LEVEL
2042 if (!chip->hasnt_input_nominal_level) {
2043 err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_intput_nominal_level, chip));
2044 if (err < 0)
2045 return err;
2047 #endif
2049 #ifdef ECHOCARD_HAS_OUTPUT_NOMINAL_LEVEL
2050 err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_output_nominal_level, chip));
2051 if (err < 0)
2052 return err;
2053 #endif
2055 err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_vumeters_switch, chip));
2056 if (err < 0)
2057 return err;
2059 err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_vumeters, chip));
2060 if (err < 0)
2061 return err;
2063 #ifdef ECHOCARD_HAS_MONITOR
2064 snd_echo_monitor_mixer.count = num_busses_in(chip) * num_busses_out(chip);
2065 err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_monitor_mixer, chip));
2066 if (err < 0)
2067 return err;
2068 #endif
2070 #ifdef ECHOCARD_HAS_DIGITAL_IN_AUTOMUTE
2071 err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_automute_switch, chip));
2072 if (err < 0)
2073 return err;
2074 #endif
2076 err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_channels_info, chip));
2077 if (err < 0)
2078 return err;
2080 #ifdef ECHOCARD_HAS_DIGITAL_MODE_SWITCH
2081 /* Creates a list of available digital modes */
2082 chip->num_digital_modes = 0;
2083 for (i = 0; i < 6; i++)
2084 if (chip->digital_modes & (1 << i))
2085 chip->digital_mode_list[chip->num_digital_modes++] = i;
2087 err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_digital_mode_switch, chip));
2088 if (err < 0)
2089 return err;
2090 #endif /* ECHOCARD_HAS_DIGITAL_MODE_SWITCH */
2092 #ifdef ECHOCARD_HAS_EXTERNAL_CLOCK
2093 /* Creates a list of available clock sources */
2094 chip->num_clock_sources = 0;
2095 for (i = 0; i < 10; i++)
2096 if (chip->input_clock_types & (1 << i))
2097 chip->clock_source_list[chip->num_clock_sources++] = i;
2099 if (chip->num_clock_sources > 1) {
2100 chip->clock_src_ctl = snd_ctl_new1(&snd_echo_clock_source_switch, chip);
2101 err = snd_ctl_add(chip->card, chip->clock_src_ctl);
2102 if (err < 0)
2103 return err;
2105 #endif /* ECHOCARD_HAS_EXTERNAL_CLOCK */
2107 #ifdef ECHOCARD_HAS_DIGITAL_IO
2108 err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_spdif_mode_switch, chip));
2109 if (err < 0)
2110 return err;
2111 #endif
2113 #ifdef ECHOCARD_HAS_PHANTOM_POWER
2114 if (chip->has_phantom_power) {
2115 err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_echo_phantom_power_switch, chip));
2116 if (err < 0)
2117 return err;
2119 #endif
2121 err = snd_card_register(card);
2122 if (err < 0)
2123 return err;
2124 dev_info(card->dev, "Card registered: %s\n", card->longname);
2126 pci_set_drvdata(pci, chip);
2127 dev++;
2128 return 0;
2131 static int snd_echo_probe(struct pci_dev *pci,
2132 const struct pci_device_id *pci_id)
2134 return snd_card_free_on_error(&pci->dev, __snd_echo_probe(pci, pci_id));
2138 static int snd_echo_suspend(struct device *dev)
2140 struct echoaudio *chip = dev_get_drvdata(dev);
2142 #ifdef ECHOCARD_HAS_MIDI
2143 /* This call can sleep */
2144 if (chip->midi_out)
2145 snd_echo_midi_output_trigger(chip->midi_out, 0);
2146 #endif
2147 spin_lock_irq(&chip->lock);
2148 if (wait_handshake(chip)) {
2149 spin_unlock_irq(&chip->lock);
2150 return -EIO;
2152 clear_handshake(chip);
2153 if (send_vector(chip, DSP_VC_GO_COMATOSE) < 0) {
2154 spin_unlock_irq(&chip->lock);
2155 return -EIO;
2157 spin_unlock_irq(&chip->lock);
2159 chip->dsp_code = NULL;
2160 free_irq(chip->irq, chip);
2161 chip->irq = -1;
2162 chip->card->sync_irq = -1;
2163 return 0;
2168 static int snd_echo_resume(struct device *dev)
2170 struct pci_dev *pci = to_pci_dev(dev);
2171 struct echoaudio *chip = dev_get_drvdata(dev);
2172 struct comm_page *commpage, *commpage_bak;
2173 u32 pipe_alloc_mask;
2174 int err;
2176 commpage = chip->comm_page;
2177 commpage_bak = kmemdup(commpage, sizeof(*commpage), GFP_KERNEL);
2178 if (commpage_bak == NULL)
2179 return -ENOMEM;
2181 err = init_hw(chip, chip->pci->device, chip->pci->subsystem_device);
2182 if (err < 0) {
2183 kfree(commpage_bak);
2184 dev_err(dev, "resume init_hw err=%d\n", err);
2185 return err;
2188 /* Temporarily set chip->pipe_alloc_mask=0 otherwise
2189 * restore_dsp_settings() fails.
2191 pipe_alloc_mask = chip->pipe_alloc_mask;
2192 chip->pipe_alloc_mask = 0;
2193 err = restore_dsp_rettings(chip);
2194 chip->pipe_alloc_mask = pipe_alloc_mask;
2195 if (err < 0) {
2196 kfree(commpage_bak);
2197 return err;
2200 memcpy(&commpage->audio_format, &commpage_bak->audio_format,
2201 sizeof(commpage->audio_format));
2202 memcpy(&commpage->sglist_addr, &commpage_bak->sglist_addr,
2203 sizeof(commpage->sglist_addr));
2204 memcpy(&commpage->midi_output, &commpage_bak->midi_output,
2205 sizeof(commpage->midi_output));
2206 kfree(commpage_bak);
2208 if (request_irq(pci->irq, snd_echo_interrupt, IRQF_SHARED,
2209 KBUILD_MODNAME, chip)) {
2210 dev_err(chip->card->dev, "cannot grab irq\n");
2211 return -EBUSY;
2213 chip->irq = pci->irq;
2214 chip->card->sync_irq = chip->irq;
2215 dev_dbg(dev, "resume irq=%d\n", chip->irq);
2217 #ifdef ECHOCARD_HAS_MIDI
2218 if (chip->midi_input_enabled)
2219 enable_midi_input(chip, true);
2220 if (chip->midi_out)
2221 snd_echo_midi_output_trigger(chip->midi_out, 1);
2222 #endif
2224 return 0;
2227 static DEFINE_SIMPLE_DEV_PM_OPS(snd_echo_pm, snd_echo_suspend, snd_echo_resume);
2229 /******************************************************************************
2230 Everything starts and ends here
2231 ******************************************************************************/
2233 /* pci_driver definition */
2234 static struct pci_driver echo_driver = {
2235 .name = KBUILD_MODNAME,
2236 .id_table = snd_echo_ids,
2237 .probe = snd_echo_probe,
2238 .driver = {
2239 .pm = &snd_echo_pm,
2243 module_pci_driver(echo_driver);