mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-04 04:04:19 +00:00
ALSA: snd-usb: Playback Design: use usb_set_inferface quirk from more locations
It turns out the devices from Playback Design need the delay quirk after usb_set_interface from clocks.c as well. Make it a proper quirks function and factor out the code to quirks.c. Signed-off-by: Daniel Mack <zonque@gmail.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
78daea29f2
commit
21bb5aafce
@ -32,6 +32,7 @@
|
|||||||
#include "card.h"
|
#include "card.h"
|
||||||
#include "helper.h"
|
#include "helper.h"
|
||||||
#include "clock.h"
|
#include "clock.h"
|
||||||
|
#include "quirks.h"
|
||||||
|
|
||||||
static struct uac_clock_source_descriptor *
|
static struct uac_clock_source_descriptor *
|
||||||
snd_usb_find_clock_source(struct usb_host_interface *ctrl_iface,
|
snd_usb_find_clock_source(struct usb_host_interface *ctrl_iface,
|
||||||
@ -392,7 +393,9 @@ static int set_sample_rate_v2(struct snd_usb_audio *chip, int iface,
|
|||||||
* interface is active. */
|
* interface is active. */
|
||||||
if (rate != prev_rate) {
|
if (rate != prev_rate) {
|
||||||
usb_set_interface(dev, iface, 0);
|
usb_set_interface(dev, iface, 0);
|
||||||
|
snd_usb_set_interface_quirk(dev);
|
||||||
usb_set_interface(dev, iface, fmt->altsetting);
|
usb_set_interface(dev, iface, fmt->altsetting);
|
||||||
|
snd_usb_set_interface_quirk(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -349,12 +349,7 @@ static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt)
|
|||||||
subs->interface = fmt->iface;
|
subs->interface = fmt->iface;
|
||||||
subs->altset_idx = fmt->altset_idx;
|
subs->altset_idx = fmt->altset_idx;
|
||||||
|
|
||||||
/*
|
snd_usb_set_interface_quirk(dev);
|
||||||
* "Playback Design" products need a 50ms delay after setting the
|
|
||||||
* USB interface.
|
|
||||||
*/
|
|
||||||
if (le16_to_cpu(dev->descriptor.idVendor) == 0x23ba)
|
|
||||||
mdelay(50);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
subs->data_endpoint = snd_usb_add_endpoint(subs->stream->chip,
|
subs->data_endpoint = snd_usb_add_endpoint(subs->stream->chip,
|
||||||
|
@ -892,6 +892,16 @@ void snd_usb_endpoint_start_quirk(struct snd_usb_endpoint *ep)
|
|||||||
ep->skip_packets = 16;
|
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,
|
void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
|
||||||
__u8 request, __u8 requesttype, __u16 value,
|
__u8 request, __u8 requesttype, __u16 value,
|
||||||
__u16 index, void *data, __u16 size)
|
__u16 index, void *data, __u16 size)
|
||||||
|
@ -26,6 +26,7 @@ int snd_usb_is_big_endian_format(struct snd_usb_audio *chip,
|
|||||||
|
|
||||||
void snd_usb_endpoint_start_quirk(struct snd_usb_endpoint *ep);
|
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,
|
void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
|
||||||
__u8 request, __u8 requesttype, __u16 value,
|
__u8 request, __u8 requesttype, __u16 value,
|
||||||
__u16 index, void *data, __u16 size);
|
__u16 index, void *data, __u16 size);
|
||||||
|
Loading…
Reference in New Issue
Block a user