lkml.org 
[lkml]   [2018]   [May]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 49/62] Bluetooth: btusb: Only check needs_reset_resume DMI table for QCA rome chipsets
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Hans de Goede <hdegoede@redhat.com>

    commit fc54910280eb38bde923cdf0898e74687d8e6989 upstream.

    Jeremy Cline correctly points out in rhbz#1514836 that a device where the
    QCA rome chipset needs the USB_QUIRK_RESET_RESUME quirk, may also ship
    with a different wifi/bt chipset in some configurations.

    If that is the case then we are needlessly penalizing those other chipsets
    with a reset-resume quirk, typically causing 0.4W extra power use because
    this disables runtime-pm.

    This commit moves the DMI table check to a btusb_check_needs_reset_resume()
    helper (so that we can easily also call it for other chipsets) and calls
    this new helper only for QCA_ROME chipsets for now.

    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
    Cc: stable@vger.kernel.org
    Cc: Jeremy Cline <jcline@redhat.com>
    Suggested-by: Jeremy Cline <jcline@redhat.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/bluetooth/btusb.c | 10 +++++++---
    1 file changed, 7 insertions(+), 3 deletions(-)

    --- a/drivers/bluetooth/btusb.c
    +++ b/drivers/bluetooth/btusb.c
    @@ -2902,6 +2902,12 @@ static int btusb_config_oob_wake(struct
    }
    #endif

    +static void btusb_check_needs_reset_resume(struct usb_interface *intf)
    +{
    + if (dmi_check_system(btusb_needs_reset_resume_table))
    + interface_to_usbdev(intf)->quirks |= USB_QUIRK_RESET_RESUME;
    +}
    +
    static int btusb_probe(struct usb_interface *intf,
    const struct usb_device_id *id)
    {
    @@ -3037,9 +3043,6 @@ static int btusb_probe(struct usb_interf
    hdev->send = btusb_send_frame;
    hdev->notify = btusb_notify;

    - if (dmi_check_system(btusb_needs_reset_resume_table))
    - interface_to_usbdev(intf)->quirks |= USB_QUIRK_RESET_RESUME;
    -
    #ifdef CONFIG_PM
    err = btusb_config_oob_wake(hdev);
    if (err)
    @@ -3177,6 +3180,7 @@ static int btusb_probe(struct usb_interf
    hdev->setup = btusb_setup_csr;

    set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks);
    + btusb_check_needs_reset_resume(intf);
    }

    if (id->driver_info & BTUSB_SNIFFER) {

    \
     
     \ /
      Last update: 2018-05-14 09:16    [W:4.157 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site