path: root/drivers/soc
diff options
authorBjorn Andersson <>2021-03-11 16:33:17 -0800
committerBjorn Andersson <>2021-04-05 22:35:06 -0500
commit82ec0c290d1a731a2b33b8a713c5bc96b03fb2d3 (patch)
treeebd712f35fba6ba5516e54ad43e2860af4bc9782 /drivers/soc
parentac3f2784200d490558882c83c25a2d38270b02a2 (diff)
soc: qcom: wcnss_ctrl: Allow reading firmware-name from DT
The WLAN NV firmware blob differs between platforms, and possibly devices, so add support in the wcnss_ctrl driver for reading the path of this file from DT in order to allow these files to live in a generic file system (or linux-firmware). The new property is optional and the code falls back to the old filename if the property isn't specified. Tested-by: Bryan O'Donoghue <> Tested-by: Aníbal Limón <> Link: Signed-off-by: Bjorn Andersson <>
Diffstat (limited to 'drivers/soc')
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/soc/qcom/wcnss_ctrl.c b/drivers/soc/qcom/wcnss_ctrl.c
index 358526b9de06..2a06d631e415 100644
--- a/drivers/soc/qcom/wcnss_ctrl.c
+++ b/drivers/soc/qcom/wcnss_ctrl.c
@@ -200,6 +200,7 @@ static int wcnss_download_nv(struct wcnss_ctrl *wcnss, bool *expect_cbc)
struct wcnss_download_nv_req *req;
const struct firmware *fw;
struct device *dev = wcnss->dev;
+ const char *nvbin = NVBIN_FILE;
const void *data;
ssize_t left;
int ret;
@@ -208,10 +209,13 @@ static int wcnss_download_nv(struct wcnss_ctrl *wcnss, bool *expect_cbc)
if (!req)
return -ENOMEM;
- ret = request_firmware(&fw, NVBIN_FILE, dev);
+ ret = of_property_read_string(dev->of_node, "firmware-name", &nvbin);
+ if (ret < 0 && ret != -EINVAL)
+ goto free_req;
+ ret = request_firmware(&fw, nvbin, dev);
if (ret < 0) {
- dev_err(dev, "Failed to load nv file %s: %d\n",
- NVBIN_FILE, ret);
+ dev_err(dev, "Failed to load nv file %s: %d\n", nvbin, ret);
goto free_req;