wcn36xx: Add ability to download wcn3680 specific firmware parameters
authorBryan O'Donoghue <bryan.odonoghue@linaro.org>
Mon, 21 Sep 2020 13:21:19 +0000 (16:21 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 22 Sep 2020 07:30:27 +0000 (10:30 +0300)
This commit modifies wcn36xx_smd_start() so that it can download wcn3680
specific firmware parameters if we are talking to the wcn3680. If not the
original generic firmware parameter table should continue to be used for
wcn3620 and wcn3660.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20200910150747.2179122-4-bryan.odonoghue@linaro.org
drivers/net/wireless/ath/wcn36xx/smd.c

index 242112ce102a5df40a8e16e113b92c0ff00d417a..57523a66a8ee02019c6db0a56baa6e27121ce979 100644 (file)
@@ -625,6 +625,8 @@ int wcn36xx_smd_start(struct wcn36xx *wcn)
        int ret;
        int i;
        size_t len;
+       int cfg_elements;
+       static struct wcn36xx_cfg_val *cfg_vals;
 
        mutex_lock(&wcn->hal_mutex);
        INIT_HAL_MSG(msg_body, WCN36XX_HAL_START_REQ);
@@ -637,9 +639,17 @@ int wcn36xx_smd_start(struct wcn36xx *wcn)
        body = (struct wcn36xx_hal_mac_start_req_msg *)wcn->hal_buf;
        len = body->header.len;
 
-       for (i = 0; i < ARRAY_SIZE(wcn36xx_cfg_vals); i++) {
-               ret = put_cfg_tlv_u32(wcn, &len, wcn36xx_cfg_vals[i].cfg_id,
-                                     wcn36xx_cfg_vals[i].value);
+       if (wcn->rf_id == RF_IRIS_WCN3680) {
+               cfg_vals = wcn3680_cfg_vals;
+               cfg_elements = ARRAY_SIZE(wcn3680_cfg_vals);
+       } else {
+               cfg_vals = wcn36xx_cfg_vals;
+               cfg_elements = ARRAY_SIZE(wcn36xx_cfg_vals);
+       }
+
+       for (i = 0; i < cfg_elements; i++) {
+               ret = put_cfg_tlv_u32(wcn, &len, cfg_vals[i].cfg_id,
+                                     cfg_vals[i].value);
                if (ret)
                        goto out;
        }