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