diff options
author | Takashi Sakamoto <o-takashi@sakamocchi.jp> | 2014-04-25 09:44:52 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2014-05-26 08:21:46 -0400 |
commit | 7b2d99fa6b127707cf0d78feedbb3613aed4d576 (patch) | |
tree | 5dbee1997b68e276446643ac1f7885928337cf3d /sound/firewire/dice.c | |
parent | 10550bea44a8d7cec8a503c8f91fb6014e7849e9 (diff) |
ALSA: firewire-lib/dice/speakers: Add common PCM constraints for AMDTP streams
This commit adds common PCM constraints according to current firewire-lib
implementation.
1.Maximum width for each sample is limited by 24.
AM824 in IEC 61883-6 can deliver 24bit data.
2. Minimum time for period is 5msec.
Apply the old value. For shorter latency, further works are needed.
3. In blocking mode, frames per period/buffer is aligned to 32.
Each packet can include some frames depending on its sampling rate. In
blocking mode, the number equals to SYT_INTERVAL. Currently firewire-lib
can schedule snd_pcm_period_elapsed() for each packet. So, for accurate
PCM interrupt, the number of frames per period/buffer should be aligned
to SYT_INTERVAL.
Currently firewire-lib is lack of better rules to achieve this. So LCM of
each value of SYT_INTERVALs (=32) is applied. This can be improved for
further work.
[Fixed the compile error due to the missing "&" by tiwai]
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/firewire/dice.c')
-rw-r--r-- | sound/firewire/dice.c | 17 |
1 files changed, 1 insertions, 16 deletions
diff --git a/sound/firewire/dice.c b/sound/firewire/dice.c index cd4c6b6d072e..a9a30c0161f1 100644 --- a/sound/firewire/dice.c +++ b/sound/firewire/dice.c | |||
@@ -420,22 +420,7 @@ static int dice_open(struct snd_pcm_substream *substream) | |||
420 | if (err < 0) | 420 | if (err < 0) |
421 | goto err_lock; | 421 | goto err_lock; |
422 | 422 | ||
423 | err = snd_pcm_hw_constraint_step(runtime, 0, | 423 | err = amdtp_stream_add_pcm_hw_constraints(&dice->stream, runtime); |
424 | SNDRV_PCM_HW_PARAM_PERIOD_SIZE, 32); | ||
425 | if (err < 0) | ||
426 | goto err_lock; | ||
427 | err = snd_pcm_hw_constraint_step(runtime, 0, | ||
428 | SNDRV_PCM_HW_PARAM_BUFFER_SIZE, 32); | ||
429 | if (err < 0) | ||
430 | goto err_lock; | ||
431 | |||
432 | err = snd_pcm_hw_constraint_minmax(runtime, | ||
433 | SNDRV_PCM_HW_PARAM_PERIOD_TIME, | ||
434 | 5000, UINT_MAX); | ||
435 | if (err < 0) | ||
436 | goto err_lock; | ||
437 | |||
438 | err = snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24); | ||
439 | if (err < 0) | 424 | if (err < 0) |
440 | goto err_lock; | 425 | goto err_lock; |
441 | 426 | ||