• Hans de Goede's avatar
    Bluetooth: btusb: Use DMI matching for QCA reset_resume quirking · 1fdb9269
    Hans de Goede authored
    Commit 61f5acea ("Bluetooth: btusb: Restore QCA Rome suspend/resume fix
    with a "rewritten" version") applied the USB_QUIRK_RESET_RESUME to all QCA
    USB Bluetooth modules. But it turns out that the resume problems are not
    caused by the QCA Rome chipset, on most platforms it resumes fine. The
    resume problems are actually a platform problem (likely the platform
    cutting all power when suspended).
    
    The USB_QUIRK_RESET_RESUME quirk also disables runtime suspend, so by
    matching on usb-ids, we're causing all boards with these chips to use extra
    power, to fix resume problems which only happen on some boards.
    
    This commit fixes this by applying the quirk based on DMI matching instead
    of on usb-ids, so that we match the platform and not the chipset.
    
    Here is the /sys/kernel/debug/usb/devices for the Bluetooth module:
    
    T:  Bus=01 Lev=01 Prnt=01 Port=07 Cnt=04 Dev#=  5 Spd=12   MxCh= 0
    D:  Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=0cf3 ProdID=e300 Rev= 0.01
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=1ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
    I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
    I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
    I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
    I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
    
    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
    Fixes: 61f5acea ("Bluetooth: btusb: Restore QCA Rome suspend/resume..")
    Cc: stable@vger.kernel.org
    Cc: Brian Norris <briannorris@chromium.org>
    Cc: Kai-Heng Feng <kai.heng.feng@canonical.com>
    Reported-and-tested-by: default avatarKevin Fenzi <kevin@scrye.com>
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
    1fdb9269
btusb.c 86.3 KB