offset = MAC_WCID_ATTR_ENTRY(key->hw_key_idx);
 
-       rt2800_register_read(rt2x00dev, offset, ®);
-       rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_KEYTAB,
-                          !!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE));
-       rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_CIPHER,
-                          (crypto->cmd == SET_KEY) * crypto->cipher);
-       rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_BSS_IDX,
-                          (crypto->cmd == SET_KEY) * crypto->bssidx);
-       rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_RX_WIUDF, crypto->cipher);
-       rt2800_register_write(rt2x00dev, offset, reg);
+       if (crypto->cmd == SET_KEY) {
+               rt2800_register_read(rt2x00dev, offset, ®);
+               rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_KEYTAB,
+                                  !!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE));
+               /*
+                * Both the cipher as the BSS Idx numbers are split in a main
+                * value of 3 bits, and a extended field for adding one additional
+                * bit to the value.
+                */
+               rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_CIPHER,
+                                  (crypto->cipher & 0x7));
+               rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_CIPHER_EXT,
+                                  (crypto->cipher & 0x8) >> 3);
+               rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_BSS_IDX,
+                                  (crypto->bssidx & 0x7));
+               rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_BSS_IDX_EXT,
+                                  (crypto->bssidx & 0x8) >> 3);
+               rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_RX_WIUDF, crypto->cipher);
+               rt2800_register_write(rt2x00dev, offset, reg);
+       } else {
+               rt2800_register_write(rt2x00dev, offset, 0);
+       }
 
        offset = MAC_IVEIV_ENTRY(key->hw_key_idx);