Skip to content

Commit

Permalink
Bluetooth: btintel: Fix the LED is not turning off immediately
Browse files Browse the repository at this point in the history
Some platforms have an issue with BT LED when the interface is
down or BT radio is turned off, which takes 5 seconds to BT LED
goes off. This command turns off the BT LED immediately.

This patch sends the Intel vendor command to turn off the LED.

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
  • Loading branch information
Tedd Ho-Jeong An authored and Marcel Holtmann committed Aug 5, 2021
1 parent ea7c4c0 commit ffcba82
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
23 changes: 23 additions & 0 deletions drivers/bluetooth/btintel.c
Original file line number Diff line number Diff line change
Expand Up @@ -1737,6 +1737,13 @@ static int btintel_setup_combined(struct hci_dev *hdev)
case 0x07: /* WP */
case 0x08: /* StP */
/* Legacy ROM product */

/* These devices have an issue with LED which doesn't
* go off immediately during shutdown. Set the flag
* here to send the LED OFF command during shutdown.
*/
btintel_set_flag(hdev, INTEL_BROKEN_LED);

err = btintel_legacy_rom_setup(hdev, &ver);
break;
case 0x0b: /* SfP */
Expand Down Expand Up @@ -1785,6 +1792,7 @@ static int btintel_setup_combined(struct hci_dev *hdev)
static int btintel_shutdown_combined(struct hci_dev *hdev)
{
struct sk_buff *skb;
int ret;

/* Send HCI Reset to the controller to stop any BT activity which
* were triggered. This will help to save power and maintain the
Expand All @@ -1797,6 +1805,21 @@ static int btintel_shutdown_combined(struct hci_dev *hdev)
}
kfree_skb(skb);


/* Some platforms have an issue with BT LED when the interface is
* down or BT radio is turned off, which takes 5 seconds to BT LED
* goes off. This command turns off the BT LED immediately.
*/
if (btintel_test_flag(hdev, INTEL_BROKEN_LED)) {
skb = __hci_cmd_sync(hdev, 0xfc3f, 0, NULL, HCI_INIT_TIMEOUT);
if (IS_ERR(skb)) {
ret = PTR_ERR(skb);
bt_dev_err(hdev, "turning off Intel device LED failed");
return ret;
}
kfree_skb(skb);
}

return 0;
}

Expand Down
1 change: 1 addition & 0 deletions drivers/bluetooth/btintel.h
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ enum {
INTEL_FIRMWARE_FAILED,
INTEL_BOOTING,
INTEL_BROKEN_INITIAL_NCMD,
INTEL_BROKEN_LED,

__INTEL_NUM_FLAGS,
};
Expand Down

0 comments on commit ffcba82

Please sign in to comment.