Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Bluetooth: btrtl: Ask ic_info to drop firmware

Some un-support wakeup platforms keep USB power and suspend signal
is coming late, this makes Realtek some chip keep its firmware,
and make it never load new firmware.

So use vendor specific HCI command to ask them drop its firmware after
system shutdown or resume.

Signed-off-by: Hilda Wu <hildawu@realtek.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>

authored by

Hilda Wu and committed by
Marcel Holtmann
cd36742a 4fd6d490

+7 -5
+7 -5
drivers/bluetooth/btrtl.c
··· 601 601 hci_rev = le16_to_cpu(resp->hci_rev); 602 602 lmp_subver = le16_to_cpu(resp->lmp_subver); 603 603 604 - if (resp->hci_ver == 0x8 && le16_to_cpu(resp->hci_rev) == 0x826c && 605 - resp->lmp_ver == 0x8 && le16_to_cpu(resp->lmp_subver) == 0xa99e) 604 + btrtl_dev->ic_info = btrtl_match_ic(lmp_subver, hci_rev, hci_ver, 605 + hdev->bus); 606 + 607 + if (!btrtl_dev->ic_info) 606 608 btrtl_dev->drop_fw = true; 607 609 608 610 if (btrtl_dev->drop_fw) { ··· 643 641 hci_ver = resp->hci_ver; 644 642 hci_rev = le16_to_cpu(resp->hci_rev); 645 643 lmp_subver = le16_to_cpu(resp->lmp_subver); 644 + 645 + btrtl_dev->ic_info = btrtl_match_ic(lmp_subver, hci_rev, hci_ver, 646 + hdev->bus); 646 647 } 647 648 out_free: 648 649 kfree_skb(skb); 649 - 650 - btrtl_dev->ic_info = btrtl_match_ic(lmp_subver, hci_rev, hci_ver, 651 - hdev->bus); 652 650 653 651 if (!btrtl_dev->ic_info) { 654 652 rtl_dev_info(hdev, "unknown IC info, lmp subver %04x, hci rev %04x, hci ver %04x",