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