ALSA: usb-audio: Move autosuspend quirk into quirk_flags
authorTakashi Iwai <tiwai@suse.de>
Thu, 29 Jul 2021 07:44:00 +0000 (09:44 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 2 Aug 2021 07:06:04 +0000 (09:06 +0200)
The auto-suspend suppression workaround for Lenovo machines are
handled in quirks-table.h.  Now it's more easier to handle with
quirk_flags.

Link: https://lore.kernel.org/r/20210729074404.19728-2-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/card.c
sound/usb/quirks-table.h
sound/usb/quirks.c
sound/usb/usbaudio.h

index 8c32a784f1e4ece3501d879eebc84dc933902336..d66a3788111cb3a7a2f6d14bd4e3cf8e4f48904c 100644 (file)
@@ -804,6 +804,9 @@ static int usb_audio_probe(struct usb_interface *intf,
 
        dev_set_drvdata(&dev->dev, chip);
 
+       if (chip->quirk_flags & QUIRK_FLAG_DISABLE_AUTOSUSPEND)
+               usb_disable_autosuspend(interface_to_usbdev(intf));
+
        /*
         * For devices with more than one control interface, we assume the
         * first contains the audio controls. We might need a more specific
@@ -929,7 +932,7 @@ static void usb_audio_disconnect(struct usb_interface *intf)
                }
        }
 
-       if (chip->quirk_type == QUIRK_SETUP_DISABLE_AUTOSUSPEND)
+       if (chip->quirk_flags & QUIRK_FLAG_DISABLE_AUTOSUSPEND)
                usb_enable_autosuspend(interface_to_usbdev(intf));
 
        chip->num_interfaces--;
index b5e82363cf476d663eae48d56bb64540ea30dbaf..e03043f7dad3fe00fa0a0576f0f32fc620127dfc 100644 (file)
@@ -2730,23 +2730,6 @@ YAMAHA_DEVICE(0x7010, "UB99"),
        }
 },
 
-/* Lenovo ThinkStation P620 Rear Line-in, Line-out and Microphone */
-{
-       USB_DEVICE(0x17aa, 0x1046),
-       .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
-               .ifnum = QUIRK_ANY_INTERFACE,
-               .type = QUIRK_SETUP_DISABLE_AUTOSUSPEND
-       }
-},
-/* Lenovo ThinkStation P620 Internal Speaker + Front Headset */
-{
-       USB_DEVICE(0x17aa, 0x104d),
-       .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
-               .ifnum = QUIRK_ANY_INTERFACE,
-               .type = QUIRK_SETUP_DISABLE_AUTOSUSPEND
-       }
-},
-
 /* Native Instruments MK2 series */
 {
        /* Komplete Audio 6 */
index dc667b8c92f2c138a1e2a94f03351c73d9d3eb99..1cffb87e5026454cd8ace2658112b7efa0b49a71 100644 (file)
@@ -534,15 +534,6 @@ static int create_standard_mixer_quirk(struct snd_usb_audio *chip,
        return snd_usb_create_mixer(chip, quirk->ifnum, 0);
 }
 
-static int setup_disable_autosuspend(struct snd_usb_audio *chip,
-                                      struct usb_interface *iface,
-                                      struct usb_driver *driver,
-                                      const struct snd_usb_audio_quirk *quirk)
-{
-       usb_disable_autosuspend(interface_to_usbdev(iface));
-       return 1;       /* Continue with creating streams and mixer */
-}
-
 /*
  * audio-interface quirks
  *
@@ -580,7 +571,6 @@ int snd_usb_create_quirk(struct snd_usb_audio *chip,
                [QUIRK_AUDIO_FIXED_ENDPOINT] = create_fixed_stream_quirk,
                [QUIRK_AUDIO_EDIROL_UAXX] = create_uaxx_quirk,
                [QUIRK_AUDIO_STANDARD_MIXER] = create_standard_mixer_quirk,
-               [QUIRK_SETUP_DISABLE_AUTOSUSPEND] = setup_disable_autosuspend,
        };
 
        if (quirk->type < QUIRK_TYPE_COUNT) {
@@ -1855,6 +1845,10 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
                   QUIRK_FLAG_IGNORE_CLOCK_SOURCE),
        DEVICE_FLG(0x1686, 0x00dd, /* Zoom R16/24 */
                   QUIRK_FLAG_TX_LENGTH | QUIRK_FLAG_CTL_MSG_DELAY_1M),
+       DEVICE_FLG(0x17aa, 0x1046, /* Lenovo ThinkStation P620 Rear Line-in, Line-out and Microphone */
+                  QUIRK_FLAG_DISABLE_AUTOSUSPEND),
+       DEVICE_FLG(0x17aa, 0x104d, /* Lenovo ThinkStation P620 Internal Speaker + Front Headset */
+                  QUIRK_FLAG_DISABLE_AUTOSUSPEND),
        DEVICE_FLG(0x1852, 0x5065, /* Luxman DA-06 */
                   QUIRK_FLAG_ITF_USB_DSD_DAC | QUIRK_FLAG_CTL_MSG_DELAY),
        DEVICE_FLG(0x1901, 0x0191, /* GE B850V3 CP2114 audio interface */
index ea0e3deb2a236b68375ec1d6b44d8cfa85b8b601..ce31d58f810fbed76da269cafc471a03d40893bf 100644 (file)
@@ -101,8 +101,6 @@ enum quirk_type {
        QUIRK_AUDIO_FIXED_ENDPOINT,
        QUIRK_AUDIO_EDIROL_UAXX,
        QUIRK_AUDIO_STANDARD_MIXER,
-       QUIRK_SETUP_FMT_AFTER_RESUME,
-       QUIRK_SETUP_DISABLE_AUTOSUSPEND,
 
        QUIRK_TYPE_COUNT
 };
@@ -157,6 +155,8 @@ extern bool snd_usb_skip_validation;
  *  Add a delay of 50ms at each interface setup
  * QUIRK_FLAG_VALIDATE_RATES:
  *  Perform sample rate validations at probe
+ * QUIRK_FLAG_DISABLE_AUTOSUSPEND:
+ *  Disable runtime PM autosuspend
  */
 
 #define QUIRK_FLAG_GET_SAMPLE_RATE     (1U << 0)
@@ -172,5 +172,6 @@ extern bool snd_usb_skip_validation;
 #define QUIRK_FLAG_CTL_MSG_DELAY_5M    (1U << 10)
 #define QUIRK_FLAG_IFACE_DELAY         (1U << 11)
 #define QUIRK_FLAG_VALIDATE_RATES      (1U << 12)
+#define QUIRK_FLAG_DISABLE_AUTOSUSPEND (1U << 13)
 
 #endif /* __USBAUDIO_H */