.vdev_start_delay = false,
                .htt_peer_map_v2 = true,
                .tcl_0_only = false,
-               .spectral_fft_sz = 2,
+
+               .spectral = {
+                       .fft_sz = 2,
+                       /* HW bug, expected BIN size is 2 bytes but HW report as 4 bytes.
+                        * so added pad size as 2 bytes to compensate the BIN size
+                        */
+                       .fft_pad_sz = 2,
+               },
 
                .interface_modes = BIT(NL80211_IFTYPE_STATION) |
                                        BIT(NL80211_IFTYPE_AP) |
                .vdev_start_delay = false,
                .htt_peer_map_v2 = true,
                .tcl_0_only = false,
-               .spectral_fft_sz = 4,
+
+               .spectral = {
+                       .fft_sz = 4,
+                       .fft_pad_sz = 0,
+               },
 
                .interface_modes = BIT(NL80211_IFTYPE_STATION) |
                                        BIT(NL80211_IFTYPE_AP) |
                .vdev_start_delay = true,
                .htt_peer_map_v2 = false,
                .tcl_0_only = true,
-               .spectral_fft_sz = 0,
+
+               .spectral = {
+                       .fft_sz = 0,
+                       .fft_pad_sz = 0,
+               },
 
                .interface_modes = BIT(NL80211_IFTYPE_STATION) |
                                        BIT(NL80211_IFTYPE_AP),
                .vdev_start_delay = false,
                .htt_peer_map_v2 = true,
                .tcl_0_only = false,
+
+               .spectral = {
+                       .fft_sz = 0,
+                       .fft_pad_sz = 0,
+               },
+
                .interface_modes = BIT(NL80211_IFTYPE_STATION) |
                                        BIT(NL80211_IFTYPE_AP) |
                                        BIT(NL80211_IFTYPE_MESH_POINT),
                .vdev_start_delay = true,
                .htt_peer_map_v2 = false,
                .tcl_0_only = true,
-               .spectral_fft_sz = 0,
+
+               .spectral = {
+                       .fft_sz = 0,
+                       .fft_pad_sz = 0,
+               },
 
                .interface_modes = BIT(NL80211_IFTYPE_STATION) |
                                        BIT(NL80211_IFTYPE_AP),
 
 #define ATH11K_SPECTRAL_EVENT_TIMEOUT_MS       1
 
 #define ATH11K_SPECTRAL_DWORD_SIZE             4
-/* HW bug, expected BIN size is 2 bytes but HW report as 4 bytes */
-#define ATH11K_SPECTRAL_BIN_SIZE               4
 #define ATH11K_SPECTRAL_ATH11K_MIN_BINS                64
 #define ATH11K_SPECTRAL_ATH11K_MIN_IB_BINS     32
 #define ATH11K_SPECTRAL_ATH11K_MAX_IB_BINS     256
        struct spectral_tlv *tlv;
        int tlv_len, bin_len, num_bins;
        u16 length, freq;
-       u8 chan_width_mhz;
+       u8 chan_width_mhz, bin_sz;
        int ret;
 
        lockdep_assert_held(&ar->spectral.lock);
 
-       if (!ab->hw_params.spectral_fft_sz) {
+       if (!ab->hw_params.spectral.fft_sz) {
                ath11k_warn(ab, "invalid bin size type for hw rev %d\n",
                            ab->hw_rev);
                return -EINVAL;
                return -EINVAL;
        }
 
-       num_bins = bin_len / ATH11K_SPECTRAL_BIN_SIZE;
+       bin_sz = ab->hw_params.spectral.fft_sz + ab->hw_params.spectral.fft_pad_sz;
+       num_bins = bin_len / bin_sz;
        /* Only In-band bins are useful to user for visualize */
        num_bins >>= 1;
 
        fft_sample->freq2 = __cpu_to_be16(freq);
 
        ath11k_spectral_parse_fft(fft_sample->data, fft_report->bins, num_bins,
-                                 ab->hw_params.spectral_fft_sz);
+                                 ab->hw_params.spectral.fft_sz);
 
        fft_sample->max_exp = ath11k_spectral_get_max_exp(fft_sample->max_index,
                                                          search.peak_mag,
                      ab->wmi_ab.svc_map))
                return 0;
 
-       if (!ab->hw_params.spectral_fft_sz)
+       if (!ab->hw_params.spectral.fft_sz)
                return 0;
 
        for (i = 0; i < ab->num_radios; i++) {