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