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