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

Bluetooth: btmtksdio: fix up firmware download sequence

Data RAM on the device have to be powered on before starting to download
the firmware.

Fixes: 9aebfd4a2200 ("Bluetooth: mediatek: add support for MediaTek MT7663S and MT7668S SDIO devices")
Co-developed-by: Mark Chen <Mark-YW.Chen@mediatek.com>
Signed-off-by: Mark Chen <Mark-YW.Chen@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>

authored by

Sean Wang and committed by
Marcel Holtmann
737cd060 f6451257

+15 -1
+15 -1
drivers/bluetooth/btmtksdio.c
··· 685 685 const u8 *fw_ptr; 686 686 size_t fw_size; 687 687 int err, dlen; 688 - u8 flag; 688 + u8 flag, param; 689 689 690 690 err = request_firmware(&fw, fwname, &hdev->dev); 691 691 if (err < 0) { 692 692 bt_dev_err(hdev, "Failed to load firmware file (%d)", err); 693 + return err; 694 + } 695 + 696 + /* Power on data RAM the firmware relies on. */ 697 + param = 1; 698 + wmt_params.op = MTK_WMT_FUNC_CTRL; 699 + wmt_params.flag = 3; 700 + wmt_params.dlen = sizeof(param); 701 + wmt_params.data = &param; 702 + wmt_params.status = NULL; 703 + 704 + err = mtk_hci_wmt_sync(hdev, &wmt_params); 705 + if (err < 0) { 706 + bt_dev_err(hdev, "Failed to power on data RAM (%d)", err); 693 707 return err; 694 708 } 695 709