aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/sound/alsa-configuration.rst1
-rw-r--r--sound/usb/endpoint.c6
-rw-r--r--sound/usb/quirks.c2
-rw-r--r--sound/usb/usbaudio.h3
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 */