--- a/net80211/ieee80211_wireless.c
+++ b/net80211/ieee80211_wireless.c
@@ -1370,15 +1370,9 @@ ieee80211_ioctl_siwtxpow(struct net_devi
 	int fixed, disabled;
 
 	fixed = (ic->ic_flags & IEEE80211_F_TXPOW_FIXED);
-	disabled = (fixed && ic->ic_txpowlimit == 0);
-	if (rrq->disabled) {
-		if (!disabled) {
-			ic->ic_flags |= IEEE80211_F_TXPOW_FIXED;
-			ic->ic_txpowlimit = 0;
-			goto done;
-		}
-		return 0;
-	}
+
+	if (rrq->disabled)
+		return -EINVAL;
 
 	if (rrq->fixed) {
 		if ((ic->ic_caps & IEEE80211_C_TXPMGT) == 0)
@@ -1571,7 +1565,7 @@ ieee80211_ioctl_giwtxpow(struct net_devi
 		rrq->fixed = 0;
 	}
 	rrq->value = txp / 2;
-	rrq->disabled = (rrq->fixed && rrq->value == 0);
+	rrq->disabled = 0;
 	rrq->flags = IW_TXPOW_DBM;
 	return 0;
 }