diff options
author | Takashi Sakamoto <o-takashi@sakamocchi.jp> | 2018-05-02 12:16:51 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2018-05-02 16:02:08 +0200 |
commit | 9c367c01d3d5060a2bcb2ca76a447bdb42c83c91 (patch) | |
tree | cf1b8d0a06e620c0a4fe87428a2a86b8ebadb093 /sound/firewire/dice/dice-pcm.c | |
parent | ALSA: dice: use cache for PCM constraints and rules (diff) | |
download | linux-9c367c01d3d5060a2bcb2ca76a447bdb42c83c91.tar.xz linux-9c367c01d3d5060a2bcb2ca76a447bdb42c83c91.zip |
ALSA: dice: remove local frag of force_two_pcms
At present, to add PCM substreams for each of available tx/rx streams,
this driver uses a condition based on model-name. This is not enough
to support unknown models.
In former commits, this driver gains cache of stream formats. For models
which support protocol extension, all of available steam formats are
cached. For known models, hard-coded stream formats are used to generate
the cache. For unknown models, stream formats at current mode of sampling
transmission frequency is cached.
Anyway, at least, the cached formats are used to expose constrains of PCM
substreams for userspace applications. Thus, The cached data can be also
used to add PCM substreams themselves, instead of the name-based
conditions.
This commit obsoletes local frag of force_two_pcms.
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/firewire/dice/dice-pcm.c')
-rw-r--r-- | sound/firewire/dice/dice-pcm.c | 38 |
1 files changed, 8 insertions, 30 deletions
diff --git a/sound/firewire/dice/dice-pcm.c b/sound/firewire/dice/dice-pcm.c index 08a173170d52..80351b29fe0d 100644 --- a/sound/firewire/dice/dice-pcm.c +++ b/sound/firewire/dice/dice-pcm.c @@ -428,40 +428,18 @@ int snd_dice_create_pcm(struct snd_dice *dice) .mmap = snd_pcm_lib_mmap_vmalloc, }; struct snd_pcm *pcm; - unsigned int i, max_capture, max_playback, capture, playback; + unsigned int capture, playback; + int i, j; int err; - /* Check whether PCM substreams are required. */ - if (dice->force_two_pcms) { - max_capture = max_playback = 2; - } else { - int j; - max_capture = max_playback = 0; - for (i = 0; i < MAX_STREAMS; ++i) { - for (j = 0; j < SND_DICE_RATE_MODE_COUNT; ++j) { - if (dice->tx_pcm_chs[i][j] > 0) { - ++max_capture; - break; - } - } - - for (j = 0; j < SND_DICE_RATE_MODE_COUNT; ++j) { - if (dice->rx_pcm_chs[i][j] > 0) { - ++max_playback; - break; - } - } - } - } - for (i = 0; i < MAX_STREAMS; i++) { capture = playback = 0; - if (i < max_capture) - capture = 1; - if (i < max_playback) - playback = 1; - if (capture == 0 && playback == 0) - break; + for (j = 0; j < SND_DICE_RATE_MODE_COUNT; ++j) { + if (dice->tx_pcm_chs[i][j] > 0) + capture = 1; + if (dice->rx_pcm_chs[i][j] > 0) + playback = 1; + } err = snd_pcm_new(dice->card, "DICE", i, playback, capture, &pcm); |