Hi Zijun, On Thu, Nov 14, 2024 at 12:27 AM Zijun Hu <quic_zijuhu@xxxxxxxxxxx> wrote: > > Download board id specific NVM instead of default for WCN6855 if board > id is available, and that is required by Lenovo ThinkPad X13s. > > Cc: Bjorn Andersson <bjorande@xxxxxxxxxxx> > Cc: Aiqun Yu (Maria) <quic_aiquny@xxxxxxxxxxx> > Cc: Cheng Jiang <quic_chejiang@xxxxxxxxxxx> > Cc: Johan Hovold <johan@xxxxxxxxxx> > Cc: Jens Glathe <jens.glathe@xxxxxxxxxxxxxxxxxxxxxx> > Cc: Steev Klimaszewski <steev@xxxxxxxx> > Signed-off-by: Zijun Hu <quic_zijuhu@xxxxxxxxxxx> > --- > drivers/bluetooth/btqca.c | 35 ++++++++++++++++++++++++++++++++--- > 1 file changed, 32 insertions(+), 3 deletions(-) > > diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c > index dfbbac92242a..4f8576cbbab9 100644 > --- a/drivers/bluetooth/btqca.c > +++ b/drivers/bluetooth/btqca.c > @@ -717,6 +717,29 @@ static void qca_generate_hsp_nvm_name(char *fwname, size_t max_size, > snprintf(fwname, max_size, "qca/hpnv%02x%s.%x", rom_ver, variant, bid); > } > > +static void qca_get_hsp_nvm_name_generic(struct qca_fw_config *cfg, > + struct qca_btsoc_version ver, > + u8 rom_ver, u16 bid) > +{ > + const char *variant; > + > + /* hsp gf chip */ > + if ((le32_to_cpu(ver.soc_id) & QCA_HSP_GF_SOC_MASK) == QCA_HSP_GF_SOC_ID) > + variant = "g"; > + else > + variant = ""; > + > + if (bid == 0x0) > + snprintf(cfg->fwname, sizeof(cfg->fwname), "qca/hpnv%02x%s.bin", > + rom_ver, variant); > + else if (bid & 0xff00) > + snprintf(cfg->fwname, sizeof(cfg->fwname), "qca/hpnv%02x%s.b%x", > + rom_ver, variant, bid); > + else > + snprintf(cfg->fwname, sizeof(cfg->fwname), "qca/hpnv%02x%s.b%02x", > + rom_ver, variant, bid); > +} > + > static inline void qca_get_nvm_name_generic(struct qca_fw_config *cfg, > const char *stem, u8 rom_ver, u16 bid) > { > @@ -810,8 +833,15 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate, > /* Give the controller some time to get ready to receive the NVM */ > msleep(10); > > - if (soc_type == QCA_QCA2066 || soc_type == QCA_WCN7850) > + switch (soc_type) { > + case QCA_QCA2066: > + case QCA_WCN6855: > + case QCA_WCN7850: > qca_read_fw_board_id(hdev, &boardid); > + break; > + default: > + break; > + } > > /* Download NVM configuration */ > config.type = TLV_TYPE_NVM; > @@ -848,8 +878,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate, > "qca/msnv%02x.bin", rom_ver); > break; > case QCA_WCN6855: > - snprintf(config.fwname, sizeof(config.fwname), > - "qca/hpnv%02x.bin", rom_ver); > + qca_get_hsp_nvm_name_generic(&config, ver, rom_ver, boardid); > break; > case QCA_WCN7850: > qca_get_nvm_name_generic(&config, "hmt", rom_ver, boardid); > > --- > base-commit: e88b020190bf5bc3e7ce5bd8003fc39b23cc95fe > change-id: 20241113-x13s_wcn6855_fix-53c573ff7878 > > Best regards, > -- > Zijun Hu <quic_zijuhu@xxxxxxxxxxx> > Thank you for this, I'd had something similar written, so it's nice to see I was kind of on the right track! I tested this on my Thinkpad X13s with an H2GO bluetooth Speaker and the range I can get is far greater when it properly loads the b8c file (with this patch), than with the .bin (without this patch). Thanks again! Tested-by: Steev Klimaszewski <steev@xxxxxxxx>