#include "card.h"
 #include "helper.h"
 #include "clock.h"
+#include "quirks.h"
 
 static struct uac_clock_source_descriptor *
        snd_usb_find_clock_source(struct usb_host_interface *ctrl_iface,
         * interface is active. */
        if (rate != prev_rate) {
                usb_set_interface(dev, iface, 0);
+               snd_usb_set_interface_quirk(dev);
                usb_set_interface(dev, iface, fmt->altsetting);
+               snd_usb_set_interface_quirk(dev);
        }
 
        return 0;
 
                subs->interface = fmt->iface;
                subs->altset_idx = fmt->altset_idx;
 
-               /*
-                * "Playback Design" products need a 50ms delay after setting the
-                * USB interface.
-                */
-               if (le16_to_cpu(dev->descriptor.idVendor) == 0x23ba)
-                       mdelay(50);
+               snd_usb_set_interface_quirk(dev);
        }
 
        subs->data_endpoint = snd_usb_add_endpoint(subs->stream->chip,
 
                ep->skip_packets = 16;
 }
 
+void snd_usb_set_interface_quirk(struct usb_device *dev)
+{
+       /*
+        * "Playback Design" products need a 50ms delay after setting the
+        * USB interface.
+        */
+       if (le16_to_cpu(dev->descriptor.idVendor) == 0x23ba)
+               mdelay(50);
+}
+
 void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
                           __u8 request, __u8 requesttype, __u16 value,
                           __u16 index, void *data, __u16 size)
 
 
 void snd_usb_endpoint_start_quirk(struct snd_usb_endpoint *ep);
 
+void snd_usb_set_interface_quirk(struct usb_device *dev);
 void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
                           __u8 request, __u8 requesttype, __u16 value,
                           __u16 index, void *data, __u16 size);