void mt76_connac_mcu_wtbl_ht_tlv(struct mt76_dev *dev, struct sk_buff *skb,
                                 struct ieee80211_sta *sta, void *sta_wtbl,
-                                void *wtbl_tlv, bool ldpc)
+                                void *wtbl_tlv, bool ht_ldpc, bool vht_ldpc)
 {
        struct wtbl_ht *ht = NULL;
        struct tlv *tlv;
                tlv = mt76_connac_mcu_add_nested_tlv(skb, WTBL_HT, sizeof(*ht),
                                                     wtbl_tlv, sta_wtbl);
                ht = (struct wtbl_ht *)tlv;
-               ht->ldpc = ldpc &&
+               ht->ldpc = ht_ldpc &&
                           !!(sta->ht_cap.cap & IEEE80211_HT_CAP_LDPC_CODING);
                ht->af = sta->ht_cap.ampdu_factor;
                ht->mm = sta->ht_cap.ampdu_density;
                                                     sizeof(*vht), wtbl_tlv,
                                                     sta_wtbl);
                vht = (struct wtbl_vht *)tlv;
-               vht->ldpc = ldpc &&
+               vht->ldpc = vht_ldpc &&
                            !!(sta->vht_cap.cap & IEEE80211_VHT_CAP_RXLDPC);
                vht->vht = true;
 
                                                   sta_wtbl, wtbl_hdr);
                if (info->sta)
                        mt76_connac_mcu_wtbl_ht_tlv(dev, skb, info->sta,
-                                                   sta_wtbl, wtbl_hdr, true);
+                                                   sta_wtbl, wtbl_hdr,
+                                                   true, true);
        }
 
        return mt76_mcu_skb_send_msg(dev, skb, info->cmd, true);
 
                             u8 rcpi, u8 state);
 void mt76_connac_mcu_wtbl_ht_tlv(struct mt76_dev *dev, struct sk_buff *skb,
                                 struct ieee80211_sta *sta, void *sta_wtbl,
-                                void *wtbl_tlv, bool ldpc);
+                                void *wtbl_tlv, bool ht_ldpc, bool vht_ldpc);
 void mt76_connac_mcu_wtbl_ba_tlv(struct mt76_dev *dev, struct sk_buff *skb,
                                 struct ieee80211_ampdu_params *params,
                                 bool enable, bool tx, void *sta_wtbl,
 
             IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_5G))
                cap |= STA_REC_HE_CAP_BW20_RU242_SUPPORT;
 
-       if (mvif->cap.ldpc && (elem->phy_cap_info[1] &
-                              IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD))
+       if (mvif->cap.he_ldpc &&
+           (elem->phy_cap_info[1] &
+            IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD))
                cap |= STA_REC_HE_CAP_LDPC;
 
        if (elem->phy_cap_info[1] &
        mt76_connac_mcu_wtbl_hdr_trans_tlv(skb, vif, wcid, tlv, wtbl_hdr);
        if (sta)
                mt76_connac_mcu_wtbl_ht_tlv(&dev->mt76, skb, sta, tlv,
-                                           wtbl_hdr, mvif->cap.ldpc);
+                                           wtbl_hdr, mvif->cap.ht_ldpc,
+                                           mvif->cap.vht_ldpc);
 
        return 0;
 }
                        cap |= STA_CAP_TX_STBC;
                if (sta->ht_cap.cap & IEEE80211_HT_CAP_RX_STBC)
                        cap |= STA_CAP_RX_STBC;
-               if (mvif->cap.ldpc &&
+               if (mvif->cap.ht_ldpc &&
                    (sta->ht_cap.cap & IEEE80211_HT_CAP_LDPC_CODING))
                        cap |= STA_CAP_LDPC;
 
                        cap |= STA_CAP_VHT_TX_STBC;
                if (sta->vht_cap.cap & IEEE80211_VHT_CAP_RXSTBC_1)
                        cap |= STA_CAP_VHT_RX_STBC;
-               if (mvif->cap.ldpc &&
+               if (mvif->cap.vht_ldpc &&
                    (sta->vht_cap.cap & IEEE80211_VHT_CAP_RXLDPC))
                        cap |= STA_CAP_VHT_LDPC;
 
                              len);
        if (ie && ie[1] >= sizeof(*ht)) {
                ht = (void *)(ie + 2);
-               vc->ldpc |= !!(le16_to_cpu(ht->cap_info) &
-                              IEEE80211_HT_CAP_LDPC_CODING);
+               vc->ht_ldpc = !!(le16_to_cpu(ht->cap_info) &
+                                IEEE80211_HT_CAP_LDPC_CODING);
        }
 
        ie = cfg80211_find_ie(WLAN_EID_VHT_CAPABILITY, mgmt->u.beacon.variable,
                vht = (void *)(ie + 2);
                bc = le32_to_cpu(vht->vht_cap_info);
 
-               vc->ldpc |= !!(bc & IEEE80211_VHT_CAP_RXLDPC);
+               vc->vht_ldpc = !!(bc & IEEE80211_VHT_CAP_RXLDPC);
                vc->vht_su_ebfer =
                        (bc & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE) &&
                        (pc & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE);
 
                he = (void *)(ie + 3);
 
+               vc->he_ldpc =
+                       HE_PHY(CAP1_LDPC_CODING_IN_PAYLOAD, pe->phy_cap_info[1]);
                vc->he_su_ebfer =
                        HE_PHY(CAP3_SU_BEAMFORMER, he->phy_cap_info[3]) &&
                        HE_PHY(CAP3_SU_BEAMFORMER, pe->phy_cap_info[3]);