LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller
@ 2021-08-23 8:58 Zijun Hu
2021-08-23 13:58 ` kernel test robot
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Zijun Hu @ 2021-08-23 8:58 UTC (permalink / raw)
To: marcel, johan.hedberg, luiz.dentz
Cc: linux-kernel, linux-bluetooth, linux-arm-msm, bgodavar, c-hbandi,
hemantg, mka, rjliao, zijuhu, tjiang
From: Tim Jiang <tjiang@codeaurora.org>
we have variant wcn6855 soc chip from different vendors, so we should
use different nvm file with suffix to distinguish them.
Signed-off-by: Tim Jiang <tjiang@codeaurora.org>
---
drivers/bluetooth/btusb.c | 46 ++++++++++++++++++++++++++++++++++++----------
1 file changed, 36 insertions(+), 10 deletions(-)
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 60d2fce59a71..9b4408307138 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -3141,6 +3141,9 @@ static int btusb_set_bdaddr_wcn6855(struct hci_dev *hdev,
#define QCA_DFU_TIMEOUT 3000
#define QCA_FLAG_MULTI_NVM 0x80
+#define WCN6855_2_0_RAM_VERSION_GF 0x400c1200
+#define WCN6855_2_1_RAM_VERSION_GF 0x400c1211
+
struct qca_version {
__le32 rom_version;
__le32 patch_version;
@@ -3172,6 +3175,7 @@ static const struct qca_device_info qca_devices_table[] = {
{ 0x00000302, 28, 4, 16 }, /* Rome 3.2 */
{ 0x00130100, 40, 4, 16 }, /* WCN6855 1.0 */
{ 0x00130200, 40, 4, 16 }, /* WCN6855 2.0 */
+ { 0x00130201, 40, 4, 16 }, /* WCN6855 2.1 */
};
static int btusb_qca_send_vendor_req(struct usb_device *udev, u8 request,
@@ -3326,22 +3330,24 @@ static int btusb_setup_qca_load_rampatch(struct hci_dev *hdev,
return err;
}
-static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
- struct qca_version *ver,
- const struct qca_device_info *info)
+static void btusb_generate_qca_nvm_name(char **fwname,
+ int max_size,
+ struct qca_version *ver,
+ char *separator,
+ char *vendor)
{
- const struct firmware *fw;
- char fwname[64];
- int err;
-
if (((ver->flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) {
/* if boardid equal 0, use default nvm without surfix */
if (le16_to_cpu(ver->board_id) == 0x0) {
- snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
- le32_to_cpu(ver->rom_version));
+ snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s.bin",
+ le32_to_cpu(ver->rom_version),
+ separator,
+ vendor);
} else {
- snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x_%04x.bin",
+ snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s%04x.bin",
le32_to_cpu(ver->rom_version),
+ separator,
+ vendor,
le16_to_cpu(ver->board_id));
}
} else {
@@ -3349,6 +3355,26 @@ static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
le32_to_cpu(ver->rom_version));
}
+}
+
+static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
+ struct qca_version *ver,
+ const struct qca_device_info *info)
+{
+ const struct firmware *fw;
+ char fwname[64];
+ int err;
+
+ switch (ver->ram_version) {
+ case WCN6855_2_0_RAM_VERSION_GF:
+ case WCN6855_2_1_RAM_VERSION_GF:
+ btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, "_", "gf");
+ break;
+ default:
+ btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, NULL, NULL);
+ break;
+ }
+
err = request_firmware(&fw, fwname, &hdev->dev);
if (err) {
bt_dev_err(hdev, "failed to request NVM file: %s (%d)",
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller
2021-08-23 8:58 [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller Zijun Hu
@ 2021-08-23 13:58 ` kernel test robot
2021-08-23 15:25 ` kernel test robot
2021-08-23 17:43 ` Matthias Kaehlcke
2 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2021-08-23 13:58 UTC (permalink / raw)
To: Zijun Hu, marcel, johan.hedberg, luiz.dentz
Cc: kbuild-all, linux-kernel, linux-bluetooth, linux-arm-msm,
bgodavar, c-hbandi, hemantg, mka
[-- Attachment #1: Type: text/plain, Size: 7508 bytes --]
Hi Zijun,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on bluetooth-next/master]
[also build test WARNING on linus/master v5.14-rc7 next-20210823]
[cannot apply to linux/master bluetooth/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Zijun-Hu/Bluetooth-btusb-Add-support-using-different-nvm-for-variant-WCN6855-controller/20210823-170111
base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git master
config: alpha-allyesconfig (attached as .config)
compiler: alpha-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/0e2a1544bcc7d3ffac1bd4c27614c8d892933ed3
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Zijun-Hu/Bluetooth-btusb-Add-support-using-different-nvm-for-variant-WCN6855-controller/20210823-170111
git checkout 0e2a1544bcc7d3ffac1bd4c27614c8d892933ed3
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross ARCH=alpha
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
drivers/bluetooth/btusb.c: In function 'btusb_generate_qca_nvm_name':
>> drivers/bluetooth/btusb.c:3342:48: warning: argument to 'sizeof' in 'snprintf' call is the same expression as the destination; did you mean to provide an explicit length? [-Wsizeof-pointer-memaccess]
3342 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s.bin",
| ^
drivers/bluetooth/btusb.c:3342:34: error: passing argument 1 of 'snprintf' from incompatible pointer type [-Werror=incompatible-pointer-types]
3342 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s.bin",
| ^~~~~~
| |
| char **
In file included from include/linux/list.h:9,
from include/linux/dmi.h:5,
from drivers/bluetooth/btusb.c:9:
include/linux/kernel.h:204:20: note: expected 'char *' but argument is of type 'char **'
204 | int snprintf(char *buf, size_t size, const char *fmt, ...);
| ~~~~~~^~~
drivers/bluetooth/btusb.c:3347:48: warning: argument to 'sizeof' in 'snprintf' call is the same expression as the destination; did you mean to provide an explicit length? [-Wsizeof-pointer-memaccess]
3347 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s%04x.bin",
| ^
drivers/bluetooth/btusb.c:3347:34: error: passing argument 1 of 'snprintf' from incompatible pointer type [-Werror=incompatible-pointer-types]
3347 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s%04x.bin",
| ^~~~~~
| |
| char **
In file included from include/linux/list.h:9,
from include/linux/dmi.h:5,
from drivers/bluetooth/btusb.c:9:
include/linux/kernel.h:204:20: note: expected 'char *' but argument is of type 'char **'
204 | int snprintf(char *buf, size_t size, const char *fmt, ...);
| ~~~~~~^~~
drivers/bluetooth/btusb.c:3354:40: warning: argument to 'sizeof' in 'snprintf' call is the same expression as the destination; did you mean to provide an explicit length? [-Wsizeof-pointer-memaccess]
3354 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
| ^
drivers/bluetooth/btusb.c:3354:26: error: passing argument 1 of 'snprintf' from incompatible pointer type [-Werror=incompatible-pointer-types]
3354 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
| ^~~~~~
| |
| char **
In file included from include/linux/list.h:9,
from include/linux/dmi.h:5,
from drivers/bluetooth/btusb.c:9:
include/linux/kernel.h:204:20: note: expected 'char *' but argument is of type 'char **'
204 | int snprintf(char *buf, size_t size, const char *fmt, ...);
| ~~~~~~^~~
drivers/bluetooth/btusb.c: In function 'btusb_setup_qca_load_nvm':
drivers/bluetooth/btusb.c:3371:53: error: passing argument 1 of 'btusb_generate_qca_nvm_name' from incompatible pointer type [-Werror=incompatible-pointer-types]
3371 | btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, "_", "gf");
| ^~~~~~~
| |
| char (*)[64]
drivers/bluetooth/btusb.c:3333:48: note: expected 'char **' but argument is of type 'char (*)[64]'
3333 | static void btusb_generate_qca_nvm_name(char **fwname,
| ~~~~~~~^~~~~~
drivers/bluetooth/btusb.c:3374:53: error: passing argument 1 of 'btusb_generate_qca_nvm_name' from incompatible pointer type [-Werror=incompatible-pointer-types]
3374 | btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, NULL, NULL);
| ^~~~~~~
| |
| char (*)[64]
drivers/bluetooth/btusb.c:3333:48: note: expected 'char **' but argument is of type 'char (*)[64]'
3333 | static void btusb_generate_qca_nvm_name(char **fwname,
| ~~~~~~~^~~~~~
cc1: some warnings being treated as errors
vim +3342 drivers/bluetooth/btusb.c
3332
3333 static void btusb_generate_qca_nvm_name(char **fwname,
3334 int max_size,
3335 struct qca_version *ver,
3336 char *separator,
3337 char *vendor)
3338 {
3339 if (((ver->flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) {
3340 /* if boardid equal 0, use default nvm without surfix */
3341 if (le16_to_cpu(ver->board_id) == 0x0) {
> 3342 snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s.bin",
3343 le32_to_cpu(ver->rom_version),
3344 separator,
3345 vendor);
3346 } else {
3347 snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s%04x.bin",
3348 le32_to_cpu(ver->rom_version),
3349 separator,
3350 vendor,
3351 le16_to_cpu(ver->board_id));
3352 }
3353 } else {
3354 snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
3355 le32_to_cpu(ver->rom_version));
3356 }
3357
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 68259 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller
2021-08-23 8:58 [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller Zijun Hu
2021-08-23 13:58 ` kernel test robot
@ 2021-08-23 15:25 ` kernel test robot
2021-08-23 17:43 ` Matthias Kaehlcke
2 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2021-08-23 15:25 UTC (permalink / raw)
To: Zijun Hu, marcel, johan.hedberg, luiz.dentz
Cc: kbuild-all, linux-kernel, linux-bluetooth, linux-arm-msm,
bgodavar, c-hbandi, hemantg, mka
[-- Attachment #1: Type: text/plain, Size: 7478 bytes --]
Hi Zijun,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on bluetooth-next/master]
[also build test ERROR on linus/master v5.14-rc7 next-20210823]
[cannot apply to linux/master bluetooth/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Zijun-Hu/Bluetooth-btusb-Add-support-using-different-nvm-for-variant-WCN6855-controller/20210823-170111
base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git master
config: arc-allyesconfig (attached as .config)
compiler: arceb-elf-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/0e2a1544bcc7d3ffac1bd4c27614c8d892933ed3
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Zijun-Hu/Bluetooth-btusb-Add-support-using-different-nvm-for-variant-WCN6855-controller/20210823-170111
git checkout 0e2a1544bcc7d3ffac1bd4c27614c8d892933ed3
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross ARCH=arc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/bluetooth/btusb.c: In function 'btusb_generate_qca_nvm_name':
>> drivers/bluetooth/btusb.c:3342:34: error: passing argument 1 of 'snprintf' from incompatible pointer type [-Werror=incompatible-pointer-types]
3342 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s.bin",
| ^~~~~~
| |
| char **
In file included from include/linux/list.h:9,
from include/linux/dmi.h:5,
from drivers/bluetooth/btusb.c:9:
include/linux/kernel.h:204:20: note: expected 'char *' but argument is of type 'char **'
204 | int snprintf(char *buf, size_t size, const char *fmt, ...);
| ~~~~~~^~~
drivers/bluetooth/btusb.c:3347:34: error: passing argument 1 of 'snprintf' from incompatible pointer type [-Werror=incompatible-pointer-types]
3347 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s%04x.bin",
| ^~~~~~
| |
| char **
In file included from include/linux/list.h:9,
from include/linux/dmi.h:5,
from drivers/bluetooth/btusb.c:9:
include/linux/kernel.h:204:20: note: expected 'char *' but argument is of type 'char **'
204 | int snprintf(char *buf, size_t size, const char *fmt, ...);
| ~~~~~~^~~
drivers/bluetooth/btusb.c:3354:26: error: passing argument 1 of 'snprintf' from incompatible pointer type [-Werror=incompatible-pointer-types]
3354 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
| ^~~~~~
| |
| char **
In file included from include/linux/list.h:9,
from include/linux/dmi.h:5,
from drivers/bluetooth/btusb.c:9:
include/linux/kernel.h:204:20: note: expected 'char *' but argument is of type 'char **'
204 | int snprintf(char *buf, size_t size, const char *fmt, ...);
| ~~~~~~^~~
drivers/bluetooth/btusb.c: In function 'btusb_setup_qca_load_nvm':
>> drivers/bluetooth/btusb.c:3371:53: error: passing argument 1 of 'btusb_generate_qca_nvm_name' from incompatible pointer type [-Werror=incompatible-pointer-types]
3371 | btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, "_", "gf");
| ^~~~~~~
| |
| char (*)[64]
drivers/bluetooth/btusb.c:3333:48: note: expected 'char **' but argument is of type 'char (*)[64]'
3333 | static void btusb_generate_qca_nvm_name(char **fwname,
| ~~~~~~~^~~~~~
drivers/bluetooth/btusb.c:3374:53: error: passing argument 1 of 'btusb_generate_qca_nvm_name' from incompatible pointer type [-Werror=incompatible-pointer-types]
3374 | btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, NULL, NULL);
| ^~~~~~~
| |
| char (*)[64]
drivers/bluetooth/btusb.c:3333:48: note: expected 'char **' but argument is of type 'char (*)[64]'
3333 | static void btusb_generate_qca_nvm_name(char **fwname,
| ~~~~~~~^~~~~~
cc1: some warnings being treated as errors
vim +/snprintf +3342 drivers/bluetooth/btusb.c
3332
3333 static void btusb_generate_qca_nvm_name(char **fwname,
3334 int max_size,
3335 struct qca_version *ver,
3336 char *separator,
3337 char *vendor)
3338 {
3339 if (((ver->flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) {
3340 /* if boardid equal 0, use default nvm without surfix */
3341 if (le16_to_cpu(ver->board_id) == 0x0) {
> 3342 snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s.bin",
3343 le32_to_cpu(ver->rom_version),
3344 separator,
3345 vendor);
3346 } else {
3347 snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s%04x.bin",
3348 le32_to_cpu(ver->rom_version),
3349 separator,
3350 vendor,
3351 le16_to_cpu(ver->board_id));
3352 }
3353 } else {
3354 snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
3355 le32_to_cpu(ver->rom_version));
3356 }
3357
3358 }
3359
3360 static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
3361 struct qca_version *ver,
3362 const struct qca_device_info *info)
3363 {
3364 const struct firmware *fw;
3365 char fwname[64];
3366 int err;
3367
3368 switch (ver->ram_version) {
3369 case WCN6855_2_0_RAM_VERSION_GF:
3370 case WCN6855_2_1_RAM_VERSION_GF:
> 3371 btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, "_", "gf");
3372 break;
3373 default:
3374 btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, NULL, NULL);
3375 break;
3376 }
3377
3378 err = request_firmware(&fw, fwname, &hdev->dev);
3379 if (err) {
3380 bt_dev_err(hdev, "failed to request NVM file: %s (%d)",
3381 fwname, err);
3382 return err;
3383 }
3384
3385 bt_dev_info(hdev, "using NVM file: %s", fwname);
3386
3387 err = btusb_setup_qca_download_fw(hdev, fw, info->nvm_hdr);
3388
3389 release_firmware(fw);
3390
3391 return err;
3392 }
3393
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 68484 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller
2021-08-23 8:58 [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller Zijun Hu
2021-08-23 13:58 ` kernel test robot
2021-08-23 15:25 ` kernel test robot
@ 2021-08-23 17:43 ` Matthias Kaehlcke
2 siblings, 0 replies; 4+ messages in thread
From: Matthias Kaehlcke @ 2021-08-23 17:43 UTC (permalink / raw)
To: Zijun Hu
Cc: marcel, johan.hedberg, luiz.dentz, linux-kernel, linux-bluetooth,
linux-arm-msm, bgodavar, c-hbandi, hemantg, rjliao, tjiang
On Mon, Aug 23, 2021 at 04:58:20PM +0800, Zijun Hu wrote:
> From: Tim Jiang <tjiang@codeaurora.org>
>
> we have variant wcn6855 soc chip from different vendors, so we should
> use different nvm file with suffix to distinguish them.
I think the concept of 'vendor' (or 'factory' as it was named earlier) needs
more clarification.
Are we talking about USB BT modules with a the wcn6855 that are marketed by
the 'vendor'? If so, could the USB vendor it be used to determine the vendor?
Could modules from different vendors use the same firmware, even though it's
not the same for all vendors?.
> Signed-off-by: Tim Jiang <tjiang@codeaurora.org>
Please also add your own Signed-off-by tag, even when sending unmodified
patches on behalf of others. In this case you are making changes to the
original patch and are effectively a co-author, which is another important
reason for adding the tag.
> ---
> drivers/bluetooth/btusb.c | 46 ++++++++++++++++++++++++++++++++++++----------
> 1 file changed, 36 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
> index 60d2fce59a71..9b4408307138 100644
> --- a/drivers/bluetooth/btusb.c
> +++ b/drivers/bluetooth/btusb.c
> @@ -3141,6 +3141,9 @@ static int btusb_set_bdaddr_wcn6855(struct hci_dev *hdev,
> #define QCA_DFU_TIMEOUT 3000
> #define QCA_FLAG_MULTI_NVM 0x80
>
> +#define WCN6855_2_0_RAM_VERSION_GF 0x400c1200
> +#define WCN6855_2_1_RAM_VERSION_GF 0x400c1211
> +
> struct qca_version {
> __le32 rom_version;
> __le32 patch_version;
> @@ -3172,6 +3175,7 @@ static const struct qca_device_info qca_devices_table[] = {
> { 0x00000302, 28, 4, 16 }, /* Rome 3.2 */
> { 0x00130100, 40, 4, 16 }, /* WCN6855 1.0 */
> { 0x00130200, 40, 4, 16 }, /* WCN6855 2.0 */
> + { 0x00130201, 40, 4, 16 }, /* WCN6855 2.1 */
> };
>
> static int btusb_qca_send_vendor_req(struct usb_device *udev, u8 request,
> @@ -3326,22 +3330,24 @@ static int btusb_setup_qca_load_rampatch(struct hci_dev *hdev,
> return err;
> }
>
> -static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
> - struct qca_version *ver,
> - const struct qca_device_info *info)
> +static void btusb_generate_qca_nvm_name(char **fwname,
> + int max_size,
> + struct qca_version *ver,
> + char *separator,
'separator' is part of the internal logic of this function, the caller
shouldn't have to care about it. Define it as a local variable instead
and initialize it to ''. If 'vendor' (or whatever it is called) is not
NULL assign 'separator' to '_'.
> + char *vendor)
> {
> - const struct firmware *fw;
> - char fwname[64];
> - int err;
> -
u16 board_id = le16_to_cpu(ver->board_id);
u32 rom_version = le32_to_cpu(ver->rom_version));
Then use these local variable instead of doing the endianness conversion
over and over again.
> if (((ver->flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) {
> /* if boardid equal 0, use default nvm without surfix */
> if (le16_to_cpu(ver->board_id) == 0x0) {
> - snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
> - le32_to_cpu(ver->rom_version));
> + snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s.bin",
> + le32_to_cpu(ver->rom_version),
> + separator,
> + vendor);
> } else {
> - snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x_%04x.bin",
> + snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s%04x.bin",
> le32_to_cpu(ver->rom_version),
> + separator,
> + vendor,
> le16_to_cpu(ver->board_id));
> }
> } else {
> @@ -3349,6 +3355,26 @@ static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
> le32_to_cpu(ver->rom_version));
> }
>
> +}
> +
> +static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
> + struct qca_version *ver,
> + const struct qca_device_info *info)
> +{
> + const struct firmware *fw;
> + char fwname[64];
> + int err;
> +
> + switch (ver->ram_version) {
> + case WCN6855_2_0_RAM_VERSION_GF:
> + case WCN6855_2_1_RAM_VERSION_GF:
> + btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, "_", "gf");
> + break;
> + default:
> + btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, NULL, NULL);
> + break;
> + }
> +
> err = request_firmware(&fw, fwname, &hdev->dev);
> if (err) {
> bt_dev_err(hdev, "failed to request NVM file: %s (%d)",
> --
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-08-23 17:43 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-23 8:58 [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller Zijun Hu
2021-08-23 13:58 ` kernel test robot
2021-08-23 15:25 ` kernel test robot
2021-08-23 17:43 ` Matthias Kaehlcke
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).