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