aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/spectrum_cs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/spectrum_cs.c')
-rw-r--r--drivers/net/wireless/spectrum_cs.c37
1 files changed, 14 insertions, 23 deletions
diff --git a/drivers/net/wireless/spectrum_cs.c b/drivers/net/wireless/spectrum_cs.c
index 118b2c6e5a29..f7b77ce54d7b 100644
--- a/drivers/net/wireless/spectrum_cs.c
+++ b/drivers/net/wireless/spectrum_cs.c
@@ -245,7 +245,7 @@ spectrum_reset(struct pcmcia_device *link, int idle)
245 u_int save_cor; 245 u_int save_cor;
246 246
247 /* Doing it if hardware is gone is guaranteed crash */ 247 /* Doing it if hardware is gone is guaranteed crash */
248 if (!(link->state & DEV_CONFIG)) 248 if (pcmcia_dev_present(link))
249 return -ENODEV; 249 return -ENODEV;
250 250
251 /* Save original COR value */ 251 /* Save original COR value */
@@ -613,7 +613,6 @@ spectrum_cs_probe(struct pcmcia_device *link)
613 link->conf.Attributes = 0; 613 link->conf.Attributes = 0;
614 link->conf.IntType = INT_MEMORY_AND_IO; 614 link->conf.IntType = INT_MEMORY_AND_IO;
615 615
616 link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
617 return spectrum_cs_config(link); 616 return spectrum_cs_config(link);
618} /* spectrum_cs_attach */ 617} /* spectrum_cs_attach */
619 618
@@ -627,8 +626,7 @@ static void spectrum_cs_detach(struct pcmcia_device *link)
627{ 626{
628 struct net_device *dev = link->priv; 627 struct net_device *dev = link->priv;
629 628
630 if (link->state & DEV_CONFIG) 629 spectrum_cs_release(link);
631 spectrum_cs_release(link);
632 630
633 DEBUG(0, PFX "detach: link=%p link->dev_node=%p\n", link, link->dev_node); 631 DEBUG(0, PFX "detach: link=%p link->dev_node=%p\n", link, link->dev_node);
634 if (link->dev_node) { 632 if (link->dev_node) {
@@ -677,9 +675,6 @@ spectrum_cs_config(struct pcmcia_device *link)
677 link->conf.ConfigBase = parse.config.base; 675 link->conf.ConfigBase = parse.config.base;
678 link->conf.Present = parse.config.rmask[0]; 676 link->conf.Present = parse.config.rmask[0];
679 677
680 /* Configure card */
681 link->state |= DEV_CONFIG;
682
683 /* Look up the current Vcc */ 678 /* Look up the current Vcc */
684 CS_CHECK(GetConfigurationInfo, 679 CS_CHECK(GetConfigurationInfo,
685 pcmcia_get_configuration_info(link, &conf)); 680 pcmcia_get_configuration_info(link, &conf));
@@ -838,7 +833,6 @@ spectrum_cs_config(struct pcmcia_device *link)
838 link->dev_node = &card->node; /* link->dev_node being non-NULL is also 833 link->dev_node = &card->node; /* link->dev_node being non-NULL is also
839 used to indicate that the 834 used to indicate that the
840 net_device has been registered */ 835 net_device has been registered */
841 link->state &= ~DEV_CONFIG_PENDING;
842 836
843 /* Finally, report what we've done */ 837 /* Finally, report what we've done */
844 printk(KERN_DEBUG "%s: index 0x%02x: ", 838 printk(KERN_DEBUG "%s: index 0x%02x: ",
@@ -898,19 +892,17 @@ spectrum_cs_suspend(struct pcmcia_device *link)
898 int err = 0; 892 int err = 0;
899 893
900 /* Mark the device as stopped, to block IO until later */ 894 /* Mark the device as stopped, to block IO until later */
901 if (link->state & DEV_CONFIG) { 895 spin_lock_irqsave(&priv->lock, flags);
902 spin_lock_irqsave(&priv->lock, flags);
903 896
904 err = __orinoco_down(dev); 897 err = __orinoco_down(dev);
905 if (err) 898 if (err)
906 printk(KERN_WARNING "%s: Error %d downing interface\n", 899 printk(KERN_WARNING "%s: Error %d downing interface\n",
907 dev->name, err); 900 dev->name, err);
908 901
909 netif_device_detach(dev); 902 netif_device_detach(dev);
910 priv->hw_unavailable++; 903 priv->hw_unavailable++;
911 904
912 spin_unlock_irqrestore(&priv->lock, flags); 905 spin_unlock_irqrestore(&priv->lock, flags);
913 }
914 906
915 return 0; 907 return 0;
916} 908}
@@ -921,11 +913,10 @@ spectrum_cs_resume(struct pcmcia_device *link)
921 struct net_device *dev = link->priv; 913 struct net_device *dev = link->priv;
922 struct orinoco_private *priv = netdev_priv(dev); 914 struct orinoco_private *priv = netdev_priv(dev);
923 915
924 if (link->state & DEV_CONFIG) { 916 netif_device_attach(dev);
925 netif_device_attach(dev); 917 priv->hw_unavailable--;
926 priv->hw_unavailable--; 918 schedule_work(&priv->reset_work);
927 schedule_work(&priv->reset_work); 919
928 }
929 return 0; 920 return 0;
930} 921}
931 922