soc: qcom: wcnss_ctrl: Allow reading firmware-name from DT
authorBjorn Andersson <bjorn.andersson@linaro.org>
Fri, 12 Mar 2021 00:33:17 +0000 (16:33 -0800)
committerBjorn Andersson <bjorn.andersson@linaro.org>
Tue, 6 Apr 2021 03:35:06 +0000 (22:35 -0500)
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 <bryan.odonoghue@linaro.org>
Tested-by: Aníbal Limón <anibal.limon@linaro.org>
Link: https://lore.kernel.org/r/20210312003318.3273536-5-bjorn.andersson@linaro.org
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
drivers/soc/qcom/wcnss_ctrl.c

index 358526b..2a06d63 100644 (file)
@@ -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;
        }