Sven Eckelmann <sven.eckelm...@open-mesh.com> writes:

> The QCA9887 stores its calibration data (board.bin) inside the EEPROM of
> the target. This has to be downloaded manually to allow the device to
> initialize correctly.
>
> Signed-off-by: Sven Eckelmann <sven.eckelm...@open-mesh.com>

[...]

> --- a/drivers/net/wireless/ath/ath10k/core.c
> +++ b/drivers/net/wireless/ath/ath10k/core.c
> @@ -18,6 +18,7 @@
>  #include <linux/module.h>
>  #include <linux/firmware.h>
>  #include <linux/of.h>
> +#include <asm/byteorder.h>
>  
>  #include "core.h"
>  #include "mac.h"
> @@ -550,6 +551,34 @@ out:
>       return ret;
>  }
>  
> +static int ath10k_download_cal_eeprom(struct ath10k *ar)
> +{
> +     size_t data_len;
> +     void *data = NULL;
> +     int ret;
> +
> +     ret = ath10k_hif_fetch_target_board_data(ar, &data, &data_len);
> +     if (ret) {
> +             ath10k_warn(ar, "failed to read calibration data from EEPROM: 
> %d\n",
> +                         ret);
> +             goto out_free;
> +     }

Looking at this again I noticed that we issue this warning even if
EEPROM is not supported, which I think is wrong. I fixed this in the
pending branch, the diff is below.

I also renamed target_board_data to cal_eeprom because, at least to my
understanding, the eeprom actually contains the real calibration data,
not the board data file.

Please review so that I didn't break anything.

https://git.kernel.org/cgit/linux/kernel/git/kvalo/ath.git/commit/?h=pending&id=4f79bdf2db7bcfa9c7c093fd423af801b9797c63

diff --git a/drivers/net/wireless/ath/ath10k/core.c 
b/drivers/net/wireless/ath/ath10k/core.c
index 10a1b620a68b..1e88251ca6d0 100644
--- a/drivers/net/wireless/ath/ath10k/core.c
+++ b/drivers/net/wireless/ath/ath10k/core.c
@@ -580,10 +580,11 @@ static int ath10k_download_cal_eeprom(struct ath10k *ar)
        void *data = NULL;
        int ret;
 
-       ret = ath10k_hif_fetch_target_board_data(ar, &data, &data_len);
+       ret = ath10k_hif_fetch_cal_eeprom(ar, &data, &data_len);
        if (ret) {
-               ath10k_warn(ar, "failed to read calibration data from EEPROM: 
%d\n",
-                           ret);
+               if (ret != -EOPNOTSUPP)
+                       ath10k_warn(ar, "failed to read calibration data from 
EEPROM: %d\n",
+                                   ret);
                goto out_free;
        }
 
diff --git a/drivers/net/wireless/ath/ath10k/hif.h 
b/drivers/net/wireless/ath/ath10k/hif.h
index c18b8c81bde4..b2566b06e1e1 100644
--- a/drivers/net/wireless/ath/ath10k/hif.h
+++ b/drivers/net/wireless/ath/ath10k/hif.h
@@ -88,9 +88,9 @@ struct ath10k_hif_ops {
        int (*suspend)(struct ath10k *ar);
        int (*resume)(struct ath10k *ar);
 
-       /* fetch board data from target eeprom */
-       int (*fetch_target_board_data)(struct ath10k *ar, void **data,
-                                      size_t *data_len);
+       /* fetch calibration data from target eeprom */
+       int (*fetch_cal_eeprom)(struct ath10k *ar, void **data,
+                               size_t *data_len);
 };
 
 static inline int ath10k_hif_tx_sg(struct ath10k *ar, u8 pipe_id,
@@ -206,14 +206,14 @@ static inline void ath10k_hif_write32(struct ath10k *ar,
        ar->hif.ops->write32(ar, address, data);
 }
 
-static inline int ath10k_hif_fetch_target_board_data(struct ath10k *ar,
-                                                    void **data,
-                                                    size_t *data_len)
+static inline int ath10k_hif_fetch_cal_eeprom(struct ath10k *ar,
+                                             void **data,
+                                             size_t *data_len)
 {
-       if (!ar->hif.ops->fetch_target_board_data)
+       if (!ar->hif.ops->fetch_cal_eeprom)
                return -EOPNOTSUPP;
 
-       return ar->hif.ops->fetch_target_board_data(ar, data, data_len);
+       return ar->hif.ops->fetch_cal_eeprom(ar, data, data_len);
 }
 
 #endif /* _HIF_H_ */
diff --git a/drivers/net/wireless/ath/ath10k/pci.c 
b/drivers/net/wireless/ath/ath10k/pci.c
index fb53f8846efd..f06dd3941bac 100644
--- a/drivers/net/wireless/ath/ath10k/pci.c
+++ b/drivers/net/wireless/ath/ath10k/pci.c
@@ -2678,8 +2678,8 @@ static int ath10k_pci_read_eeprom(struct ath10k *ar, u16 
addr, u8 *out)
        return 0;
 }
 
-static int ath10k_pci_fetch_target_board_data(struct ath10k *ar, void **data,
-                                             size_t *data_len)
+static int ath10k_pci_hif_fetch_cal_eeprom(struct ath10k *ar, void **data,
+                                          size_t *data_len)
 {
        u8 *caldata = NULL;
        size_t calsize, i;
@@ -2734,7 +2734,7 @@ static const struct ath10k_hif_ops ath10k_pci_hif_ops = {
        .suspend                = ath10k_pci_hif_suspend,
        .resume                 = ath10k_pci_hif_resume,
 #endif
-       .fetch_target_board_data = ath10k_pci_fetch_target_board_data,
+       .fetch_cal_eeprom       = ath10k_pci_hif_fetch_cal_eeprom,
 };
 
 /*

-- 
Kalle Valo--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to