diff options
| author | Zhu Yi <yi.zhu@intel.com> | 2006-02-16 03:21:09 -0500 |
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2006-03-17 15:08:03 -0500 |
| commit | d6d5b5c13e5003c9d33dcdcfdf1febc6efd7d319 (patch) | |
| tree | d7de88aace32d5be27afcae756c94187fd9f53b2 /drivers/net/wireless/ipw2200.c | |
| parent | 8da374fc44a5e0fb71a485497cae38eb562d078c (diff) | |
[PATCH] ipw2200: Fix rf_kill is activated after mode change with 'disable=1'
When loading the ipw2200 module with disabled=1, rf_kill is activated after
every mode change. This is caused by ipw_sw_reset() is called when a mode
is changed. The patch fixed the problem by distinguishing the purposes with
the 'option' paramenter.
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ipw2200.c')
| -rw-r--r-- | drivers/net/wireless/ipw2200.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c index dfa2efb3e215..b80ebd37483e 100644 --- a/drivers/net/wireless/ipw2200.c +++ b/drivers/net/wireless/ipw2200.c | |||
| @@ -7978,7 +7978,14 @@ static void ipw_rx(struct ipw_priv *priv) | |||
| 7978 | #define DEFAULT_SHORT_RETRY_LIMIT 7U | 7978 | #define DEFAULT_SHORT_RETRY_LIMIT 7U |
| 7979 | #define DEFAULT_LONG_RETRY_LIMIT 4U | 7979 | #define DEFAULT_LONG_RETRY_LIMIT 4U |
| 7980 | 7980 | ||
| 7981 | static int ipw_sw_reset(struct ipw_priv *priv, int init) | 7981 | /** |
| 7982 | * ipw_sw_reset | ||
| 7983 | * @option: options to control different reset behaviour | ||
| 7984 | * 0 = reset everything except the 'disable' module_param | ||
| 7985 | * 1 = reset everything and print out driver info (for probe only) | ||
| 7986 | * 2 = reset everything | ||
| 7987 | */ | ||
| 7988 | static int ipw_sw_reset(struct ipw_priv *priv, int option) | ||
| 7982 | { | 7989 | { |
| 7983 | int band, modulation; | 7990 | int band, modulation; |
| 7984 | int old_mode = priv->ieee->iw_mode; | 7991 | int old_mode = priv->ieee->iw_mode; |
| @@ -8005,7 +8012,7 @@ static int ipw_sw_reset(struct ipw_priv *priv, int init) | |||
| 8005 | priv->essid_len = 0; | 8012 | priv->essid_len = 0; |
| 8006 | memset(priv->essid, 0, IW_ESSID_MAX_SIZE); | 8013 | memset(priv->essid, 0, IW_ESSID_MAX_SIZE); |
| 8007 | 8014 | ||
| 8008 | if (disable) { | 8015 | if (disable && option) { |
| 8009 | priv->status |= STATUS_RF_KILL_SW; | 8016 | priv->status |= STATUS_RF_KILL_SW; |
| 8010 | IPW_DEBUG_INFO("Radio disabled.\n"); | 8017 | IPW_DEBUG_INFO("Radio disabled.\n"); |
| 8011 | } | 8018 | } |
| @@ -8057,7 +8064,7 @@ static int ipw_sw_reset(struct ipw_priv *priv, int init) | |||
| 8057 | 8064 | ||
| 8058 | if ((priv->pci_dev->device == 0x4223) || | 8065 | if ((priv->pci_dev->device == 0x4223) || |
| 8059 | (priv->pci_dev->device == 0x4224)) { | 8066 | (priv->pci_dev->device == 0x4224)) { |
| 8060 | if (init) | 8067 | if (option == 2) |
| 8061 | printk(KERN_INFO DRV_NAME | 8068 | printk(KERN_INFO DRV_NAME |
| 8062 | ": Detected Intel PRO/Wireless 2915ABG Network " | 8069 | ": Detected Intel PRO/Wireless 2915ABG Network " |
| 8063 | "Connection\n"); | 8070 | "Connection\n"); |
| @@ -8068,7 +8075,7 @@ static int ipw_sw_reset(struct ipw_priv *priv, int init) | |||
| 8068 | priv->adapter = IPW_2915ABG; | 8075 | priv->adapter = IPW_2915ABG; |
| 8069 | priv->ieee->mode = IEEE_A | IEEE_G | IEEE_B; | 8076 | priv->ieee->mode = IEEE_A | IEEE_G | IEEE_B; |
| 8070 | } else { | 8077 | } else { |
| 8071 | if (init) | 8078 | if (option == 2) |
| 8072 | printk(KERN_INFO DRV_NAME | 8079 | printk(KERN_INFO DRV_NAME |
| 8073 | ": Detected Intel PRO/Wireless 2200BG Network " | 8080 | ": Detected Intel PRO/Wireless 2200BG Network " |
| 8074 | "Connection\n"); | 8081 | "Connection\n"); |
| @@ -9380,7 +9387,7 @@ static int ipw_wx_sw_reset(struct net_device *dev, | |||
| 9380 | 9387 | ||
| 9381 | mutex_lock(&priv->mutex); | 9388 | mutex_lock(&priv->mutex); |
| 9382 | 9389 | ||
| 9383 | ret = ipw_sw_reset(priv, 0); | 9390 | ret = ipw_sw_reset(priv, 2); |
| 9384 | if (!ret) { | 9391 | if (!ret) { |
| 9385 | free_firmware(); | 9392 | free_firmware(); |
| 9386 | ipw_adapter_restart(priv); | 9393 | ipw_adapter_restart(priv); |
