Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3cf763f6 authored by Anantha Krishnan's avatar Anantha Krishnan Committed by Rupesh Tatiya
Browse files

bluetooth: Add support for ROME 3.0



Enable bluetooth firmware download mechanism for ROME 3.0

Change-Id: Ib9e4193da0882174c73c1c9ec0035a905b5c6ec8
Signed-off-by: default avatarAnantha Krishnan <ananthk@codeaurora.org>
Signed-off-by: default avatarRupesh Tatiya <rtatiya@codeaurora.org>
parent f108fc85
Loading
Loading
Loading
Loading
+36 −16
Original line number Diff line number Diff line
@@ -34,18 +34,24 @@
#define VERSION "1.0"
#define ATH3K_FIRMWARE	"ath3k-1.fw"

#define ROME2_1_USB_RAMPATCH_FILE	"ar3k/rampatch_2.1.tlv"
#define ROME2_1_USB_NVM_FILE		"ar3k/nvm_tlv_usb_2.1.bin"

#define ROME1_1_USB_RAMPATCH_FILE	"ar3k/rampatch_1.1.img"
#define ROME1_1_USB_NVM_FILE		"ar3k/nvm_tlv_usb_1.1.bin"

#define ROME2_1_USB_RAMPATCH_FILE	"ar3k/rampatch_tlv_usb_2.1.tlv"
#define ROME2_1_USB_NVM_FILE		"ar3k/nvm_tlv_usb_2.1.bin"

#define ROME3_0_USB_RAMPATCH_FILE	"ar3k/rampatch_tlv_usb_3.0.tlv"
#define ROME3_0_USB_NVM_FILE		"ar3k/nvm_tlv_usb_3.0.bin"

#define ROME2_1_USB_RAMPATCH_HEADER	sizeof(struct rome2_1_version)
#define ROME1_1_USB_RAMPATCH_HEADER	sizeof(struct rome1_1_version)

#define ROME1_1_USB_NVM_HEADER			0x04
#define ROME2_1_USB_NVM_HEADER			0x04
#define ROME2_1_USB_CHIP_VERSION		0x200

#define ROME1_1_USB_CHIP_VERSION		0x101
#define ROME2_1_USB_CHIP_VERSION		0x200
#define ROME3_0_USB_CHIP_VERSION		0x300

#define ATH3K_DNLOAD				0x01
#define ATH3K_GETSTATE				0x05
@@ -338,11 +344,17 @@ int get_rome_version(struct usb_device *udev)
		BT_ERR("Failed to get Rome Firmware version");
		return ret;
	}
	if ((fw_version.rom_version == ROME2_1_USB_CHIP_VERSION) ||
		(fw_version.rom_version == ROME1_1_USB_CHIP_VERSION))

	switch (fw_version.rom_version) {
	case ROME1_1_USB_CHIP_VERSION:
	case ROME2_1_USB_CHIP_VERSION:
	case ROME3_0_USB_CHIP_VERSION:
		ret = fw_version.rom_version;
	else
		break;
	default:
		ret = 0;
		break;
	}
	return ret;
}
EXPORT_SYMBOL(get_rome_version);
@@ -470,6 +482,9 @@ static int ath3k_load_patch(struct usb_device *udev)
	} else if (fw_version.rom_version == ROME2_1_USB_CHIP_VERSION) {
		BT_DBG("Chip Detected as ROME2.1");
		snprintf(filename, ATH3K_NAME_LEN, ROME2_1_USB_RAMPATCH_FILE);
	} else if (fw_version.rom_version == ROME3_0_USB_CHIP_VERSION) {
		BT_DBG("Chip Detected as ROME3.0");
		snprintf(filename, ATH3K_NAME_LEN, ROME3_0_USB_RAMPATCH_FILE);
	} else {
		BT_DBG("Chip Detected as Ath3k");
		snprintf(filename, ATH3K_NAME_LEN, "ar3k/AthrBT_0x%08x.dfu",
@@ -481,14 +496,15 @@ static int ath3k_load_patch(struct usb_device *udev)
		return ret;
	}

	if (fw_version.rom_version == ROME2_1_USB_CHIP_VERSION) {
	if ((fw_version.rom_version == ROME2_1_USB_CHIP_VERSION) ||
		(fw_version.rom_version == ROME3_0_USB_CHIP_VERSION)) {
		rome2_1_version = (struct rome2_1_version *) firmware->data;
		pt_version.rom_version = rome2_1_version->build_ver;
		pt_version.build_version = rome2_1_version->patch_ver;
		BT_DBG("pt_ver.rom2.1_ver : 0x%x", pt_version.rom_version);
		BT_DBG("pt_ver.build2.1_ver: 0x%x", pt_version.build_version);
		BT_DBG("fw_ver.rom2.1_ver: 0x%x", fw_version.rom_version);
		BT_DBG("fw_ver.build2.1_ver: 0x%x", fw_version.build_version);
		BT_DBG("pt_ver.rome_ver : 0x%x", pt_version.rom_version);
		BT_DBG("pt_ver.build_ver: 0x%x", pt_version.build_version);
		BT_DBG("fw_ver.rom_ver: 0x%x", fw_version.rom_version);
		BT_DBG("fw_ver.build_ver: 0x%x", fw_version.build_version);
	} else if (fw_version.rom_version == ROME1_1_USB_CHIP_VERSION) {
		rome1_1_version = (struct rome1_1_version *) firmware->data;
		pt_version.build_version = rome1_1_version->build_ver;
@@ -510,7 +526,8 @@ static int ath3k_load_patch(struct usb_device *udev)
		return -EINVAL;
	}

	if (fw_version.rom_version == ROME2_1_USB_CHIP_VERSION)
	if ((fw_version.rom_version == ROME2_1_USB_CHIP_VERSION) ||
		(fw_version.rom_version == ROME3_0_USB_CHIP_VERSION))
		ret = ath3k_load_fwfile(udev, firmware,
						ROME2_1_USB_RAMPATCH_HEADER);
	else if (fw_version.rom_version == ROME1_1_USB_CHIP_VERSION)
@@ -570,6 +587,8 @@ static int ath3k_load_syscfg(struct usb_device *udev)

	if (fw_version.rom_version == ROME2_1_USB_CHIP_VERSION)
		snprintf(filename, ATH3K_NAME_LEN, ROME2_1_USB_NVM_FILE);
	else if (fw_version.rom_version == ROME3_0_USB_CHIP_VERSION)
		snprintf(filename, ATH3K_NAME_LEN, ROME3_0_USB_NVM_FILE);
	else if (fw_version.rom_version == ROME1_1_USB_CHIP_VERSION)
		snprintf(filename, ATH3K_NAME_LEN, ROME1_1_USB_NVM_FILE);
	else
@@ -582,7 +601,8 @@ static int ath3k_load_syscfg(struct usb_device *udev)
		return ret;
	}

	if (fw_version.rom_version == ROME2_1_USB_CHIP_VERSION)
	if ((fw_version.rom_version == ROME2_1_USB_CHIP_VERSION) ||
		(fw_version.rom_version == ROME3_0_USB_CHIP_VERSION))
		ret = ath3k_load_fwfile(udev, firmware, ROME2_1_USB_NVM_HEADER);
	else if (fw_version.rom_version == ROME1_1_USB_CHIP_VERSION)
		ret = ath3k_load_fwfile(udev, firmware, ROME1_1_USB_NVM_HEADER);