Commit 50cdbf15 authored by Clemens Ladisch's avatar Clemens Ladisch Committed by Jaroslav Kysela

[ALSA] usb-audio - sanity-check sync feedback frequency values

USB generic driver
Check that the synchronization feedback frequency values returned by the
device are more or less near the nominal frequency.
Signed-off-by: default avatarClemens Ladisch <clemens@ladisch.de>
parent 7291548d
...@@ -452,17 +452,11 @@ static int retire_playback_sync_urb(snd_usb_substream_t *subs, ...@@ -452,17 +452,11 @@ static int retire_playback_sync_urb(snd_usb_substream_t *subs,
if (urb->iso_frame_desc[0].status == 0 && if (urb->iso_frame_desc[0].status == 0 &&
urb->iso_frame_desc[0].actual_length == 3) { urb->iso_frame_desc[0].actual_length == 3) {
f = combine_triple((u8*)urb->transfer_buffer) << 2; f = combine_triple((u8*)urb->transfer_buffer) << 2;
#if 0 if (f >= subs->freqn - subs->freqn / 8 && f <= subs->freqmax) {
if (f < subs->freqn - (subs->freqn>>3) || f > subs->freqmax) { spin_lock_irqsave(&subs->lock, flags);
snd_printd(KERN_WARNING "requested frequency %d (%u,%03uHz) out of range (current nominal %d (%u,%03uHz))\n", subs->freqm = f;
f, f >> 14, (f & ((1 << 14) - 1) * 1000) / ((1 << 14) - 1), spin_unlock_irqrestore(&subs->lock, flags);
subs->freqn, subs->freqn >> 14, (subs->freqn & ((1 << 14) - 1) * 1000) / ((1 << 14) - 1));
continue;
} }
#endif
spin_lock_irqsave(&subs->lock, flags);
subs->freqm = f;
spin_unlock_irqrestore(&subs->lock, flags);
} }
return 0; return 0;
...@@ -484,9 +478,11 @@ static int retire_playback_sync_urb_hs(snd_usb_substream_t *subs, ...@@ -484,9 +478,11 @@ static int retire_playback_sync_urb_hs(snd_usb_substream_t *subs,
if (urb->iso_frame_desc[0].status == 0 && if (urb->iso_frame_desc[0].status == 0 &&
urb->iso_frame_desc[0].actual_length == 4) { urb->iso_frame_desc[0].actual_length == 4) {
f = combine_quad((u8*)urb->transfer_buffer) & 0x0fffffff; f = combine_quad((u8*)urb->transfer_buffer) & 0x0fffffff;
spin_lock_irqsave(&subs->lock, flags); if (f >= subs->freqn - subs->freqn / 8 && f <= subs->freqmax) {
subs->freqm = f; spin_lock_irqsave(&subs->lock, flags);
spin_unlock_irqrestore(&subs->lock, flags); subs->freqm = f;
spin_unlock_irqrestore(&subs->lock, flags);
}
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment