提交 1033eb5b 编写于 作者: T Takashi Sakamoto 提交者: Takashi Iwai

ALSA: dice: fix wrong channel mappping at higher sampling rate

The channel mapping is initialized by amdtp_stream_set_parameters(), however
Dice driver set it before calling this function. Furthermore, the setting is
wrong because the index is the value of array, and vice versa.

This commit moves codes for channel mapping after the function and set it correctly.
Reported-by: NDaniel Robbins <drobbins@funtoo.org>
Fixes: 10550bea ("ALSA: dice/firewire-lib: Keep dualwire mode but obsolete CIP_HI_DUALWIRE")
Signed-off-by: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
Cc: <stable@vger.kernel.org> # 3.16
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
上级 1a22e775
......@@ -579,11 +579,6 @@ static int dice_hw_params(struct snd_pcm_substream *substream,
return err;
}
for (i = 0; i < channels; i++) {
dice->stream.pcm_positions[i * 2] = i;
dice->stream.pcm_positions[i * 2 + 1] = i + channels;
}
rate /= 2;
channels *= 2;
}
......@@ -591,6 +586,15 @@ static int dice_hw_params(struct snd_pcm_substream *substream,
mode = rate_index_to_mode(rate_index);
amdtp_stream_set_parameters(&dice->stream, rate, channels,
dice->rx_midi_ports[mode]);
if (rate_index > 4) {
channels /= 2;
for (i = 0; i < channels; i++) {
dice->stream.pcm_positions[i] = i * 2;
dice->stream.pcm_positions[i + channels] = i * 2 + 1;
}
}
amdtp_stream_set_pcm_format(&dice->stream,
params_format(hw_params));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册