diff options
author | Takashi Iwai <tiwai@suse.de> | 2021-08-24 07:57:20 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2021-08-24 07:58:16 +0200 |
commit | 6e41340994e5b5bd9262246e8d1f64406d72ab8b (patch) | |
tree | 86706db314a654c2222d3549a7d5dab4c56f413f | |
parent | Merge branch 'for-linus' into for-next (diff) | |
download | linux-6e41340994e5b5bd9262246e8d1f64406d72ab8b.tar.xz linux-6e41340994e5b5bd9262246e8d1f64406d72ab8b.zip |
ALSA: usb-audio: Move set-interface-first workaround into common quirk
The recent quirk for WALKMAN (commit 7af5a14371c1: "ALSA: usb-audio:
Fix regression on Sony WALKMAN NW-A45 DAC") may be required for other
devices and is worth to be put into the common quirk flags.
This patch adds a new quirk flag bit QUIRK_FLAG_SET_IFACE_FIRST and a
quirk table entry for the device.
Link: https://lore.kernel.org/r/20210824055720.9240-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | Documentation/sound/alsa-configuration.rst | 1 | ||||
-rw-r--r-- | sound/usb/endpoint.c | 6 | ||||
-rw-r--r-- | sound/usb/quirks.c | 2 | ||||
-rw-r--r-- | sound/usb/usbaudio.h | 3 |
4 files changed, 8 insertions, 4 deletions
diff --git a/Documentation/sound/alsa-configuration.rst b/Documentation/sound/alsa-configuration.rst index e3c33b8d6d78..65f61695f561 100644 --- a/Documentation/sound/alsa-configuration.rst +++ b/Documentation/sound/alsa-configuration.rst @@ -2278,6 +2278,7 @@ quirk_flags * bit 13: Disable runtime PM autosuspend * bit 14: Ignore errors for mixer access * bit 15: Support generic DSD raw U32_BE format + * bit 16: Set up the interface at first like UAC1 This module supports multiple devices, autoprobe and hotplugging. diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c index e6d58d7674a0..79a8c569c62b 100644 --- a/sound/usb/endpoint.c +++ b/sound/usb/endpoint.c @@ -1293,10 +1293,8 @@ int snd_usb_endpoint_configure(struct snd_usb_audio *chip, * to be set up before parameter setups */ iface_first = ep->cur_audiofmt->protocol == UAC_VERSION_1; - /* Workaround for Sony WALKMAN NW-A45 DAC; - * it requires the interface setup at first like UAC1 - */ - if (chip->usb_id == USB_ID(0x054c, 0x0b8c)) + /* Workaround for devices that require the interface setup at first like UAC1 */ + if (chip->quirk_flags & QUIRK_FLAG_SET_IFACE_FIRST) iface_first = true; if (iface_first) { err = endpoint_set_interface(chip, ep, true); diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index 670abc6318f2..4479a590194f 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c @@ -1790,6 +1790,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = { QUIRK_FLAG_GET_SAMPLE_RATE), DEVICE_FLG(0x04e8, 0xa051, /* Samsung USBC Headset (AKG) */ QUIRK_FLAG_SKIP_CLOCK_SELECTOR | QUIRK_FLAG_CTL_MSG_DELAY_5M), + DEVICE_FLG(0x054c, 0x0b8c, /* Sony WALKMAN NW-A45 DAC */ + QUIRK_FLAG_SET_IFACE_FIRST), DEVICE_FLG(0x0556, 0x0014, /* Phoenix Audio TMX320VC */ QUIRK_FLAG_GET_SAMPLE_RATE), DEVICE_FLG(0x05a3, 0x9420, /* ELP HD USB Camera */ diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h index 4e93668a2a48..94261d19cceb 100644 --- a/sound/usb/usbaudio.h +++ b/sound/usb/usbaudio.h @@ -161,6 +161,8 @@ extern bool snd_usb_skip_validation; * Ignore errors for mixer access * QUIRK_FLAG_DSD_RAW: * Support generic DSD raw U32_BE format + * QUIRK_FLAG_SET_IFACE_FIRST: + * Set up the interface at first like UAC1 */ #define QUIRK_FLAG_GET_SAMPLE_RATE (1U << 0) @@ -179,5 +181,6 @@ extern bool snd_usb_skip_validation; #define QUIRK_FLAG_DISABLE_AUTOSUSPEND (1U << 13) #define QUIRK_FLAG_IGNORE_CTL_ERROR (1U << 14) #define QUIRK_FLAG_DSD_RAW (1U << 15) +#define QUIRK_FLAG_SET_IFACE_FIRST (1U << 16) #endif /* __USBAUDIO_H */ |