If the BT SoC BT_EN is controlled by hardware, disable the AUTO_OFF feature. Otherwise, BT will close the HCI layer except for the UART after firmware download. However, the SoC remains active. If the SoC sends a packet to the Host after firmware download, the Host cannot respond since the HCI layer is closed, which will cause the firmware to enter an incorrect state. Signed-off-by: Shuai Zhang <quic_shuaz@xxxxxxxxxxx> --- drivers/bluetooth/hci_qca.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index a2dc39c00..0cb70a3cf 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -2483,6 +2483,15 @@ static int qca_serdev_probe(struct serdev_device *serdev) set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks); hdev->shutdown = qca_power_off; } + /* If the BT SoC BT_EN is controlled by hardware, disable the AUTO_OFF + * feature. Otherwise, BT will close the HCI layer except for + * the UART after firmware download. However, the SoC remains active. + * If the SoC sends a packet to the Host after firmware download, + * the Host cannot respond since the HCI layer is closed, which will + * cause the firmware to enter an incorrect state. + */ + else + hci_dev_clear_flag(hdev, HCI_AUTO_OFF); if (data) { /* Wideband speech support must be set per driver since it can't -- 2.34.1