Commit 44e6fc64 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: usb-audio: Move autosuspend quirk into quirk_flags

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: default avatarTakashi Iwai <tiwai@suse.de>
parent 8bfe17ad
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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--;
+0 −17
Original line number Diff line number Diff line
@@ -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 */
+4 −10
Original line number Diff line number Diff line
@@ -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 */
+3 −2
Original line number Diff line number Diff line
@@ -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 */