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