#include <linux/of_reserved_mem.h>
 #include <linux/panic_notifier.h>
 #include <linux/average.h>
+#include <linux/of.h>
 #include "qmi.h"
 #include "htc.h"
 #include "wmi.h"
                                                    const char *filename,
                                                    void *buf, size_t buf_len)
 {
-       snprintf(buf, buf_len, "%s/%s/%s", ATH12K_FW_DIR,
-                ab->hw_params->fw.dir, filename);
+       const char *fw_name = NULL;
+
+       of_property_read_string(ab->dev->of_node, "firmware-name", &fw_name);
+
+       if (fw_name && strncmp(filename, "board", 5))
+               snprintf(buf, buf_len, "%s/%s/%s/%s", ATH12K_FW_DIR,
+                        ab->hw_params->fw.dir, fw_name, filename);
+       else
+               snprintf(buf, buf_len, "%s/%s/%s", ATH12K_FW_DIR,
+                        ab->hw_params->fw.dir, filename);
 }
 
 static inline const char *ath12k_bus_str(enum ath12k_bus bus)