Skip to content

Commit

Permalink
ALSA: usb-audio: Disable autosuspend for Lenovo ThinkStation P620
Browse files Browse the repository at this point in the history
If USB autosuspend is enabled, both front and rear panel can no longer
detect jack insertion.

Enable USB remote wakeup, i.e. needs_remote_wakeup = 1, doesn't help
either.

So disable USB autosuspend to prevent missing jack detection event.

Signed-off-by: Kai-Heng Feng <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
khfeng authored and tiwai committed Aug 23, 2020
1 parent acd46a6 commit 1965c43
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 4 deletions.
18 changes: 14 additions & 4 deletions sound/usb/quirks-table.h
Original file line number Diff line number Diff line change
Expand Up @@ -2827,14 +2827,24 @@ YAMAHA_DEVICE(0x7010, "UB99"),
/* Lenovo ThinkStation P620 Rear Line-in, Line-out and Microphone */
{
USB_DEVICE(0x17aa, 0x1046),
QUIRK_DEVICE_PROFILE("Lenovo", "ThinkStation P620 Rear",
"Lenovo-ThinkStation-P620-Rear"),
.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
.vendor_name = "Lenovo",
.product_name = "ThinkStation P620 Rear",
.profile_name = "Lenovo-ThinkStation-P620-Rear",
.ifnum = QUIRK_ANY_INTERFACE,
.type = QUIRK_SETUP_DISABLE_AUTOSUSPEND
}
},
/* Lenovo ThinkStation P620 Internal Speaker + Front Headset */
{
USB_DEVICE(0x17aa, 0x104d),
QUIRK_DEVICE_PROFILE("Lenovo", "ThinkStation P620 Main",
"Lenovo-ThinkStation-P620-Main"),
.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
.vendor_name = "Lenovo",
.product_name = "ThinkStation P620 Main",
.profile_name = "Lenovo-ThinkStation-P620-Main",
.ifnum = QUIRK_ANY_INTERFACE,
.type = QUIRK_SETUP_DISABLE_AUTOSUSPEND
}
},

/* Native Instruments MK2 series */
Expand Down
10 changes: 10 additions & 0 deletions sound/usb/quirks.c
Original file line number Diff line number Diff line change
Expand Up @@ -518,6 +518,15 @@ static int setup_fmt_after_resume_quirk(struct snd_usb_audio *chip,
return 1; /* Continue with creating streams and mixer */
}

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)
{
driver->supports_autosuspend = 0;
return 1; /* Continue with creating streams and mixer */
}

/*
* audio-interface quirks
*
Expand Down Expand Up @@ -557,6 +566,7 @@ int snd_usb_create_quirk(struct snd_usb_audio *chip,
[QUIRK_AUDIO_ALIGN_TRANSFER] = create_align_transfer_quirk,
[QUIRK_AUDIO_STANDARD_MIXER] = create_standard_mixer_quirk,
[QUIRK_SETUP_FMT_AFTER_RESUME] = setup_fmt_after_resume_quirk,
[QUIRK_SETUP_DISABLE_AUTOSUSPEND] = setup_disable_autosuspend,
};

if (quirk->type < QUIRK_TYPE_COUNT) {
Expand Down
1 change: 1 addition & 0 deletions sound/usb/usbaudio.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ enum quirk_type {
QUIRK_AUDIO_ALIGN_TRANSFER,
QUIRK_AUDIO_STANDARD_MIXER,
QUIRK_SETUP_FMT_AFTER_RESUME,
QUIRK_SETUP_DISABLE_AUTOSUSPEND,

QUIRK_TYPE_COUNT
};
Expand Down

0 comments on commit 1965c43

Please sign in to comment.