]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: ath12k: Pass correct values of center freq1 and center freq2 for 160 MHz
authorSuraj P Kizhakkethil <quic_surapk@quicinc.com>
Tue, 4 Mar 2025 09:53:14 +0000 (15:23 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Mon, 17 Mar 2025 17:23:59 +0000 (10:23 -0700)
Currently, for 160 MHz bandwidth, center frequency1 and
center frequency2 are not passed correctly to the firmware.
Set center frequency1 as the center frequency
of the primary 80 MHz channel segment and center frequency2 as
the center frequency of the 160 MHz channel and pass the values
to the firmware.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1

Signed-off-by: Suraj P Kizhakkethil <quic_surapk@quicinc.com>
Reviewed-by: Aditya Kumar Singh <aditya.kumar.singh@oss.qualcomm.com>
Link: https://patch.msgid.link/20250304095315.3050325-2-quic_surapk@quicinc.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/wmi.c

index 6d1ea5f3a791b09044191ce86f4897b7f06f35eb..bed8c24aef204b6405c65970f080da8cfcbe8a67 100644 (file)
@@ -1037,14 +1037,24 @@ int ath12k_wmi_vdev_down(struct ath12k *ar, u8 vdev_id)
 static void ath12k_wmi_put_wmi_channel(struct ath12k_wmi_channel_params *chan,
                                       struct wmi_vdev_start_req_arg *arg)
 {
+       u32 center_freq1 = arg->band_center_freq1;
+
        memset(chan, 0, sizeof(*chan));
 
        chan->mhz = cpu_to_le32(arg->freq);
-       chan->band_center_freq1 = cpu_to_le32(arg->band_center_freq1);
-       if (arg->mode == MODE_11AC_VHT80_80)
+       chan->band_center_freq1 = cpu_to_le32(center_freq1);
+       if (arg->mode == MODE_11BE_EHT160) {
+               if (arg->freq > center_freq1)
+                       chan->band_center_freq1 = cpu_to_le32(center_freq1 + 40);
+               else
+                       chan->band_center_freq1 = cpu_to_le32(center_freq1 - 40);
+
+               chan->band_center_freq2 = cpu_to_le32(center_freq1);
+       } else if (arg->mode == MODE_11BE_EHT80_80) {
                chan->band_center_freq2 = cpu_to_le32(arg->band_center_freq2);
-       else
+       } else {
                chan->band_center_freq2 = 0;
+       }
 
        chan->info |= le32_encode_bits(arg->mode, WMI_CHAN_INFO_MODE);
        if (arg->passive)