2 * ALSA driver for Echoaudio soundcards.
3 * Copyright (C) 2003-2004 Giuliano Pochini <pochini@shiny.it>
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.
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.
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.
19 MODULE_AUTHOR("Giuliano Pochini <pochini@shiny.it>");
20 MODULE_LICENSE("GPL v2");
21 MODULE_DESCRIPTION("Echoaudio " ECHOCARD_NAME
" soundcards driver");
22 MODULE_SUPPORTED_DEVICE("{{Echoaudio," ECHOCARD_NAME
"}}");
23 MODULE_DEVICE_TABLE(pci
, snd_echo_ids
);
25 static int index
[SNDRV_CARDS
] = SNDRV_DEFAULT_IDX
;
26 static char *id
[SNDRV_CARDS
] = SNDRV_DEFAULT_STR
;
27 static int enable
[SNDRV_CARDS
] = SNDRV_DEFAULT_ENABLE_PNP
;
29 module_param_array(index
, int, NULL
, 0444);
30 MODULE_PARM_DESC(index
, "Index value for " ECHOCARD_NAME
" soundcard.");
31 module_param_array(id
, charp
, NULL
, 0444);
32 MODULE_PARM_DESC(id
, "ID string for " ECHOCARD_NAME
" soundcard.");
33 module_param_array(enable
, bool, NULL
, 0444);
34 MODULE_PARM_DESC(enable
, "Enable " ECHOCARD_NAME
" soundcard.");
36 static unsigned int channels_list
[10] = {1, 2, 4, 6, 8, 10, 12, 14, 16, 999999};
37 static const DECLARE_TLV_DB_SCALE(db_scale_output_gain
, -12800, 100, 1);
41 static int get_firmware(const struct firmware
**fw_entry
,
42 struct echoaudio
*chip
, const short fw_index
)
48 if (chip
->fw_cache
[fw_index
]) {
49 DE_ACT(("firmware requested: %s is cached\n", card_fw
[fw_index
].data
));
50 *fw_entry
= chip
->fw_cache
[fw_index
];
55 DE_ACT(("firmware requested: %s\n", card_fw
[fw_index
].data
));
56 snprintf(name
, sizeof(name
), "ea/%s", card_fw
[fw_index
].data
);
57 err
= request_firmware(fw_entry
, name
, pci_device(chip
));
59 snd_printk(KERN_ERR
"get_firmware(): Firmware not available (%d)\n", err
);
62 chip
->fw_cache
[fw_index
] = *fw_entry
;
69 static void free_firmware(const struct firmware
*fw_entry
)
72 DE_ACT(("firmware not released (kept in cache)\n"));
74 release_firmware(fw_entry
);
75 DE_ACT(("firmware released\n"));
81 static void free_firmware_cache(struct echoaudio
*chip
)
86 for (i
= 0; i
< 8 ; i
++)
87 if (chip
->fw_cache
[i
]) {
88 release_firmware(chip
->fw_cache
[i
]);
89 DE_ACT(("release_firmware(%d)\n", i
));
92 DE_ACT(("firmware_cache released\n"));
98 /******************************************************************************
100 ******************************************************************************/
102 static void audiopipe_free(struct snd_pcm_runtime
*runtime
)
104 struct audiopipe
*pipe
= runtime
->private_data
;
106 if (pipe
->sgpage
.area
)
107 snd_dma_free_pages(&pipe
->sgpage
);
113 static int hw_rule_capture_format_by_channels(struct snd_pcm_hw_params
*params
,
114 struct snd_pcm_hw_rule
*rule
)
116 struct snd_interval
*c
= hw_param_interval(params
,
117 SNDRV_PCM_HW_PARAM_CHANNELS
);
118 struct snd_mask
*f
= hw_param_mask(params
, SNDRV_PCM_HW_PARAM_FORMAT
);
123 #ifndef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
124 /* >=2 channels cannot be S32_BE */
126 fmt
.bits
[0] &= ~SNDRV_PCM_FMTBIT_S32_BE
;
127 return snd_mask_refine(f
, &fmt
);
130 /* > 2 channels cannot be U8 and S32_BE */
132 fmt
.bits
[0] &= ~(SNDRV_PCM_FMTBIT_U8
| SNDRV_PCM_FMTBIT_S32_BE
);
133 return snd_mask_refine(f
, &fmt
);
135 /* Mono is ok with any format */
141 static int hw_rule_capture_channels_by_format(struct snd_pcm_hw_params
*params
,
142 struct snd_pcm_hw_rule
*rule
)
144 struct snd_interval
*c
= hw_param_interval(params
,
145 SNDRV_PCM_HW_PARAM_CHANNELS
);
146 struct snd_mask
*f
= hw_param_mask(params
, SNDRV_PCM_HW_PARAM_FORMAT
);
147 struct snd_interval ch
;
149 snd_interval_any(&ch
);
151 /* S32_BE is mono (and stereo) only */
152 if (f
->bits
[0] == SNDRV_PCM_FMTBIT_S32_BE
) {
154 #ifdef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
160 return snd_interval_refine(c
, &ch
);
162 /* U8 can be only mono or stereo */
163 if (f
->bits
[0] == SNDRV_PCM_FMTBIT_U8
) {
167 return snd_interval_refine(c
, &ch
);
169 /* S16_LE, S24_3LE and S32_LE support any number of channels. */
175 static int hw_rule_playback_format_by_channels(struct snd_pcm_hw_params
*params
,
176 struct snd_pcm_hw_rule
*rule
)
178 struct snd_interval
*c
= hw_param_interval(params
,
179 SNDRV_PCM_HW_PARAM_CHANNELS
);
180 struct snd_mask
*f
= hw_param_mask(params
, SNDRV_PCM_HW_PARAM_FORMAT
);
185 fmask
= fmt
.bits
[0] + ((u64
)fmt
.bits
[1] << 32);
187 /* >2 channels must be S16_LE, S24_3LE or S32_LE */
189 fmask
&= SNDRV_PCM_FMTBIT_S16_LE
|
190 SNDRV_PCM_FMTBIT_S24_3LE
|
191 SNDRV_PCM_FMTBIT_S32_LE
;
192 /* 1 channel must be S32_BE or S32_LE */
193 } else if (c
->max
== 1)
194 fmask
&= SNDRV_PCM_FMTBIT_S32_LE
| SNDRV_PCM_FMTBIT_S32_BE
;
195 #ifndef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
196 /* 2 channels cannot be S32_BE */
197 else if (c
->min
== 2 && c
->max
== 2)
198 fmask
&= ~SNDRV_PCM_FMTBIT_S32_BE
;
203 fmt
.bits
[0] &= (u32
)fmask
;
204 fmt
.bits
[1] &= (u32
)(fmask
>> 32);
205 return snd_mask_refine(f
, &fmt
);
210 static int hw_rule_playback_channels_by_format(struct snd_pcm_hw_params
*params
,
211 struct snd_pcm_hw_rule
*rule
)
213 struct snd_interval
*c
= hw_param_interval(params
,
214 SNDRV_PCM_HW_PARAM_CHANNELS
);
215 struct snd_mask
*f
= hw_param_mask(params
, SNDRV_PCM_HW_PARAM_FORMAT
);
216 struct snd_interval ch
;
219 snd_interval_any(&ch
);
221 fmask
= f
->bits
[0] + ((u64
)f
->bits
[1] << 32);
223 /* S32_BE is mono (and stereo) only */
224 if (fmask
== SNDRV_PCM_FMTBIT_S32_BE
) {
226 #ifdef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
231 /* U8 is stereo only */
232 } else if (fmask
== SNDRV_PCM_FMTBIT_U8
)
234 /* S16_LE and S24_3LE must be at least stereo */
235 else if (!(fmask
& ~(SNDRV_PCM_FMTBIT_S16_LE
|
236 SNDRV_PCM_FMTBIT_S24_3LE
)))
241 return snd_interval_refine(c
, &ch
);
246 /* Since the sample rate is a global setting, do allow the user to change the
247 sample rate only if there is only one pcm device open. */
248 static int hw_rule_sample_rate(struct snd_pcm_hw_params
*params
,
249 struct snd_pcm_hw_rule
*rule
)
251 struct snd_interval
*rate
= hw_param_interval(params
,
252 SNDRV_PCM_HW_PARAM_RATE
);
253 struct echoaudio
*chip
= rule
->private;
254 struct snd_interval fixed
;
256 if (!chip
->can_set_rate
) {
257 snd_interval_any(&fixed
);
258 fixed
.min
= fixed
.max
= chip
->sample_rate
;
259 return snd_interval_refine(rate
, &fixed
);
265 static int pcm_open(struct snd_pcm_substream
*substream
,
266 signed char max_channels
)
268 struct echoaudio
*chip
;
269 struct snd_pcm_runtime
*runtime
;
270 struct audiopipe
*pipe
;
273 if (max_channels
<= 0)
276 chip
= snd_pcm_substream_chip(substream
);
277 runtime
= substream
->runtime
;
279 pipe
= kzalloc(sizeof(struct audiopipe
), GFP_KERNEL
);
282 pipe
->index
= -1; /* Not configured yet */
284 /* Set up hw capabilities and contraints */
285 memcpy(&pipe
->hw
, &pcm_hardware_skel
, sizeof(struct snd_pcm_hardware
));
286 DE_HWP(("max_channels=%d\n", max_channels
));
287 pipe
->constr
.list
= channels_list
;
288 pipe
->constr
.mask
= 0;
289 for (i
= 0; channels_list
[i
] <= max_channels
; i
++);
290 pipe
->constr
.count
= i
;
291 if (pipe
->hw
.channels_max
> max_channels
)
292 pipe
->hw
.channels_max
= max_channels
;
293 if (chip
->digital_mode
== DIGITAL_MODE_ADAT
) {
294 pipe
->hw
.rate_max
= 48000;
295 pipe
->hw
.rates
&= SNDRV_PCM_RATE_8000_48000
;
298 runtime
->hw
= pipe
->hw
;
299 runtime
->private_data
= pipe
;
300 runtime
->private_free
= audiopipe_free
;
301 snd_pcm_set_sync(substream
);
303 /* Only mono and any even number of channels are allowed */
304 if ((err
= snd_pcm_hw_constraint_list(runtime
, 0,
305 SNDRV_PCM_HW_PARAM_CHANNELS
,
309 /* All periods should have the same size */
310 if ((err
= snd_pcm_hw_constraint_integer(runtime
,
311 SNDRV_PCM_HW_PARAM_PERIODS
)) < 0)
314 /* The hw accesses memory in chunks 32 frames long and they should be
315 32-bytes-aligned. It's not a requirement, but it seems that IRQs are
316 generated with a resolution of 32 frames. Thus we need the following */
317 if ((err
= snd_pcm_hw_constraint_step(runtime
, 0,
318 SNDRV_PCM_HW_PARAM_PERIOD_SIZE
,
321 if ((err
= snd_pcm_hw_constraint_step(runtime
, 0,
322 SNDRV_PCM_HW_PARAM_BUFFER_SIZE
,
326 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
327 SNDRV_PCM_HW_PARAM_RATE
,
328 hw_rule_sample_rate
, chip
,
329 SNDRV_PCM_HW_PARAM_RATE
, -1)) < 0)
332 /* Finally allocate a page for the scatter-gather list */
333 if ((err
= snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV
,
334 snd_dma_pci_data(chip
->pci
),
335 PAGE_SIZE
, &pipe
->sgpage
)) < 0) {
336 DE_HWP(("s-g list allocation failed\n"));
345 static int pcm_analog_in_open(struct snd_pcm_substream
*substream
)
347 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
350 DE_ACT(("pcm_analog_in_open\n"));
351 if ((err
= pcm_open(substream
, num_analog_busses_in(chip
) -
352 substream
->number
)) < 0)
354 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
355 SNDRV_PCM_HW_PARAM_CHANNELS
,
356 hw_rule_capture_channels_by_format
, NULL
,
357 SNDRV_PCM_HW_PARAM_FORMAT
, -1)) < 0)
359 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
360 SNDRV_PCM_HW_PARAM_FORMAT
,
361 hw_rule_capture_format_by_channels
, NULL
,
362 SNDRV_PCM_HW_PARAM_CHANNELS
, -1)) < 0)
364 atomic_inc(&chip
->opencount
);
365 if (atomic_read(&chip
->opencount
) > 1 && chip
->rate_set
)
366 chip
->can_set_rate
=0;
367 DE_HWP(("pcm_analog_in_open cs=%d oc=%d r=%d\n",
368 chip
->can_set_rate
, atomic_read(&chip
->opencount
),
375 static int pcm_analog_out_open(struct snd_pcm_substream
*substream
)
377 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
378 int max_channels
, err
;
380 #ifdef ECHOCARD_HAS_VMIXER
381 max_channels
= num_pipes_out(chip
);
383 max_channels
= num_analog_busses_out(chip
);
385 DE_ACT(("pcm_analog_out_open\n"));
386 if ((err
= pcm_open(substream
, max_channels
- substream
->number
)) < 0)
388 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
389 SNDRV_PCM_HW_PARAM_CHANNELS
,
390 hw_rule_playback_channels_by_format
,
392 SNDRV_PCM_HW_PARAM_FORMAT
, -1)) < 0)
394 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
395 SNDRV_PCM_HW_PARAM_FORMAT
,
396 hw_rule_playback_format_by_channels
,
398 SNDRV_PCM_HW_PARAM_CHANNELS
, -1)) < 0)
400 atomic_inc(&chip
->opencount
);
401 if (atomic_read(&chip
->opencount
) > 1 && chip
->rate_set
)
402 chip
->can_set_rate
=0;
403 DE_HWP(("pcm_analog_out_open cs=%d oc=%d r=%d\n",
404 chip
->can_set_rate
, atomic_read(&chip
->opencount
),
411 #ifdef ECHOCARD_HAS_DIGITAL_IO
413 static int pcm_digital_in_open(struct snd_pcm_substream
*substream
)
415 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
416 int err
, max_channels
;
418 DE_ACT(("pcm_digital_in_open\n"));
419 max_channels
= num_digital_busses_in(chip
) - substream
->number
;
420 mutex_lock(&chip
->mode_mutex
);
421 if (chip
->digital_mode
== DIGITAL_MODE_ADAT
)
422 err
= pcm_open(substream
, max_channels
);
423 else /* If the card has ADAT, subtract the 6 channels
424 * that S/PDIF doesn't have
426 err
= pcm_open(substream
, max_channels
- ECHOCARD_HAS_ADAT
);
431 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
432 SNDRV_PCM_HW_PARAM_CHANNELS
,
433 hw_rule_capture_channels_by_format
, NULL
,
434 SNDRV_PCM_HW_PARAM_FORMAT
, -1)) < 0)
436 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
437 SNDRV_PCM_HW_PARAM_FORMAT
,
438 hw_rule_capture_format_by_channels
, NULL
,
439 SNDRV_PCM_HW_PARAM_CHANNELS
, -1)) < 0)
442 atomic_inc(&chip
->opencount
);
443 if (atomic_read(&chip
->opencount
) > 1 && chip
->rate_set
)
444 chip
->can_set_rate
=0;
447 mutex_unlock(&chip
->mode_mutex
);
453 #ifndef ECHOCARD_HAS_VMIXER /* See the note in snd_echo_new_pcm() */
455 static int pcm_digital_out_open(struct snd_pcm_substream
*substream
)
457 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
458 int err
, max_channels
;
460 DE_ACT(("pcm_digital_out_open\n"));
461 max_channels
= num_digital_busses_out(chip
) - substream
->number
;
462 mutex_lock(&chip
->mode_mutex
);
463 if (chip
->digital_mode
== DIGITAL_MODE_ADAT
)
464 err
= pcm_open(substream
, max_channels
);
465 else /* If the card has ADAT, subtract the 6 channels
466 * that S/PDIF doesn't have
468 err
= pcm_open(substream
, max_channels
- ECHOCARD_HAS_ADAT
);
473 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
474 SNDRV_PCM_HW_PARAM_CHANNELS
,
475 hw_rule_playback_channels_by_format
,
476 NULL
, SNDRV_PCM_HW_PARAM_FORMAT
,
479 if ((err
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
480 SNDRV_PCM_HW_PARAM_FORMAT
,
481 hw_rule_playback_format_by_channels
,
482 NULL
, SNDRV_PCM_HW_PARAM_CHANNELS
,
485 atomic_inc(&chip
->opencount
);
486 if (atomic_read(&chip
->opencount
) > 1 && chip
->rate_set
)
487 chip
->can_set_rate
=0;
489 mutex_unlock(&chip
->mode_mutex
);
493 #endif /* !ECHOCARD_HAS_VMIXER */
495 #endif /* ECHOCARD_HAS_DIGITAL_IO */
499 static int pcm_close(struct snd_pcm_substream
*substream
)
501 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
504 /* Nothing to do here. Audio is already off and pipe will be
505 * freed by its callback
507 DE_ACT(("pcm_close\n"));
509 atomic_dec(&chip
->opencount
);
510 oc
= atomic_read(&chip
->opencount
);
511 DE_ACT(("pcm_close oc=%d cs=%d rs=%d\n", oc
,
512 chip
->can_set_rate
, chip
->rate_set
));
514 chip
->can_set_rate
= 1;
517 DE_ACT(("pcm_close2 oc=%d cs=%d rs=%d\n", oc
,
518 chip
->can_set_rate
,chip
->rate_set
));
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
)
530 struct echoaudio
*chip
;
531 int err
, per
, rest
, page
, edge
, offs
;
532 struct audiopipe
*pipe
;
534 chip
= snd_pcm_substream_chip(substream
);
535 pipe
= (struct audiopipe
*) substream
->runtime
->private_data
;
537 /* Sets up che hardware. If it's already initialized, reset and
538 * redo with the new parameters
540 spin_lock_irq(&chip
->lock
);
541 if (pipe
->index
>= 0) {
542 DE_HWP(("hwp_ie free(%d)\n", pipe
->index
));
543 err
= free_pipes(chip
, pipe
);
545 chip
->substream
[pipe
->index
] = NULL
;
548 err
= allocate_pipes(chip
, pipe
, pipe_index
, interleave
);
550 spin_unlock_irq(&chip
->lock
);
551 DE_ACT((KERN_NOTICE
"allocate_pipes(%d) err=%d\n",
555 spin_unlock_irq(&chip
->lock
);
556 DE_ACT((KERN_NOTICE
"allocate_pipes()=%d\n", pipe_index
));
558 DE_HWP(("pcm_hw_params (bufsize=%dB periods=%d persize=%dB)\n",
559 params_buffer_bytes(hw_params
), params_periods(hw_params
),
560 params_period_bytes(hw_params
)));
561 err
= snd_pcm_lib_malloc_pages(substream
,
562 params_buffer_bytes(hw_params
));
564 snd_printk(KERN_ERR
"malloc_pages err=%d\n", err
);
565 spin_lock_irq(&chip
->lock
);
566 free_pipes(chip
, pipe
);
567 spin_unlock_irq(&chip
->lock
);
572 sglist_init(chip
, pipe
);
574 for (offs
= page
= per
= 0; offs
< params_buffer_bytes(hw_params
);
576 rest
= params_period_bytes(hw_params
);
577 if (offs
+ rest
> params_buffer_bytes(hw_params
))
578 rest
= params_buffer_bytes(hw_params
) - offs
;
581 addr
= snd_pcm_sgbuf_get_addr(substream
, offs
);
582 if (rest
<= edge
- offs
) {
583 sglist_add_mapping(chip
, pipe
, addr
, rest
);
584 sglist_add_irq(chip
, pipe
);
588 sglist_add_mapping(chip
, pipe
, addr
,
600 /* Close the ring buffer */
601 sglist_wrap(chip
, pipe
);
603 /* This stuff is used by the irq handler, so it must be
604 * initialized before chip->substream
606 chip
->last_period
[pipe_index
] = 0;
607 pipe
->last_counter
= 0;
610 chip
->substream
[pipe_index
] = substream
;
612 spin_lock_irq(&chip
->lock
);
613 set_sample_rate(chip
, hw_params
->rate_num
/ hw_params
->rate_den
);
614 spin_unlock_irq(&chip
->lock
);
615 DE_HWP(("pcm_hw_params ok\n"));
621 static int pcm_analog_in_hw_params(struct snd_pcm_substream
*substream
,
622 struct snd_pcm_hw_params
*hw_params
)
624 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
626 return init_engine(substream
, hw_params
, px_analog_in(chip
) +
627 substream
->number
, params_channels(hw_params
));
632 static int pcm_analog_out_hw_params(struct snd_pcm_substream
*substream
,
633 struct snd_pcm_hw_params
*hw_params
)
635 return init_engine(substream
, hw_params
, substream
->number
,
636 params_channels(hw_params
));
641 #ifdef ECHOCARD_HAS_DIGITAL_IO
643 static int pcm_digital_in_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_in(chip
) +
649 substream
->number
, params_channels(hw_params
));
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
)
658 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
660 return init_engine(substream
, hw_params
, px_digital_out(chip
) +
661 substream
->number
, params_channels(hw_params
));
663 #endif /* !ECHOCARD_HAS_VMIXER */
665 #endif /* ECHOCARD_HAS_DIGITAL_IO */
669 static int pcm_hw_free(struct snd_pcm_substream
*substream
)
671 struct echoaudio
*chip
;
672 struct audiopipe
*pipe
;
674 chip
= snd_pcm_substream_chip(substream
);
675 pipe
= (struct audiopipe
*) substream
->runtime
->private_data
;
677 spin_lock_irq(&chip
->lock
);
678 if (pipe
->index
>= 0) {
679 DE_HWP(("pcm_hw_free(%d)\n", pipe
->index
));
680 free_pipes(chip
, pipe
);
681 chip
->substream
[pipe
->index
] = NULL
;
684 spin_unlock_irq(&chip
->lock
);
686 DE_HWP(("pcm_hw_freed\n"));
687 snd_pcm_lib_free_pages(substream
);
693 static int pcm_prepare(struct snd_pcm_substream
*substream
)
695 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
696 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
697 struct audioformat format
;
698 int pipe_index
= ((struct audiopipe
*)runtime
->private_data
)->index
;
700 DE_HWP(("Prepare rate=%d format=%d channels=%d\n",
701 runtime
->rate
, runtime
->format
, runtime
->channels
));
702 format
.interleave
= runtime
->channels
;
703 format
.data_are_bigendian
= 0;
704 format
.mono_to_stereo
= 0;
705 switch (runtime
->format
) {
706 case SNDRV_PCM_FORMAT_U8
:
707 format
.bits_per_sample
= 8;
709 case SNDRV_PCM_FORMAT_S16_LE
:
710 format
.bits_per_sample
= 16;
712 case SNDRV_PCM_FORMAT_S24_3LE
:
713 format
.bits_per_sample
= 24;
715 case SNDRV_PCM_FORMAT_S32_BE
:
716 format
.data_are_bigendian
= 1;
717 case SNDRV_PCM_FORMAT_S32_LE
:
718 format
.bits_per_sample
= 32;
721 DE_HWP(("Prepare error: unsupported format %d\n",
726 if (snd_BUG_ON(pipe_index
>= px_num(chip
)))
728 if (snd_BUG_ON(!is_pipe_allocated(chip
, pipe_index
)))
730 set_audio_format(chip
, pipe_index
, &format
);
736 static int pcm_trigger(struct snd_pcm_substream
*substream
, int cmd
)
738 struct echoaudio
*chip
= snd_pcm_substream_chip(substream
);
739 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
740 struct audiopipe
*pipe
= runtime
->private_data
;
743 struct snd_pcm_substream
*s
;
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
);
754 spin_lock(&chip
->lock
);
756 case SNDRV_PCM_TRIGGER_RESUME
:
757 DE_ACT(("pcm_trigger resume\n"));
758 case SNDRV_PCM_TRIGGER_START
:
759 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
760 DE_ACT(("pcm_trigger start\n"));
761 for (i
= 0; i
< DSP_MAXPIPES
; i
++) {
762 if (channelmask
& (1 << i
)) {
763 pipe
= chip
->substream
[i
]->runtime
->private_data
;
764 switch (pipe
->state
) {
765 case PIPE_STATE_STOPPED
:
766 chip
->last_period
[i
] = 0;
767 pipe
->last_counter
= 0;
769 *pipe
->dma_counter
= 0;
770 case PIPE_STATE_PAUSED
:
771 pipe
->state
= PIPE_STATE_STARTED
;
773 case PIPE_STATE_STARTED
:
778 err
= start_transport(chip
, channelmask
,
779 chip
->pipe_cyclic_mask
);
781 case SNDRV_PCM_TRIGGER_SUSPEND
:
782 DE_ACT(("pcm_trigger suspend\n"));
783 case SNDRV_PCM_TRIGGER_STOP
:
784 DE_ACT(("pcm_trigger stop\n"));
785 for (i
= 0; i
< DSP_MAXPIPES
; i
++) {
786 if (channelmask
& (1 << i
)) {
787 pipe
= chip
->substream
[i
]->runtime
->private_data
;
788 pipe
->state
= PIPE_STATE_STOPPED
;
791 err
= stop_transport(chip
, channelmask
);
793 case SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
794 DE_ACT(("pcm_trigger pause\n"));
795 for (i
= 0; i
< DSP_MAXPIPES
; i
++) {
796 if (channelmask
& (1 << i
)) {
797 pipe
= chip
->substream
[i
]->runtime
->private_data
;
798 pipe
->state
= PIPE_STATE_PAUSED
;
801 err
= pause_transport(chip
, channelmask
);
806 spin_unlock(&chip
->lock
);
812 static snd_pcm_uframes_t
pcm_pointer(struct snd_pcm_substream
*substream
)
814 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
815 struct audiopipe
*pipe
= runtime
->private_data
;
816 size_t cnt
, bufsize
, pos
;
818 cnt
= le32_to_cpu(*pipe
->dma_counter
);
819 pipe
->position
+= cnt
- pipe
->last_counter
;
820 pipe
->last_counter
= cnt
;
821 bufsize
= substream
->runtime
->buffer_size
;
822 pos
= bytes_to_frames(substream
->runtime
, pipe
->position
);
824 while (pos
>= bufsize
) {
825 pipe
->position
-= frames_to_bytes(substream
->runtime
, bufsize
);
833 /* pcm *_ops structures */
834 static struct snd_pcm_ops analog_playback_ops
= {
835 .open
= pcm_analog_out_open
,
837 .ioctl
= snd_pcm_lib_ioctl
,
838 .hw_params
= pcm_analog_out_hw_params
,
839 .hw_free
= pcm_hw_free
,
840 .prepare
= pcm_prepare
,
841 .trigger
= pcm_trigger
,
842 .pointer
= pcm_pointer
,
843 .page
= snd_pcm_sgbuf_ops_page
,
845 static struct snd_pcm_ops analog_capture_ops
= {
846 .open
= pcm_analog_in_open
,
848 .ioctl
= snd_pcm_lib_ioctl
,
849 .hw_params
= pcm_analog_in_hw_params
,
850 .hw_free
= pcm_hw_free
,
851 .prepare
= pcm_prepare
,
852 .trigger
= pcm_trigger
,
853 .pointer
= pcm_pointer
,
854 .page
= snd_pcm_sgbuf_ops_page
,
856 #ifdef ECHOCARD_HAS_DIGITAL_IO
857 #ifndef ECHOCARD_HAS_VMIXER
858 static struct snd_pcm_ops digital_playback_ops
= {
859 .open
= pcm_digital_out_open
,
861 .ioctl
= snd_pcm_lib_ioctl
,
862 .hw_params
= pcm_digital_out_hw_params
,
863 .hw_free
= pcm_hw_free
,
864 .prepare
= pcm_prepare
,
865 .trigger
= pcm_trigger
,
866 .pointer
= pcm_pointer
,
867 .page
= snd_pcm_sgbuf_ops_page
,
869 #endif /* !ECHOCARD_HAS_VMIXER */
870 static struct snd_pcm_ops digital_capture_ops
= {
871 .open
= pcm_digital_in_open
,
873 .ioctl
= snd_pcm_lib_ioctl
,
874 .hw_params
= pcm_digital_in_hw_params
,
875 .hw_free
= pcm_hw_free
,
876 .prepare
= pcm_prepare
,
877 .trigger
= pcm_trigger
,
878 .pointer
= pcm_pointer
,
879 .page
= snd_pcm_sgbuf_ops_page
,
881 #endif /* ECHOCARD_HAS_DIGITAL_IO */
885 /* Preallocate memory only for the first substream because it's the most
888 static int snd_echo_preallocate_pages(struct snd_pcm
*pcm
, struct device
*dev
)
890 struct snd_pcm_substream
*ss
;
893 for (stream
= 0; stream
< 2; stream
++)
894 for (ss
= pcm
->streams
[stream
].substream
; ss
; ss
= ss
->next
) {
895 err
= snd_pcm_lib_preallocate_pages(ss
, SNDRV_DMA_TYPE_DEV_SG
,
897 ss
->number
? 0 : 128<<10,
907 /*<--snd_echo_probe() */
908 static int __devinit
snd_echo_new_pcm(struct echoaudio
*chip
)
913 #ifdef ECHOCARD_HAS_VMIXER
914 /* This card has a Vmixer, that is there is no direct mapping from PCM
915 streams to physical outputs. The user can mix the streams as he wishes
916 via control interface and it's possible to send any stream to any
917 output, thus it makes no sense to keep analog and digital outputs
920 /* PCM#0 Virtual outputs and analog inputs */
921 if ((err
= snd_pcm_new(chip
->card
, "PCM", 0, num_pipes_out(chip
),
922 num_analog_busses_in(chip
), &pcm
)) < 0)
924 pcm
->private_data
= chip
;
925 chip
->analog_pcm
= pcm
;
926 strcpy(pcm
->name
, chip
->card
->shortname
);
927 snd_pcm_set_ops(pcm
, SNDRV_PCM_STREAM_PLAYBACK
, &analog_playback_ops
);
928 snd_pcm_set_ops(pcm
, SNDRV_PCM_STREAM_CAPTURE
, &analog_capture_ops
);
929 if ((err
= snd_echo_preallocate_pages(pcm
, snd_dma_pci_data(chip
->pci
))) < 0)
931 DE_INIT(("Analog PCM ok\n"));
933 #ifdef ECHOCARD_HAS_DIGITAL_IO
934 /* PCM#1 Digital inputs, no outputs */
935 if ((err
= snd_pcm_new(chip
->card
, "Digital PCM", 1, 0,
936 num_digital_busses_in(chip
), &pcm
)) < 0)
938 pcm
->private_data
= chip
;
939 chip
->digital_pcm
= pcm
;
940 strcpy(pcm
->name
, chip
->card
->shortname
);
941 snd_pcm_set_ops(pcm
, SNDRV_PCM_STREAM_CAPTURE
, &digital_capture_ops
);
942 if ((err
= snd_echo_preallocate_pages(pcm
, snd_dma_pci_data(chip
->pci
))) < 0)
944 DE_INIT(("Digital PCM ok\n"));
945 #endif /* ECHOCARD_HAS_DIGITAL_IO */
947 #else /* ECHOCARD_HAS_VMIXER */
949 /* The card can manage substreams formed by analog and digital channels
950 at the same time, but I prefer to keep analog and digital channels
951 separated, because that mixed thing is confusing and useless. So we
952 register two PCM devices: */
954 /* PCM#0 Analog i/o */
955 if ((err
= snd_pcm_new(chip
->card
, "Analog PCM", 0,
956 num_analog_busses_out(chip
),
957 num_analog_busses_in(chip
), &pcm
)) < 0)
959 pcm
->private_data
= chip
;
960 chip
->analog_pcm
= pcm
;
961 strcpy(pcm
->name
, chip
->card
->shortname
);
962 snd_pcm_set_ops(pcm
, SNDRV_PCM_STREAM_PLAYBACK
, &analog_playback_ops
);
963 snd_pcm_set_ops(pcm
, SNDRV_PCM_STREAM_CAPTURE
, &analog_capture_ops
);
964 if ((err
= snd_echo_preallocate_pages(pcm
, snd_dma_pci_data(chip
->pci
))) < 0)
966 DE_INIT(("Analog PCM ok\n"));
968 #ifdef ECHOCARD_HAS_DIGITAL_IO
969 /* PCM#1 Digital i/o */
970 if ((err
= snd_pcm_new(chip
->card
, "Digital PCM", 1,
971 num_digital_busses_out(chip
),
972 num_digital_busses_in(chip
), &pcm
)) < 0)
974 pcm
->private_data
= chip
;
975 chip
->digital_pcm
= pcm
;
976 strcpy(pcm
->name
, chip
->card
->shortname
);
977 snd_pcm_set_ops(pcm
, SNDRV_PCM_STREAM_PLAYBACK
, &digital_playback_ops
);
978 snd_pcm_set_ops(pcm
, SNDRV_PCM_STREAM_CAPTURE
, &digital_capture_ops
);
979 if ((err
= snd_echo_preallocate_pages(pcm
, snd_dma_pci_data(chip
->pci
))) < 0)
981 DE_INIT(("Digital PCM ok\n"));
982 #endif /* ECHOCARD_HAS_DIGITAL_IO */
984 #endif /* ECHOCARD_HAS_VMIXER */
992 /******************************************************************************
994 ******************************************************************************/
996 #if !defined(ECHOCARD_HAS_VMIXER) || defined(ECHOCARD_HAS_LINE_OUT_GAIN)
998 /******************* PCM output volume *******************/
999 static int snd_echo_output_gain_info(struct snd_kcontrol
*kcontrol
,
1000 struct snd_ctl_elem_info
*uinfo
)
1002 struct echoaudio
*chip
;
1004 chip
= snd_kcontrol_chip(kcontrol
);
1005 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_INTEGER
;
1006 uinfo
->count
= num_busses_out(chip
);
1007 uinfo
->value
.integer
.min
= ECHOGAIN_MINOUT
;
1008 uinfo
->value
.integer
.max
= ECHOGAIN_MAXOUT
;
1012 static int snd_echo_output_gain_get(struct snd_kcontrol
*kcontrol
,
1013 struct snd_ctl_elem_value
*ucontrol
)
1015 struct echoaudio
*chip
;
1018 chip
= snd_kcontrol_chip(kcontrol
);
1019 for (c
= 0; c
< num_busses_out(chip
); c
++)
1020 ucontrol
->value
.integer
.value
[c
] = chip
->output_gain
[c
];
1024 static int snd_echo_output_gain_put(struct snd_kcontrol
*kcontrol
,
1025 struct snd_ctl_elem_value
*ucontrol
)
1027 struct echoaudio
*chip
;
1028 int c
, changed
, gain
;
1031 chip
= snd_kcontrol_chip(kcontrol
);
1032 spin_lock_irq(&chip
->lock
);
1033 for (c
= 0; c
< num_busses_out(chip
); c
++) {
1034 gain
= ucontrol
->value
.integer
.value
[c
];
1035 /* Ignore out of range values */
1036 if (gain
< ECHOGAIN_MINOUT
|| gain
> ECHOGAIN_MAXOUT
)
1038 if (chip
->output_gain
[c
] != gain
) {
1039 set_output_gain(chip
, c
, gain
);
1044 update_output_line_level(chip
);
1045 spin_unlock_irq(&chip
->lock
);
1049 #ifdef ECHOCARD_HAS_LINE_OUT_GAIN
1050 /* On the Mia this one controls the line-out volume */
1051 static struct snd_kcontrol_new snd_echo_line_output_gain __devinitdata
= {
1052 .name
= "Line Playback Volume",
1053 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1054 .access
= SNDRV_CTL_ELEM_ACCESS_READWRITE
|
1055 SNDRV_CTL_ELEM_ACCESS_TLV_READ
,
1056 .info
= snd_echo_output_gain_info
,
1057 .get
= snd_echo_output_gain_get
,
1058 .put
= snd_echo_output_gain_put
,
1059 .tlv
= {.p
= db_scale_output_gain
},
1062 static struct snd_kcontrol_new snd_echo_pcm_output_gain __devinitdata
= {
1063 .name
= "PCM Playback Volume",
1064 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1065 .access
= SNDRV_CTL_ELEM_ACCESS_READWRITE
| SNDRV_CTL_ELEM_ACCESS_TLV_READ
,
1066 .info
= snd_echo_output_gain_info
,
1067 .get
= snd_echo_output_gain_get
,
1068 .put
= snd_echo_output_gain_put
,
1069 .tlv
= {.p
= db_scale_output_gain
},
1073 #endif /* !ECHOCARD_HAS_VMIXER || ECHOCARD_HAS_LINE_OUT_GAIN */
1077 #ifdef ECHOCARD_HAS_INPUT_GAIN
1079 /******************* Analog input volume *******************/
1080 static int snd_echo_input_gain_info(struct snd_kcontrol
*kcontrol
,
1081 struct snd_ctl_elem_info
*uinfo
)
1083 struct echoaudio
*chip
;
1085 chip
= snd_kcontrol_chip(kcontrol
);
1086 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_INTEGER
;
1087 uinfo
->count
= num_analog_busses_in(chip
);
1088 uinfo
->value
.integer
.min
= ECHOGAIN_MININP
;
1089 uinfo
->value
.integer
.max
= ECHOGAIN_MAXINP
;
1093 static int snd_echo_input_gain_get(struct snd_kcontrol
*kcontrol
,
1094 struct snd_ctl_elem_value
*ucontrol
)
1096 struct echoaudio
*chip
;
1099 chip
= snd_kcontrol_chip(kcontrol
);
1100 for (c
= 0; c
< num_analog_busses_in(chip
); c
++)
1101 ucontrol
->value
.integer
.value
[c
] = chip
->input_gain
[c
];
1105 static int snd_echo_input_gain_put(struct snd_kcontrol
*kcontrol
,
1106 struct snd_ctl_elem_value
*ucontrol
)
1108 struct echoaudio
*chip
;
1109 int c
, gain
, changed
;
1112 chip
= snd_kcontrol_chip(kcontrol
);
1113 spin_lock_irq(&chip
->lock
);
1114 for (c
= 0; c
< num_analog_busses_in(chip
); c
++) {
1115 gain
= ucontrol
->value
.integer
.value
[c
];
1116 /* Ignore out of range values */
1117 if (gain
< ECHOGAIN_MININP
|| gain
> ECHOGAIN_MAXINP
)
1119 if (chip
->input_gain
[c
] != gain
) {
1120 set_input_gain(chip
, c
, gain
);
1125 update_input_line_level(chip
);
1126 spin_unlock_irq(&chip
->lock
);
1130 static const DECLARE_TLV_DB_SCALE(db_scale_input_gain
, -2500, 50, 0);
1132 static struct snd_kcontrol_new snd_echo_line_input_gain __devinitdata
= {
1133 .name
= "Line Capture Volume",
1134 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1135 .access
= SNDRV_CTL_ELEM_ACCESS_READWRITE
| SNDRV_CTL_ELEM_ACCESS_TLV_READ
,
1136 .info
= snd_echo_input_gain_info
,
1137 .get
= snd_echo_input_gain_get
,
1138 .put
= snd_echo_input_gain_put
,
1139 .tlv
= {.p
= db_scale_input_gain
},
1142 #endif /* ECHOCARD_HAS_INPUT_GAIN */
1146 #ifdef ECHOCARD_HAS_OUTPUT_NOMINAL_LEVEL
1148 /************ Analog output nominal level (+4dBu / -10dBV) ***************/
1149 static int snd_echo_output_nominal_info (struct snd_kcontrol
*kcontrol
,
1150 struct snd_ctl_elem_info
*uinfo
)
1152 struct echoaudio
*chip
;
1154 chip
= snd_kcontrol_chip(kcontrol
);
1155 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_BOOLEAN
;
1156 uinfo
->count
= num_analog_busses_out(chip
);
1157 uinfo
->value
.integer
.min
= 0;
1158 uinfo
->value
.integer
.max
= 1;
1162 static int snd_echo_output_nominal_get(struct snd_kcontrol
*kcontrol
,
1163 struct snd_ctl_elem_value
*ucontrol
)
1165 struct echoaudio
*chip
;
1168 chip
= snd_kcontrol_chip(kcontrol
);
1169 for (c
= 0; c
< num_analog_busses_out(chip
); c
++)
1170 ucontrol
->value
.integer
.value
[c
] = chip
->nominal_level
[c
];
1174 static int snd_echo_output_nominal_put(struct snd_kcontrol
*kcontrol
,
1175 struct snd_ctl_elem_value
*ucontrol
)
1177 struct echoaudio
*chip
;
1181 chip
= snd_kcontrol_chip(kcontrol
);
1182 spin_lock_irq(&chip
->lock
);
1183 for (c
= 0; c
< num_analog_busses_out(chip
); c
++) {
1184 if (chip
->nominal_level
[c
] != ucontrol
->value
.integer
.value
[c
]) {
1185 set_nominal_level(chip
, c
,
1186 ucontrol
->value
.integer
.value
[c
]);
1191 update_output_line_level(chip
);
1192 spin_unlock_irq(&chip
->lock
);
1196 static struct snd_kcontrol_new snd_echo_output_nominal_level __devinitdata
= {
1197 .name
= "Line Playback Switch (-10dBV)",
1198 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1199 .info
= snd_echo_output_nominal_info
,
1200 .get
= snd_echo_output_nominal_get
,
1201 .put
= snd_echo_output_nominal_put
,
1204 #endif /* ECHOCARD_HAS_OUTPUT_NOMINAL_LEVEL */
1208 #ifdef ECHOCARD_HAS_INPUT_NOMINAL_LEVEL
1210 /*************** Analog input nominal level (+4dBu / -10dBV) ***************/
1211 static int snd_echo_input_nominal_info(struct snd_kcontrol
*kcontrol
,
1212 struct snd_ctl_elem_info
*uinfo
)
1214 struct echoaudio
*chip
;
1216 chip
= snd_kcontrol_chip(kcontrol
);
1217 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_BOOLEAN
;
1218 uinfo
->count
= num_analog_busses_in(chip
);
1219 uinfo
->value
.integer
.min
= 0;
1220 uinfo
->value
.integer
.max
= 1;
1224 static int snd_echo_input_nominal_get(struct snd_kcontrol
*kcontrol
,
1225 struct snd_ctl_elem_value
*ucontrol
)
1227 struct echoaudio
*chip
;
1230 chip
= snd_kcontrol_chip(kcontrol
);
1231 for (c
= 0; c
< num_analog_busses_in(chip
); c
++)
1232 ucontrol
->value
.integer
.value
[c
] =
1233 chip
->nominal_level
[bx_analog_in(chip
) + c
];
1237 static int snd_echo_input_nominal_put(struct snd_kcontrol
*kcontrol
,
1238 struct snd_ctl_elem_value
*ucontrol
)
1240 struct echoaudio
*chip
;
1244 chip
= snd_kcontrol_chip(kcontrol
);
1245 spin_lock_irq(&chip
->lock
);
1246 for (c
= 0; c
< num_analog_busses_in(chip
); c
++) {
1247 if (chip
->nominal_level
[bx_analog_in(chip
) + c
] !=
1248 ucontrol
->value
.integer
.value
[c
]) {
1249 set_nominal_level(chip
, bx_analog_in(chip
) + c
,
1250 ucontrol
->value
.integer
.value
[c
]);
1255 update_output_line_level(chip
); /* "Output" is not a mistake
1258 spin_unlock_irq(&chip
->lock
);
1262 static struct snd_kcontrol_new snd_echo_intput_nominal_level __devinitdata
= {
1263 .name
= "Line Capture Switch (-10dBV)",
1264 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1265 .info
= snd_echo_input_nominal_info
,
1266 .get
= snd_echo_input_nominal_get
,
1267 .put
= snd_echo_input_nominal_put
,
1270 #endif /* ECHOCARD_HAS_INPUT_NOMINAL_LEVEL */
1274 #ifdef ECHOCARD_HAS_MONITOR
1276 /******************* Monitor mixer *******************/
1277 static int snd_echo_mixer_info(struct snd_kcontrol
*kcontrol
,
1278 struct snd_ctl_elem_info
*uinfo
)
1280 struct echoaudio
*chip
;
1282 chip
= snd_kcontrol_chip(kcontrol
);
1283 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_INTEGER
;
1285 uinfo
->value
.integer
.min
= ECHOGAIN_MINOUT
;
1286 uinfo
->value
.integer
.max
= ECHOGAIN_MAXOUT
;
1287 uinfo
->dimen
.d
[0] = num_busses_out(chip
);
1288 uinfo
->dimen
.d
[1] = num_busses_in(chip
);
1292 static int snd_echo_mixer_get(struct snd_kcontrol
*kcontrol
,
1293 struct snd_ctl_elem_value
*ucontrol
)
1295 struct echoaudio
*chip
;
1297 chip
= snd_kcontrol_chip(kcontrol
);
1298 ucontrol
->value
.integer
.value
[0] =
1299 chip
->monitor_gain
[ucontrol
->id
.index
/ num_busses_in(chip
)]
1300 [ucontrol
->id
.index
% num_busses_in(chip
)];
1304 static int snd_echo_mixer_put(struct snd_kcontrol
*kcontrol
,
1305 struct snd_ctl_elem_value
*ucontrol
)
1307 struct echoaudio
*chip
;
1312 chip
= snd_kcontrol_chip(kcontrol
);
1313 out
= ucontrol
->id
.index
/ num_busses_in(chip
);
1314 in
= ucontrol
->id
.index
% num_busses_in(chip
);
1315 gain
= ucontrol
->value
.integer
.value
[0];
1316 if (gain
< ECHOGAIN_MINOUT
|| gain
> ECHOGAIN_MAXOUT
)
1318 if (chip
->monitor_gain
[out
][in
] != gain
) {
1319 spin_lock_irq(&chip
->lock
);
1320 set_monitor_gain(chip
, out
, in
, gain
);
1321 update_output_line_level(chip
);
1322 spin_unlock_irq(&chip
->lock
);
1328 static struct snd_kcontrol_new snd_echo_monitor_mixer __devinitdata
= {
1329 .name
= "Monitor Mixer Volume",
1330 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1331 .access
= SNDRV_CTL_ELEM_ACCESS_READWRITE
| SNDRV_CTL_ELEM_ACCESS_TLV_READ
,
1332 .info
= snd_echo_mixer_info
,
1333 .get
= snd_echo_mixer_get
,
1334 .put
= snd_echo_mixer_put
,
1335 .tlv
= {.p
= db_scale_output_gain
},
1338 #endif /* ECHOCARD_HAS_MONITOR */
1342 #ifdef ECHOCARD_HAS_VMIXER
1344 /******************* Vmixer *******************/
1345 static int snd_echo_vmixer_info(struct snd_kcontrol
*kcontrol
,
1346 struct snd_ctl_elem_info
*uinfo
)
1348 struct echoaudio
*chip
;
1350 chip
= snd_kcontrol_chip(kcontrol
);
1351 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_INTEGER
;
1353 uinfo
->value
.integer
.min
= ECHOGAIN_MINOUT
;
1354 uinfo
->value
.integer
.max
= ECHOGAIN_MAXOUT
;
1355 uinfo
->dimen
.d
[0] = num_busses_out(chip
);
1356 uinfo
->dimen
.d
[1] = num_pipes_out(chip
);
1360 static int snd_echo_vmixer_get(struct snd_kcontrol
*kcontrol
,
1361 struct snd_ctl_elem_value
*ucontrol
)
1363 struct echoaudio
*chip
;
1365 chip
= snd_kcontrol_chip(kcontrol
);
1366 ucontrol
->value
.integer
.value
[0] =
1367 chip
->vmixer_gain
[ucontrol
->id
.index
/ num_pipes_out(chip
)]
1368 [ucontrol
->id
.index
% num_pipes_out(chip
)];
1372 static int snd_echo_vmixer_put(struct snd_kcontrol
*kcontrol
,
1373 struct snd_ctl_elem_value
*ucontrol
)
1375 struct echoaudio
*chip
;
1380 chip
= snd_kcontrol_chip(kcontrol
);
1381 out
= ucontrol
->id
.index
/ num_pipes_out(chip
);
1382 vch
= ucontrol
->id
.index
% num_pipes_out(chip
);
1383 gain
= ucontrol
->value
.integer
.value
[0];
1384 if (gain
< ECHOGAIN_MINOUT
|| gain
> ECHOGAIN_MAXOUT
)
1386 if (chip
->vmixer_gain
[out
][vch
] != ucontrol
->value
.integer
.value
[0]) {
1387 spin_lock_irq(&chip
->lock
);
1388 set_vmixer_gain(chip
, out
, vch
, ucontrol
->value
.integer
.value
[0]);
1389 update_vmixer_level(chip
);
1390 spin_unlock_irq(&chip
->lock
);
1396 static struct snd_kcontrol_new snd_echo_vmixer __devinitdata
= {
1397 .name
= "VMixer Volume",
1398 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1399 .access
= SNDRV_CTL_ELEM_ACCESS_READWRITE
| SNDRV_CTL_ELEM_ACCESS_TLV_READ
,
1400 .info
= snd_echo_vmixer_info
,
1401 .get
= snd_echo_vmixer_get
,
1402 .put
= snd_echo_vmixer_put
,
1403 .tlv
= {.p
= db_scale_output_gain
},
1406 #endif /* ECHOCARD_HAS_VMIXER */
1410 #ifdef ECHOCARD_HAS_DIGITAL_MODE_SWITCH
1412 /******************* Digital mode switch *******************/
1413 static int snd_echo_digital_mode_info(struct snd_kcontrol
*kcontrol
,
1414 struct snd_ctl_elem_info
*uinfo
)
1416 static char *names
[4] = {
1417 "S/PDIF Coaxial", "S/PDIF Optical", "ADAT Optical",
1420 struct echoaudio
*chip
;
1422 chip
= snd_kcontrol_chip(kcontrol
);
1423 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_ENUMERATED
;
1424 uinfo
->value
.enumerated
.items
= chip
->num_digital_modes
;
1426 if (uinfo
->value
.enumerated
.item
>= chip
->num_digital_modes
)
1427 uinfo
->value
.enumerated
.item
= chip
->num_digital_modes
- 1;
1428 strcpy(uinfo
->value
.enumerated
.name
, names
[
1429 chip
->digital_mode_list
[uinfo
->value
.enumerated
.item
]]);
1433 static int snd_echo_digital_mode_get(struct snd_kcontrol
*kcontrol
,
1434 struct snd_ctl_elem_value
*ucontrol
)
1436 struct echoaudio
*chip
;
1439 chip
= snd_kcontrol_chip(kcontrol
);
1440 mode
= chip
->digital_mode
;
1441 for (i
= chip
->num_digital_modes
- 1; i
>= 0; i
--)
1442 if (mode
== chip
->digital_mode_list
[i
]) {
1443 ucontrol
->value
.enumerated
.item
[0] = i
;
1449 static int snd_echo_digital_mode_put(struct snd_kcontrol
*kcontrol
,
1450 struct snd_ctl_elem_value
*ucontrol
)
1452 struct echoaudio
*chip
;
1454 unsigned short emode
, dmode
;
1457 chip
= snd_kcontrol_chip(kcontrol
);
1459 emode
= ucontrol
->value
.enumerated
.item
[0];
1460 if (emode
>= chip
->num_digital_modes
)
1462 dmode
= chip
->digital_mode_list
[emode
];
1464 if (dmode
!= chip
->digital_mode
) {
1465 /* mode_mutex is required to make this operation atomic wrt
1466 pcm_digital_*_open() and set_input_clock() functions. */
1467 mutex_lock(&chip
->mode_mutex
);
1469 /* Do not allow the user to change the digital mode when a pcm
1470 device is open because it also changes the number of channels
1471 and the allowed sample rates */
1472 if (atomic_read(&chip
->opencount
)) {
1475 changed
= set_digital_mode(chip
, dmode
);
1476 /* If we had to change the clock source, report it */
1477 if (changed
> 0 && chip
->clock_src_ctl
) {
1478 snd_ctl_notify(chip
->card
,
1479 SNDRV_CTL_EVENT_MASK_VALUE
,
1480 &chip
->clock_src_ctl
->id
);
1481 DE_ACT(("SDM() =%d\n", changed
));
1484 changed
= 1; /* No errors */
1486 mutex_unlock(&chip
->mode_mutex
);
1491 static struct snd_kcontrol_new snd_echo_digital_mode_switch __devinitdata
= {
1492 .name
= "Digital mode Switch",
1493 .iface
= SNDRV_CTL_ELEM_IFACE_CARD
,
1494 .info
= snd_echo_digital_mode_info
,
1495 .get
= snd_echo_digital_mode_get
,
1496 .put
= snd_echo_digital_mode_put
,
1499 #endif /* ECHOCARD_HAS_DIGITAL_MODE_SWITCH */
1503 #ifdef ECHOCARD_HAS_DIGITAL_IO
1505 /******************* S/PDIF mode switch *******************/
1506 static int snd_echo_spdif_mode_info(struct snd_kcontrol
*kcontrol
,
1507 struct snd_ctl_elem_info
*uinfo
)
1509 static char *names
[2] = {"Consumer", "Professional"};
1511 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_ENUMERATED
;
1512 uinfo
->value
.enumerated
.items
= 2;
1514 if (uinfo
->value
.enumerated
.item
)
1515 uinfo
->value
.enumerated
.item
= 1;
1516 strcpy(uinfo
->value
.enumerated
.name
,
1517 names
[uinfo
->value
.enumerated
.item
]);
1521 static int snd_echo_spdif_mode_get(struct snd_kcontrol
*kcontrol
,
1522 struct snd_ctl_elem_value
*ucontrol
)
1524 struct echoaudio
*chip
;
1526 chip
= snd_kcontrol_chip(kcontrol
);
1527 ucontrol
->value
.enumerated
.item
[0] = !!chip
->professional_spdif
;
1531 static int snd_echo_spdif_mode_put(struct snd_kcontrol
*kcontrol
,
1532 struct snd_ctl_elem_value
*ucontrol
)
1534 struct echoaudio
*chip
;
1537 chip
= snd_kcontrol_chip(kcontrol
);
1538 mode
= !!ucontrol
->value
.enumerated
.item
[0];
1539 if (mode
!= chip
->professional_spdif
) {
1540 spin_lock_irq(&chip
->lock
);
1541 set_professional_spdif(chip
, mode
);
1542 spin_unlock_irq(&chip
->lock
);
1548 static struct snd_kcontrol_new snd_echo_spdif_mode_switch __devinitdata
= {
1549 .name
= "S/PDIF mode Switch",
1550 .iface
= SNDRV_CTL_ELEM_IFACE_CARD
,
1551 .info
= snd_echo_spdif_mode_info
,
1552 .get
= snd_echo_spdif_mode_get
,
1553 .put
= snd_echo_spdif_mode_put
,
1556 #endif /* ECHOCARD_HAS_DIGITAL_IO */
1560 #ifdef ECHOCARD_HAS_EXTERNAL_CLOCK
1562 /******************* Select input clock source *******************/
1563 static int snd_echo_clock_source_info(struct snd_kcontrol
*kcontrol
,
1564 struct snd_ctl_elem_info
*uinfo
)
1566 static char *names
[8] = {
1567 "Internal", "Word", "Super", "S/PDIF", "ADAT", "ESync",
1570 struct echoaudio
*chip
;
1572 chip
= snd_kcontrol_chip(kcontrol
);
1573 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_ENUMERATED
;
1574 uinfo
->value
.enumerated
.items
= chip
->num_clock_sources
;
1576 if (uinfo
->value
.enumerated
.item
>= chip
->num_clock_sources
)
1577 uinfo
->value
.enumerated
.item
= chip
->num_clock_sources
- 1;
1578 strcpy(uinfo
->value
.enumerated
.name
, names
[
1579 chip
->clock_source_list
[uinfo
->value
.enumerated
.item
]]);
1583 static int snd_echo_clock_source_get(struct snd_kcontrol
*kcontrol
,
1584 struct snd_ctl_elem_value
*ucontrol
)
1586 struct echoaudio
*chip
;
1589 chip
= snd_kcontrol_chip(kcontrol
);
1590 clock
= chip
->input_clock
;
1592 for (i
= 0; i
< chip
->num_clock_sources
; i
++)
1593 if (clock
== chip
->clock_source_list
[i
])
1594 ucontrol
->value
.enumerated
.item
[0] = i
;
1599 static int snd_echo_clock_source_put(struct snd_kcontrol
*kcontrol
,
1600 struct snd_ctl_elem_value
*ucontrol
)
1602 struct echoaudio
*chip
;
1604 unsigned int eclock
, dclock
;
1607 chip
= snd_kcontrol_chip(kcontrol
);
1608 eclock
= ucontrol
->value
.enumerated
.item
[0];
1609 if (eclock
>= chip
->input_clock_types
)
1611 dclock
= chip
->clock_source_list
[eclock
];
1612 if (chip
->input_clock
!= dclock
) {
1613 mutex_lock(&chip
->mode_mutex
);
1614 spin_lock_irq(&chip
->lock
);
1615 if ((changed
= set_input_clock(chip
, dclock
)) == 0)
1616 changed
= 1; /* no errors */
1617 spin_unlock_irq(&chip
->lock
);
1618 mutex_unlock(&chip
->mode_mutex
);
1622 DE_ACT(("seticlk val%d err 0x%x\n", dclock
, changed
));
1627 static struct snd_kcontrol_new snd_echo_clock_source_switch __devinitdata
= {
1628 .name
= "Sample Clock Source",
1629 .iface
= SNDRV_CTL_ELEM_IFACE_PCM
,
1630 .info
= snd_echo_clock_source_info
,
1631 .get
= snd_echo_clock_source_get
,
1632 .put
= snd_echo_clock_source_put
,
1635 #endif /* ECHOCARD_HAS_EXTERNAL_CLOCK */
1639 #ifdef ECHOCARD_HAS_PHANTOM_POWER
1641 /******************* Phantom power switch *******************/
1642 #define snd_echo_phantom_power_info snd_ctl_boolean_mono_info
1644 static int snd_echo_phantom_power_get(struct snd_kcontrol
*kcontrol
,
1645 struct snd_ctl_elem_value
*ucontrol
)
1647 struct echoaudio
*chip
= snd_kcontrol_chip(kcontrol
);
1649 ucontrol
->value
.integer
.value
[0] = chip
->phantom_power
;
1653 static int snd_echo_phantom_power_put(struct snd_kcontrol
*kcontrol
,
1654 struct snd_ctl_elem_value
*ucontrol
)
1656 struct echoaudio
*chip
= snd_kcontrol_chip(kcontrol
);
1657 int power
, changed
= 0;
1659 power
= !!ucontrol
->value
.integer
.value
[0];
1660 if (chip
->phantom_power
!= power
) {
1661 spin_lock_irq(&chip
->lock
);
1662 changed
= set_phantom_power(chip
, power
);
1663 spin_unlock_irq(&chip
->lock
);
1665 changed
= 1; /* no errors */
1670 static struct snd_kcontrol_new snd_echo_phantom_power_switch __devinitdata
= {
1671 .name
= "Phantom power Switch",
1672 .iface
= SNDRV_CTL_ELEM_IFACE_CARD
,
1673 .info
= snd_echo_phantom_power_info
,
1674 .get
= snd_echo_phantom_power_get
,
1675 .put
= snd_echo_phantom_power_put
,
1678 #endif /* ECHOCARD_HAS_PHANTOM_POWER */
1682 #ifdef ECHOCARD_HAS_DIGITAL_IN_AUTOMUTE
1684 /******************* Digital input automute switch *******************/
1685 #define snd_echo_automute_info snd_ctl_boolean_mono_info
1687 static int snd_echo_automute_get(struct snd_kcontrol
*kcontrol
,
1688 struct snd_ctl_elem_value
*ucontrol
)
1690 struct echoaudio
*chip
= snd_kcontrol_chip(kcontrol
);
1692 ucontrol
->value
.integer
.value
[0] = chip
->digital_in_automute
;
1696 static int snd_echo_automute_put(struct snd_kcontrol
*kcontrol
,
1697 struct snd_ctl_elem_value
*ucontrol
)
1699 struct echoaudio
*chip
= snd_kcontrol_chip(kcontrol
);
1700 int automute
, changed
= 0;
1702 automute
= !!ucontrol
->value
.integer
.value
[0];
1703 if (chip
->digital_in_automute
!= automute
) {
1704 spin_lock_irq(&chip
->lock
);
1705 changed
= set_input_auto_mute(chip
, automute
);
1706 spin_unlock_irq(&chip
->lock
);
1708 changed
= 1; /* no errors */
1713 static struct snd_kcontrol_new snd_echo_automute_switch __devinitdata
= {
1714 .name
= "Digital Capture Switch (automute)",
1715 .iface
= SNDRV_CTL_ELEM_IFACE_CARD
,
1716 .info
= snd_echo_automute_info
,
1717 .get
= snd_echo_automute_get
,
1718 .put
= snd_echo_automute_put
,
1721 #endif /* ECHOCARD_HAS_DIGITAL_IN_AUTOMUTE */
1725 /******************* VU-meters switch *******************/
1726 #define snd_echo_vumeters_switch_info snd_ctl_boolean_mono_info
1728 static int snd_echo_vumeters_switch_put(struct snd_kcontrol
*kcontrol
,
1729 struct snd_ctl_elem_value
*ucontrol
)
1731 struct echoaudio
*chip
;
1733 chip
= snd_kcontrol_chip(kcontrol
);
1734 spin_lock_irq(&chip
->lock
);
1735 set_meters_on(chip
, ucontrol
->value
.integer
.value
[0]);
1736 spin_unlock_irq(&chip
->lock
);
1740 static struct snd_kcontrol_new snd_echo_vumeters_switch __devinitdata
= {
1741 .name
= "VU-meters Switch",
1742 .iface
= SNDRV_CTL_ELEM_IFACE_CARD
,
1743 .access
= SNDRV_CTL_ELEM_ACCESS_WRITE
,
1744 .info
= snd_echo_vumeters_switch_info
,
1745 .put
= snd_echo_vumeters_switch_put
,
1750 /***** Read VU-meters (input, output, analog and digital together) *****/
1751 static int snd_echo_vumeters_info(struct snd_kcontrol
*kcontrol
,
1752 struct snd_ctl_elem_info
*uinfo
)
1754 struct echoaudio
*chip
;
1756 chip
= snd_kcontrol_chip(kcontrol
);
1757 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_INTEGER
;
1759 uinfo
->value
.integer
.min
= ECHOGAIN_MINOUT
;
1760 uinfo
->value
.integer
.max
= 0;
1761 #ifdef ECHOCARD_HAS_VMIXER
1762 uinfo
->dimen
.d
[0] = 3; /* Out, In, Virt */
1764 uinfo
->dimen
.d
[0] = 2; /* Out, In */
1766 uinfo
->dimen
.d
[1] = 16; /* 16 channels */
1767 uinfo
->dimen
.d
[2] = 2; /* 0=level, 1=peak */
1771 static int snd_echo_vumeters_get(struct snd_kcontrol
*kcontrol
,
1772 struct snd_ctl_elem_value
*ucontrol
)
1774 struct echoaudio
*chip
;
1776 chip
= snd_kcontrol_chip(kcontrol
);
1777 get_audio_meters(chip
, ucontrol
->value
.integer
.value
);
1781 static struct snd_kcontrol_new snd_echo_vumeters __devinitdata
= {
1782 .name
= "VU-meters",
1783 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1784 .access
= SNDRV_CTL_ELEM_ACCESS_READ
|
1785 SNDRV_CTL_ELEM_ACCESS_VOLATILE
|
1786 SNDRV_CTL_ELEM_ACCESS_TLV_READ
,
1787 .info
= snd_echo_vumeters_info
,
1788 .get
= snd_echo_vumeters_get
,
1789 .tlv
= {.p
= db_scale_output_gain
},
1794 /*** Channels info - it exports informations about the number of channels ***/
1795 static int snd_echo_channels_info_info(struct snd_kcontrol
*kcontrol
,
1796 struct snd_ctl_elem_info
*uinfo
)
1798 struct echoaudio
*chip
;
1800 chip
= snd_kcontrol_chip(kcontrol
);
1801 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_INTEGER
;
1803 uinfo
->value
.integer
.min
= 0;
1804 uinfo
->value
.integer
.max
= 1 << ECHO_CLOCK_NUMBER
;
1808 static int snd_echo_channels_info_get(struct snd_kcontrol
*kcontrol
,
1809 struct snd_ctl_elem_value
*ucontrol
)
1811 struct echoaudio
*chip
;
1812 int detected
, clocks
, bit
, src
;
1814 chip
= snd_kcontrol_chip(kcontrol
);
1815 ucontrol
->value
.integer
.value
[0] = num_busses_in(chip
);
1816 ucontrol
->value
.integer
.value
[1] = num_analog_busses_in(chip
);
1817 ucontrol
->value
.integer
.value
[2] = num_busses_out(chip
);
1818 ucontrol
->value
.integer
.value
[3] = num_analog_busses_out(chip
);
1819 ucontrol
->value
.integer
.value
[4] = num_pipes_out(chip
);
1821 /* Compute the bitmask of the currently valid input clocks */
1822 detected
= detect_input_clocks(chip
);
1824 src
= chip
->num_clock_sources
- 1;
1825 for (bit
= ECHO_CLOCK_NUMBER
- 1; bit
>= 0; bit
--)
1826 if (detected
& (1 << bit
))
1827 for (; src
>= 0; src
--)
1828 if (bit
== chip
->clock_source_list
[src
]) {
1832 ucontrol
->value
.integer
.value
[5] = clocks
;
1837 static struct snd_kcontrol_new snd_echo_channels_info __devinitdata
= {
1838 .name
= "Channels info",
1839 .iface
= SNDRV_CTL_ELEM_IFACE_HWDEP
,
1840 .access
= SNDRV_CTL_ELEM_ACCESS_READ
| SNDRV_CTL_ELEM_ACCESS_VOLATILE
,
1841 .info
= snd_echo_channels_info_info
,
1842 .get
= snd_echo_channels_info_get
,
1848 /******************************************************************************
1850 ******************************************************************************/
1852 static irqreturn_t
snd_echo_interrupt(int irq
, void *dev_id
)
1854 struct echoaudio
*chip
= dev_id
;
1855 struct snd_pcm_substream
*substream
;
1858 spin_lock(&chip
->lock
);
1859 st
= service_irq(chip
);
1861 spin_unlock(&chip
->lock
);
1864 /* The hardware doesn't tell us which substream caused the irq,
1865 thus we have to check all running substreams. */
1866 for (ss
= 0; ss
< DSP_MAXPIPES
; ss
++) {
1867 substream
= chip
->substream
[ss
];
1868 if (substream
&& ((struct audiopipe
*)substream
->runtime
->
1869 private_data
)->state
== PIPE_STATE_STARTED
) {
1870 period
= pcm_pointer(substream
) /
1871 substream
->runtime
->period_size
;
1872 if (period
!= chip
->last_period
[ss
]) {
1873 chip
->last_period
[ss
] = period
;
1874 spin_unlock(&chip
->lock
);
1875 snd_pcm_period_elapsed(substream
);
1876 spin_lock(&chip
->lock
);
1880 spin_unlock(&chip
->lock
);
1882 #ifdef ECHOCARD_HAS_MIDI
1883 if (st
> 0 && chip
->midi_in
) {
1884 snd_rawmidi_receive(chip
->midi_in
, chip
->midi_buffer
, st
);
1885 DE_MID(("rawmidi_iread=%d\n", st
));
1894 /******************************************************************************
1895 Module construction / destruction
1896 ******************************************************************************/
1898 static int snd_echo_free(struct echoaudio
*chip
)
1900 DE_INIT(("Stop DSP...\n"));
1901 if (chip
->comm_page
)
1902 rest_in_peace(chip
);
1903 DE_INIT(("Stopped.\n"));
1906 free_irq(chip
->irq
, chip
);
1908 if (chip
->comm_page
)
1909 snd_dma_free_pages(&chip
->commpage_dma_buf
);
1911 if (chip
->dsp_registers
)
1912 iounmap(chip
->dsp_registers
);
1915 release_and_free_resource(chip
->iores
);
1917 DE_INIT(("MMIO freed.\n"));
1919 pci_disable_device(chip
->pci
);
1921 /* release chip data */
1922 free_firmware_cache(chip
);
1924 DE_INIT(("Chip freed.\n"));
1930 static int snd_echo_dev_free(struct snd_device
*device
)
1932 struct echoaudio
*chip
= device
->device_data
;
1934 DE_INIT(("snd_echo_dev_free()...\n"));
1935 return snd_echo_free(chip
);
1940 /* <--snd_echo_probe() */
1941 static __devinit
int snd_echo_create(struct snd_card
*card
,
1942 struct pci_dev
*pci
,
1943 struct echoaudio
**rchip
)
1945 struct echoaudio
*chip
;
1948 static struct snd_device_ops ops
= {
1949 .dev_free
= snd_echo_dev_free
,
1954 pci_write_config_byte(pci
, PCI_LATENCY_TIMER
, 0xC0);
1956 if ((err
= pci_enable_device(pci
)) < 0)
1958 pci_set_master(pci
);
1960 /* Allocate chip if needed */
1962 chip
= kzalloc(sizeof(*chip
), GFP_KERNEL
);
1964 pci_disable_device(pci
);
1967 DE_INIT(("chip=%p\n", chip
));
1968 spin_lock_init(&chip
->lock
);
1972 atomic_set(&chip
->opencount
, 0);
1973 mutex_init(&chip
->mode_mutex
);
1974 chip
->can_set_rate
= 1;
1976 /* If this was called from the resume function, chip is
1977 * already allocated and it contains current card settings.
1982 /* PCI resource allocation */
1983 chip
->dsp_registers_phys
= pci_resource_start(pci
, 0);
1984 sz
= pci_resource_len(pci
, 0);
1986 sz
= PAGE_SIZE
; /* We map only the required part */
1988 if ((chip
->iores
= request_mem_region(chip
->dsp_registers_phys
, sz
,
1989 ECHOCARD_NAME
)) == NULL
) {
1990 snd_echo_free(chip
);
1991 snd_printk(KERN_ERR
"cannot get memory region\n");
1994 chip
->dsp_registers
= (volatile u32 __iomem
*)
1995 ioremap_nocache(chip
->dsp_registers_phys
, sz
);
1997 if (request_irq(pci
->irq
, snd_echo_interrupt
, IRQF_SHARED
,
1998 ECHOCARD_NAME
, chip
)) {
1999 snd_echo_free(chip
);
2000 snd_printk(KERN_ERR
"cannot grab irq\n");
2003 chip
->irq
= pci
->irq
;
2004 DE_INIT(("pci=%p irq=%d subdev=%04x Init hardware...\n",
2005 chip
->pci
, chip
->irq
, chip
->pci
->subsystem_device
));
2007 /* Create the DSP comm page - this is the area of memory used for most
2008 of the communication with the DSP, which accesses it via bus mastering */
2009 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV
, snd_dma_pci_data(chip
->pci
),
2010 sizeof(struct comm_page
),
2011 &chip
->commpage_dma_buf
) < 0) {
2012 snd_echo_free(chip
);
2013 snd_printk(KERN_ERR
"cannot allocate the comm page\n");
2016 chip
->comm_page_phys
= chip
->commpage_dma_buf
.addr
;
2017 chip
->comm_page
= (struct comm_page
*)chip
->commpage_dma_buf
.area
;
2019 err
= init_hw(chip
, chip
->pci
->device
, chip
->pci
->subsystem_device
);
2021 err
= set_mixer_defaults(chip
);
2023 DE_INIT(("init_hw err=%d\n", err
));
2024 snd_echo_free(chip
);
2027 DE_INIT(("Card init OK\n"));
2029 if ((err
= snd_device_new(card
, SNDRV_DEV_LOWLEVEL
, chip
, &ops
)) < 0) {
2030 snd_echo_free(chip
);
2041 static int __devinit
snd_echo_probe(struct pci_dev
*pci
,
2042 const struct pci_device_id
*pci_id
)
2045 struct snd_card
*card
;
2046 struct echoaudio
*chip
;
2050 if (dev
>= SNDRV_CARDS
)
2057 DE_INIT(("Echoaudio driver starting...\n"));
2059 err
= snd_card_create(index
[dev
], id
[dev
], THIS_MODULE
, 0, &card
);
2063 snd_card_set_dev(card
, &pci
->dev
);
2065 chip
= NULL
; /* Tells snd_echo_create to allocate chip */
2066 if ((err
= snd_echo_create(card
, pci
, &chip
)) < 0) {
2067 snd_card_free(card
);
2071 strcpy(card
->driver
, "Echo_" ECHOCARD_NAME
);
2072 strcpy(card
->shortname
, chip
->card_name
);
2075 if (pci_id
->device
== 0x3410)
2078 sprintf(card
->longname
, "%s rev.%d (DSP%s) at 0x%lx irq %i",
2079 card
->shortname
, pci_id
->subdevice
& 0x000f, dsp
,
2080 chip
->dsp_registers_phys
, chip
->irq
);
2082 if ((err
= snd_echo_new_pcm(chip
)) < 0) {
2083 snd_printk(KERN_ERR
"new pcm error %d\n", err
);
2084 snd_card_free(card
);
2088 #ifdef ECHOCARD_HAS_MIDI
2089 if (chip
->has_midi
) { /* Some Mia's do not have midi */
2090 if ((err
= snd_echo_midi_create(card
, chip
)) < 0) {
2091 snd_printk(KERN_ERR
"new midi error %d\n", err
);
2092 snd_card_free(card
);
2098 #ifdef ECHOCARD_HAS_VMIXER
2099 snd_echo_vmixer
.count
= num_pipes_out(chip
) * num_busses_out(chip
);
2100 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_vmixer
, chip
))) < 0)
2102 #ifdef ECHOCARD_HAS_LINE_OUT_GAIN
2103 err
= snd_ctl_add(chip
->card
,
2104 snd_ctl_new1(&snd_echo_line_output_gain
, chip
));
2108 #else /* ECHOCARD_HAS_VMIXER */
2109 err
= snd_ctl_add(chip
->card
,
2110 snd_ctl_new1(&snd_echo_pcm_output_gain
, chip
));
2113 #endif /* ECHOCARD_HAS_VMIXER */
2115 #ifdef ECHOCARD_HAS_INPUT_GAIN
2116 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_line_input_gain
, chip
))) < 0)
2120 #ifdef ECHOCARD_HAS_INPUT_NOMINAL_LEVEL
2121 if (!chip
->hasnt_input_nominal_level
)
2122 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_intput_nominal_level
, chip
))) < 0)
2126 #ifdef ECHOCARD_HAS_OUTPUT_NOMINAL_LEVEL
2127 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_output_nominal_level
, chip
))) < 0)
2131 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_vumeters_switch
, chip
))) < 0)
2134 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_vumeters
, chip
))) < 0)
2137 #ifdef ECHOCARD_HAS_MONITOR
2138 snd_echo_monitor_mixer
.count
= num_busses_in(chip
) * num_busses_out(chip
);
2139 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_monitor_mixer
, chip
))) < 0)
2143 #ifdef ECHOCARD_HAS_DIGITAL_IN_AUTOMUTE
2144 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_automute_switch
, chip
))) < 0)
2148 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_channels_info
, chip
))) < 0)
2151 #ifdef ECHOCARD_HAS_DIGITAL_MODE_SWITCH
2152 /* Creates a list of available digital modes */
2153 chip
->num_digital_modes
= 0;
2154 for (i
= 0; i
< 6; i
++)
2155 if (chip
->digital_modes
& (1 << i
))
2156 chip
->digital_mode_list
[chip
->num_digital_modes
++] = i
;
2158 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_digital_mode_switch
, chip
))) < 0)
2160 #endif /* ECHOCARD_HAS_DIGITAL_MODE_SWITCH */
2162 #ifdef ECHOCARD_HAS_EXTERNAL_CLOCK
2163 /* Creates a list of available clock sources */
2164 chip
->num_clock_sources
= 0;
2165 for (i
= 0; i
< 10; i
++)
2166 if (chip
->input_clock_types
& (1 << i
))
2167 chip
->clock_source_list
[chip
->num_clock_sources
++] = i
;
2169 if (chip
->num_clock_sources
> 1) {
2170 chip
->clock_src_ctl
= snd_ctl_new1(&snd_echo_clock_source_switch
, chip
);
2171 if ((err
= snd_ctl_add(chip
->card
, chip
->clock_src_ctl
)) < 0)
2174 #endif /* ECHOCARD_HAS_EXTERNAL_CLOCK */
2176 #ifdef ECHOCARD_HAS_DIGITAL_IO
2177 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_spdif_mode_switch
, chip
))) < 0)
2181 #ifdef ECHOCARD_HAS_PHANTOM_POWER
2182 if (chip
->has_phantom_power
)
2183 if ((err
= snd_ctl_add(chip
->card
, snd_ctl_new1(&snd_echo_phantom_power_switch
, chip
))) < 0)
2187 err
= snd_card_register(card
);
2190 snd_printk(KERN_INFO
"Card registered: %s\n", card
->longname
);
2192 pci_set_drvdata(pci
, chip
);
2197 snd_printk(KERN_ERR
"new control error %d\n", err
);
2198 snd_card_free(card
);
2204 #if defined(CONFIG_PM)
2206 static int snd_echo_suspend(struct pci_dev
*pci
, pm_message_t state
)
2208 struct echoaudio
*chip
= pci_get_drvdata(pci
);
2210 DE_INIT(("suspend start\n"));
2211 snd_pcm_suspend_all(chip
->analog_pcm
);
2212 snd_pcm_suspend_all(chip
->digital_pcm
);
2214 #ifdef ECHOCARD_HAS_MIDI
2215 /* This call can sleep */
2217 snd_echo_midi_output_trigger(chip
->midi_out
, 0);
2219 spin_lock_irq(&chip
->lock
);
2220 if (wait_handshake(chip
)) {
2221 spin_unlock_irq(&chip
->lock
);
2224 clear_handshake(chip
);
2225 if (send_vector(chip
, DSP_VC_GO_COMATOSE
) < 0) {
2226 spin_unlock_irq(&chip
->lock
);
2229 spin_unlock_irq(&chip
->lock
);
2231 chip
->dsp_code
= NULL
;
2232 free_irq(chip
->irq
, chip
);
2234 pci_save_state(pci
);
2235 pci_disable_device(pci
);
2237 DE_INIT(("suspend done\n"));
2243 static int snd_echo_resume(struct pci_dev
*pci
)
2245 struct echoaudio
*chip
= pci_get_drvdata(pci
);
2246 struct comm_page
*commpage
, *commpage_bak
;
2247 u32 pipe_alloc_mask
;
2250 DE_INIT(("resume start\n"));
2251 pci_restore_state(pci
);
2252 commpage_bak
= kmalloc(sizeof(struct echoaudio
), GFP_KERNEL
);
2253 if (commpage_bak
== NULL
)
2255 commpage
= chip
->comm_page
;
2256 memcpy(commpage_bak
, commpage
, sizeof(struct comm_page
));
2258 err
= init_hw(chip
, chip
->pci
->device
, chip
->pci
->subsystem_device
);
2260 kfree(commpage_bak
);
2261 DE_INIT(("resume init_hw err=%d\n", err
));
2262 snd_echo_free(chip
);
2265 DE_INIT(("resume init OK\n"));
2267 /* Temporarily set chip->pipe_alloc_mask=0 otherwise
2268 * restore_dsp_settings() fails.
2270 pipe_alloc_mask
= chip
->pipe_alloc_mask
;
2271 chip
->pipe_alloc_mask
= 0;
2272 err
= restore_dsp_rettings(chip
);
2273 chip
->pipe_alloc_mask
= pipe_alloc_mask
;
2275 kfree(commpage_bak
);
2278 DE_INIT(("resume restore OK\n"));
2280 memcpy(&commpage
->audio_format
, &commpage_bak
->audio_format
,
2281 sizeof(commpage
->audio_format
));
2282 memcpy(&commpage
->sglist_addr
, &commpage_bak
->sglist_addr
,
2283 sizeof(commpage
->sglist_addr
));
2284 memcpy(&commpage
->midi_output
, &commpage_bak
->midi_output
,
2285 sizeof(commpage
->midi_output
));
2286 kfree(commpage_bak
);
2288 if (request_irq(pci
->irq
, snd_echo_interrupt
, IRQF_SHARED
,
2289 ECHOCARD_NAME
, chip
)) {
2290 snd_echo_free(chip
);
2291 snd_printk(KERN_ERR
"cannot grab irq\n");
2294 chip
->irq
= pci
->irq
;
2295 DE_INIT(("resume irq=%d\n", chip
->irq
));
2297 #ifdef ECHOCARD_HAS_MIDI
2298 if (chip
->midi_input_enabled
)
2299 enable_midi_input(chip
, TRUE
);
2301 snd_echo_midi_output_trigger(chip
->midi_out
, 1);
2304 DE_INIT(("resume done\n"));
2308 #endif /* CONFIG_PM */
2312 static void __devexit
snd_echo_remove(struct pci_dev
*pci
)
2314 struct echoaudio
*chip
;
2316 chip
= pci_get_drvdata(pci
);
2318 snd_card_free(chip
->card
);
2319 pci_set_drvdata(pci
, NULL
);
2324 /******************************************************************************
2325 Everything starts and ends here
2326 ******************************************************************************/
2328 /* pci_driver definition */
2329 static struct pci_driver driver
= {
2330 .name
= "Echoaudio " ECHOCARD_NAME
,
2331 .id_table
= snd_echo_ids
,
2332 .probe
= snd_echo_probe
,
2333 .remove
= __devexit_p(snd_echo_remove
),
2335 .suspend
= snd_echo_suspend
,
2336 .resume
= snd_echo_resume
,
2337 #endif /* CONFIG_PM */
2342 /* initialization of the module */
2343 static int __init
alsa_card_echo_init(void)
2345 return pci_register_driver(&driver
);
2350 /* clean up the module */
2351 static void __exit
alsa_card_echo_exit(void)
2353 pci_unregister_driver(&driver
);
2357 module_init(alsa_card_echo_init
)
2358 module_exit(alsa_card_echo_exit
)