[Bug 339] Fix ipw2100 iwconfig set/get txpower.
authorLiu Hong <hong.liu@intel.com>
Wed, 13 Jul 2005 17:29:21 +0000 (12:29 -0500)
committerJames Ketrenos <jketreno@linux.intel.com>
Mon, 7 Nov 2005 23:50:06 +0000 (17:50 -0600)
Signed-off-by: James Ketrenos <jketreno@linux.intel.com>
drivers/net/wireless/ipw2100.c

index cf5da20..73287ab 100644 (file)
@@ -5102,6 +5102,10 @@ static int ipw2100_set_tx_power(struct ipw2100_priv *priv, u32 tx_power)
        };
        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)
@@ -7523,8 +7527,7 @@ static int ipw2100_wx_set_txpow(struct net_device *dev,
                    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);
@@ -7564,11 +7567,7 @@ static int ipw2100_wx_get_txpow(struct net_device *dev,
        } 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;