Commit ffcba827 authored by Tedd Ho-Jeong An's avatar Tedd Ho-Jeong An Committed by Marcel Holtmann
Browse files

Bluetooth: btintel: Fix the LED is not turning off immediately



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: default avatarTedd Ho-Jeong An <tedd.an@intel.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent ea7c4c0e
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -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 */
@@ -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
@@ -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;
}

+1 −0
Original line number Diff line number Diff line
@@ -145,6 +145,7 @@ enum {
	INTEL_FIRMWARE_FAILED,
	INTEL_BOOTING,
	INTEL_BROKEN_INITIAL_NCMD,
	INTEL_BROKEN_LED,

	__INTEL_NUM_FLAGS,
};