ath10k: add support to get target info from hif ops
authorRakesh Pillai <pillair@codeaurora.org>
Tue, 10 Apr 2018 15:01:29 +0000 (18:01 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 19 Apr 2018 15:52:51 +0000 (18:52 +0300)
wcn3990 does not use bmi.
Add support to get target info from hif ops.

Signed-off-by: Rakesh Pillai <pillair@codeaurora.org>
Signed-off-by: Govind Singh <govinds@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ath/ath10k/core.c
drivers/net/wireless/ath/ath10k/hif.h
drivers/net/wireless/ath/ath10k/snoc.c

index 8a3020dbd4cff318eca1f803d3ec76caf5c75b87..6a9ad4ab8e4ce4c67230561ba56926ea559c6820 100644 (file)
@@ -2472,6 +2472,14 @@ static int ath10k_core_probe_fw(struct ath10k *ar)
                ar->hw->wiphy->hw_version = target_info.version;
                break;
        case ATH10K_BUS_SNOC:
+               memset(&target_info, 0, sizeof(target_info));
+               ret = ath10k_hif_get_target_info(ar, &target_info);
+               if (ret) {
+                       ath10k_err(ar, "could not get target info (%d)\n", ret);
+                       goto err_power_down;
+               }
+               ar->target_version = target_info.version;
+               ar->hw->wiphy->hw_version = target_info.version;
                break;
        default:
                ath10k_err(ar, "incorrect hif bus type: %d\n", ar->hif.bus);
index 7abb13c1f10b0f805443ab4f136cf2df38dbb2cd..1a59ea0068c209dcc8f929c17013d416630207e9 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <linux/kernel.h>
 #include "core.h"
+#include "bmi.h"
 #include "debug.h"
 
 struct ath10k_hif_sg_item {
@@ -93,6 +94,9 @@ struct ath10k_hif_ops {
        /* fetch calibration data from target eeprom */
        int (*fetch_cal_eeprom)(struct ath10k *ar, void **data,
                                size_t *data_len);
+
+       int (*get_target_info)(struct ath10k *ar,
+                              struct bmi_target_info *target_info);
 };
 
 static inline int ath10k_hif_tx_sg(struct ath10k *ar, u8 pipe_id,
@@ -218,4 +222,13 @@ static inline int ath10k_hif_fetch_cal_eeprom(struct ath10k *ar,
        return ar->hif.ops->fetch_cal_eeprom(ar, data, data_len);
 }
 
+static inline int ath10k_hif_get_target_info(struct ath10k *ar,
+                                            struct bmi_target_info *tgt_info)
+{
+       if (!ar->hif.ops->get_target_info)
+               return -EOPNOTSUPP;
+
+       return ar->hif.ops->get_target_info(ar, tgt_info);
+}
+
 #endif /* _HIF_H_ */
index 6d9cccee9bbe96f868499a02d42bd82c32fba025..1ef0d3b51b8f8b6e457ad5aa367c00917bffa5b5 100644 (file)
@@ -528,6 +528,15 @@ err:
        return err;
 }
 
+static int ath10k_snoc_hif_get_target_info(struct ath10k *ar,
+                                          struct bmi_target_info *target_info)
+{
+       target_info->version = ATH10K_HW_WCN3990;
+       target_info->type = ATH10K_HW_WCN3990;
+
+       return 0;
+}
+
 static u16 ath10k_snoc_hif_get_free_queue_number(struct ath10k *ar, u8 pipe)
 {
        struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
@@ -787,6 +796,7 @@ static const struct ath10k_hif_ops ath10k_snoc_hif_ops = {
        .tx_sg                  = ath10k_snoc_hif_tx_sg,
        .send_complete_check    = ath10k_snoc_hif_send_complete_check,
        .get_free_queue_number  = ath10k_snoc_hif_get_free_queue_number,
+       .get_target_info        = ath10k_snoc_hif_get_target_info,
 };
 
 static const struct ath10k_bus_ops ath10k_snoc_bus_ops = {