diff -urp ipw2100-0.54/ipw2100.c ipw2100-0.54-new/ipw2100_main.c --- ipw2100-0.54/ipw2100.c 2004-09-01 04:23:09.000000000 +0800 +++ ipw2100-0.54-new/ipw2100_main.c 2004-09-14 13:26:20.742098168 +0800 @@ -1373,6 +1373,13 @@ static int ipw2100_up(struct ipw2100_pri u32 lock; u32 ord_len = sizeof(lock); + /* Quite if manually disabled. */ + if (priv->manual_disable) { + printk(KERN_INFO "%s: Radio is disabled by Manual Disable " + "switch\n", priv->ndev->name); + return 0; + } + /* If the interrupt is enabled, turn it off... */ spin_lock_irqsave(&priv->low_lock, flags); ipw2100_hw_disable_interrupt(priv); @@ -1419,26 +1426,17 @@ static int ipw2100_up(struct ipw2100_pri } priv->in_scan = 0; + priv->rf_kill = ipw2100_get_rf_switch(priv); - if (priv->hw_features & HW_FEATURE_RFKILL) - priv->rf_kill = ipw2100_get_rf_switch(priv); - else - priv->rf_kill = 0; - - if (priv->rf_kill || priv->manual_disable) { - if (priv->rf_kill) - printk(KERN_INFO "%s: Radio is disabled by RF switch\n", - priv->ndev->name); - if (priv->manual_disable) - printk(KERN_INFO "%s: Radio is disabled by Manual Disable switch\n", - priv->ndev->name); + if (priv->rf_kill) { + printk(KERN_INFO "%s: Radio is disabled by RF switch\n", + priv->ndev->name); if (priv->stop_rf_check) { priv->stop_rf_check = 0; priv->rf_switch_timer.expires = jiffies + HZ; add_timer(&priv->rf_switch_timer); } - /* Since the RF switch is off, we will defer * the sending of the HOST_COMPLETE */ deferred = 1; @@ -5869,7 +5867,7 @@ static void shim__set_security(struct ie priv->sec.flags & BIT(0) ? '1' : '0'); if (!priv->connected) - ipw2100_configure_security(priv, 0); + ipw2100_configure_security(priv, priv->manual_disable); } static struct ieee80211_helper_functions ipw2100_ieee_callbacks = { @@ -6219,7 +6217,10 @@ static void ipw2100_rf_switch_check(unsi if (!priv->rf_kill) { /* Kill timer; we don't need to poll for RF going * off since the firmware will tell us */ - priv->stop_rf_check = 1; + if (!priv->stop_rf_check) { + priv->stop_rf_check = 1; + del_timer_sync(&priv->rf_switch_timer); + } /* Restart the NIC */ schedule_reset(priv);