return chanmode;
 }
 
-static int ath_keyset(struct ath_softc *sc, u16 keyix,
-              struct ath9k_keyval *hk, const u8 mac[ETH_ALEN])
-{
-       bool status;
-
-       status = ath9k_hw_set_keycache_entry(sc->sc_ah,
-               keyix, hk, mac);
-
-       return status != false;
-}
-
 static int ath_setkey_tkip(struct ath_softc *sc, u16 keyix, const u8 *key,
                           struct ath9k_keyval *hk, const u8 *addr,
                           bool authenticator)
        key_rxmic = key + NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY;
 
        if (addr == NULL) {
-               /* Group key installation */
+               /*
+                * Group key installation - only two key cache entries are used
+                * regardless of splitmic capability since group key is only
+                * used either for TX or RX.
+                */
                if (authenticator) {
                        memcpy(hk->kv_mic, key_txmic, sizeof(hk->kv_mic));
                        memcpy(hk->kv_txmic, key_txmic, sizeof(hk->kv_mic));
                        memcpy(hk->kv_mic, key_rxmic, sizeof(hk->kv_mic));
                        memcpy(hk->kv_txmic, key_rxmic, sizeof(hk->kv_mic));
                }
-               return ath_keyset(sc, keyix, hk, addr);
+               return ath9k_hw_set_keycache_entry(sc->sc_ah, keyix, hk, addr);
        }
        if (!sc->splitmic) {
-               /*
-                * data key goes at first index,
-                * the hal handles the MIC keys at index+64.
-                */
+               /* TX and RX keys share the same key cache entry. */
                memcpy(hk->kv_mic, key_rxmic, sizeof(hk->kv_mic));
                memcpy(hk->kv_txmic, key_txmic, sizeof(hk->kv_txmic));
-               return ath_keyset(sc, keyix, hk, addr);
+               return ath9k_hw_set_keycache_entry(sc->sc_ah, keyix, hk, addr);
        }
-       /*
-        * TX key goes at first index, RX key at +32.
-        * The hal handles the MIC keys at index+64.
-        */
+
+       /* Separate key cache entries for TX and RX */
+
+       /* TX key goes at first index, RX key at +32. */
        memcpy(hk->kv_mic, key_txmic, sizeof(hk->kv_mic));
-       if (!ath_keyset(sc, keyix, hk, NULL)) {
-               /* Txmic entry failed. No need to proceed further */
+       if (!ath9k_hw_set_keycache_entry(sc->sc_ah, keyix, hk, NULL)) {
+               /* TX MIC entry failed. No need to proceed further */
                DPRINTF(sc, ATH_DBG_KEYCACHE,
                        "Setting TX MIC Key Failed\n");
                return 0;
 
        memcpy(hk->kv_mic, key_rxmic, sizeof(hk->kv_mic));
        /* XXX delete tx key on failure? */
-       return ath_keyset(sc, keyix + 32, hk, addr);
+       return ath9k_hw_set_keycache_entry(sc->sc_ah, keyix + 32, hk, addr);
 }
 
 static int ath_reserve_key_cache_slot_tkip(struct ath_softc *sc)
                ret = ath_setkey_tkip(sc, idx, key->key, &hk, mac,
                                      vif->type == NL80211_IFTYPE_AP);
        else
-               ret = ath_keyset(sc, idx, &hk, mac);
+               ret = ath9k_hw_set_keycache_entry(sc->sc_ah, idx, &hk, mac);
 
        if (!ret)
                return -EIO;