/* These devices return the number of samples per packet instead of the number of samples per microframe.  */
static int retire_playback_sync_urb_hs_emu(struct snd_usb_substream *subs, struct snd_pcm_runtime *runtime, struct urb *urb)
/* These devices return the number of samples per packet instead of the number of samples per microframe.  */
static int retire_playback_sync_urb_hs_emu(struct snd_usb_substream *subs, struct snd_pcm_runtime *runtime, struct urb *urb)
{
	unsigned int f;
	unsigned long flags;
	if (urb->iso_frame_desc[0].status == 0 &&
	    urb->iso_frame_desc[0].actual_length == 4) {
		f = combine_quad((u8*)urb->transfer_buffer) & 0x0fffffff;
		f >>= subs->datainterval;
		if (f >= subs->freqn - subs->freqn / 8 && f <= subs->freqmax) {
			spin_lock_irqsave(&subs->lock, flags);
			subs->freqm = f;
			spin_unlock_irqrestore(&subs->lock, flags);
		}
	}
	return 0;
}