From 43864b4f64033404412ecc97c0566f18226d349d Mon Sep 17 00:00:00 2001 From: Satish Kodishala Date: Wed, 8 Apr 2020 15:07:31 +0530 Subject: [PATCH] Bluetooth:Change EA for HST and HSP before getting LA -Change EA for HSP before getting LA based on the soc type queried from BT power driver. -By default, HSP's Slimbus EA is added in DTSI file. Update HST's Slimbus slave EA address based on HST chip ver. CRs-Fixed: 2667021 Change-Id: I49e06e2e43025797e6110bf55304c7b3f0616c8e Signed-off-by: Satish Kodishala --- drivers/bluetooth/btfm_slim.c | 62 +++++++++++++++++++++++++++++ drivers/bluetooth/btfm_slim_slave.h | 6 +++ 2 files changed, 68 insertions(+) diff --git a/drivers/bluetooth/btfm_slim.c b/drivers/bluetooth/btfm_slim.c index 7aea90248de7..1c17d4e5142a 100644 --- a/drivers/bluetooth/btfm_slim.c +++ b/drivers/bluetooth/btfm_slim.c @@ -410,6 +410,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; + struct slim_device *slim_ifd; BTFMSLIM_DBG(""); if (!btfmslim) @@ -419,7 +422,66 @@ int btfm_slim_hw_init(struct btfmslim *btfmslim) BTFMSLIM_DBG("Already enabled"); return 0; } + + slim = btfmslim->slim_pgd; + slim_ifd = &btfmslim->slim_ifd; + 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 = btpower_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 diff --git a/drivers/bluetooth/btfm_slim_slave.h b/drivers/bluetooth/btfm_slim_slave.h index 88d14849865f..67e08a6ce667 100644 --- a/drivers/bluetooth/btfm_slim_slave.h +++ b/drivers/bluetooth/btfm_slim_slave.h @@ -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 */ /*