6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Luiz Augusto von Dentz luiz.von.dentz@intel.com
commit 4084286151fc91cd093578f615bfb68f9efbbfcb upstream.
This partially reverts 81b3e33bb054 ("Bluetooth: btusb: Don't fail external suspend requests") as it introduced a call to hci_suspend_dev that assumes the system-suspend which doesn't work well when just the device is being suspended because wakeup flag is only set for remote devices that can wakeup the system.
Reported-by: Rafael J. Wysocki rafael@kernel.org Reported-by: Heiner Kallweit hkallweit1@gmail.com Reported-by: Kenneth Crudup kenny@panix.com Fixes: 610712298b11 ("Bluetooth: btusb: Don't fail external suspend requests") Signed-off-by: Luiz Augusto von Dentz luiz.von.dentz@intel.com Tested-by: Rafael J. Wysocki rafael@kernel.org Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org --- drivers/bluetooth/btusb.c | 14 -------------- 1 file changed, 14 deletions(-)
--- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -4092,7 +4092,6 @@ static void btusb_disconnect(struct usb_ static int btusb_suspend(struct usb_interface *intf, pm_message_t message) { struct btusb_data *data = usb_get_intfdata(intf); - int err;
BT_DBG("intf %p", intf);
@@ -4105,16 +4104,6 @@ static int btusb_suspend(struct usb_inte if (data->suspend_count++) return 0;
- /* Notify Host stack to suspend; this has to be done before stopping - * the traffic since the hci_suspend_dev itself may generate some - * traffic. - */ - err = hci_suspend_dev(data->hdev); - if (err) { - data->suspend_count--; - return err; - } - spin_lock_irq(&data->txlock); if (!(PMSG_IS_AUTO(message) && data->tx_in_flight)) { set_bit(BTUSB_SUSPENDING, &data->flags); @@ -4122,7 +4111,6 @@ static int btusb_suspend(struct usb_inte } else { spin_unlock_irq(&data->txlock); data->suspend_count--; - hci_resume_dev(data->hdev); return -EBUSY; }
@@ -4243,8 +4231,6 @@ static int btusb_resume(struct usb_inter spin_unlock_irq(&data->txlock); schedule_work(&data->work);
- hci_resume_dev(data->hdev); - return 0;
failed: