mirror of
https://github.com/torvalds/linux.git
synced 2025-01-01 15:51:46 +00:00
ALSA: usb-audio: use usbquirk.h for detection of HVR-950Q/850
Detect the HVR-950Q HVR-850 urb data alignment quirk using usbquirk.h rather than using a case statement in snd_usb_audio_probe. Signed-off-by: John S. Gruber <JohnSGruber@gmail.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
98e89f606c
commit
52a7a58351
@ -3203,6 +3203,18 @@ static int ignore_interface_quirk(struct snd_usb_audio *chip,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Allow alignment on audio sub-slot (channel samples) rather than
|
||||
* on audio slots (audio frames)
|
||||
*/
|
||||
static int create_align_transfer_quirk(struct snd_usb_audio *chip,
|
||||
struct usb_interface *iface,
|
||||
const struct snd_usb_audio_quirk *quirk)
|
||||
{
|
||||
chip->txfr_quirk = 1;
|
||||
return 1; /* Continue with creating streams and mixer */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* boot quirks
|
||||
@ -3377,7 +3389,8 @@ static int snd_usb_create_quirk(struct snd_usb_audio *chip,
|
||||
[QUIRK_AUDIO_STANDARD_INTERFACE] = create_standard_audio_quirk,
|
||||
[QUIRK_AUDIO_FIXED_ENDPOINT] = create_fixed_stream_quirk,
|
||||
[QUIRK_AUDIO_EDIROL_UA1000] = create_ua1000_quirk,
|
||||
[QUIRK_AUDIO_EDIROL_UAXX] = create_uaxx_quirk
|
||||
[QUIRK_AUDIO_EDIROL_UAXX] = create_uaxx_quirk,
|
||||
[QUIRK_AUDIO_ALIGN_TRANSFER] = create_align_transfer_quirk
|
||||
};
|
||||
|
||||
if (quirk->type < QUIRK_TYPE_COUNT) {
|
||||
@ -3631,20 +3644,7 @@ static void *snd_usb_audio_probe(struct usb_device *dev,
|
||||
}
|
||||
}
|
||||
|
||||
switch (chip->usb_id) {
|
||||
case USB_ID(0x2040, 0x7200): /* Hauppage hvr950Q */
|
||||
case USB_ID(0x2040, 0x7221): /* Hauppage hvr950Q */
|
||||
case USB_ID(0x2040, 0x7222): /* Hauppage hvr950Q */
|
||||
case USB_ID(0x2040, 0x7223): /* Hauppage hvr950Q */
|
||||
case USB_ID(0x2040, 0x7224): /* Hauppage hvr950Q */
|
||||
case USB_ID(0x2040, 0x7225): /* Hauppage hvr950Q */
|
||||
case USB_ID(0x2040, 0x7230): /* Hauppage hvr850 */
|
||||
case USB_ID(0x2040, 0x7250): /* Hauppage hvr950Q */
|
||||
chip->txfr_quirk = 1;
|
||||
break;
|
||||
default:
|
||||
chip->txfr_quirk = 0;
|
||||
}
|
||||
chip->txfr_quirk = 0;
|
||||
err = 1; /* continue */
|
||||
if (quirk && quirk->ifnum != QUIRK_NO_INTERFACE) {
|
||||
/* need some special handlings */
|
||||
|
@ -161,6 +161,7 @@ enum quirk_type {
|
||||
QUIRK_AUDIO_FIXED_ENDPOINT,
|
||||
QUIRK_AUDIO_EDIROL_UA1000,
|
||||
QUIRK_AUDIO_EDIROL_UAXX,
|
||||
QUIRK_AUDIO_ALIGN_TRANSFER,
|
||||
|
||||
QUIRK_TYPE_COUNT
|
||||
};
|
||||
|
@ -2074,6 +2074,120 @@ YAMAHA_DEVICE(0x7010, "UB99"),
|
||||
}
|
||||
},
|
||||
|
||||
/* Hauppauge HVR-950Q and HVR-850 */
|
||||
{
|
||||
USB_DEVICE_VENDOR_SPEC(0x2040, 0x7200),
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
|
||||
USB_DEVICE_ID_MATCH_INT_CLASS |
|
||||
USB_DEVICE_ID_MATCH_INT_SUBCLASS,
|
||||
.bInterfaceClass = USB_CLASS_AUDIO,
|
||||
.bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL,
|
||||
.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
|
||||
.vendor_name = "Hauppauge",
|
||||
.product_name = "HVR-950Q",
|
||||
.ifnum = QUIRK_ANY_INTERFACE,
|
||||
.type = QUIRK_AUDIO_ALIGN_TRANSFER,
|
||||
}
|
||||
},
|
||||
{
|
||||
USB_DEVICE_VENDOR_SPEC(0x2040, 0x7201),
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
|
||||
USB_DEVICE_ID_MATCH_INT_CLASS |
|
||||
USB_DEVICE_ID_MATCH_INT_SUBCLASS,
|
||||
.bInterfaceClass = USB_CLASS_AUDIO,
|
||||
.bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL,
|
||||
.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
|
||||
.vendor_name = "Hauppauge",
|
||||
.product_name = "HVR-950Q",
|
||||
.ifnum = QUIRK_ANY_INTERFACE,
|
||||
.type = QUIRK_AUDIO_ALIGN_TRANSFER,
|
||||
}
|
||||
},
|
||||
{
|
||||
USB_DEVICE_VENDOR_SPEC(0x2040, 0x7202),
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
|
||||
USB_DEVICE_ID_MATCH_INT_CLASS |
|
||||
USB_DEVICE_ID_MATCH_INT_SUBCLASS,
|
||||
.bInterfaceClass = USB_CLASS_AUDIO,
|
||||
.bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL,
|
||||
.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
|
||||
.vendor_name = "Hauppauge",
|
||||
.product_name = "HVR-950Q",
|
||||
.ifnum = QUIRK_ANY_INTERFACE,
|
||||
.type = QUIRK_AUDIO_ALIGN_TRANSFER,
|
||||
}
|
||||
},
|
||||
{
|
||||
USB_DEVICE_VENDOR_SPEC(0x2040, 0x7203),
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
|
||||
USB_DEVICE_ID_MATCH_INT_CLASS |
|
||||
USB_DEVICE_ID_MATCH_INT_SUBCLASS,
|
||||
.bInterfaceClass = USB_CLASS_AUDIO,
|
||||
.bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL,
|
||||
.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
|
||||
.vendor_name = "Hauppauge",
|
||||
.product_name = "HVR-950Q",
|
||||
.ifnum = QUIRK_ANY_INTERFACE,
|
||||
.type = QUIRK_AUDIO_ALIGN_TRANSFER,
|
||||
}
|
||||
},
|
||||
{
|
||||
USB_DEVICE_VENDOR_SPEC(0x2040, 0x7204),
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
|
||||
USB_DEVICE_ID_MATCH_INT_CLASS |
|
||||
USB_DEVICE_ID_MATCH_INT_SUBCLASS,
|
||||
.bInterfaceClass = USB_CLASS_AUDIO,
|
||||
.bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL,
|
||||
.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
|
||||
.vendor_name = "Hauppauge",
|
||||
.product_name = "HVR-950Q",
|
||||
.ifnum = QUIRK_ANY_INTERFACE,
|
||||
.type = QUIRK_AUDIO_ALIGN_TRANSFER,
|
||||
}
|
||||
},
|
||||
{
|
||||
USB_DEVICE_VENDOR_SPEC(0x2040, 0x7205),
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
|
||||
USB_DEVICE_ID_MATCH_INT_CLASS |
|
||||
USB_DEVICE_ID_MATCH_INT_SUBCLASS,
|
||||
.bInterfaceClass = USB_CLASS_AUDIO,
|
||||
.bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL,
|
||||
.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
|
||||
.vendor_name = "Hauppauge",
|
||||
.product_name = "HVR-950Q",
|
||||
.ifnum = QUIRK_ANY_INTERFACE,
|
||||
.type = QUIRK_AUDIO_ALIGN_TRANSFER,
|
||||
}
|
||||
},
|
||||
{
|
||||
USB_DEVICE_VENDOR_SPEC(0x2040, 0x7250),
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
|
||||
USB_DEVICE_ID_MATCH_INT_CLASS |
|
||||
USB_DEVICE_ID_MATCH_INT_SUBCLASS,
|
||||
.bInterfaceClass = USB_CLASS_AUDIO,
|
||||
.bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL,
|
||||
.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
|
||||
.vendor_name = "Hauppauge",
|
||||
.product_name = "HVR-950Q",
|
||||
.ifnum = QUIRK_ANY_INTERFACE,
|
||||
.type = QUIRK_AUDIO_ALIGN_TRANSFER,
|
||||
}
|
||||
},
|
||||
{
|
||||
USB_DEVICE_VENDOR_SPEC(0x2040, 0x7230),
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
|
||||
USB_DEVICE_ID_MATCH_INT_CLASS |
|
||||
USB_DEVICE_ID_MATCH_INT_SUBCLASS,
|
||||
.bInterfaceClass = USB_CLASS_AUDIO,
|
||||
.bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL,
|
||||
.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
|
||||
.vendor_name = "Hauppauge",
|
||||
.product_name = "HVR-850",
|
||||
.ifnum = QUIRK_ANY_INTERFACE,
|
||||
.type = QUIRK_AUDIO_ALIGN_TRANSFER,
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
/*
|
||||
* Some USB MIDI devices don't have an audio control interface,
|
||||
|
Loading…
Reference in New Issue
Block a user