Commit b7f96d5c authored by Bjorn Andersson's avatar Bjorn Andersson Committed by Kalle Valo

wcn36xx: Allow firmware name to be overridden by DT

The WLAN NV firmware blob differs between platforms, and possibly
devices, so add support in the wcn36xx 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).

For some reason the parent (wcnss_ctrl) also needs to upload this blob,
so rather than specifying the same information in both nodes wcn36xx
reads the string from the parent's of_node.
Signed-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
Tested-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
Tested-by: default avatarAníbal Limón <anibal.limon@linaro.org>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20210824171225.686683-1-bjorn.andersson@linaro.org
parent d195d7aa
...@@ -1503,6 +1503,13 @@ static int wcn36xx_probe(struct platform_device *pdev) ...@@ -1503,6 +1503,13 @@ static int wcn36xx_probe(struct platform_device *pdev)
goto out_wq; goto out_wq;
} }
wcn->nv_file = WLAN_NV_FILE;
ret = of_property_read_string(wcn->dev->parent->of_node, "firmware-name", &wcn->nv_file);
if (ret < 0 && ret != -EINVAL) {
wcn36xx_err("failed to read \"firmware-name\" property: %d\n", ret);
goto out_wq;
}
wcn->smd_channel = qcom_wcnss_open_channel(wcnss, "WLAN_CTRL", wcn36xx_smd_rsp_process, hw); wcn->smd_channel = qcom_wcnss_open_channel(wcnss, "WLAN_CTRL", wcn36xx_smd_rsp_process, hw);
if (IS_ERR(wcn->smd_channel)) { if (IS_ERR(wcn->smd_channel)) {
wcn36xx_err("failed to open WLAN_CTRL channel\n"); wcn36xx_err("failed to open WLAN_CTRL channel\n");
......
...@@ -504,10 +504,10 @@ int wcn36xx_smd_load_nv(struct wcn36xx *wcn) ...@@ -504,10 +504,10 @@ int wcn36xx_smd_load_nv(struct wcn36xx *wcn)
u16 fm_offset = 0; u16 fm_offset = 0;
if (!wcn->nv) { if (!wcn->nv) {
ret = request_firmware(&wcn->nv, WLAN_NV_FILE, wcn->dev); ret = request_firmware(&wcn->nv, wcn->nv_file, wcn->dev);
if (ret) { if (ret) {
wcn36xx_err("Failed to load nv file %s: %d\n", wcn36xx_err("Failed to load nv file %s: %d\n",
WLAN_NV_FILE, ret); wcn->nv_file, ret);
goto out; goto out;
} }
} }
......
...@@ -199,6 +199,7 @@ struct wcn36xx { ...@@ -199,6 +199,7 @@ struct wcn36xx {
struct device *dev; struct device *dev;
struct list_head vif_list; struct list_head vif_list;
const char *nv_file;
const struct firmware *nv; const struct firmware *nv;
u8 fw_revision; u8 fw_revision;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment