|
@@ -482,10 +482,26 @@ static int ath10k_fetch_cal_file(struct ath10k *ar)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int ath10k_core_fetch_board_file(struct ath10k *ar)
|
|
|
+static int ath10k_core_fetch_spec_board_file(struct ath10k *ar)
|
|
|
{
|
|
|
- int ret;
|
|
|
+ char filename[100];
|
|
|
+
|
|
|
+ scnprintf(filename, sizeof(filename), "board-%s-%s.bin",
|
|
|
+ ath10k_bus_str(ar->hif.bus), ar->spec_board_id);
|
|
|
+
|
|
|
+ ar->board = ath10k_fetch_fw_file(ar, ar->hw_params.fw.dir, filename);
|
|
|
+ if (IS_ERR(ar->board))
|
|
|
+ return PTR_ERR(ar->board);
|
|
|
+
|
|
|
+ ar->board_data = ar->board->data;
|
|
|
+ ar->board_len = ar->board->size;
|
|
|
+ ar->spec_board_loaded = true;
|
|
|
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int ath10k_core_fetch_generic_board_file(struct ath10k *ar)
|
|
|
+{
|
|
|
if (!ar->hw_params.fw.board) {
|
|
|
ath10k_err(ar, "failed to find board file fw entry\n");
|
|
|
return -EINVAL;
|
|
@@ -494,14 +510,39 @@ static int ath10k_core_fetch_board_file(struct ath10k *ar)
|
|
|
ar->board = ath10k_fetch_fw_file(ar,
|
|
|
ar->hw_params.fw.dir,
|
|
|
ar->hw_params.fw.board);
|
|
|
- if (IS_ERR(ar->board)) {
|
|
|
- ret = PTR_ERR(ar->board);
|
|
|
- ath10k_err(ar, "failed to fetch board data: %d\n", ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
+ if (IS_ERR(ar->board))
|
|
|
+ return PTR_ERR(ar->board);
|
|
|
|
|
|
ar->board_data = ar->board->data;
|
|
|
ar->board_len = ar->board->size;
|
|
|
+ ar->spec_board_loaded = false;
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int ath10k_core_fetch_board_file(struct ath10k *ar)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ if (strlen(ar->spec_board_id) > 0) {
|
|
|
+ ret = ath10k_core_fetch_spec_board_file(ar);
|
|
|
+ if (ret) {
|
|
|
+ ath10k_info(ar, "failed to load spec board file, falling back to generic: %d\n",
|
|
|
+ ret);
|
|
|
+ goto generic;
|
|
|
+ }
|
|
|
+
|
|
|
+ ath10k_dbg(ar, ATH10K_DBG_BOOT, "found specific board file for %s\n",
|
|
|
+ ar->spec_board_id);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+generic:
|
|
|
+ ret = ath10k_core_fetch_generic_board_file(ar);
|
|
|
+ if (ret) {
|
|
|
+ ath10k_err(ar, "failed to fetch generic board data: %d\n", ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
|
|
|
return 0;
|
|
|
}
|