mirror of
https://github.com/torvalds/linux.git
synced 2024-12-26 04:42:12 +00:00
Bluetooth: btusb: driver to enable the usb-wakeup feature
BT-Controller connected as platform non-root-hub device and usb-driver initialize such device with wakeup disabled, Ref. usb_new_device(). At present wakeup-capability get enabled by hid-input device from usb function driver(e.g. BT HID device) at runtime. Again some functional driver does not set usb-wakeup capability(e.g LE HID device implement as HID-over-GATT), and can't wakeup the host on USB. Most of the device operation (such as mass storage) initiated from host (except HID) and USB wakeup aligned with host resume procedure. For BT device, usb-wakeup capability need to enable form btusc driver as a generic solution for multiple profile use case and required for USB remote wakeup (in-bus wakeup) while host is suspended. Also usb-wakeup feature need to enable/disable with HCI interface up and down. Signed-off-by: Sukumar Ghorai <sukumar.ghorai@intel.com> Signed-off-by: Amit K Bag <amit.k.bag@intel.com> Acked-by: Oliver Neukum <oneukum@suse.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
9834e586fa
commit
a0085f2510
@ -1088,6 +1088,10 @@ static int btusb_open(struct hci_dev *hdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
data->intf->needs_remote_wakeup = 1;
|
data->intf->needs_remote_wakeup = 1;
|
||||||
|
/* device specific wakeup source enabled and required for USB
|
||||||
|
* remote wakeup while host is suspended
|
||||||
|
*/
|
||||||
|
device_wakeup_enable(&data->udev->dev);
|
||||||
|
|
||||||
if (test_and_set_bit(BTUSB_INTR_RUNNING, &data->flags))
|
if (test_and_set_bit(BTUSB_INTR_RUNNING, &data->flags))
|
||||||
goto done;
|
goto done;
|
||||||
@ -1151,6 +1155,7 @@ static int btusb_close(struct hci_dev *hdev)
|
|||||||
goto failed;
|
goto failed;
|
||||||
|
|
||||||
data->intf->needs_remote_wakeup = 0;
|
data->intf->needs_remote_wakeup = 0;
|
||||||
|
device_wakeup_disable(&data->udev->dev);
|
||||||
usb_autopm_put_interface(data->intf);
|
usb_autopm_put_interface(data->intf);
|
||||||
|
|
||||||
failed:
|
failed:
|
||||||
|
Loading…
Reference in New Issue
Block a user