};
        int err = 0;
 
+       if (tx_power != IPW_TX_POWER_DEFAULT)
+               tx_power = (tx_power - IPW_TX_POWER_MIN_DBM) * 16 /
+                   (IPW_TX_POWER_MAX_DBM - IPW_TX_POWER_MIN_DBM);
+
        cmd.host_command_parameters[0] = tx_power;
 
        if (priv->ieee->iw_mode == IW_MODE_ADHOC)
                    wrqu->txpower.value > IPW_TX_POWER_MAX_DBM)
                        return -EINVAL;
 
-               value = (wrqu->txpower.value - IPW_TX_POWER_MIN_DBM) * 16 /
-                   (IPW_TX_POWER_MAX_DBM - IPW_TX_POWER_MIN_DBM);
+               value = wrqu->txpower.value;
        }
 
        down(&priv->action_sem);
        } else {
                wrqu->power.disabled = 0;
                wrqu->power.fixed = 1;
-               wrqu->power.value =
-                   (priv->tx_power *
-                    (IPW_TX_POWER_MAX_DBM - IPW_TX_POWER_MIN_DBM)) /
-                   (IPW_TX_POWER_MAX - IPW_TX_POWER_MIN) +
-                   IPW_TX_POWER_MIN_DBM;
+               wrqu->power.value = priv->tx_power;
        }
 
        wrqu->power.flags = IW_TXPOW_DBM;