1 // SPDX-License-Identifier: GPL-2.0-only
3 * ALSA driver for Echoaudio soundcards.
4 * Copyright (C) 2003-2004 Giuliano Pochini <pochini@shiny.it>
7 #include <linux/module.h>
9 MODULE_AUTHOR("Giuliano Pochini <pochini@shiny.it>");
10 MODULE_LICENSE("GPL v2");
11 MODULE_DESCRIPTION("Echoaudio " ECHOCARD_NAME
" soundcards driver");
12 MODULE_SUPPORTED_DEVICE("{{Echoaudio," ECHOCARD_NAME
"}}");
13 MODULE_DEVICE_TABLE(pci
, snd_echo_ids
);
15 static int index
[SNDRV_CARDS
] = SNDRV_DEFAULT_IDX
;
16 static char *id
[SNDRV_CARDS
] = SNDRV_DEFAULT_STR
;
17 static bool enable
[SNDRV_CARDS
] = SNDRV_DEFAULT_ENABLE_PNP
;
19 module_param_array(index
, int, NULL
, 0444);
20 MODULE_PARM_DESC(index
, "Index value for " ECHOCARD_NAME
" soundcard.");
21 module_param_array(id
, charp
, NULL
, 0444);
22 MODULE_PARM_DESC(id
, "ID string for " ECHOCARD_NAME
" soundcard.");
23 module_param_array(enable
, bool, NULL
, 0444);
24 MODULE_PARM_DESC(enable
, "Enable " ECHOCARD_NAME
" soundcard.");
26 static unsigned int channels_list
[10] = {1, 2, 4, 6, 8, 10, 12, 14, 16, 999999};
27 static const DECLARE_TLV_DB_SCALE(db_scale_output_gain
, -12800, 100, 1);
31 static int get_firmware(const struct firmware
**fw_entry
,
32 struct echoaudio
*chip
, const short fw_index
)
37 #ifdef CONFIG_PM_SLEEP
38 if (chip
->fw_cache
[fw_index
]) {
39 dev_dbg(chip
->card
->dev
,
40 "firmware requested: %s is cached\n",
41 card_fw
[fw_index
].data
);
42 *fw_entry
= chip
->fw_cache
[fw_index
];
47 dev_dbg(chip
->card
->dev
,
48 "firmware requested: %s\n", card_fw
[fw_index
].data
);
49 snprintf(name
, sizeof(name
), "ea/%s", card_fw
[fw_index
].data
);
50 err
= request_firmware(fw_entry
, name
, &chip
->pci
->dev
);
52 dev_err(chip
->card
->dev
,
53 "get_firmware(): Firmware not available (%d)\n", err
);
54 #ifdef CONFIG_PM_SLEEP
56 chip
->fw_cache
[fw_index
] = *fw_entry
;
63 static void free_firmware(const struct firmware
*fw_entry
,
64 struct echoaudio
*chip
)
66 #ifdef CONFIG_PM_SLEEP
67 dev_dbg(chip
->card
->dev
, "firmware not released (kept in cache)\n");
69 release_firmware(fw_entry
);
75 static void free_firmware_cache(struct echoaudio
*chip
)
77 #ifdef CONFIG_PM_SLEEP
80 for (i
= 0; i
< 8 ; i
++)
81 if (chip
->fw_cache
[i
]) {
82 release_firmware(chip
->fw_cache
[i
]);
83 dev_dbg(chip
->card
->dev
, "release_firmware(%d)\n", i
);
91 /******************************************************************************
93 ******************************************************************************/
95 static void audiopipe_free(struct snd_pcm_runtime
*runtime
)
97 struct audiopipe
*pipe
= runtime
->private_data
;
99 if (pipe
->sgpage
.area
)
100 snd_dma_free_pages(&pipe
->sgpage
);
106 static int hw_rule_capture_format_by_channels(struct snd_pcm_hw_params
*params
,
107 struct snd_pcm_hw_rule
*rule
)
109 struct snd_interval
*c
= hw_param_interval(params
,
110 SNDRV_PCM_HW_PARAM_CHANNELS
);
111 struct snd_mask
*f
= hw_param_mask(params
, SNDRV_PCM_HW_PARAM_FORMAT
);
116 #ifndef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
117 /* >=2 channels cannot be S32_BE */
119 fmt
.bits
[0] &= ~SNDRV_PCM_FMTBIT_S32_BE
;
120 return snd_mask_refine(f
, &fmt
);
123 /* > 2 channels cannot be U8 and S32_BE */
125 fmt
.bits
[0] &= ~(SNDRV_PCM_FMTBIT_U8
| SNDRV_PCM_FMTBIT_S32_BE
);
126 return snd_mask_refine(f
, &fmt
);
128 /* Mono is ok with any format */
134 static int hw_rule_capture_channels_by_format(struct snd_pcm_hw_params
*params
,
135 struct snd_pcm_hw_rule
*rule
)
137 struct snd_interval
*c
= hw_param_interval(params
,
138 SNDRV_PCM_HW_PARAM_CHANNELS
);
139 struct snd_mask
*f
= hw_param_mask(params
, SNDRV_PCM_HW_PARAM_FORMAT
);
140 struct snd_interval ch
;
142 snd_interval_any(&ch
);
144 /* S32_BE is mono (and stereo) only */
145 if (f
->bits
[0] == SNDRV_PCM_FMTBIT_S32_BE
) {
147 #ifdef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
153 return snd_interval_refine(c
, &ch
);
155 /* U8 can be only mono or stereo */
156 if (f
->bits
[0] == SNDRV_PCM_FMTBIT_U8
) {
160 return snd_interval_refine(c
, &ch
);
162 /* S16_LE, S24_3LE and S32_LE support any number of channels. */
168 static int hw_rule_playback_format_by_channels(struct snd_pcm_hw_params
*params
,
169 struct snd_pcm_hw_rule
*rule
)
171 struct snd_interval
*c
= hw_param_interval(params
,
172 SNDRV_PCM_HW_PARAM_CHANNELS
);
173 struct snd_mask
*f
= hw_param_mask(params
, SNDRV_PCM_HW_PARAM_FORMAT
);
178 fmask
= fmt
.bits
[0] + ((u64
)fmt
.bits
[1] << 32);
180 /* >2 channels must be S16_LE, S24_3LE or S32_LE */
182 fmask
&= SNDRV_PCM_FMTBIT_S16_LE
|
183 SNDRV_PCM_FMTBIT_S24_3LE
|
184 SNDRV_PCM_FMTBIT_S32_LE
;
185 /* 1 channel must be S32_BE or S32_LE */
186 } else if (c
->max
== 1)
187 fmask
&= SNDRV_PCM_FMTBIT_S32_LE
| SNDRV_PCM_FMTBIT_S32_BE
;
188 #ifndef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
189 /* 2 channels cannot be S32_BE */
190 else if (c
->min
== 2 && c
->max
== 2)
191 fmask
&= ~SNDRV_PCM_FMTBIT_S32_BE
;
196 fmt
.bits
[0] &= (u32
)fmask
;
197 fmt
.bits
[1] &= (u32
)(fmask
>> 32);
198 return snd_mask_refine(f
, &fmt
);
203 static int hw_rule_playback_channels_by_format(struct snd_pcm_hw_params
*params
,
204 struct snd_pcm_hw_rule
*rule
)
206 struct snd_interval
*c
= hw_param_interval(params
,
207 SNDRV_PCM_HW_PARAM_CHANNELS
);
208 struct snd_mask
*f
= hw_param_mask(params
, SNDRV_PCM_HW_PARAM_FORMAT
);
209 struct snd_interval ch
;
212 snd_interval_any(&ch
);
214 fmask
= f
->bits
[0] + ((u64
)f
->bits
[1] << 32);
216 /* S32_BE is mono (and stereo) only */
217 if (fmask
== SNDRV_PCM_FMTBIT_S32_BE
) {
219 #ifdef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
224 /* U8 is stereo only */
225 } else if (fmask
== SNDRV_PCM_FMTBIT_U8
)
227 /* S16_LE and S24_3LE must be at least stereo */
228 else if (!(fmask
& ~(SNDRV_PCM_FMTBIT_S16_LE
|
229 SNDRV_PCM_FMTBIT_S24_3LE
)))
234 return snd_interval_refine(c
, &ch
);
239 /* Since the sample rate is a global setting, do allow the user to change the
240 sample rate only if there is only one pcm device open. */
241 static int hw_rule_sample_rate(struct snd_pcm_hw_params
*params
,
242 struct snd_pcm_hw_rule
*rule
)
244 struct snd_interval
*rate
= hw_param_interval(params
,
245 SNDRV_PCM_HW_PARAM_RATE
);
246 struct echoaudio
*chip
= rule
->private;
247 struct snd_interval fixed
;
249 if (!chip
->can_set_rate
) {
250 snd_interval_any(&fixed
);
251 fixed
.min
= fixed
.max
= chip
->sample_rate
;
252 return snd_interval_refine(rate
, &fixed
);
258 static int pcm_open(struct snd_pcm_substream
*substream
,
259 signed char max_channels
)
261 struct echoaudio
*chip
;
262 struct snd_pcm_runtime
*runtime
;
263 struct audiopipe
*pipe
;
266 if (max_channels
<= 0)
269 chip
= snd_pcm_substream_chip(substream
);
270 runtime
= substream
->runtime
;
272 pipe
= kzalloc(sizeof(struct audiopipe
), GFP_KERNEL
);
275 pipe
->index
= -1; /* Not configured yet */
277 /* Set up hw capabilities and contraints */
278 memcpy(&pipe
->hw
, &pcm_hardware_skel
, sizeof(struct snd_pcm_hardware
));
279 dev_dbg(chip
->card
->dev
, "max_channels=%d\n", max_channels
);
280 pipe
->constr
.list
= channels_list
;
281 pipe
->constr
.mask
= 0;
282 for (i
= 0; channels_list
[i
] <= max_channels
; i
++);
283 pipe
->constr
.count
= i
;
284 if (pipe
->hw
.channels_max
> max_channels
)
285 pipe
->hw
.channels_max
= max_channels
;
286 if (chip
->digital_mode
== DIGITAL_MODE_ADAT
) {
287 pipe
->hw
.rate_max
= 48000;
288 pipe
->hw
.rates
&= SNDRV_PCM_RATE_8000_48000
;
291 runtime
->hw
= pipe
->hw
;
292 runtime
->private_data
= pipe
;
293 runtime
->private_free
= audiopipe_free
;
294 snd_pcm_set_sync(substream
);
296 /* Only mono and any even number of channels are allowed */
297 if ((err
= snd_pcm_hw_constraint_list(runtime
, 0,
298 SNDRV_PCM_HW_PARAM_CHANNELS
,
302 /* All periods should have the same size */
303 if ((err
= snd_pcm_hw_constraint_integer(runtime
,
304 SNDRV_PCM_HW_PARAM_PERIODS
)) < 0)
307 /* The hw accesses memory in chunks 32 frames long and they should be
308 32-bytes-aligned. It's not a requirement, but it seems that IRQs are
309 generated with a resolution of 32 frames. Thus we need the following */
310 if ((err
= snd_pcm_hw_constraint_step(runtime
, 0,
311 SNDRV_PCM_HW_PARAM_PERIOD_SIZE
,
314 if ((err
= snd_pcm_hw_constraint_step(runtime
, 0,
315 SNDRV_PCM_HW_PARAM_BUFFER_SIZE
,
319 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
320 SNDRV_PCM_HW_PARAM_RATE
,
321 hw_rule_sample_rate
, chip
,
322 SNDRV_PCM_HW_PARAM_RATE
, -1)) < 0)
325 /* Finally allocate a page for the scatter-gather list */
326 if ((err
= snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV
,
327 snd_dma_pci_data(chip
->pci
),
328 PAGE_SIZE
, &pipe
->sgpage
)) < 0) {
329 dev_err(chip
->card
->dev
, "s-g list allocation failed\n");
338 static int pcm_analog_in_open(struct snd_pcm_substream
*substream
)
340 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
343 if ((err
= pcm_open(substream
, num_analog_busses_in(chip
) -
344 substream
->number
)) < 0)
346 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
347 SNDRV_PCM_HW_PARAM_CHANNELS
,
348 hw_rule_capture_channels_by_format
, NULL
,
349 SNDRV_PCM_HW_PARAM_FORMAT
, -1)) < 0)
351 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
352 SNDRV_PCM_HW_PARAM_FORMAT
,
353 hw_rule_capture_format_by_channels
, NULL
,
354 SNDRV_PCM_HW_PARAM_CHANNELS
, -1)) < 0)
356 atomic_inc(&chip
->opencount
);
357 if (atomic_read(&chip
->opencount
) > 1 && chip
->rate_set
)
358 chip
->can_set_rate
=0;
359 dev_dbg(chip
->card
->dev
, "pcm_analog_in_open cs=%d oc=%d r=%d\n",
360 chip
->can_set_rate
, atomic_read(&chip
->opencount
),
367 static int pcm_analog_out_open(struct snd_pcm_substream
*substream
)
369 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
370 int max_channels
, err
;
372 #ifdef ECHOCARD_HAS_VMIXER
373 max_channels
= num_pipes_out(chip
);
375 max_channels
= num_analog_busses_out(chip
);
377 if ((err
= pcm_open(substream
, max_channels
- substream
->number
)) < 0)
379 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
380 SNDRV_PCM_HW_PARAM_CHANNELS
,
381 hw_rule_playback_channels_by_format
,
383 SNDRV_PCM_HW_PARAM_FORMAT
, -1)) < 0)
385 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
386 SNDRV_PCM_HW_PARAM_FORMAT
,
387 hw_rule_playback_format_by_channels
,
389 SNDRV_PCM_HW_PARAM_CHANNELS
, -1)) < 0)
391 atomic_inc(&chip
->opencount
);
392 if (atomic_read(&chip
->opencount
) > 1 && chip
->rate_set
)
393 chip
->can_set_rate
=0;
394 dev_dbg(chip
->card
->dev
, "pcm_analog_out_open cs=%d oc=%d r=%d\n",
395 chip
->can_set_rate
, atomic_read(&chip
->opencount
),
402 #ifdef ECHOCARD_HAS_DIGITAL_IO
404 static int pcm_digital_in_open(struct snd_pcm_substream
*substream
)
406 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
407 int err
, max_channels
;
409 max_channels
= num_digital_busses_in(chip
) - substream
->number
;
410 mutex_lock(&chip
->mode_mutex
);
411 if (chip
->digital_mode
== DIGITAL_MODE_ADAT
)
412 err
= pcm_open(substream
, max_channels
);
413 else /* If the card has ADAT, subtract the 6 channels
414 * that S/PDIF doesn't have
416 err
= pcm_open(substream
, max_channels
- ECHOCARD_HAS_ADAT
);
421 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
422 SNDRV_PCM_HW_PARAM_CHANNELS
,
423 hw_rule_capture_channels_by_format
, NULL
,
424 SNDRV_PCM_HW_PARAM_FORMAT
, -1)) < 0)
426 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
427 SNDRV_PCM_HW_PARAM_FORMAT
,
428 hw_rule_capture_format_by_channels
, NULL
,
429 SNDRV_PCM_HW_PARAM_CHANNELS
, -1)) < 0)
432 atomic_inc(&chip
->opencount
);
433 if (atomic_read(&chip
->opencount
) > 1 && chip
->rate_set
)
434 chip
->can_set_rate
=0;
437 mutex_unlock(&chip
->mode_mutex
);
443 #ifndef ECHOCARD_HAS_VMIXER /* See the note in snd_echo_new_pcm() */
445 static int pcm_digital_out_open(struct snd_pcm_substream
*substream
)
447 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
448 int err
, max_channels
;
450 max_channels
= num_digital_busses_out(chip
) - substream
->number
;
451 mutex_lock(&chip
->mode_mutex
);
452 if (chip
->digital_mode
== DIGITAL_MODE_ADAT
)
453 err
= pcm_open(substream
, max_channels
);
454 else /* If the card has ADAT, subtract the 6 channels
455 * that S/PDIF doesn't have
457 err
= pcm_open(substream
, max_channels
- ECHOCARD_HAS_ADAT
);
462 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
463 SNDRV_PCM_HW_PARAM_CHANNELS
,
464 hw_rule_playback_channels_by_format
,
465 NULL
, SNDRV_PCM_HW_PARAM_FORMAT
,
468 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
469 SNDRV_PCM_HW_PARAM_FORMAT
,
470 hw_rule_playback_format_by_channels
,
471 NULL
, SNDRV_PCM_HW_PARAM_CHANNELS
,
474 atomic_inc(&chip
->opencount
);
475 if (atomic_read(&chip
->opencount
) > 1 && chip
->rate_set
)
476 chip
->can_set_rate
=0;
478 mutex_unlock(&chip
->mode_mutex
);
482 #endif /* !ECHOCARD_HAS_VMIXER */
484 #endif /* ECHOCARD_HAS_DIGITAL_IO */
488 static int pcm_close(struct snd_pcm_substream
*substream
)
490 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
493 /* Nothing to do here. Audio is already off and pipe will be
494 * freed by its callback
497 atomic_dec(&chip
->opencount
);
498 oc
= atomic_read(&chip
->opencount
);
499 dev_dbg(chip
->card
->dev
, "pcm_close oc=%d cs=%d rs=%d\n", oc
,
500 chip
->can_set_rate
, chip
->rate_set
);
502 chip
->can_set_rate
= 1;
505 dev_dbg(chip
->card
->dev
, "pcm_close2 oc=%d cs=%d rs=%d\n", oc
,
506 chip
->can_set_rate
, chip
->rate_set
);
513 /* Channel allocation and scatter-gather list setup */
514 static int init_engine(struct snd_pcm_substream
*substream
,
515 struct snd_pcm_hw_params
*hw_params
,
516 int pipe_index
, int interleave
)
518 struct echoaudio
*chip
;
519 int err
, per
, rest
, page
, edge
, offs
;
520 struct audiopipe
*pipe
;
522 chip
= snd_pcm_substream_chip(substream
);
523 pipe
= (struct audiopipe
*) substream
->runtime
->private_data
;
525 /* Sets up che hardware. If it's already initialized, reset and
526 * redo with the new parameters
528 spin_lock_irq(&chip
->lock
);
529 if (pipe
->index
>= 0) {
530 dev_dbg(chip
->card
->dev
, "hwp_ie free(%d)\n", pipe
->index
);
531 err
= free_pipes(chip
, pipe
);
533 chip
->substream
[pipe
->index
] = NULL
;
536 err
= allocate_pipes(chip
, pipe
, pipe_index
, interleave
);
538 spin_unlock_irq(&chip
->lock
);
539 dev_err(chip
->card
->dev
, "allocate_pipes(%d) err=%d\n",
543 spin_unlock_irq(&chip
->lock
);
544 dev_dbg(chip
->card
->dev
, "allocate_pipes()=%d\n", pipe_index
);
546 dev_dbg(chip
->card
->dev
,
547 "pcm_hw_params (bufsize=%dB periods=%d persize=%dB)\n",
548 params_buffer_bytes(hw_params
), params_periods(hw_params
),
549 params_period_bytes(hw_params
));
550 err
= snd_pcm_lib_malloc_pages(substream
,
551 params_buffer_bytes(hw_params
));
553 dev_err(chip
->card
->dev
, "malloc_pages err=%d\n", err
);
554 spin_lock_irq(&chip
->lock
);
555 free_pipes(chip
, pipe
);
556 spin_unlock_irq(&chip
->lock
);
561 sglist_init(chip
, pipe
);
563 for (offs
= page
= per
= 0; offs
< params_buffer_bytes(hw_params
);
565 rest
= params_period_bytes(hw_params
);
566 if (offs
+ rest
> params_buffer_bytes(hw_params
))
567 rest
= params_buffer_bytes(hw_params
) - offs
;
570 addr
= snd_pcm_sgbuf_get_addr(substream
, offs
);
571 if (rest
<= edge
- offs
) {
572 sglist_add_mapping(chip
, pipe
, addr
, rest
);
573 sglist_add_irq(chip
, pipe
);
577 sglist_add_mapping(chip
, pipe
, addr
,
589 /* Close the ring buffer */
590 sglist_wrap(chip
, pipe
);
592 /* This stuff is used by the irq handler, so it must be
593 * initialized before chip->substream
595 chip
->last_period
[pipe_index
] = 0;
596 pipe
->last_counter
= 0;
599 chip
->substream
[pipe_index
] = substream
;
601 spin_lock_irq(&chip
->lock
);
602 set_sample_rate(chip
, hw_params
->rate_num
/ hw_params
->rate_den
);
603 spin_unlock_irq(&chip
->lock
);
609 static int pcm_analog_in_hw_params(struct snd_pcm_substream
*substream
,
610 struct snd_pcm_hw_params
*hw_params
)
612 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
614 return init_engine(substream
, hw_params
, px_analog_in(chip
) +
615 substream
->number
, params_channels(hw_params
));
620 static int pcm_analog_out_hw_params(struct snd_pcm_substream
*substream
,
621 struct snd_pcm_hw_params
*hw_params
)
623 return init_engine(substream
, hw_params
, substream
->number
,
624 params_channels(hw_params
));
629 #ifdef ECHOCARD_HAS_DIGITAL_IO
631 static int pcm_digital_in_hw_params(struct snd_pcm_substream
*substream
,
632 struct snd_pcm_hw_params
*hw_params
)
634 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
636 return init_engine(substream
, hw_params
, px_digital_in(chip
) +
637 substream
->number
, params_channels(hw_params
));
642 #ifndef ECHOCARD_HAS_VMIXER /* See the note in snd_echo_new_pcm() */
643 static int pcm_digital_out_hw_params(struct snd_pcm_substream
*substream
,
644 struct snd_pcm_hw_params
*hw_params
)
646 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
648 return init_engine(substream
, hw_params
, px_digital_out(chip
) +
649 substream
->number
, params_channels(hw_params
));
651 #endif /* !ECHOCARD_HAS_VMIXER */
653 #endif /* ECHOCARD_HAS_DIGITAL_IO */
657 static int pcm_hw_free(struct snd_pcm_substream
*substream
)
659 struct echoaudio
*chip
;
660 struct audiopipe
*pipe
;
662 chip
= snd_pcm_substream_chip(substream
);
663 pipe
= (struct audiopipe
*) substream
->runtime
->private_data
;
665 spin_lock_irq(&chip
->lock
);
666 if (pipe
->index
>= 0) {
667 dev_dbg(chip
->card
->dev
, "pcm_hw_free(%d)\n", pipe
->index
);
668 free_pipes(chip
, pipe
);
669 chip
->substream
[pipe
->index
] = NULL
;
672 spin_unlock_irq(&chip
->lock
);
674 snd_pcm_lib_free_pages(substream
);
680 static int pcm_prepare(struct snd_pcm_substream
*substream
)
682 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
683 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
684 struct audioformat format
;
685 int pipe_index
= ((struct audiopipe
*)runtime
->private_data
)->index
;
687 dev_dbg(chip
->card
->dev
, "Prepare rate=%d format=%d channels=%d\n",
688 runtime
->rate
, runtime
->format
, runtime
->channels
);
689 format
.interleave
= runtime
->channels
;
690 format
.data_are_bigendian
= 0;
691 format
.mono_to_stereo
= 0;
692 switch (runtime
->format
) {
693 case SNDRV_PCM_FORMAT_U8
:
694 format
.bits_per_sample
= 8;
696 case SNDRV_PCM_FORMAT_S16_LE
:
697 format
.bits_per_sample
= 16;
699 case SNDRV_PCM_FORMAT_S24_3LE
:
700 format
.bits_per_sample
= 24;
702 case SNDRV_PCM_FORMAT_S32_BE
:
703 format
.data_are_bigendian
= 1;
705 case SNDRV_PCM_FORMAT_S32_LE
:
706 format
.bits_per_sample
= 32;
709 dev_err(chip
->card
->dev
,
710 "Prepare error: unsupported format %d\n",
715 if (snd_BUG_ON(pipe_index
>= px_num(chip
)))
717 if (snd_BUG_ON(!is_pipe_allocated(chip
, pipe_index
)))
719 set_audio_format(chip
, pipe_index
, &format
);
725 static int pcm_trigger(struct snd_pcm_substream
*substream
, int cmd
)
727 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
728 struct audiopipe
*pipe
;
731 struct snd_pcm_substream
*s
;
733 snd_pcm_group_for_each_entry(s
, substream
) {
734 for (i
= 0; i
< DSP_MAXPIPES
; i
++) {
735 if (s
== chip
->substream
[i
]) {
736 channelmask
|= 1 << i
;
737 snd_pcm_trigger_done(s
, substream
);
742 spin_lock(&chip
->lock
);
744 case SNDRV_PCM_TRIGGER_RESUME
:
745 case SNDRV_PCM_TRIGGER_START
:
746 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
747 for (i
= 0; i
< DSP_MAXPIPES
; i
++) {
748 if (channelmask
& (1 << i
)) {
749 pipe
= chip
->substream
[i
]->runtime
->private_data
;
750 switch (pipe
->state
) {
751 case PIPE_STATE_STOPPED
:
752 chip
->last_period
[i
] = 0;
753 pipe
->last_counter
= 0;
755 *pipe
->dma_counter
= 0;
757 case PIPE_STATE_PAUSED
:
758 pipe
->state
= PIPE_STATE_STARTED
;
760 case PIPE_STATE_STARTED
:
765 err
= start_transport(chip
, channelmask
,
766 chip
->pipe_cyclic_mask
);
768 case SNDRV_PCM_TRIGGER_SUSPEND
:
769 case SNDRV_PCM_TRIGGER_STOP
:
770 for (i
= 0; i
< DSP_MAXPIPES
; i
++) {
771 if (channelmask
& (1 << i
)) {
772 pipe
= chip
->substream
[i
]->runtime
->private_data
;
773 pipe
->state
= PIPE_STATE_STOPPED
;
776 err
= stop_transport(chip
, channelmask
);
778 case SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
779 for (i
= 0; i
< DSP_MAXPIPES
; i
++) {
780 if (channelmask
& (1 << i
)) {
781 pipe
= chip
->substream
[i
]->runtime
->private_data
;
782 pipe
->state
= PIPE_STATE_PAUSED
;
785 err
= pause_transport(chip
, channelmask
);
790 spin_unlock(&chip
->lock
);
796 static snd_pcm_uframes_t
pcm_pointer(struct snd_pcm_substream
*substream
)
798 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
799 struct audiopipe
*pipe
= runtime
->private_data
;
800 size_t cnt
, bufsize
, pos
;
802 cnt
= le32_to_cpu(*pipe
->dma_counter
);
803 pipe
->position
+= cnt
- pipe
->last_counter
;
804 pipe
->last_counter
= cnt
;
805 bufsize
= substream
->runtime
->buffer_size
;
806 pos
= bytes_to_frames(substream
->runtime
, pipe
->position
);
808 while (pos
>= bufsize
) {
809 pipe
->position
-= frames_to_bytes(substream
->runtime
, bufsize
);
817 /* pcm *_ops structures */
818 static const struct snd_pcm_ops analog_playback_ops
= {
819 .open
= pcm_analog_out_open
,
821 .ioctl
= snd_pcm_lib_ioctl
,
822 .hw_params
= pcm_analog_out_hw_params
,
823 .hw_free
= pcm_hw_free
,
824 .prepare
= pcm_prepare
,
825 .trigger
= pcm_trigger
,
826 .pointer
= pcm_pointer
,
827 .page
= snd_pcm_sgbuf_ops_page
,
829 static const struct snd_pcm_ops analog_capture_ops
= {
830 .open
= pcm_analog_in_open
,
832 .ioctl
= snd_pcm_lib_ioctl
,
833 .hw_params
= pcm_analog_in_hw_params
,
834 .hw_free
= pcm_hw_free
,
835 .prepare
= pcm_prepare
,
836 .trigger
= pcm_trigger
,
837 .pointer
= pcm_pointer
,
838 .page
= snd_pcm_sgbuf_ops_page
,
840 #ifdef ECHOCARD_HAS_DIGITAL_IO
841 #ifndef ECHOCARD_HAS_VMIXER
842 static const struct snd_pcm_ops digital_playback_ops
= {
843 .open
= pcm_digital_out_open
,
845 .ioctl
= snd_pcm_lib_ioctl
,
846 .hw_params
= pcm_digital_out_hw_params
,
847 .hw_free
= pcm_hw_free
,
848 .prepare
= pcm_prepare
,
849 .trigger
= pcm_trigger
,
850 .pointer
= pcm_pointer
,
851 .page
= snd_pcm_sgbuf_ops_page
,
853 #endif /* !ECHOCARD_HAS_VMIXER */
854 static const struct snd_pcm_ops digital_capture_ops
= {
855 .open
= pcm_digital_in_open
,
857 .ioctl
= snd_pcm_lib_ioctl
,
858 .hw_params
= pcm_digital_in_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
,
865 #endif /* ECHOCARD_HAS_DIGITAL_IO */
869 /* Preallocate memory only for the first substream because it's the most
872 static int snd_echo_preallocate_pages(struct snd_pcm
*pcm
, struct device
*dev
)
874 struct snd_pcm_substream
*ss
;
877 for (stream
= 0; stream
< 2; stream
++)
878 for (ss
= pcm
->streams
[stream
].substream
; ss
; ss
= ss
->next
)
879 snd_pcm_lib_preallocate_pages(ss
, SNDRV_DMA_TYPE_DEV_SG
,
881 ss
->number
? 0 : 128<<10,
889 /*<--snd_echo_probe() */
890 static int snd_echo_new_pcm(struct echoaudio
*chip
)
895 #ifdef ECHOCARD_HAS_VMIXER
896 /* This card has a Vmixer, that is there is no direct mapping from PCM
897 streams to physical outputs. The user can mix the streams as he wishes
898 via control interface and it's possible to send any stream to any
899 output, thus it makes no sense to keep analog and digital outputs
902 /* PCM#0 Virtual outputs and analog inputs */
903 if ((err
= snd_pcm_new(chip
->card
, "PCM", 0, num_pipes_out(chip
),
904 num_analog_busses_in(chip
), &pcm
)) < 0)
906 pcm
->private_data
= chip
;
907 chip
->analog_pcm
= pcm
;
908 strcpy(pcm
->name
, chip
->card
->shortname
);
909 snd_pcm_set_ops(pcm
, SNDRV_PCM_STREAM_PLAYBACK
, &analog_playback_ops
);
910 snd_pcm_set_ops(pcm
, SNDRV_PCM_STREAM_CAPTURE
, &analog_capture_ops
);
911 if ((err
= snd_echo_preallocate_pages(pcm
, snd_dma_pci_data(chip
->pci
))) < 0)
914 #ifdef ECHOCARD_HAS_DIGITAL_IO
915 /* PCM#1 Digital inputs, no outputs */
916 if ((err
= snd_pcm_new(chip
->card
, "Digital PCM", 1, 0,
917 num_digital_busses_in(chip
), &pcm
)) < 0)
919 pcm
->private_data
= chip
;
920 chip
->digital_pcm
= pcm
;
921 strcpy(pcm
->name
, chip
->card
->shortname
);
922 snd_pcm_set_ops(pcm
, SNDRV_PCM_STREAM_CAPTURE
, &digital_capture_ops
);
923 if ((err
= snd_echo_preallocate_pages(pcm
, snd_dma_pci_data(chip
->pci
))) < 0)
925 #endif /* ECHOCARD_HAS_DIGITAL_IO */
927 #else /* ECHOCARD_HAS_VMIXER */
929 /* The card can manage substreams formed by analog and digital channels
930 at the same time, but I prefer to keep analog and digital channels
931 separated, because that mixed thing is confusing and useless. So we
932 register two PCM devices: */
934 /* PCM#0 Analog i/o */
935 if ((err
= snd_pcm_new(chip
->card
, "Analog PCM", 0,
936 num_analog_busses_out(chip
),
937 num_analog_busses_in(chip
), &pcm
)) < 0)
939 pcm
->private_data
= chip
;
940 chip
->analog_pcm
= pcm
;
941 strcpy(pcm
->name
, chip
->card
->shortname
);
942 snd_pcm_set_ops(pcm
, SNDRV_PCM_STREAM_PLAYBACK
, &analog_playback_ops
);
943 snd_pcm_set_ops(pcm
, SNDRV_PCM_STREAM_CAPTURE
, &analog_capture_ops
);
944 if ((err
= snd_echo_preallocate_pages(pcm
, snd_dma_pci_data(chip
->pci
))) < 0)
947 #ifdef ECHOCARD_HAS_DIGITAL_IO
948 /* PCM#1 Digital i/o */
949 if ((err
= snd_pcm_new(chip
->card
, "Digital PCM", 1,
950 num_digital_busses_out(chip
),
951 num_digital_busses_in(chip
), &pcm
)) < 0)
953 pcm
->private_data
= chip
;
954 chip
->digital_pcm
= pcm
;
955 strcpy(pcm
->name
, chip
->card
->shortname
);
956 snd_pcm_set_ops(pcm
, SNDRV_PCM_STREAM_PLAYBACK
, &digital_playback_ops
);
957 snd_pcm_set_ops(pcm
, SNDRV_PCM_STREAM_CAPTURE
, &digital_capture_ops
);
958 if ((err
= snd_echo_preallocate_pages(pcm
, snd_dma_pci_data(chip
->pci
))) < 0)
960 #endif /* ECHOCARD_HAS_DIGITAL_IO */
962 #endif /* ECHOCARD_HAS_VMIXER */
970 /******************************************************************************
972 ******************************************************************************/
974 #if !defined(ECHOCARD_HAS_VMIXER) || defined(ECHOCARD_HAS_LINE_OUT_GAIN)
976 /******************* PCM output volume *******************/
977 static int snd_echo_output_gain_info(struct snd_kcontrol
*kcontrol
,
978 struct snd_ctl_elem_info
*uinfo
)
980 struct echoaudio
*chip
;
982 chip
= snd_kcontrol_chip(kcontrol
);
983 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_INTEGER
;
984 uinfo
->count
= num_busses_out(chip
);
985 uinfo
->value
.integer
.min
= ECHOGAIN_MINOUT
;
986 uinfo
->value
.integer
.max
= ECHOGAIN_MAXOUT
;
990 static int snd_echo_output_gain_get(struct snd_kcontrol
*kcontrol
,
991 struct snd_ctl_elem_value
*ucontrol
)
993 struct echoaudio
*chip
;
996 chip
= snd_kcontrol_chip(kcontrol
);
997 for (c
= 0; c
< num_busses_out(chip
); c
++)
998 ucontrol
->value
.integer
.value
[c
] = chip
->output_gain
[c
];
1002 static int snd_echo_output_gain_put(struct snd_kcontrol
*kcontrol
,
1003 struct snd_ctl_elem_value
*ucontrol
)
1005 struct echoaudio
*chip
;
1006 int c
, changed
, gain
;
1009 chip
= snd_kcontrol_chip(kcontrol
);
1010 spin_lock_irq(&chip
->lock
);
1011 for (c
= 0; c
< num_busses_out(chip
); c
++) {
1012 gain
= ucontrol
->value
.integer
.value
[c
];
1013 /* Ignore out of range values */
1014 if (gain
< ECHOGAIN_MINOUT
|| gain
> ECHOGAIN_MAXOUT
)
1016 if (chip
->output_gain
[c
] != gain
) {
1017 set_output_gain(chip
, c
, gain
);
1022 update_output_line_level(chip
);
1023 spin_unlock_irq(&chip
->lock
);
1027 #ifdef ECHOCARD_HAS_LINE_OUT_GAIN
1028 /* On the Mia this one controls the line-out volume */
1029 static const struct snd_kcontrol_new snd_echo_line_output_gain
= {
1030 .name
= "Line Playback Volume",
1031 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1032 .access
= SNDRV_CTL_ELEM_ACCESS_READWRITE
|
1033 SNDRV_CTL_ELEM_ACCESS_TLV_READ
,
1034 .info
= snd_echo_output_gain_info
,
1035 .get
= snd_echo_output_gain_get
,
1036 .put
= snd_echo_output_gain_put
,
1037 .tlv
= {.p
= db_scale_output_gain
},
1040 static const struct snd_kcontrol_new snd_echo_pcm_output_gain
= {
1041 .name
= "PCM Playback Volume",
1042 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1043 .access
= SNDRV_CTL_ELEM_ACCESS_READWRITE
| SNDRV_CTL_ELEM_ACCESS_TLV_READ
,
1044 .info
= snd_echo_output_gain_info
,
1045 .get
= snd_echo_output_gain_get
,
1046 .put
= snd_echo_output_gain_put
,
1047 .tlv
= {.p
= db_scale_output_gain
},
1051 #endif /* !ECHOCARD_HAS_VMIXER || ECHOCARD_HAS_LINE_OUT_GAIN */
1055 #ifdef ECHOCARD_HAS_INPUT_GAIN
1057 /******************* Analog input volume *******************/
1058 static int snd_echo_input_gain_info(struct snd_kcontrol
*kcontrol
,
1059 struct snd_ctl_elem_info
*uinfo
)
1061 struct echoaudio
*chip
;
1063 chip
= snd_kcontrol_chip(kcontrol
);
1064 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_INTEGER
;
1065 uinfo
->count
= num_analog_busses_in(chip
);
1066 uinfo
->value
.integer
.min
= ECHOGAIN_MININP
;
1067 uinfo
->value
.integer
.max
= ECHOGAIN_MAXINP
;
1071 static int snd_echo_input_gain_get(struct snd_kcontrol
*kcontrol
,
1072 struct snd_ctl_elem_value
*ucontrol
)
1074 struct echoaudio
*chip
;
1077 chip
= snd_kcontrol_chip(kcontrol
);
1078 for (c
= 0; c
< num_analog_busses_in(chip
); c
++)
1079 ucontrol
->value
.integer
.value
[c
] = chip
->input_gain
[c
];
1083 static int snd_echo_input_gain_put(struct snd_kcontrol
*kcontrol
,
1084 struct snd_ctl_elem_value
*ucontrol
)
1086 struct echoaudio
*chip
;
1087 int c
, gain
, changed
;
1090 chip
= snd_kcontrol_chip(kcontrol
);
1091 spin_lock_irq(&chip
->lock
);
1092 for (c
= 0; c
< num_analog_busses_in(chip
); c
++) {
1093 gain
= ucontrol
->value
.integer
.value
[c
];
1094 /* Ignore out of range values */
1095 if (gain
< ECHOGAIN_MININP
|| gain
> ECHOGAIN_MAXINP
)
1097 if (chip
->input_gain
[c
] != gain
) {
1098 set_input_gain(chip
, c
, gain
);
1103 update_input_line_level(chip
);
1104 spin_unlock_irq(&chip
->lock
);
1108 static const DECLARE_TLV_DB_SCALE(db_scale_input_gain
, -2500, 50, 0);
1110 static const struct snd_kcontrol_new snd_echo_line_input_gain
= {
1111 .name
= "Line Capture Volume",
1112 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1113 .access
= SNDRV_CTL_ELEM_ACCESS_READWRITE
| SNDRV_CTL_ELEM_ACCESS_TLV_READ
,
1114 .info
= snd_echo_input_gain_info
,
1115 .get
= snd_echo_input_gain_get
,
1116 .put
= snd_echo_input_gain_put
,
1117 .tlv
= {.p
= db_scale_input_gain
},
1120 #endif /* ECHOCARD_HAS_INPUT_GAIN */
1124 #ifdef ECHOCARD_HAS_OUTPUT_NOMINAL_LEVEL
1126 /************ Analog output nominal level (+4dBu / -10dBV) ***************/
1127 static int snd_echo_output_nominal_info (struct snd_kcontrol
*kcontrol
,
1128 struct snd_ctl_elem_info
*uinfo
)
1130 struct echoaudio
*chip
;
1132 chip
= snd_kcontrol_chip(kcontrol
);
1133 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_BOOLEAN
;
1134 uinfo
->count
= num_analog_busses_out(chip
);
1135 uinfo
->value
.integer
.min
= 0;
1136 uinfo
->value
.integer
.max
= 1;
1140 static int snd_echo_output_nominal_get(struct snd_kcontrol
*kcontrol
,
1141 struct snd_ctl_elem_value
*ucontrol
)
1143 struct echoaudio
*chip
;
1146 chip
= snd_kcontrol_chip(kcontrol
);
1147 for (c
= 0; c
< num_analog_busses_out(chip
); c
++)
1148 ucontrol
->value
.integer
.value
[c
] = chip
->nominal_level
[c
];
1152 static int snd_echo_output_nominal_put(struct snd_kcontrol
*kcontrol
,
1153 struct snd_ctl_elem_value
*ucontrol
)
1155 struct echoaudio
*chip
;
1159 chip
= snd_kcontrol_chip(kcontrol
);
1160 spin_lock_irq(&chip
->lock
);
1161 for (c
= 0; c
< num_analog_busses_out(chip
); c
++) {
1162 if (chip
->nominal_level
[c
] != ucontrol
->value
.integer
.value
[c
]) {
1163 set_nominal_level(chip
, c
,
1164 ucontrol
->value
.integer
.value
[c
]);
1169 update_output_line_level(chip
);
1170 spin_unlock_irq(&chip
->lock
);
1174 static const struct snd_kcontrol_new snd_echo_output_nominal_level
= {
1175 .name
= "Line Playback Switch (-10dBV)",
1176 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1177 .info
= snd_echo_output_nominal_info
,
1178 .get
= snd_echo_output_nominal_get
,
1179 .put
= snd_echo_output_nominal_put
,
1182 #endif /* ECHOCARD_HAS_OUTPUT_NOMINAL_LEVEL */
1186 #ifdef ECHOCARD_HAS_INPUT_NOMINAL_LEVEL
1188 /*************** Analog input nominal level (+4dBu / -10dBV) ***************/
1189 static int snd_echo_input_nominal_info(struct snd_kcontrol
*kcontrol
,
1190 struct snd_ctl_elem_info
*uinfo
)
1192 struct echoaudio
*chip
;
1194 chip
= snd_kcontrol_chip(kcontrol
);
1195 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_BOOLEAN
;
1196 uinfo
->count
= num_analog_busses_in(chip
);
1197 uinfo
->value
.integer
.min
= 0;
1198 uinfo
->value
.integer
.max
= 1;
1202 static int snd_echo_input_nominal_get(struct snd_kcontrol
*kcontrol
,
1203 struct snd_ctl_elem_value
*ucontrol
)
1205 struct echoaudio
*chip
;
1208 chip
= snd_kcontrol_chip(kcontrol
);
1209 for (c
= 0; c
< num_analog_busses_in(chip
); c
++)
1210 ucontrol
->value
.integer
.value
[c
] =
1211 chip
->nominal_level
[bx_analog_in(chip
) + c
];
1215 static int snd_echo_input_nominal_put(struct snd_kcontrol
*kcontrol
,
1216 struct snd_ctl_elem_value
*ucontrol
)
1218 struct echoaudio
*chip
;
1222 chip
= snd_kcontrol_chip(kcontrol
);
1223 spin_lock_irq(&chip
->lock
);
1224 for (c
= 0; c
< num_analog_busses_in(chip
); c
++) {
1225 if (chip
->nominal_level
[bx_analog_in(chip
) + c
] !=
1226 ucontrol
->value
.integer
.value
[c
]) {
1227 set_nominal_level(chip
, bx_analog_in(chip
) + c
,
1228 ucontrol
->value
.integer
.value
[c
]);
1233 update_output_line_level(chip
); /* "Output" is not a mistake
1236 spin_unlock_irq(&chip
->lock
);
1240 static const struct snd_kcontrol_new snd_echo_intput_nominal_level
= {
1241 .name
= "Line Capture Switch (-10dBV)",
1242 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1243 .info
= snd_echo_input_nominal_info
,
1244 .get
= snd_echo_input_nominal_get
,
1245 .put
= snd_echo_input_nominal_put
,
1248 #endif /* ECHOCARD_HAS_INPUT_NOMINAL_LEVEL */
1252 #ifdef ECHOCARD_HAS_MONITOR
1254 /******************* Monitor mixer *******************/
1255 static int snd_echo_mixer_info(struct snd_kcontrol
*kcontrol
,
1256 struct snd_ctl_elem_info
*uinfo
)
1258 struct echoaudio
*chip
;
1260 chip
= snd_kcontrol_chip(kcontrol
);
1261 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_INTEGER
;
1263 uinfo
->value
.integer
.min
= ECHOGAIN_MINOUT
;
1264 uinfo
->value
.integer
.max
= ECHOGAIN_MAXOUT
;
1265 uinfo
->dimen
.d
[0] = num_busses_out(chip
);
1266 uinfo
->dimen
.d
[1] = num_busses_in(chip
);
1270 static int snd_echo_mixer_get(struct snd_kcontrol
*kcontrol
,
1271 struct snd_ctl_elem_value
*ucontrol
)
1273 struct echoaudio
*chip
= snd_kcontrol_chip(kcontrol
);
1274 unsigned int out
= ucontrol
->id
.index
/ num_busses_in(chip
);
1275 unsigned int in
= ucontrol
->id
.index
% num_busses_in(chip
);
1277 if (out
>= ECHO_MAXAUDIOOUTPUTS
|| in
>= ECHO_MAXAUDIOINPUTS
)
1280 ucontrol
->value
.integer
.value
[0] = chip
->monitor_gain
[out
][in
];
1284 static int snd_echo_mixer_put(struct snd_kcontrol
*kcontrol
,
1285 struct snd_ctl_elem_value
*ucontrol
)
1287 struct echoaudio
*chip
;
1289 unsigned int out
, in
;
1292 chip
= snd_kcontrol_chip(kcontrol
);
1293 out
= ucontrol
->id
.index
/ num_busses_in(chip
);
1294 in
= ucontrol
->id
.index
% num_busses_in(chip
);
1295 if (out
>= ECHO_MAXAUDIOOUTPUTS
|| in
>= ECHO_MAXAUDIOINPUTS
)
1297 gain
= ucontrol
->value
.integer
.value
[0];
1298 if (gain
< ECHOGAIN_MINOUT
|| gain
> ECHOGAIN_MAXOUT
)
1300 if (chip
->monitor_gain
[out
][in
] != gain
) {
1301 spin_lock_irq(&chip
->lock
);
1302 set_monitor_gain(chip
, out
, in
, gain
);
1303 update_output_line_level(chip
);
1304 spin_unlock_irq(&chip
->lock
);
1310 static struct snd_kcontrol_new snd_echo_monitor_mixer
= {
1311 .name
= "Monitor Mixer Volume",
1312 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1313 .access
= SNDRV_CTL_ELEM_ACCESS_READWRITE
| SNDRV_CTL_ELEM_ACCESS_TLV_READ
,
1314 .info
= snd_echo_mixer_info
,
1315 .get
= snd_echo_mixer_get
,
1316 .put
= snd_echo_mixer_put
,
1317 .tlv
= {.p
= db_scale_output_gain
},
1320 #endif /* ECHOCARD_HAS_MONITOR */
1324 #ifdef ECHOCARD_HAS_VMIXER
1326 /******************* Vmixer *******************/
1327 static int snd_echo_vmixer_info(struct snd_kcontrol
*kcontrol
,
1328 struct snd_ctl_elem_info
*uinfo
)
1330 struct echoaudio
*chip
;
1332 chip
= snd_kcontrol_chip(kcontrol
);
1333 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_INTEGER
;
1335 uinfo
->value
.integer
.min
= ECHOGAIN_MINOUT
;
1336 uinfo
->value
.integer
.max
= ECHOGAIN_MAXOUT
;
1337 uinfo
->dimen
.d
[0] = num_busses_out(chip
);
1338 uinfo
->dimen
.d
[1] = num_pipes_out(chip
);
1342 static int snd_echo_vmixer_get(struct snd_kcontrol
*kcontrol
,
1343 struct snd_ctl_elem_value
*ucontrol
)
1345 struct echoaudio
*chip
;
1347 chip
= snd_kcontrol_chip(kcontrol
);
1348 ucontrol
->value
.integer
.value
[0] =
1349 chip
->vmixer_gain
[ucontrol
->id
.index
/ num_pipes_out(chip
)]
1350 [ucontrol
->id
.index
% num_pipes_out(chip
)];
1354 static int snd_echo_vmixer_put(struct snd_kcontrol
*kcontrol
,
1355 struct snd_ctl_elem_value
*ucontrol
)
1357 struct echoaudio
*chip
;
1362 chip
= snd_kcontrol_chip(kcontrol
);
1363 out
= ucontrol
->id
.index
/ num_pipes_out(chip
);
1364 vch
= ucontrol
->id
.index
% num_pipes_out(chip
);
1365 gain
= ucontrol
->value
.integer
.value
[0];
1366 if (gain
< ECHOGAIN_MINOUT
|| gain
> ECHOGAIN_MAXOUT
)
1368 if (chip
->vmixer_gain
[out
][vch
] != ucontrol
->value
.integer
.value
[0]) {
1369 spin_lock_irq(&chip
->lock
);
1370 set_vmixer_gain(chip
, out
, vch
, ucontrol
->value
.integer
.value
[0]);
1371 update_vmixer_level(chip
);
1372 spin_unlock_irq(&chip
->lock
);
1378 static struct snd_kcontrol_new snd_echo_vmixer
= {
1379 .name
= "VMixer Volume",
1380 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1381 .access
= SNDRV_CTL_ELEM_ACCESS_READWRITE
| SNDRV_CTL_ELEM_ACCESS_TLV_READ
,
1382 .info
= snd_echo_vmixer_info
,
1383 .get
= snd_echo_vmixer_get
,
1384 .put
= snd_echo_vmixer_put
,
1385 .tlv
= {.p
= db_scale_output_gain
},
1388 #endif /* ECHOCARD_HAS_VMIXER */
1392 #ifdef ECHOCARD_HAS_DIGITAL_MODE_SWITCH
1394 /******************* Digital mode switch *******************/
1395 static int snd_echo_digital_mode_info(struct snd_kcontrol
*kcontrol
,
1396 struct snd_ctl_elem_info
*uinfo
)
1398 static const char * const names
[4] = {
1399 "S/PDIF Coaxial", "S/PDIF Optical", "ADAT Optical",
1402 struct echoaudio
*chip
;
1404 chip
= snd_kcontrol_chip(kcontrol
);
1405 return snd_ctl_enum_info(uinfo
, 1, chip
->num_digital_modes
, names
);
1408 static int snd_echo_digital_mode_get(struct snd_kcontrol
*kcontrol
,
1409 struct snd_ctl_elem_value
*ucontrol
)
1411 struct echoaudio
*chip
;
1414 chip
= snd_kcontrol_chip(kcontrol
);
1415 mode
= chip
->digital_mode
;
1416 for (i
= chip
->num_digital_modes
- 1; i
>= 0; i
--)
1417 if (mode
== chip
->digital_mode_list
[i
]) {
1418 ucontrol
->value
.enumerated
.item
[0] = i
;
1424 static int snd_echo_digital_mode_put(struct snd_kcontrol
*kcontrol
,
1425 struct snd_ctl_elem_value
*ucontrol
)
1427 struct echoaudio
*chip
;
1429 unsigned short emode
, dmode
;
1432 chip
= snd_kcontrol_chip(kcontrol
);
1434 emode
= ucontrol
->value
.enumerated
.item
[0];
1435 if (emode
>= chip
->num_digital_modes
)
1437 dmode
= chip
->digital_mode_list
[emode
];
1439 if (dmode
!= chip
->digital_mode
) {
1440 /* mode_mutex is required to make this operation atomic wrt
1441 pcm_digital_*_open() and set_input_clock() functions. */
1442 mutex_lock(&chip
->mode_mutex
);
1444 /* Do not allow the user to change the digital mode when a pcm
1445 device is open because it also changes the number of channels
1446 and the allowed sample rates */
1447 if (atomic_read(&chip
->opencount
)) {
1450 changed
= set_digital_mode(chip
, dmode
);
1451 /* If we had to change the clock source, report it */
1452 if (changed
> 0 && chip
->clock_src_ctl
) {
1453 snd_ctl_notify(chip
->card
,
1454 SNDRV_CTL_EVENT_MASK_VALUE
,
1455 &chip
->clock_src_ctl
->id
);
1456 dev_dbg(chip
->card
->dev
,
1457 "SDM() =%d\n", changed
);
1460 changed
= 1; /* No errors */
1462 mutex_unlock(&chip
->mode_mutex
);
1467 static const struct snd_kcontrol_new snd_echo_digital_mode_switch
= {
1468 .name
= "Digital mode Switch",
1469 .iface
= SNDRV_CTL_ELEM_IFACE_CARD
,
1470 .info
= snd_echo_digital_mode_info
,
1471 .get
= snd_echo_digital_mode_get
,
1472 .put
= snd_echo_digital_mode_put
,
1475 #endif /* ECHOCARD_HAS_DIGITAL_MODE_SWITCH */
1479 #ifdef ECHOCARD_HAS_DIGITAL_IO
1481 /******************* S/PDIF mode switch *******************/
1482 static int snd_echo_spdif_mode_info(struct snd_kcontrol
*kcontrol
,
1483 struct snd_ctl_elem_info
*uinfo
)
1485 static const char * const names
[2] = {"Consumer", "Professional"};
1487 return snd_ctl_enum_info(uinfo
, 1, 2, names
);
1490 static int snd_echo_spdif_mode_get(struct snd_kcontrol
*kcontrol
,
1491 struct snd_ctl_elem_value
*ucontrol
)
1493 struct echoaudio
*chip
;
1495 chip
= snd_kcontrol_chip(kcontrol
);
1496 ucontrol
->value
.enumerated
.item
[0] = !!chip
->professional_spdif
;
1500 static int snd_echo_spdif_mode_put(struct snd_kcontrol
*kcontrol
,
1501 struct snd_ctl_elem_value
*ucontrol
)
1503 struct echoaudio
*chip
;
1506 chip
= snd_kcontrol_chip(kcontrol
);
1507 mode
= !!ucontrol
->value
.enumerated
.item
[0];
1508 if (mode
!= chip
->professional_spdif
) {
1509 spin_lock_irq(&chip
->lock
);
1510 set_professional_spdif(chip
, mode
);
1511 spin_unlock_irq(&chip
->lock
);
1517 static const struct snd_kcontrol_new snd_echo_spdif_mode_switch
= {
1518 .name
= "S/PDIF mode Switch",
1519 .iface
= SNDRV_CTL_ELEM_IFACE_CARD
,
1520 .info
= snd_echo_spdif_mode_info
,
1521 .get
= snd_echo_spdif_mode_get
,
1522 .put
= snd_echo_spdif_mode_put
,
1525 #endif /* ECHOCARD_HAS_DIGITAL_IO */
1529 #ifdef ECHOCARD_HAS_EXTERNAL_CLOCK
1531 /******************* Select input clock source *******************/
1532 static int snd_echo_clock_source_info(struct snd_kcontrol
*kcontrol
,
1533 struct snd_ctl_elem_info
*uinfo
)
1535 static const char * const names
[8] = {
1536 "Internal", "Word", "Super", "S/PDIF", "ADAT", "ESync",
1539 struct echoaudio
*chip
;
1541 chip
= snd_kcontrol_chip(kcontrol
);
1542 return snd_ctl_enum_info(uinfo
, 1, chip
->num_clock_sources
, names
);
1545 static int snd_echo_clock_source_get(struct snd_kcontrol
*kcontrol
,
1546 struct snd_ctl_elem_value
*ucontrol
)
1548 struct echoaudio
*chip
;
1551 chip
= snd_kcontrol_chip(kcontrol
);
1552 clock
= chip
->input_clock
;
1554 for (i
= 0; i
< chip
->num_clock_sources
; i
++)
1555 if (clock
== chip
->clock_source_list
[i
])
1556 ucontrol
->value
.enumerated
.item
[0] = i
;
1561 static int snd_echo_clock_source_put(struct snd_kcontrol
*kcontrol
,
1562 struct snd_ctl_elem_value
*ucontrol
)
1564 struct echoaudio
*chip
;
1566 unsigned int eclock
, dclock
;
1569 chip
= snd_kcontrol_chip(kcontrol
);
1570 eclock
= ucontrol
->value
.enumerated
.item
[0];
1571 if (eclock
>= chip
->input_clock_types
)
1573 dclock
= chip
->clock_source_list
[eclock
];
1574 if (chip
->input_clock
!= dclock
) {
1575 mutex_lock(&chip
->mode_mutex
);
1576 spin_lock_irq(&chip
->lock
);
1577 if ((changed
= set_input_clock(chip
, dclock
)) == 0)
1578 changed
= 1; /* no errors */
1579 spin_unlock_irq(&chip
->lock
);
1580 mutex_unlock(&chip
->mode_mutex
);
1584 dev_dbg(chip
->card
->dev
,
1585 "seticlk val%d err 0x%x\n", dclock
, changed
);
1590 static const struct snd_kcontrol_new snd_echo_clock_source_switch
= {
1591 .name
= "Sample Clock Source",
1592 .iface
= SNDRV_CTL_ELEM_IFACE_PCM
,
1593 .info
= snd_echo_clock_source_info
,
1594 .get
= snd_echo_clock_source_get
,
1595 .put
= snd_echo_clock_source_put
,
1598 #endif /* ECHOCARD_HAS_EXTERNAL_CLOCK */
1602 #ifdef ECHOCARD_HAS_PHANTOM_POWER
1604 /******************* Phantom power switch *******************/
1605 #define snd_echo_phantom_power_info snd_ctl_boolean_mono_info
1607 static int snd_echo_phantom_power_get(struct snd_kcontrol
*kcontrol
,
1608 struct snd_ctl_elem_value
*ucontrol
)
1610 struct echoaudio
*chip
= snd_kcontrol_chip(kcontrol
);
1612 ucontrol
->value
.integer
.value
[0] = chip
->phantom_power
;
1616 static int snd_echo_phantom_power_put(struct snd_kcontrol
*kcontrol
,
1617 struct snd_ctl_elem_value
*ucontrol
)
1619 struct echoaudio
*chip
= snd_kcontrol_chip(kcontrol
);
1620 int power
, changed
= 0;
1622 power
= !!ucontrol
->value
.integer
.value
[0];
1623 if (chip
->phantom_power
!= power
) {
1624 spin_lock_irq(&chip
->lock
);
1625 changed
= set_phantom_power(chip
, power
);
1626 spin_unlock_irq(&chip
->lock
);
1628 changed
= 1; /* no errors */
1633 static const struct snd_kcontrol_new snd_echo_phantom_power_switch
= {
1634 .name
= "Phantom power Switch",
1635 .iface
= SNDRV_CTL_ELEM_IFACE_CARD
,
1636 .info
= snd_echo_phantom_power_info
,
1637 .get
= snd_echo_phantom_power_get
,
1638 .put
= snd_echo_phantom_power_put
,
1641 #endif /* ECHOCARD_HAS_PHANTOM_POWER */
1645 #ifdef ECHOCARD_HAS_DIGITAL_IN_AUTOMUTE
1647 /******************* Digital input automute switch *******************/
1648 #define snd_echo_automute_info snd_ctl_boolean_mono_info
1650 static int snd_echo_automute_get(struct snd_kcontrol
*kcontrol
,
1651 struct snd_ctl_elem_value
*ucontrol
)
1653 struct echoaudio
*chip
= snd_kcontrol_chip(kcontrol
);
1655 ucontrol
->value
.integer
.value
[0] = chip
->digital_in_automute
;
1659 static int snd_echo_automute_put(struct snd_kcontrol
*kcontrol
,
1660 struct snd_ctl_elem_value
*ucontrol
)
1662 struct echoaudio
*chip
= snd_kcontrol_chip(kcontrol
);
1663 int automute
, changed
= 0;
1665 automute
= !!ucontrol
->value
.integer
.value
[0];
1666 if (chip
->digital_in_automute
!= automute
) {
1667 spin_lock_irq(&chip
->lock
);
1668 changed
= set_input_auto_mute(chip
, automute
);
1669 spin_unlock_irq(&chip
->lock
);
1671 changed
= 1; /* no errors */
1676 static const struct snd_kcontrol_new snd_echo_automute_switch
= {
1677 .name
= "Digital Capture Switch (automute)",
1678 .iface
= SNDRV_CTL_ELEM_IFACE_CARD
,
1679 .info
= snd_echo_automute_info
,
1680 .get
= snd_echo_automute_get
,
1681 .put
= snd_echo_automute_put
,
1684 #endif /* ECHOCARD_HAS_DIGITAL_IN_AUTOMUTE */
1688 /******************* VU-meters switch *******************/
1689 #define snd_echo_vumeters_switch_info snd_ctl_boolean_mono_info
1691 static int snd_echo_vumeters_switch_put(struct snd_kcontrol
*kcontrol
,
1692 struct snd_ctl_elem_value
*ucontrol
)
1694 struct echoaudio
*chip
;
1696 chip
= snd_kcontrol_chip(kcontrol
);
1697 spin_lock_irq(&chip
->lock
);
1698 set_meters_on(chip
, ucontrol
->value
.integer
.value
[0]);
1699 spin_unlock_irq(&chip
->lock
);
1703 static const struct snd_kcontrol_new snd_echo_vumeters_switch
= {
1704 .name
= "VU-meters Switch",
1705 .iface
= SNDRV_CTL_ELEM_IFACE_CARD
,
1706 .access
= SNDRV_CTL_ELEM_ACCESS_WRITE
,
1707 .info
= snd_echo_vumeters_switch_info
,
1708 .put
= snd_echo_vumeters_switch_put
,
1713 /***** Read VU-meters (input, output, analog and digital together) *****/
1714 static int snd_echo_vumeters_info(struct snd_kcontrol
*kcontrol
,
1715 struct snd_ctl_elem_info
*uinfo
)
1717 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_INTEGER
;
1719 uinfo
->value
.integer
.min
= ECHOGAIN_MINOUT
;
1720 uinfo
->value
.integer
.max
= 0;
1721 #ifdef ECHOCARD_HAS_VMIXER
1722 uinfo
->dimen
.d
[0] = 3; /* Out, In, Virt */
1724 uinfo
->dimen
.d
[0] = 2; /* Out, In */
1726 uinfo
->dimen
.d
[1] = 16; /* 16 channels */
1727 uinfo
->dimen
.d
[2] = 2; /* 0=level, 1=peak */
1731 static int snd_echo_vumeters_get(struct snd_kcontrol
*kcontrol
,
1732 struct snd_ctl_elem_value
*ucontrol
)
1734 struct echoaudio
*chip
;
1736 chip
= snd_kcontrol_chip(kcontrol
);
1737 get_audio_meters(chip
, ucontrol
->value
.integer
.value
);
1741 static const struct snd_kcontrol_new snd_echo_vumeters
= {
1742 .name
= "VU-meters",
1743 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1744 .access
= SNDRV_CTL_ELEM_ACCESS_READ
|
1745 SNDRV_CTL_ELEM_ACCESS_VOLATILE
|
1746 SNDRV_CTL_ELEM_ACCESS_TLV_READ
,
1747 .info
= snd_echo_vumeters_info
,
1748 .get
= snd_echo_vumeters_get
,
1749 .tlv
= {.p
= db_scale_output_gain
},
1754 /*** Channels info - it exports informations about the number of channels ***/
1755 static int snd_echo_channels_info_info(struct snd_kcontrol
*kcontrol
,
1756 struct snd_ctl_elem_info
*uinfo
)
1758 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_INTEGER
;
1760 uinfo
->value
.integer
.min
= 0;
1761 uinfo
->value
.integer
.max
= 1 << ECHO_CLOCK_NUMBER
;
1765 static int snd_echo_channels_info_get(struct snd_kcontrol
*kcontrol
,
1766 struct snd_ctl_elem_value
*ucontrol
)
1768 struct echoaudio
*chip
;
1769 int detected
, clocks
, bit
, src
;
1771 chip
= snd_kcontrol_chip(kcontrol
);
1772 ucontrol
->value
.integer
.value
[0] = num_busses_in(chip
);
1773 ucontrol
->value
.integer
.value
[1] = num_analog_busses_in(chip
);
1774 ucontrol
->value
.integer
.value
[2] = num_busses_out(chip
);
1775 ucontrol
->value
.integer
.value
[3] = num_analog_busses_out(chip
);
1776 ucontrol
->value
.integer
.value
[4] = num_pipes_out(chip
);
1778 /* Compute the bitmask of the currently valid input clocks */
1779 detected
= detect_input_clocks(chip
);
1781 src
= chip
->num_clock_sources
- 1;
1782 for (bit
= ECHO_CLOCK_NUMBER
- 1; bit
>= 0; bit
--)
1783 if (detected
& (1 << bit
))
1784 for (; src
>= 0; src
--)
1785 if (bit
== chip
->clock_source_list
[src
]) {
1789 ucontrol
->value
.integer
.value
[5] = clocks
;
1794 static const struct snd_kcontrol_new snd_echo_channels_info
= {
1795 .name
= "Channels info",
1796 .iface
= SNDRV_CTL_ELEM_IFACE_HWDEP
,
1797 .access
= SNDRV_CTL_ELEM_ACCESS_READ
| SNDRV_CTL_ELEM_ACCESS_VOLATILE
,
1798 .info
= snd_echo_channels_info_info
,
1799 .get
= snd_echo_channels_info_get
,
1805 /******************************************************************************
1807 ******************************************************************************/
1809 static irqreturn_t
snd_echo_interrupt(int irq
, void *dev_id
)
1811 struct echoaudio
*chip
= dev_id
;
1812 struct snd_pcm_substream
*substream
;
1815 spin_lock(&chip
->lock
);
1816 st
= service_irq(chip
);
1818 spin_unlock(&chip
->lock
);
1821 /* The hardware doesn't tell us which substream caused the irq,
1822 thus we have to check all running substreams. */
1823 for (ss
= 0; ss
< DSP_MAXPIPES
; ss
++) {
1824 substream
= chip
->substream
[ss
];
1825 if (substream
&& ((struct audiopipe
*)substream
->runtime
->
1826 private_data
)->state
== PIPE_STATE_STARTED
) {
1827 period
= pcm_pointer(substream
) /
1828 substream
->runtime
->period_size
;
1829 if (period
!= chip
->last_period
[ss
]) {
1830 chip
->last_period
[ss
] = period
;
1831 spin_unlock(&chip
->lock
);
1832 snd_pcm_period_elapsed(substream
);
1833 spin_lock(&chip
->lock
);
1837 spin_unlock(&chip
->lock
);
1839 #ifdef ECHOCARD_HAS_MIDI
1840 if (st
> 0 && chip
->midi_in
) {
1841 snd_rawmidi_receive(chip
->midi_in
, chip
->midi_buffer
, st
);
1842 dev_dbg(chip
->card
->dev
, "rawmidi_iread=%d\n", st
);
1851 /******************************************************************************
1852 Module construction / destruction
1853 ******************************************************************************/
1855 static int snd_echo_free(struct echoaudio
*chip
)
1857 if (chip
->comm_page
)
1858 rest_in_peace(chip
);
1861 free_irq(chip
->irq
, chip
);
1863 if (chip
->comm_page
)
1864 snd_dma_free_pages(&chip
->commpage_dma_buf
);
1866 iounmap(chip
->dsp_registers
);
1867 release_and_free_resource(chip
->iores
);
1868 pci_disable_device(chip
->pci
);
1870 /* release chip data */
1871 free_firmware_cache(chip
);
1878 static int snd_echo_dev_free(struct snd_device
*device
)
1880 struct echoaudio
*chip
= device
->device_data
;
1882 return snd_echo_free(chip
);
1887 /* <--snd_echo_probe() */
1888 static int snd_echo_create(struct snd_card
*card
,
1889 struct pci_dev
*pci
,
1890 struct echoaudio
**rchip
)
1892 struct echoaudio
*chip
;
1895 static struct snd_device_ops ops
= {
1896 .dev_free
= snd_echo_dev_free
,
1901 pci_write_config_byte(pci
, PCI_LATENCY_TIMER
, 0xC0);
1903 if ((err
= pci_enable_device(pci
)) < 0)
1905 pci_set_master(pci
);
1907 /* Allocate chip if needed */
1909 chip
= kzalloc(sizeof(*chip
), GFP_KERNEL
);
1911 pci_disable_device(pci
);
1914 dev_dbg(card
->dev
, "chip=%p\n", chip
);
1915 spin_lock_init(&chip
->lock
);
1919 atomic_set(&chip
->opencount
, 0);
1920 mutex_init(&chip
->mode_mutex
);
1921 chip
->can_set_rate
= 1;
1923 /* If this was called from the resume function, chip is
1924 * already allocated and it contains current card settings.
1929 /* PCI resource allocation */
1930 chip
->dsp_registers_phys
= pci_resource_start(pci
, 0);
1931 sz
= pci_resource_len(pci
, 0);
1933 sz
= PAGE_SIZE
; /* We map only the required part */
1935 if ((chip
->iores
= request_mem_region(chip
->dsp_registers_phys
, sz
,
1936 ECHOCARD_NAME
)) == NULL
) {
1937 dev_err(chip
->card
->dev
, "cannot get memory region\n");
1938 snd_echo_free(chip
);
1941 chip
->dsp_registers
= (volatile u32 __iomem
*)
1942 ioremap_nocache(chip
->dsp_registers_phys
, sz
);
1943 if (!chip
->dsp_registers
) {
1944 dev_err(chip
->card
->dev
, "ioremap failed\n");
1945 snd_echo_free(chip
);
1949 if (request_irq(pci
->irq
, snd_echo_interrupt
, IRQF_SHARED
,
1950 KBUILD_MODNAME
, chip
)) {
1951 dev_err(chip
->card
->dev
, "cannot grab irq\n");
1952 snd_echo_free(chip
);
1955 chip
->irq
= pci
->irq
;
1956 dev_dbg(card
->dev
, "pci=%p irq=%d subdev=%04x Init hardware...\n",
1957 chip
->pci
, chip
->irq
, chip
->pci
->subsystem_device
);
1959 /* Create the DSP comm page - this is the area of memory used for most
1960 of the communication with the DSP, which accesses it via bus mastering */
1961 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV
, snd_dma_pci_data(chip
->pci
),
1962 sizeof(struct comm_page
),
1963 &chip
->commpage_dma_buf
) < 0) {
1964 dev_err(chip
->card
->dev
, "cannot allocate the comm page\n");
1965 snd_echo_free(chip
);
1968 chip
->comm_page_phys
= chip
->commpage_dma_buf
.addr
;
1969 chip
->comm_page
= (struct comm_page
*)chip
->commpage_dma_buf
.area
;
1971 err
= init_hw(chip
, chip
->pci
->device
, chip
->pci
->subsystem_device
);
1973 err
= set_mixer_defaults(chip
);
1975 dev_err(card
->dev
, "init_hw err=%d\n", err
);
1976 snd_echo_free(chip
);
1980 if ((err
= snd_device_new(card
, SNDRV_DEV_LOWLEVEL
, chip
, &ops
)) < 0) {
1981 snd_echo_free(chip
);
1992 static int snd_echo_probe(struct pci_dev
*pci
,
1993 const struct pci_device_id
*pci_id
)
1996 struct snd_card
*card
;
1997 struct echoaudio
*chip
;
2001 if (dev
>= SNDRV_CARDS
)
2009 err
= snd_card_new(&pci
->dev
, index
[dev
], id
[dev
], THIS_MODULE
,
2014 chip
= NULL
; /* Tells snd_echo_create to allocate chip */
2015 if ((err
= snd_echo_create(card
, pci
, &chip
)) < 0) {
2016 snd_card_free(card
);
2020 strcpy(card
->driver
, "Echo_" ECHOCARD_NAME
);
2021 strcpy(card
->shortname
, chip
->card_name
);
2024 if (pci_id
->device
== 0x3410)
2027 sprintf(card
->longname
, "%s rev.%d (DSP%s) at 0x%lx irq %i",
2028 card
->shortname
, pci_id
->subdevice
& 0x000f, dsp
,
2029 chip
->dsp_registers_phys
, chip
->irq
);
2031 if ((err
= snd_echo_new_pcm(chip
)) < 0) {
2032 dev_err(chip
->card
->dev
, "new pcm error %d\n", err
);
2033 snd_card_free(card
);
2037 #ifdef ECHOCARD_HAS_MIDI
2038 if (chip
->has_midi
) { /* Some Mia's do not have midi */
2039 if ((err
= snd_echo_midi_create(card
, chip
)) < 0) {
2040 dev_err(chip
->card
->dev
, "new midi error %d\n", err
);
2041 snd_card_free(card
);
2047 #ifdef ECHOCARD_HAS_VMIXER
2048 snd_echo_vmixer
.count
= num_pipes_out(chip
) * num_busses_out(chip
);
2049 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_vmixer
, chip
))) < 0)
2051 #ifdef ECHOCARD_HAS_LINE_OUT_GAIN
2052 err
= snd_ctl_add(chip
->card
,
2053 snd_ctl_new1(&snd_echo_line_output_gain
, chip
));
2057 #else /* ECHOCARD_HAS_VMIXER */
2058 err
= snd_ctl_add(chip
->card
,
2059 snd_ctl_new1(&snd_echo_pcm_output_gain
, chip
));
2062 #endif /* ECHOCARD_HAS_VMIXER */
2064 #ifdef ECHOCARD_HAS_INPUT_GAIN
2065 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_line_input_gain
, chip
))) < 0)
2069 #ifdef ECHOCARD_HAS_INPUT_NOMINAL_LEVEL
2070 if (!chip
->hasnt_input_nominal_level
)
2071 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_intput_nominal_level
, chip
))) < 0)
2075 #ifdef ECHOCARD_HAS_OUTPUT_NOMINAL_LEVEL
2076 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_output_nominal_level
, chip
))) < 0)
2080 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_vumeters_switch
, chip
))) < 0)
2083 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_vumeters
, chip
))) < 0)
2086 #ifdef ECHOCARD_HAS_MONITOR
2087 snd_echo_monitor_mixer
.count
= num_busses_in(chip
) * num_busses_out(chip
);
2088 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_monitor_mixer
, chip
))) < 0)
2092 #ifdef ECHOCARD_HAS_DIGITAL_IN_AUTOMUTE
2093 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_automute_switch
, chip
))) < 0)
2097 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_channels_info
, chip
))) < 0)
2100 #ifdef ECHOCARD_HAS_DIGITAL_MODE_SWITCH
2101 /* Creates a list of available digital modes */
2102 chip
->num_digital_modes
= 0;
2103 for (i
= 0; i
< 6; i
++)
2104 if (chip
->digital_modes
& (1 << i
))
2105 chip
->digital_mode_list
[chip
->num_digital_modes
++] = i
;
2107 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_digital_mode_switch
, chip
))) < 0)
2109 #endif /* ECHOCARD_HAS_DIGITAL_MODE_SWITCH */
2111 #ifdef ECHOCARD_HAS_EXTERNAL_CLOCK
2112 /* Creates a list of available clock sources */
2113 chip
->num_clock_sources
= 0;
2114 for (i
= 0; i
< 10; i
++)
2115 if (chip
->input_clock_types
& (1 << i
))
2116 chip
->clock_source_list
[chip
->num_clock_sources
++] = i
;
2118 if (chip
->num_clock_sources
> 1) {
2119 chip
->clock_src_ctl
= snd_ctl_new1(&snd_echo_clock_source_switch
, chip
);
2120 if ((err
= snd_ctl_add(chip
->card
, chip
->clock_src_ctl
)) < 0)
2123 #endif /* ECHOCARD_HAS_EXTERNAL_CLOCK */
2125 #ifdef ECHOCARD_HAS_DIGITAL_IO
2126 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_spdif_mode_switch
, chip
))) < 0)
2130 #ifdef ECHOCARD_HAS_PHANTOM_POWER
2131 if (chip
->has_phantom_power
)
2132 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_phantom_power_switch
, chip
))) < 0)
2136 err
= snd_card_register(card
);
2139 dev_info(card
->dev
, "Card registered: %s\n", card
->longname
);
2141 pci_set_drvdata(pci
, chip
);
2146 dev_err(card
->dev
, "new control error %d\n", err
);
2147 snd_card_free(card
);
2153 #if defined(CONFIG_PM_SLEEP)
2155 static int snd_echo_suspend(struct device
*dev
)
2157 struct echoaudio
*chip
= dev_get_drvdata(dev
);
2159 #ifdef ECHOCARD_HAS_MIDI
2160 /* This call can sleep */
2162 snd_echo_midi_output_trigger(chip
->midi_out
, 0);
2164 spin_lock_irq(&chip
->lock
);
2165 if (wait_handshake(chip
)) {
2166 spin_unlock_irq(&chip
->lock
);
2169 clear_handshake(chip
);
2170 if (send_vector(chip
, DSP_VC_GO_COMATOSE
) < 0) {
2171 spin_unlock_irq(&chip
->lock
);
2174 spin_unlock_irq(&chip
->lock
);
2176 chip
->dsp_code
= NULL
;
2177 free_irq(chip
->irq
, chip
);
2184 static int snd_echo_resume(struct device
*dev
)
2186 struct pci_dev
*pci
= to_pci_dev(dev
);
2187 struct echoaudio
*chip
= dev_get_drvdata(dev
);
2188 struct comm_page
*commpage
, *commpage_bak
;
2189 u32 pipe_alloc_mask
;
2192 commpage
= chip
->comm_page
;
2193 commpage_bak
= kmemdup(commpage
, sizeof(*commpage
), GFP_KERNEL
);
2194 if (commpage_bak
== NULL
)
2197 err
= init_hw(chip
, chip
->pci
->device
, chip
->pci
->subsystem_device
);
2199 kfree(commpage_bak
);
2200 dev_err(dev
, "resume init_hw err=%d\n", err
);
2204 /* Temporarily set chip->pipe_alloc_mask=0 otherwise
2205 * restore_dsp_settings() fails.
2207 pipe_alloc_mask
= chip
->pipe_alloc_mask
;
2208 chip
->pipe_alloc_mask
= 0;
2209 err
= restore_dsp_rettings(chip
);
2210 chip
->pipe_alloc_mask
= pipe_alloc_mask
;
2212 kfree(commpage_bak
);
2216 memcpy(&commpage
->audio_format
, &commpage_bak
->audio_format
,
2217 sizeof(commpage
->audio_format
));
2218 memcpy(&commpage
->sglist_addr
, &commpage_bak
->sglist_addr
,
2219 sizeof(commpage
->sglist_addr
));
2220 memcpy(&commpage
->midi_output
, &commpage_bak
->midi_output
,
2221 sizeof(commpage
->midi_output
));
2222 kfree(commpage_bak
);
2224 if (request_irq(pci
->irq
, snd_echo_interrupt
, IRQF_SHARED
,
2225 KBUILD_MODNAME
, chip
)) {
2226 dev_err(chip
->card
->dev
, "cannot grab irq\n");
2229 chip
->irq
= pci
->irq
;
2230 dev_dbg(dev
, "resume irq=%d\n", chip
->irq
);
2232 #ifdef ECHOCARD_HAS_MIDI
2233 if (chip
->midi_input_enabled
)
2234 enable_midi_input(chip
, true);
2236 snd_echo_midi_output_trigger(chip
->midi_out
, 1);
2242 static SIMPLE_DEV_PM_OPS(snd_echo_pm
, snd_echo_suspend
, snd_echo_resume
);
2243 #define SND_ECHO_PM_OPS &snd_echo_pm
2245 #define SND_ECHO_PM_OPS NULL
2246 #endif /* CONFIG_PM_SLEEP */
2249 static void snd_echo_remove(struct pci_dev
*pci
)
2251 struct echoaudio
*chip
;
2253 chip
= pci_get_drvdata(pci
);
2255 snd_card_free(chip
->card
);
2260 /******************************************************************************
2261 Everything starts and ends here
2262 ******************************************************************************/
2264 /* pci_driver definition */
2265 static struct pci_driver echo_driver
= {
2266 .name
= KBUILD_MODNAME
,
2267 .id_table
= snd_echo_ids
,
2268 .probe
= snd_echo_probe
,
2269 .remove
= snd_echo_remove
,
2271 .pm
= SND_ECHO_PM_OPS
,
2275 module_pci_driver(echo_driver
);