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

Commit 3f5f3a20 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "Bluetooth:Change EA for HST and HSP before getting LA"

parents 27a74e82 75e8789c
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@

#if defined CONFIG_BT_SLIM_QCA6390 || defined CONFIG_BTFM_SLIM_WCN3990
#include "btfm_slim.h"
#include "btfm_slim_slave.h"
#endif
#include <linux/fs.h>

@@ -846,6 +847,18 @@ int get_chipset_version(void)
	return soc_id;
}

int bt_disable_asd(void)
{
	int rc = 0;
	if (bt_power_pdata->bt_vdd_asd) {
		BT_PWR_INFO("Disabling ASD regulator");
		rc = bt_vreg_disable(bt_power_pdata->bt_vdd_asd);
	} else {
		BT_PWR_INFO("ASD regulator is not configured");
	}
	return rc;
}

static long bt_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
	int ret = 0, pwr_cntrl = 0;
@@ -882,6 +895,11 @@ static long bt_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
		BT_PWR_ERR("BT_CMD_CHIP_VERS soc_version:%x", chipset_version);
		if (chipset_version) {
			soc_id = chipset_version;
			if (soc_id == QCA_HSP_SOC_ID_0100 ||
				soc_id == QCA_HSP_SOC_ID_0110 ||
				soc_id == QCA_HSP_SOC_ID_0200) {
				ret = bt_disable_asd();
			}
		} else {
			BT_PWR_ERR("got invalid soc version");
			soc_id = 0;
+58 −0
Original line number Diff line number Diff line
@@ -371,6 +371,9 @@ static int btfm_slim_alloc_port(struct btfmslim *btfmslim)
int btfm_slim_hw_init(struct btfmslim *btfmslim)
{
	int ret;
	int chipset_ver;
	struct slim_device *slim = btfmslim->slim_pgd;
	struct slim_device *slim_ifd = &btfmslim->slim_ifd;

	BTFMSLIM_DBG("");
	if (!btfmslim)
@@ -381,6 +384,61 @@ int btfm_slim_hw_init(struct btfmslim *btfmslim)
		return 0;
	}
	mutex_lock(&btfmslim->io_lock);
		BTFMSLIM_INFO(
			"PGD Enum Addr: %.02x:%.02x:%.02x:%.02x:%.02x: %.02x",
			slim->e_addr[0], slim->e_addr[1], slim->e_addr[2],
			slim->e_addr[3], slim->e_addr[4], slim->e_addr[5]);
		BTFMSLIM_INFO(
			"IFD Enum Addr: %.02x:%.02x:%.02x:%.02x:%.02x: %.02x",
			slim_ifd->e_addr[0], slim_ifd->e_addr[1],
			slim_ifd->e_addr[2], slim_ifd->e_addr[3],
			slim_ifd->e_addr[4], slim_ifd->e_addr[5]);

	chipset_ver = get_chipset_version();
	BTFMSLIM_INFO("chipset soc version:%x", chipset_ver);

	if (chipset_ver == QCA_HSP_SOC_ID_0100 ||
		chipset_ver == QCA_HSP_SOC_ID_0110 ||
		chipset_ver == QCA_HSP_SOC_ID_0200) {
		BTFMSLIM_INFO("chipset is hastings prime, overwriting EA");
		slim->e_addr[0] = 0x00;
		slim->e_addr[1] = 0x01;
		slim->e_addr[2] = 0x21;
		slim->e_addr[3] = 0x02;
		slim->e_addr[4] = 0x17;
		slim->e_addr[5] = 0x02;

		slim_ifd->e_addr[0] = 0x00;
		slim_ifd->e_addr[1] = 0x00;
		slim_ifd->e_addr[2] = 0x21;
		slim_ifd->e_addr[3] = 0x02;
		slim_ifd->e_addr[4] = 0x17;
		slim_ifd->e_addr[5] = 0x02;
	} else if (chipset_ver == QCA_HASTINGS_SOC_ID_0200) {
		BTFMSLIM_INFO("chipset is hastings 2.0, overwriting EA");
		slim->e_addr[0] = 0x00;
		slim->e_addr[1] = 0x01;
		slim->e_addr[2] = 0x20;
		slim->e_addr[3] = 0x02;
		slim->e_addr[4] = 0x17;
		slim->e_addr[5] = 0x02;

		slim_ifd->e_addr[0] = 0x00;
		slim_ifd->e_addr[1] = 0x00;
		slim_ifd->e_addr[2] = 0x20;
		slim_ifd->e_addr[3] = 0x02;
		slim_ifd->e_addr[4] = 0x17;
		slim_ifd->e_addr[5] = 0x02;
	}
		BTFMSLIM_INFO(
			"PGD Enum Addr: %.02x:%.02x:%.02x:%.02x:%.02x: %.02x",
			slim->e_addr[0], slim->e_addr[1], slim->e_addr[2],
			slim->e_addr[3], slim->e_addr[4], slim->e_addr[5]);
		BTFMSLIM_INFO(
			"IFD Enum Addr: %.02x:%.02x:%.02x:%.02x:%.02x: %.02x",
			slim_ifd->e_addr[0], slim_ifd->e_addr[1],
			slim_ifd->e_addr[2], slim_ifd->e_addr[3],
			slim_ifd->e_addr[4], slim_ifd->e_addr[5]);

	/* Assign Logical Address for PGD (Ported Generic Device)
	 * enumeration address
+6 −0
Original line number Diff line number Diff line
@@ -103,6 +103,12 @@ enum {
	QCA_HASTINGS_SOC_ID_0200 = 0x400A0200,
};

enum {
	QCA_HSP_SOC_ID_0100 = 0x400C0100,
	QCA_HSP_SOC_ID_0110 = 0x400C0110,
	QCA_HSP_SOC_ID_0200 = 0x400C0200,
};

/* Function Prototype */

/*