mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-26 14:17:26 -04:00
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: Tedd Ho-Jeong An <tedd.an@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
ea7c4c0e44
commit
ffcba827c0
2 changed files with 24 additions and 0 deletions
|
@ -1737,6 +1737,13 @@ static int btintel_setup_combined(struct hci_dev *hdev)
|
||||||
case 0x07: /* WP */
|
case 0x07: /* WP */
|
||||||
case 0x08: /* StP */
|
case 0x08: /* StP */
|
||||||
/* Legacy ROM product */
|
/* 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);
|
err = btintel_legacy_rom_setup(hdev, &ver);
|
||||||
break;
|
break;
|
||||||
case 0x0b: /* SfP */
|
case 0x0b: /* SfP */
|
||||||
|
@ -1785,6 +1792,7 @@ exit_error:
|
||||||
static int btintel_shutdown_combined(struct hci_dev *hdev)
|
static int btintel_shutdown_combined(struct hci_dev *hdev)
|
||||||
{
|
{
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* Send HCI Reset to the controller to stop any BT activity which
|
/* Send HCI Reset to the controller to stop any BT activity which
|
||||||
* were triggered. This will help to save power and maintain the
|
* 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);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -145,6 +145,7 @@ enum {
|
||||||
INTEL_FIRMWARE_FAILED,
|
INTEL_FIRMWARE_FAILED,
|
||||||
INTEL_BOOTING,
|
INTEL_BOOTING,
|
||||||
INTEL_BROKEN_INITIAL_NCMD,
|
INTEL_BROKEN_INITIAL_NCMD,
|
||||||
|
INTEL_BROKEN_LED,
|
||||||
|
|
||||||
__INTEL_NUM_FLAGS,
|
__INTEL_NUM_FLAGS,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue