mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
ALSA: fireface: fix configuration error for nominal sampling transfer frequency
commitbbd6aac3aeupstream. 128000 and 192000 are congruence modulo 32000, thus it's wrong to distinguish them as multiple of 32000 and 48000 by modulo 32000 at first. Additionally, used condition statement to detect quadruple speed can cause missing bit flag. Furthermore, counter to ensure the configuration is wrong and it causes false positive. This commit fixes the above three bugs. Cc: <stable@vger.kernel.org> Fixes:60aec494b3("ALSA: fireface: support allocate_resources operation in latter protocol") Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Link: https://lore.kernel.org/r/20200510074301.116224-2-o-takashi@sakamocchi.jp Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
110d04acda
commit
13c18353c9
@@ -107,18 +107,18 @@ static int latter_allocate_resources(struct snd_ff *ff, unsigned int rate)
|
||||
int err;
|
||||
|
||||
// Set the number of data blocks transferred in a second.
|
||||
if (rate % 32000 == 0)
|
||||
code = 0x00;
|
||||
if (rate % 48000 == 0)
|
||||
code = 0x04;
|
||||
else if (rate % 44100 == 0)
|
||||
code = 0x02;
|
||||
else if (rate % 48000 == 0)
|
||||
code = 0x04;
|
||||
else if (rate % 32000 == 0)
|
||||
code = 0x00;
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
if (rate >= 64000 && rate < 128000)
|
||||
code |= 0x08;
|
||||
else if (rate >= 128000 && rate < 192000)
|
||||
else if (rate >= 128000)
|
||||
code |= 0x10;
|
||||
|
||||
reg = cpu_to_le32(code);
|
||||
@@ -140,7 +140,7 @@ static int latter_allocate_resources(struct snd_ff *ff, unsigned int rate)
|
||||
if (curr_rate == rate)
|
||||
break;
|
||||
}
|
||||
if (count == 10)
|
||||
if (count > 10)
|
||||
return -ETIMEDOUT;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(amdtp_rate_table); ++i) {
|
||||
|
||||
Reference in New Issue
Block a user