Apparently the firmware is supposed to power off the bluetooth card properly, including disconnecting devices, when we use rfkill to block bluetooth. This doesn't work on a lot of laptops though, leading to weird issues after turning off bluetooth, like the connection timing out on the peripherals which were connected, and bluetooth not connecting properly when the adapter is turned on again after rfkilling. This series uses the rfkill hook in the bluetooth subsystem to execute a few more shutdown commands and make sure that all devices get disconnected before we close the HCI connection to the adapter. --- v1: https://lore.kernel.org/linux-bluetooth/20240102133311.6712-1-verdre@xxxxxxx/ v2: https://lore.kernel.org/linux-bluetooth/20240102181946.57288-1-verdre@xxxxxxx/ v3: - Update commit message titles to reflect what's actually happening (disconnecting devices, not sending a power-off command). - Doing the shutdown sequence synchronously instead of async now. - Move HCI_RFKILLED flag back again to be set before shutdown. - Added a "fallback" hci_dev_do_close() to the error path because hci_set_powered_sync() might bail-out early on error. Jonas Dreßler (4): Bluetooth: Remove HCI_POWER_OFF_TIMEOUT Bluetooth: mgmt: Remove leftover queuing of power_off work Bluetooth: Add new state HCI_POWERING_DOWN Bluetooth: Disconnect connected devices before rfkilling adapter include/net/bluetooth/hci.h | 2 +- net/bluetooth/hci_core.c | 35 +++++++++++++++++++++++++++++++++-- net/bluetooth/hci_sync.c | 16 +++++++++++----- net/bluetooth/mgmt.c | 30 ++++++++++++++---------------- 4 files changed, 59 insertions(+), 24 deletions(-) -- 2.43.0