mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	Bluetooth: btmtksdio: fix up firmware download sequence
Data RAM on the device have to be powered on before starting to download
the firmware.
Fixes: 9aebfd4a22 ("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>
			
			
This commit is contained in:
		
							parent
							
								
									f645125711
								
							
						
					
					
						commit
						737cd06072
					
				
					 1 changed files with 15 additions and 1 deletions
				
			
		| 
						 | 
					@ -685,7 +685,7 @@ static int mtk_setup_firmware(struct hci_dev *hdev, const char *fwname)
 | 
				
			||||||
	const u8 *fw_ptr;
 | 
						const u8 *fw_ptr;
 | 
				
			||||||
	size_t fw_size;
 | 
						size_t fw_size;
 | 
				
			||||||
	int err, dlen;
 | 
						int err, dlen;
 | 
				
			||||||
	u8 flag;
 | 
						u8 flag, param;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = request_firmware(&fw, fwname, &hdev->dev);
 | 
						err = request_firmware(&fw, fwname, &hdev->dev);
 | 
				
			||||||
	if (err < 0) {
 | 
						if (err < 0) {
 | 
				
			||||||
| 
						 | 
					@ -693,6 +693,20 @@ static int mtk_setup_firmware(struct hci_dev *hdev, const char *fwname)
 | 
				
			||||||
		return err;
 | 
							return err;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Power on data RAM the firmware relies on. */
 | 
				
			||||||
 | 
						param = 1;
 | 
				
			||||||
 | 
						wmt_params.op = MTK_WMT_FUNC_CTRL;
 | 
				
			||||||
 | 
						wmt_params.flag = 3;
 | 
				
			||||||
 | 
						wmt_params.dlen = sizeof(param);
 | 
				
			||||||
 | 
						wmt_params.data = ¶m;
 | 
				
			||||||
 | 
						wmt_params.status = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = mtk_hci_wmt_sync(hdev, &wmt_params);
 | 
				
			||||||
 | 
						if (err < 0) {
 | 
				
			||||||
 | 
							bt_dev_err(hdev, "Failed to power on data RAM (%d)", err);
 | 
				
			||||||
 | 
							return err;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	fw_ptr = fw->data;
 | 
						fw_ptr = fw->data;
 | 
				
			||||||
	fw_size = fw->size;
 | 
						fw_size = fw->size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue