2020-11-18 12:34:13

by penghao

[permalink] [raw]
Subject: [PATCH] USB: quirks: Add USB_QUIRK_DISCONNECT_SUSPEND quirk for Lenovo A630Z TIO built-in usb-audio card

Add a USB_QUIRK_DISCONNECT_SUSPEND quirk for the Lenovo TIO built-in
usb-audio. when A630Z going into S3,the system immediately wakeup 7-8
seconds later by usb-audio disconnect interrupt to avoids the issue.
eg dmesg:
....
[ 626.974091 ] usb 7-1.1: USB disconnect, device number 3
....
....
[ 1774.486691] usb 7-1.1: new full-speed USB device number 5 using xhci_hcd
[ 1774.947742] usb 7-1.1: New USB device found, idVendor=17ef, idProduct=a012, bcdDevice= 0.55
[ 1774.956588] usb 7-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1774.964339] usb 7-1.1: Product: Thinkcentre TIO24Gen3 for USB-audio
[ 1774.970999] usb 7-1.1: Manufacturer: Lenovo
[ 1774.975447] usb 7-1.1: SerialNumber: 000000000000
[ 1775.048590] usb 7-1.1: 2:1: cannot get freq at ep 0x1
.......
Seeking a better fix, we've tried a lot of things, including:
- Check that the device's power/wakeup is disabled
- Check that remote wakeup is off at the USB level
- All the quirks in drivers/usb/core/quirks.c
e.g. USB_QUIRK_RESET_RESUME,
USB_QUIRK_RESET,
USB_QUIRK_IGNORE_REMOTE_WAKEUP,
USB_QUIRK_NO_LPM.

but none of that makes any difference.

There are no errors in the logs showing any suspend/resume-related issues.
When the system wakes up due to the modem, log-wise it appears to be a
normal resume.

Introduce a quirk to disable the port during suspend when the modem is
detected.

Changes since v5
- Add dmesg for this issue

Changes since v4
- Fixed add a blank line

Changes since v3
- Fixed spelling error on appropriate

Changes since v2
- Add Changes commit format

Changes since v1
- Change subject form "ALSA" to "USB:"
- Adjust to appropriate line

Signed-off-by: penghao <[email protected]>
---
drivers/usb/core/quirks.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index 7c1198f80c23..26b852ae0d85 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -410,6 +410,10 @@ static const struct usb_device_id usb_quirk_list[] = {
{ USB_DEVICE(0x1532, 0x0116), .driver_info =
USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL },

+ /* Lenovo ThinkCenter A630Z TI024Gen3 usb-audio */
+ { USB_DEVICE(0x17ef, 0xa012), .driver_info =
+ USB_QUIRK_DISCONNECT_SUSPEND },
+
/* BUILDWIN Photo Frame */
{ USB_DEVICE(0x1908, 0x1315), .driver_info =
USB_QUIRK_HONOR_BNUMINTERFACES },
--
2.11.0




2020-11-18 13:10:52

by Kai-Heng Feng

[permalink] [raw]
Subject: Re: [PATCH] USB: quirks: Add USB_QUIRK_DISCONNECT_SUSPEND quirk for Lenovo A630Z TIO built-in usb-audio card

Hi penghao,

> On Nov 18, 2020, at 20:30, penghao <[email protected]> wrote:
>
> Add a USB_QUIRK_DISCONNECT_SUSPEND quirk for the Lenovo TIO built-in
> usb-audio. when A630Z going into S3,the system immediately wakeup 7-8
> seconds later by usb-audio disconnect interrupt to avoids the issue.
> eg dmesg:
> ....
> [ 626.974091 ] usb 7-1.1: USB disconnect, device number 3
> ....
> ....
> [ 1774.486691] usb 7-1.1: new full-speed USB device number 5 using xhci_hcd
> [ 1774.947742] usb 7-1.1: New USB device found, idVendor=17ef, idProduct=a012, bcdDevice= 0.55
> [ 1774.956588] usb 7-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
> [ 1774.964339] usb 7-1.1: Product: Thinkcentre TIO24Gen3 for USB-audio
> [ 1774.970999] usb 7-1.1: Manufacturer: Lenovo
> [ 1774.975447] usb 7-1.1: SerialNumber: 000000000000
> [ 1775.048590] usb 7-1.1: 2:1: cannot get freq at ep 0x1

Can you please attach full dmesg with dynamic debug enabled when the issue happens?

We may need to poll for U3 in xhci_bus_suspend().

Kai-Heng

> .......
> Seeking a better fix, we've tried a lot of things, including:
> - Check that the device's power/wakeup is disabled
> - Check that remote wakeup is off at the USB level
> - All the quirks in drivers/usb/core/quirks.c
> e.g. USB_QUIRK_RESET_RESUME,
> USB_QUIRK_RESET,
> USB_QUIRK_IGNORE_REMOTE_WAKEUP,
> USB_QUIRK_NO_LPM.
>
> but none of that makes any difference.
>
> There are no errors in the logs showing any suspend/resume-related issues.
> When the system wakes up due to the modem, log-wise it appears to be a
> normal resume.
>
> Introduce a quirk to disable the port during suspend when the modem is
> detected.
>
> Changes since v5
> - Add dmesg for this issue
>
> Changes since v4
> - Fixed add a blank line
>
> Changes since v3
> - Fixed spelling error on appropriate
>
> Changes since v2
> - Add Changes commit format
>
> Changes since v1
> - Change subject form "ALSA" to "USB:"
> - Adjust to appropriate line
>
> Signed-off-by: penghao <[email protected]>
> ---
> drivers/usb/core/quirks.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
> index 7c1198f80c23..26b852ae0d85 100644
> --- a/drivers/usb/core/quirks.c
> +++ b/drivers/usb/core/quirks.c
> @@ -410,6 +410,10 @@ static const struct usb_device_id usb_quirk_list[] = {
> { USB_DEVICE(0x1532, 0x0116), .driver_info =
> USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL },
>
> + /* Lenovo ThinkCenter A630Z TI024Gen3 usb-audio */
> + { USB_DEVICE(0x17ef, 0xa012), .driver_info =
> + USB_QUIRK_DISCONNECT_SUSPEND },
> +
> /* BUILDWIN Photo Frame */
> { USB_DEVICE(0x1908, 0x1315), .driver_info =
> USB_QUIRK_HONOR_BNUMINTERFACES },
> --
> 2.11.0
>
>
>