浏览代码

[PATCH] pcmcia: default suspend and resume handling

In all but one case, the suspend and resume functions of PCMCIA drivers
contain mostly of calls to pcmcia_release_configuration() and
pcmcia_request_configuration(). Therefore, move this code out of the
drivers and into the core.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Dominik Brodowski 19 年之前
父节点
当前提交
8661bb5b4a
共有 45 个文件被更改,包括 105 次插入633 次删除
  1. 0 24
      drivers/bluetooth/bluecard_cs.c
  2. 0 24
      drivers/bluetooth/bt3c_cs.c
  3. 0 25
      drivers/bluetooth/btuart_cs.c
  4. 0 24
      drivers/bluetooth/dtl1_cs.c
  5. 0 9
      drivers/char/pcmcia/cm4000_cs.c
  6. 0 24
      drivers/char/pcmcia/cm4040_cs.c
  7. 0 6
      drivers/char/pcmcia/synclink_cs.c
  8. 0 23
      drivers/ide/legacy/ide-cs.c
  9. 0 38
      drivers/isdn/hardware/avm/avm_cs.c
  10. 1 25
      drivers/isdn/hisax/avma1_cs.c
  11. 0 6
      drivers/isdn/hisax/elsa_cs.c
  12. 0 6
      drivers/isdn/hisax/sedlbauer_cs.c
  13. 0 6
      drivers/isdn/hisax/teles_cs.c
  14. 5 13
      drivers/net/pcmcia/3c574_cs.c
  15. 5 13
      drivers/net/pcmcia/3c589_cs.c
  16. 5 13
      drivers/net/pcmcia/axnet_cs.c
  17. 7 16
      drivers/net/pcmcia/com20020_cs.c
  18. 5 14
      drivers/net/pcmcia/fmvj18x_cs.c
  19. 6 14
      drivers/net/pcmcia/ibmtr_cs.c
  20. 5 14
      drivers/net/pcmcia/nmclan_cs.c
  21. 6 14
      drivers/net/pcmcia/pcnet_cs.c
  22. 0 2
      drivers/net/pcmcia/smc91c92_cs.c
  23. 4 12
      drivers/net/pcmcia/xirc2ps_cs.c
  24. 2 7
      drivers/net/wireless/airo_cs.c
  25. 1 6
      drivers/net/wireless/atmel_cs.c
  26. 0 6
      drivers/net/wireless/hostap/hostap_cs.c
  27. 5 13
      drivers/net/wireless/netwave_cs.c
  28. 0 8
      drivers/net/wireless/orinoco_cs.c
  29. 6 16
      drivers/net/wireless/ray_cs.c
  30. 0 7
      drivers/net/wireless/spectrum_cs.c
  31. 6 18
      drivers/net/wireless/wavelan_cs.c
  32. 5 13
      drivers/net/wireless/wl3501_cs.c
  33. 0 23
      drivers/parport/parport_cs.c
  34. 26 4
      drivers/pcmcia/ds.c
  35. 1 17
      drivers/scsi/pcmcia/aha152x_stub.c
  36. 1 16
      drivers/scsi/pcmcia/fdomain_stub.c
  37. 0 10
      drivers/scsi/pcmcia/nsp_cs.c
  38. 0 13
      drivers/scsi/pcmcia/qlogic_stub.c
  39. 0 15
      drivers/scsi/pcmcia/sym53c500_cs.c
  40. 2 7
      drivers/serial/serial_cs.c
  41. 0 24
      drivers/telephony/ixj_pcmcia.c
  42. 0 24
      drivers/usb/host/sl811_cs.c
  43. 1 2
      include/pcmcia/ds.h
  44. 0 10
      sound/pcmcia/pdaudiocf/pdaudiocf.c
  45. 0 9
      sound/pcmcia/vx/vxpocket.c

+ 0 - 24
drivers/bluetooth/bluecard_cs.c

@@ -1005,28 +1005,6 @@ static void bluecard_release(dev_link_t *link)
 	pcmcia_disable_device(link->handle);
 	pcmcia_disable_device(link->handle);
 }
 }
 
 
-static int bluecard_suspend(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
-	return 0;
-}
-
-static int bluecard_resume(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state &= ~DEV_SUSPEND;
-	if (DEV_OK(link))
-		pcmcia_request_configuration(link->handle, &link->conf);
-
-	return 0;
-}
-
 static struct pcmcia_device_id bluecard_ids[] = {
 static struct pcmcia_device_id bluecard_ids[] = {
 	PCMCIA_DEVICE_PROD_ID12("BlueCard", "LSE041", 0xbaf16fbf, 0x657cc15e),
 	PCMCIA_DEVICE_PROD_ID12("BlueCard", "LSE041", 0xbaf16fbf, 0x657cc15e),
 	PCMCIA_DEVICE_PROD_ID12("BTCFCARD", "LSE139", 0xe3987764, 0x2524b59c),
 	PCMCIA_DEVICE_PROD_ID12("BTCFCARD", "LSE139", 0xe3987764, 0x2524b59c),
@@ -1043,8 +1021,6 @@ static struct pcmcia_driver bluecard_driver = {
 	.probe		= bluecard_attach,
 	.probe		= bluecard_attach,
 	.remove		= bluecard_detach,
 	.remove		= bluecard_detach,
 	.id_table	= bluecard_ids,
 	.id_table	= bluecard_ids,
-	.suspend	= bluecard_suspend,
-	.resume		= bluecard_resume,
 };
 };
 
 
 static int __init init_bluecard_cs(void)
 static int __init init_bluecard_cs(void)

+ 0 - 24
drivers/bluetooth/bt3c_cs.c

@@ -842,28 +842,6 @@ static void bt3c_release(dev_link_t *link)
 	pcmcia_disable_device(link->handle);
 	pcmcia_disable_device(link->handle);
 }
 }
 
 
-static int bt3c_suspend(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
-	return 0;
-}
-
-static int bt3c_resume(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state &= ~DEV_SUSPEND;
-	if (DEV_OK(link))
-		pcmcia_request_configuration(link->handle, &link->conf);
-
-	return 0;
-}
-
 
 
 static struct pcmcia_device_id bt3c_ids[] = {
 static struct pcmcia_device_id bt3c_ids[] = {
 	PCMCIA_DEVICE_PROD_ID13("3COM", "Bluetooth PC Card", 0xefce0a31, 0xd4ce9b02),
 	PCMCIA_DEVICE_PROD_ID13("3COM", "Bluetooth PC Card", 0xefce0a31, 0xd4ce9b02),
@@ -879,8 +857,6 @@ static struct pcmcia_driver bt3c_driver = {
 	.probe		= bt3c_attach,
 	.probe		= bt3c_attach,
 	.remove		= bt3c_detach,
 	.remove		= bt3c_detach,
 	.id_table	= bt3c_ids,
 	.id_table	= bt3c_ids,
-	.suspend	= bt3c_suspend,
-	.resume		= bt3c_resume,
 };
 };
 
 
 static int __init init_bt3c_cs(void)
 static int __init init_bt3c_cs(void)

+ 0 - 25
drivers/bluetooth/btuart_cs.c

@@ -771,29 +771,6 @@ static void btuart_release(dev_link_t *link)
 	pcmcia_disable_device(link->handle);
 	pcmcia_disable_device(link->handle);
 }
 }
 
 
-static int btuart_suspend(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
-	return 0;
-}
-
-static int btuart_resume(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state &= ~DEV_SUSPEND;
-	if (DEV_OK(link))
-		pcmcia_request_configuration(link->handle, &link->conf);
-
-	return 0;
-}
-
-
 static struct pcmcia_device_id btuart_ids[] = {
 static struct pcmcia_device_id btuart_ids[] = {
 	/* don't use this driver. Use serial_cs + hci_uart instead */
 	/* don't use this driver. Use serial_cs + hci_uart instead */
 	PCMCIA_DEVICE_NULL
 	PCMCIA_DEVICE_NULL
@@ -808,8 +785,6 @@ static struct pcmcia_driver btuart_driver = {
 	.probe		= btuart_attach,
 	.probe		= btuart_attach,
 	.remove		= btuart_detach,
 	.remove		= btuart_detach,
 	.id_table	= btuart_ids,
 	.id_table	= btuart_ids,
-	.suspend	= btuart_suspend,
-	.resume		= btuart_resume,
 };
 };
 
 
 static int __init init_btuart_cs(void)
 static int __init init_btuart_cs(void)

+ 0 - 24
drivers/bluetooth/dtl1_cs.c

@@ -723,28 +723,6 @@ static void dtl1_release(dev_link_t *link)
 	pcmcia_disable_device(link->handle);
 	pcmcia_disable_device(link->handle);
 }
 }
 
 
-static int dtl1_suspend(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
-	return 0;
-}
-
-static int dtl1_resume(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state &= ~DEV_SUSPEND;
-	if (DEV_OK(link))
-		pcmcia_request_configuration(link->handle, &link->conf);
-
-	return 0;
-}
-
 
 
 static struct pcmcia_device_id dtl1_ids[] = {
 static struct pcmcia_device_id dtl1_ids[] = {
 	PCMCIA_DEVICE_PROD_ID12("Nokia Mobile Phones", "DTL-1", 0xe1bfdd64, 0xe168480d),
 	PCMCIA_DEVICE_PROD_ID12("Nokia Mobile Phones", "DTL-1", 0xe1bfdd64, 0xe168480d),
@@ -762,8 +740,6 @@ static struct pcmcia_driver dtl1_driver = {
 	.probe		= dtl1_attach,
 	.probe		= dtl1_attach,
 	.remove		= dtl1_detach,
 	.remove		= dtl1_detach,
 	.id_table	= dtl1_ids,
 	.id_table	= dtl1_ids,
-	.suspend	= dtl1_suspend,
-	.resume		= dtl1_resume,
 };
 };
 
 
 static int __init init_dtl1_cs(void)
 static int __init init_dtl1_cs(void)

+ 0 - 9
drivers/char/pcmcia/cm4000_cs.c

@@ -1870,10 +1870,6 @@ static int cm4000_suspend(struct pcmcia_device *p_dev)
 	struct cm4000_dev *dev;
 	struct cm4000_dev *dev;
 
 
 	dev = link->priv;
 	dev = link->priv;
-
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
 	stop_monitor(dev);
 	stop_monitor(dev);
 
 
 	return 0;
 	return 0;
@@ -1885,11 +1881,6 @@ static int cm4000_resume(struct pcmcia_device *p_dev)
 	struct cm4000_dev *dev;
 	struct cm4000_dev *dev;
 
 
 	dev = link->priv;
 	dev = link->priv;
-
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_request_configuration(link->handle, &link->conf);
-
 	if (link->open)
 	if (link->open)
 		start_monitor(dev);
 		start_monitor(dev);
 
 

+ 0 - 24
drivers/char/pcmcia/cm4040_cs.c

@@ -629,28 +629,6 @@ cs_release:
 	link->state &= ~DEV_CONFIG_PENDING;
 	link->state &= ~DEV_CONFIG_PENDING;
 }
 }
 
 
-static int reader_suspend(struct pcmcia_device *p_dev)
-{
-	dev_link_t *link = dev_to_instance(p_dev);
-
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
-	return 0;
-}
-
-static int reader_resume(struct pcmcia_device *p_dev)
-{
-	dev_link_t *link = dev_to_instance(p_dev);
-
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_request_configuration(link->handle, &link->conf);
-
-	return 0;
-}
-
 static void reader_release(dev_link_t *link)
 static void reader_release(dev_link_t *link)
 {
 {
 	cm4040_reader_release(link->priv);
 	cm4040_reader_release(link->priv);
@@ -754,8 +732,6 @@ static struct pcmcia_driver reader_driver = {
 	},
 	},
 	.probe		= reader_attach,
 	.probe		= reader_attach,
 	.remove		= reader_detach,
 	.remove		= reader_detach,
-	.suspend	= reader_suspend,
-	.resume		= reader_resume,
 	.id_table	= cm4040_ids,
 	.id_table	= cm4040_ids,
 };
 };
 
 

+ 0 - 6
drivers/char/pcmcia/synclink_cs.c

@@ -733,10 +733,7 @@ static int mgslpc_suspend(struct pcmcia_device *dev)
 	dev_link_t *link = dev_to_instance(dev);
 	dev_link_t *link = dev_to_instance(dev);
 	MGSLPC_INFO *info = link->priv;
 	MGSLPC_INFO *info = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
 	info->stop = 1;
 	info->stop = 1;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -746,9 +743,6 @@ static int mgslpc_resume(struct pcmcia_device *dev)
 	dev_link_t *link = dev_to_instance(dev);
 	dev_link_t *link = dev_to_instance(dev);
 	MGSLPC_INFO *info = link->priv;
 	MGSLPC_INFO *info = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_request_configuration(link->handle, &link->conf);
 	info->stop = 0;
 	info->stop = 0;
 
 
 	return 0;
 	return 0;

+ 0 - 23
drivers/ide/legacy/ide-cs.c

@@ -373,27 +373,6 @@ void ide_release(dev_link_t *link)
     pcmcia_disable_device(link->handle);
     pcmcia_disable_device(link->handle);
 } /* ide_release */
 } /* ide_release */
 
 
-static int ide_suspend(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
-	return 0;
-}
-
-static int ide_resume(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state &= ~DEV_SUSPEND;
-	if (DEV_OK(link))
-		pcmcia_request_configuration(link->handle, &link->conf);
-
-	return 0;
-}
 
 
 /*======================================================================
 /*======================================================================
 
 
@@ -456,8 +435,6 @@ static struct pcmcia_driver ide_cs_driver = {
 	.probe		= ide_attach,
 	.probe		= ide_attach,
 	.remove		= ide_detach,
 	.remove		= ide_detach,
 	.id_table       = ide_ids,
 	.id_table       = ide_ids,
-	.suspend	= ide_suspend,
-	.resume		= ide_resume,
 };
 };
 
 
 static int __init init_ide_cs(void)
 static int __init init_ide_cs(void)

+ 0 - 38
drivers/isdn/hardware/avm/avm_cs.c

@@ -371,42 +371,6 @@ static void avmcs_release(dev_link_t *link)
 	pcmcia_disable_device(link->handle);
 	pcmcia_disable_device(link->handle);
 } /* avmcs_release */
 } /* avmcs_release */
 
 
-static int avmcs_suspend(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
-	return 0;
-}
-
-static int avmcs_resume(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_request_configuration(link->handle, &link->conf);
-
-	return 0;
-}
-
-/*======================================================================
-
-    The card status event handler.  Mostly, this schedules other
-    stuff to run after an event is received.  A CARD_REMOVAL event
-    also sets some flags to discourage the net drivers from trying
-    to talk to the card any more.
-
-    When a CARD_REMOVAL event is received, we immediately set a flag
-    to block future accesses to this device.  All the functions that
-    actually access the device should check this flag to make sure
-    the card is still present.
-    
-======================================================================*/
-
 
 
 static struct pcmcia_device_id avmcs_ids[] = {
 static struct pcmcia_device_id avmcs_ids[] = {
 	PCMCIA_DEVICE_PROD_ID12("AVM", "ISDN-Controller B1", 0x95d42008, 0x845dc335),
 	PCMCIA_DEVICE_PROD_ID12("AVM", "ISDN-Controller B1", 0x95d42008, 0x845dc335),
@@ -424,8 +388,6 @@ static struct pcmcia_driver avmcs_driver = {
 	.probe = avmcs_attach,
 	.probe = avmcs_attach,
 	.remove	= avmcs_detach,
 	.remove	= avmcs_detach,
 	.id_table = avmcs_ids,
 	.id_table = avmcs_ids,
-	.suspend= avmcs_suspend,
-	.resume = avmcs_resume,
 };
 };
 
 
 static int __init avmcs_init(void)
 static int __init avmcs_init(void)

+ 1 - 25
drivers/isdn/hisax/avma1_cs.c

@@ -383,28 +383,6 @@ static void avma1cs_release(dev_link_t *link)
 	pcmcia_disable_device(link->handle);
 	pcmcia_disable_device(link->handle);
 } /* avma1cs_release */
 } /* avma1cs_release */
 
 
-static int avma1cs_suspend(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
-	return 0;
-}
-
-static int avma1cs_resume(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_request_configuration(link->handle, &link->conf);
-
-	return 0;
-}
-
 
 
 static struct pcmcia_device_id avma1cs_ids[] = {
 static struct pcmcia_device_id avma1cs_ids[] = {
 	PCMCIA_DEVICE_PROD_ID12("AVM", "ISDN A", 0x95d42008, 0xadc9d4bb),
 	PCMCIA_DEVICE_PROD_ID12("AVM", "ISDN A", 0x95d42008, 0xadc9d4bb),
@@ -421,10 +399,8 @@ static struct pcmcia_driver avma1cs_driver = {
 	.probe		= avma1cs_attach,
 	.probe		= avma1cs_attach,
 	.remove		= avma1cs_detach,
 	.remove		= avma1cs_detach,
 	.id_table	= avma1cs_ids,
 	.id_table	= avma1cs_ids,
-	.suspend	= avma1cs_suspend,
-	.resume		= avma1cs_resume,
 };
 };
- 
+
 /*====================================================================*/
 /*====================================================================*/
 
 
 static int __init init_avma1_cs(void)
 static int __init init_avma1_cs(void)

+ 0 - 6
drivers/isdn/hisax/elsa_cs.c

@@ -389,10 +389,7 @@ static int elsa_suspend(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	local_info_t *dev = link->priv;
 	local_info_t *dev = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
         dev->busy = 1;
         dev->busy = 1;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -402,9 +399,6 @@ static int elsa_resume(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	local_info_t *dev = link->priv;
 	local_info_t *dev = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_request_configuration(link->handle, &link->conf);
         dev->busy = 0;
         dev->busy = 0;
 
 
 	return 0;
 	return 0;

+ 0 - 6
drivers/isdn/hisax/sedlbauer_cs.c

@@ -472,10 +472,7 @@ static int sedlbauer_suspend(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	local_info_t *dev = link->priv;
 	local_info_t *dev = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
 	dev->stop = 1;
 	dev->stop = 1;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -485,9 +482,6 @@ static int sedlbauer_resume(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	local_info_t *dev = link->priv;
 	local_info_t *dev = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_request_configuration(link->handle, &link->conf);
 	dev->stop = 0;
 	dev->stop = 0;
 
 
 	return 0;
 	return 0;

+ 0 - 6
drivers/isdn/hisax/teles_cs.c

@@ -380,10 +380,7 @@ static int teles_suspend(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	local_info_t *dev = link->priv;
 	local_info_t *dev = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
         dev->busy = 1;
         dev->busy = 1;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -393,9 +390,6 @@ static int teles_resume(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	local_info_t *dev = link->priv;
 	local_info_t *dev = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_request_configuration(link->handle, &link->conf);
         dev->busy = 0;
         dev->busy = 0;
 
 
 	return 0;
 	return 0;

+ 5 - 13
drivers/net/pcmcia/3c574_cs.c

@@ -519,12 +519,8 @@ static int tc574_suspend(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		if (link->open)
-			netif_device_detach(dev);
-		pcmcia_release_configuration(link->handle);
-	}
+	if ((link->state & DEV_CONFIG) && (link->open))
+		netif_device_detach(dev);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -534,13 +530,9 @@ static int tc574_resume(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
-		if (link->open) {
-			tc574_reset(dev);
-			netif_device_attach(dev);
-		}
+	if ((link->state & DEV_CONFIG) && (link->open)) {
+		tc574_reset(dev);
+		netif_device_attach(dev);
 	}
 	}
 
 
 	return 0;
 	return 0;

+ 5 - 13
drivers/net/pcmcia/3c589_cs.c

@@ -394,12 +394,8 @@ static int tc589_suspend(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		if (link->open)
-			netif_device_detach(dev);
-		pcmcia_release_configuration(link->handle);
-	}
+	if ((link->state & DEV_CONFIG) && (link->open))
+		netif_device_detach(dev);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -409,13 +405,9 @@ static int tc589_resume(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
-		if (link->open) {
-			tc589_reset(dev);
-			netif_device_attach(dev);
-		}
+	if ((link->state & DEV_CONFIG) && (link->open)) {
+		tc589_reset(dev);
+		netif_device_attach(dev);
 	}
 	}
 
 
 	return 0;
 	return 0;

+ 5 - 13
drivers/net/pcmcia/axnet_cs.c

@@ -464,12 +464,8 @@ static int axnet_suspend(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		if (link->open)
+	if ((link->state & DEV_CONFIG) && (link->open))
 			netif_device_detach(dev);
 			netif_device_detach(dev);
-		pcmcia_release_configuration(link->handle);
-	}
 
 
 	return 0;
 	return 0;
 }
 }
@@ -479,14 +475,10 @@ static int axnet_resume(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
-		if (link->open) {
-			axnet_reset_8390(dev);
-			AX88190_init(dev, 1);
-			netif_device_attach(dev);
-		}
+	if ((link->state & DEV_CONFIG) && (link->open)) {
+		axnet_reset_8390(dev);
+		AX88190_init(dev, 1);
+		netif_device_attach(dev);
 	}
 	}
 
 
 	return 0;
 	return 0;

+ 7 - 16
drivers/net/pcmcia/com20020_cs.c

@@ -387,13 +387,8 @@ static int com20020_suspend(struct pcmcia_device *p_dev)
 	com20020_dev_t *info = link->priv;
 	com20020_dev_t *info = link->priv;
 	struct net_device *dev = info->dev;
 	struct net_device *dev = info->dev;
 
 
-	link->state |= DEV_SUSPEND;
-        if (link->state & DEV_CONFIG) {
-		if (link->open) {
-			netif_device_detach(dev);
-		}
-		pcmcia_release_configuration(link->handle);
-        }
+	if ((link->state & DEV_CONFIG) && (link->open))
+		netif_device_detach(dev);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -404,15 +399,11 @@ static int com20020_resume(struct pcmcia_device *p_dev)
 	com20020_dev_t *info = link->priv;
 	com20020_dev_t *info = link->priv;
 	struct net_device *dev = info->dev;
 	struct net_device *dev = info->dev;
 
 
-	link->state &= ~DEV_SUSPEND;
-        if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
-		if (link->open) {
-			int ioaddr = dev->base_addr;
-			struct arcnet_local *lp = dev->priv;
-			ARCRESET;
-		}
-        }
+	if ((link->state & DEV_CONFIG) && (link->open)) {
+		int ioaddr = dev->base_addr;
+		struct arcnet_local *lp = dev->priv;
+		ARCRESET;
+	}
 
 
 	return 0;
 	return 0;
 }
 }

+ 5 - 14
drivers/net/pcmcia/fmvj18x_cs.c

@@ -683,13 +683,8 @@ static int fmvj18x_suspend(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		if (link->open)
-			netif_device_detach(dev);
-		pcmcia_release_configuration(link->handle);
-	}
-
+	if ((link->state & DEV_CONFIG) && (link->open))
+		netif_device_detach(dev);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -699,13 +694,9 @@ static int fmvj18x_resume(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
-		if (link->open) {
-			fjn_reset(dev);
-			netif_device_attach(dev);
-		}
+	if ((link->state & DEV_CONFIG) && (link->open)) {
+		fjn_reset(dev);
+		netif_device_attach(dev);
 	}
 	}
 
 
 	return 0;
 	return 0;

+ 6 - 14
drivers/net/pcmcia/ibmtr_cs.c

@@ -367,12 +367,8 @@ static int ibmtr_suspend(struct pcmcia_device *p_dev)
 	ibmtr_dev_t *info = link->priv;
 	ibmtr_dev_t *info = link->priv;
 	struct net_device *dev = info->dev;
 	struct net_device *dev = info->dev;
 
 
-	link->state |= DEV_SUSPEND;
-        if (link->state & DEV_CONFIG) {
-		if (link->open)
-			netif_device_detach(dev);
-		pcmcia_release_configuration(link->handle);
-        }
+	if ((link->state & DEV_CONFIG) && (link->open))
+		netif_device_detach(dev);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -383,14 +379,10 @@ static int ibmtr_resume(struct pcmcia_device *p_dev)
 	ibmtr_dev_t *info = link->priv;
 	ibmtr_dev_t *info = link->priv;
 	struct net_device *dev = info->dev;
 	struct net_device *dev = info->dev;
 
 
-	link->state &= ~DEV_SUSPEND;
-        if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
-		if (link->open) {
-			ibmtr_probe(dev);	/* really? */
-			netif_device_attach(dev);
-		}
-        }
+	if ((link->state & DEV_CONFIG) && (link->open)) {
+		ibmtr_probe(dev);	/* really? */
+		netif_device_attach(dev);
+	}
 
 
 	return 0;
 	return 0;
 }
 }

+ 5 - 14
drivers/net/pcmcia/nmclan_cs.c

@@ -774,13 +774,8 @@ static int nmclan_suspend(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		if (link->open)
-			netif_device_detach(dev);
-		pcmcia_release_configuration(link->handle);
-	}
-
+	if ((link->state & DEV_CONFIG) && (link->open))
+		netif_device_detach(dev);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -790,13 +785,9 @@ static int nmclan_resume(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
-		if (link->open) {
-			nmclan_reset(dev);
-			netif_device_attach(dev);
-		}
+	if ((link->state & DEV_CONFIG) && (link->open)) {
+		nmclan_reset(dev);
+		netif_device_attach(dev);
 	}
 	}
 
 
 	return 0;
 	return 0;

+ 6 - 14
drivers/net/pcmcia/pcnet_cs.c

@@ -756,12 +756,8 @@ static int pcnet_suspend(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		if (link->open)
-			netif_device_detach(dev);
-		pcmcia_release_configuration(link->handle);
-	}
+	if ((link->state & DEV_CONFIG) && (link->open))
+		netif_device_detach(dev);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -771,14 +767,10 @@ static int pcnet_resume(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
-		if (link->open) {
-			pcnet_reset_8390(dev);
-			NS8390_init(dev, 1);
-			netif_device_attach(dev);
-		}
+	if ((link->state & DEV_CONFIG) && (link->open)) {
+		pcnet_reset_8390(dev);
+		NS8390_init(dev, 1);
+		netif_device_attach(dev);
 	}
 	}
 
 
 	return 0;
 	return 0;

+ 0 - 2
drivers/net/pcmcia/smc91c92_cs.c

@@ -874,7 +874,6 @@ static int smc91c92_suspend(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
 	if (link->state & DEV_CONFIG) {
 	if (link->state & DEV_CONFIG) {
 		if (link->open)
 		if (link->open)
 			netif_device_detach(dev);
 			netif_device_detach(dev);
@@ -891,7 +890,6 @@ static int smc91c92_resume(struct pcmcia_device *p_dev)
 	struct smc_private *smc = netdev_priv(dev);
 	struct smc_private *smc = netdev_priv(dev);
 	int i;
 	int i;
 
 
-	link->state &= ~DEV_SUSPEND;
 	if (link->state & DEV_CONFIG) {
 	if (link->state & DEV_CONFIG) {
 		if ((smc->manfid == MANFID_MEGAHERTZ) &&
 		if ((smc->manfid == MANFID_MEGAHERTZ) &&
 		    (smc->cardid == PRODID_MEGAHERTZ_EM3288))
 		    (smc->cardid == PRODID_MEGAHERTZ_EM3288))

+ 4 - 12
drivers/net/pcmcia/xirc2ps_cs.c

@@ -1109,13 +1109,9 @@ static int xirc2ps_suspend(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		if (link->open) {
+	if ((link->state & DEV_CONFIG) && (link->open)) {
 			netif_device_detach(dev);
 			netif_device_detach(dev);
 			do_powerdown(dev);
 			do_powerdown(dev);
-		}
-		pcmcia_release_configuration(link->handle);
 	}
 	}
 
 
 	return 0;
 	return 0;
@@ -1126,13 +1122,9 @@ static int xirc2ps_resume(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
-		if (link->open) {
-			do_reset(dev,1);
-			netif_device_attach(dev);
-		}
+	if ((link->state & DEV_CONFIG) && (link->open)) {
+		do_reset(dev,1);
+		netif_device_attach(dev);
 	}
 	}
 
 
 	return 0;
 	return 0;

+ 2 - 7
drivers/net/wireless/airo_cs.c

@@ -437,11 +437,8 @@ static int airo_suspend(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	local_info_t *local = link->priv;
 	local_info_t *local = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
+	if (link->state & DEV_CONFIG)
 		netif_device_detach(local->eth_dev);
 		netif_device_detach(local->eth_dev);
-		pcmcia_release_configuration(link->handle);
-	}
 
 
 	return 0;
 	return 0;
 }
 }
@@ -451,9 +448,7 @@ static int airo_resume(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	local_info_t *local = link->priv;
 	local_info_t *local = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
+	if ((link->state & DEV_CONFIG) && (link->open)) {
 		reset_airo_card(local->eth_dev);
 		reset_airo_card(local->eth_dev);
 		netif_device_attach(local->eth_dev);
 		netif_device_attach(local->eth_dev);
 	}
 	}

+ 1 - 6
drivers/net/wireless/atmel_cs.c

@@ -433,11 +433,8 @@ static int atmel_suspend(struct pcmcia_device *dev)
 	dev_link_t *link = dev_to_instance(dev);
 	dev_link_t *link = dev_to_instance(dev);
 	local_info_t *local = link->priv;
 	local_info_t *local = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
+	if (link->state & DEV_CONFIG)
 		netif_device_detach(local->eth_dev);
 		netif_device_detach(local->eth_dev);
-		pcmcia_release_configuration(link->handle);
-	}
 
 
 	return 0;
 	return 0;
 }
 }
@@ -447,9 +444,7 @@ static int atmel_resume(struct pcmcia_device *dev)
 	dev_link_t *link = dev_to_instance(dev);
 	dev_link_t *link = dev_to_instance(dev);
 	local_info_t *local = link->priv;
 	local_info_t *local = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
 	if (link->state & DEV_CONFIG) {
 	if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
 		atmel_open(local->eth_dev);
 		atmel_open(local->eth_dev);
 		netif_device_attach(local->eth_dev);
 		netif_device_attach(local->eth_dev);
 	}
 	}

+ 0 - 6
drivers/net/wireless/hostap/hostap_cs.c

@@ -816,8 +816,6 @@ static int hostap_cs_suspend(struct pcmcia_device *p_dev)
 
 
 	PDEBUG(DEBUG_EXTRA, "%s: CS_EVENT_PM_SUSPEND\n", dev_info);
 	PDEBUG(DEBUG_EXTRA, "%s: CS_EVENT_PM_SUSPEND\n", dev_info);
 
 
-	link->state |= DEV_SUSPEND;
-
 	if (link->state & DEV_CONFIG) {
 	if (link->state & DEV_CONFIG) {
 		struct hostap_interface *iface = netdev_priv(dev);
 		struct hostap_interface *iface = netdev_priv(dev);
 		if (iface && iface->local)
 		if (iface && iface->local)
@@ -827,7 +825,6 @@ static int hostap_cs_suspend(struct pcmcia_device *p_dev)
 			netif_device_detach(dev);
 			netif_device_detach(dev);
 		}
 		}
 		prism2_suspend(dev);
 		prism2_suspend(dev);
-		pcmcia_release_configuration(link->handle);
 	}
 	}
 
 
 	return 0;
 	return 0;
@@ -841,14 +838,11 @@ static int hostap_cs_resume(struct pcmcia_device *p_dev)
 
 
 	PDEBUG(DEBUG_EXTRA, "%s: CS_EVENT_PM_RESUME\n", dev_info);
 	PDEBUG(DEBUG_EXTRA, "%s: CS_EVENT_PM_RESUME\n", dev_info);
 
 
-	link->state &= ~DEV_SUSPEND;
 	if (link->state & DEV_CONFIG) {
 	if (link->state & DEV_CONFIG) {
 		struct hostap_interface *iface = netdev_priv(dev);
 		struct hostap_interface *iface = netdev_priv(dev);
 		if (iface && iface->local)
 		if (iface && iface->local)
 			dev_open = iface->local->num_dev_open > 0;
 			dev_open = iface->local->num_dev_open > 0;
 
 
-		pcmcia_request_configuration(link->handle, &link->conf);
-
 		prism2_hw_shutdown(dev, 1);
 		prism2_hw_shutdown(dev, 1);
 		prism2_hw_config(dev, dev_open ? 0 : 1);
 		prism2_hw_config(dev, dev_open ? 0 : 1);
 		if (dev_open) {
 		if (dev_open) {

+ 5 - 13
drivers/net/wireless/netwave_cs.c

@@ -884,12 +884,8 @@ static int netwave_suspend(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		if (link->open)
-			netif_device_detach(dev);
-		pcmcia_release_configuration(link->handle);
-	}
+	if ((link->state & DEV_CONFIG) && (link->open))
+		netif_device_detach(dev);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -899,13 +895,9 @@ static int netwave_resume(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
-		if (link->open) {
-			netwave_reset(dev);
-			netif_device_attach(dev);
-		}
+	if ((link->state & DEV_CONFIG) && (link->open)) {
+		netwave_reset(dev);
+		netif_device_attach(dev);
 	}
 	}
 
 
 	return 0;
 	return 0;

+ 0 - 8
drivers/net/wireless/orinoco_cs.c

@@ -429,7 +429,6 @@ static int orinoco_cs_suspend(struct pcmcia_device *p_dev)
 	int err = 0;
 	int err = 0;
 	unsigned long flags;
 	unsigned long flags;
 
 
-	link->state |= DEV_SUSPEND;
 	if (link->state & DEV_CONFIG) {
 	if (link->state & DEV_CONFIG) {
 		/* This is probably racy, but I can't think of
 		/* This is probably racy, but I can't think of
 		   a better way, short of rewriting the PCMCIA
 		   a better way, short of rewriting the PCMCIA
@@ -447,8 +446,6 @@ static int orinoco_cs_suspend(struct pcmcia_device *p_dev)
 
 
 			spin_unlock_irqrestore(&priv->lock, flags);
 			spin_unlock_irqrestore(&priv->lock, flags);
 		}
 		}
-
-		pcmcia_release_configuration(link->handle);
 	}
 	}
 
 
 	return 0;
 	return 0;
@@ -463,12 +460,7 @@ static int orinoco_cs_resume(struct pcmcia_device *p_dev)
 	int err = 0;
 	int err = 0;
 	unsigned long flags;
 	unsigned long flags;
 
 
-	link->state &= ~DEV_SUSPEND;
 	if (link->state & DEV_CONFIG) {
 	if (link->state & DEV_CONFIG) {
-		/* FIXME: should we double check that this is
-		 * the same card as we had before */
-		pcmcia_request_configuration(link->handle, &link->conf);
-
 		if (! test_bit(0, &card->hard_reset_in_progress)) {
 		if (! test_bit(0, &card->hard_reset_in_progress)) {
 			err = orinoco_reinit_firmware(dev);
 			err = orinoco_reinit_firmware(dev);
 			if (err) {
 			if (err) {

+ 6 - 16
drivers/net/wireless/ray_cs.c

@@ -868,14 +868,8 @@ static int ray_suspend(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
-        if (link->state & DEV_CONFIG) {
-		if (link->open)
-			netif_device_detach(dev);
-
-		pcmcia_release_configuration(link->handle);
-        }
-
+	if ((link->state & DEV_CONFIG) && (link->open))
+		netif_device_detach(dev);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -885,14 +879,10 @@ static int ray_resume(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
-        if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
-		if (link->open) {
-			ray_reset(dev);
-			netif_device_attach(dev);
-		}
-        }
+	if ((link->state & DEV_CONFIG) && (link->open)) {
+		ray_reset(dev);
+		netif_device_attach(dev);
+	}
 
 
 	return 0;
 	return 0;
 }
 }

+ 0 - 7
drivers/net/wireless/spectrum_cs.c

@@ -908,7 +908,6 @@ spectrum_cs_suspend(struct pcmcia_device *p_dev)
 	unsigned long flags;
 	unsigned long flags;
 	int err = 0;
 	int err = 0;
 
 
-	link->state |= DEV_SUSPEND;
 	/* Mark the device as stopped, to block IO until later */
 	/* Mark the device as stopped, to block IO until later */
 	if (link->state & DEV_CONFIG) {
 	if (link->state & DEV_CONFIG) {
 		spin_lock_irqsave(&priv->lock, flags);
 		spin_lock_irqsave(&priv->lock, flags);
@@ -922,8 +921,6 @@ spectrum_cs_suspend(struct pcmcia_device *p_dev)
 		priv->hw_unavailable++;
 		priv->hw_unavailable++;
 
 
 		spin_unlock_irqrestore(&priv->lock, flags);
 		spin_unlock_irqrestore(&priv->lock, flags);
-
-		pcmcia_release_configuration(link->handle);
 	}
 	}
 
 
 	return 0;
 	return 0;
@@ -936,11 +933,7 @@ spectrum_cs_resume(struct pcmcia_device *p_dev)
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 	struct orinoco_private *priv = netdev_priv(dev);
 	struct orinoco_private *priv = netdev_priv(dev);
 
 
-	link->state &= ~DEV_SUSPEND;
 	if (link->state & DEV_CONFIG) {
 	if (link->state & DEV_CONFIG) {
-		/* FIXME: should we double check that this is
-		 * the same card as we had before */
-		pcmcia_request_configuration(link->handle, &link->conf);
 		netif_device_attach(dev);
 		netif_device_attach(dev);
 		priv->hw_unavailable--;
 		priv->hw_unavailable--;
 		schedule_work(&priv->reset_work);
 		schedule_work(&priv->reset_work);

+ 6 - 18
drivers/net/wireless/wavelan_cs.c

@@ -4742,19 +4742,12 @@ static int wavelan_suspend(struct pcmcia_device *p_dev)
 	/* Stop receiving new messages and wait end of transmission */
 	/* Stop receiving new messages and wait end of transmission */
 	wv_ru_stop(dev);
 	wv_ru_stop(dev);
 
 
+	if ((link->state & DEV_CONFIG) && (link->open))
+		netif_device_detach(dev);
+
 	/* Power down the module */
 	/* Power down the module */
 	hacr_write(dev->base_addr, HACR_DEFAULT & (~HACR_PWR_STAT));
 	hacr_write(dev->base_addr, HACR_DEFAULT & (~HACR_PWR_STAT));
 
 
-	/* The card is now suspended */
-	link->state |= DEV_SUSPEND;
-
-    	if(link->state & DEV_CONFIG)
-	{
-		if(link->open)
-			netif_device_detach(dev);
-		pcmcia_release_configuration(link->handle);
-	}
-
 	return 0;
 	return 0;
 }
 }
 
 
@@ -4764,14 +4757,9 @@ static int wavelan_resume(struct pcmcia_device *p_dev)
 	struct net_device *	dev = (struct net_device *) link->priv;
 	struct net_device *	dev = (struct net_device *) link->priv;
 
 
 	link->state &= ~DEV_SUSPEND;
 	link->state &= ~DEV_SUSPEND;
-	if(link->state & DEV_CONFIG)
-	{
-		pcmcia_request_configuration(link->handle, &link->conf);
-		if(link->open)	/* If RESET -> True, If RESUME -> False ? */
-		{
-			wv_hw_reset(dev);
-			netif_device_attach(dev);
-		}
+	if ((link->state & DEV_CONFIG) && (link->open))	{
+		wv_hw_reset(dev);
+		netif_device_attach(dev);
 	}
 	}
 
 
 	return 0;
 	return 0;

+ 5 - 13
drivers/net/wireless/wl3501_cs.c

@@ -2160,14 +2160,9 @@ static int wl3501_suspend(struct pcmcia_device *p_dev)
 	dev_link_t *link = dev_to_instance(p_dev);
 	dev_link_t *link = dev_to_instance(p_dev);
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
-	link->state |= DEV_SUSPEND;
-
 	wl3501_pwr_mgmt(dev->priv, WL3501_SUSPEND);
 	wl3501_pwr_mgmt(dev->priv, WL3501_SUSPEND);
-	if (link->state & DEV_CONFIG) {
-		if (link->open)
-			netif_device_detach(dev);
-		pcmcia_release_configuration(link->handle);
-	}
+	if ((link->state & DEV_CONFIG) && (link->open))
+		netif_device_detach(dev);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -2178,12 +2173,9 @@ static int wl3501_resume(struct pcmcia_device *p_dev)
 	struct net_device *dev = link->priv;
 	struct net_device *dev = link->priv;
 
 
 	wl3501_pwr_mgmt(dev->priv, WL3501_RESUME);
 	wl3501_pwr_mgmt(dev->priv, WL3501_RESUME);
-	if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
-		if (link->open) {
-			wl3501_reset(dev);
-			netif_device_attach(dev);
-		}
+	if ((link->state & DEV_CONFIG) && (link->open)) {
+		wl3501_reset(dev);
+		netif_device_attach(dev);
 	}
 	}
 
 
 	return 0;
 	return 0;

+ 0 - 23
drivers/parport/parport_cs.c

@@ -280,27 +280,6 @@ void parport_cs_release(dev_link_t *link)
 	pcmcia_disable_device(link->handle);
 	pcmcia_disable_device(link->handle);
 } /* parport_cs_release */
 } /* parport_cs_release */
 
 
-static int parport_suspend(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
-	return 0;
-}
-
-static int parport_resume(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state &= ~DEV_SUSPEND;
-	if (DEV_OK(link))
-		pcmcia_request_configuration(link->handle, &link->conf);
-
-	return 0;
-}
 
 
 static struct pcmcia_device_id parport_ids[] = {
 static struct pcmcia_device_id parport_ids[] = {
 	PCMCIA_DEVICE_FUNC_ID(3),
 	PCMCIA_DEVICE_FUNC_ID(3),
@@ -317,8 +296,6 @@ static struct pcmcia_driver parport_cs_driver = {
 	.probe		= parport_attach,
 	.probe		= parport_attach,
 	.remove		= parport_detach,
 	.remove		= parport_detach,
 	.id_table	= parport_ids,
 	.id_table	= parport_ids,
-	.suspend	= parport_suspend,
-	.resume		= parport_resume,
 };
 };
 
 
 static int __init init_parport_cs(void)
 static int __init init_parport_cs(void)

+ 26 - 4
drivers/pcmcia/ds.c

@@ -10,7 +10,7 @@
  * are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
  * are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
  *
  *
  * (C) 1999		David A. Hinds
  * (C) 1999		David A. Hinds
- * (C) 2003 - 2005	Dominik Brodowski
+ * (C) 2003 - 2006	Dominik Brodowski
  */
  */
 
 
 #include <linux/kernel.h>
 #include <linux/kernel.h>
@@ -1030,12 +1030,22 @@ static int pcmcia_dev_suspend(struct device * dev, pm_message_t state)
 {
 {
 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
 	struct pcmcia_driver *p_drv = NULL;
 	struct pcmcia_driver *p_drv = NULL;
+	int ret;
 
 
 	if (dev->driver)
 	if (dev->driver)
 		p_drv = to_pcmcia_drv(dev->driver);
 		p_drv = to_pcmcia_drv(dev->driver);
 
 
-	if (p_drv && p_drv->suspend)
-		return p_drv->suspend(p_dev);
+	if (p_drv && p_drv->suspend) {
+		ret = p_drv->suspend(p_dev);
+		if (ret)
+			return ret;
+		if (p_dev->instance) {
+			p_dev->instance->state |= DEV_SUSPEND;
+			if ((p_dev->instance->state & DEV_CONFIG) &&
+			    !(p_dev->instance->state & DEV_SUSPEND_NORELEASE))
+				pcmcia_release_configuration(p_dev);
+		}
+	}
 
 
 	return 0;
 	return 0;
 }
 }
@@ -1045,12 +1055,24 @@ static int pcmcia_dev_resume(struct device * dev)
 {
 {
 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
         struct pcmcia_driver *p_drv = NULL;
         struct pcmcia_driver *p_drv = NULL;
+	int ret;
 
 
 	if (dev->driver)
 	if (dev->driver)
 		p_drv = to_pcmcia_drv(dev->driver);
 		p_drv = to_pcmcia_drv(dev->driver);
 
 
-	if (p_drv && p_drv->resume)
+	if (p_drv && p_drv->resume) {
+		if (p_dev->instance) {
+			p_dev->instance->state &= ~DEV_SUSPEND;
+			if ((p_dev->instance->state & DEV_CONFIG) &&
+			    !(p_dev->instance->state & DEV_SUSPEND_NORELEASE)){
+				ret = pcmcia_request_configuration(p_dev,
+						 &p_dev->instance->conf);
+				if (ret)
+					return ret;
+			}
+		}
 		return p_drv->resume(p_dev);
 		return p_drv->resume(p_dev);
+	}
 
 
 	return 0;
 	return 0;
 }
 }

+ 1 - 17
drivers/scsi/pcmcia/aha152x_stub.c

@@ -251,27 +251,12 @@ static void aha152x_release_cs(dev_link_t *link)
 	pcmcia_disable_device(link->handle);
 	pcmcia_disable_device(link->handle);
 }
 }
 
 
-static int aha152x_suspend(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
-	return 0;
-}
-
 static int aha152x_resume(struct pcmcia_device *dev)
 static int aha152x_resume(struct pcmcia_device *dev)
 {
 {
 	dev_link_t *link = dev_to_instance(dev);
 	dev_link_t *link = dev_to_instance(dev);
 	scsi_info_t *info = link->priv;
 	scsi_info_t *info = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
-		aha152x_host_reset_host(info->host);
-	}
+	aha152x_host_reset_host(info->host);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -294,7 +279,6 @@ static struct pcmcia_driver aha152x_cs_driver = {
 	.probe		= aha152x_attach,
 	.probe		= aha152x_attach,
 	.remove		= aha152x_detach,
 	.remove		= aha152x_detach,
 	.id_table       = aha152x_ids,
 	.id_table       = aha152x_ids,
-	.suspend	= aha152x_suspend,
 	.resume		= aha152x_resume,
 	.resume		= aha152x_resume,
 };
 };
 
 

+ 1 - 16
drivers/scsi/pcmcia/fdomain_stub.c

@@ -220,26 +220,12 @@ static void fdomain_release(dev_link_t *link)
 
 
 /*====================================================================*/
 /*====================================================================*/
 
 
-static int fdomain_suspend(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
-	return 0;
-}
-
 static int fdomain_resume(struct pcmcia_device *dev)
 static int fdomain_resume(struct pcmcia_device *dev)
 {
 {
 	dev_link_t *link = dev_to_instance(dev);
 	dev_link_t *link = dev_to_instance(dev);
 
 
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
+	if (link->state & DEV_CONFIG)
 		fdomain_16x0_bus_reset(NULL);
 		fdomain_16x0_bus_reset(NULL);
-	}
 
 
 	return 0;
 	return 0;
 }
 }
@@ -260,7 +246,6 @@ static struct pcmcia_driver fdomain_cs_driver = {
 	.probe		= fdomain_attach,
 	.probe		= fdomain_attach,
 	.remove		= fdomain_detach,
 	.remove		= fdomain_detach,
 	.id_table       = fdomain_ids,
 	.id_table       = fdomain_ids,
-	.suspend	= fdomain_suspend,
 	.resume		= fdomain_resume,
 	.resume		= fdomain_resume,
 };
 };
 
 

+ 0 - 10
drivers/scsi/pcmcia/nsp_cs.c

@@ -1987,8 +1987,6 @@ static int nsp_cs_suspend(struct pcmcia_device *dev)
 	scsi_info_t *info = link->priv;
 	scsi_info_t *info = link->priv;
 	nsp_hw_data *data;
 	nsp_hw_data *data;
 
 
-	link->state |= DEV_SUSPEND;
-
 	nsp_dbg(NSP_DEBUG_INIT, "event: suspend");
 	nsp_dbg(NSP_DEBUG_INIT, "event: suspend");
 
 
 	if (info->host != NULL) {
 	if (info->host != NULL) {
@@ -2001,9 +1999,6 @@ static int nsp_cs_suspend(struct pcmcia_device *dev)
 
 
 	info->stop = 1;
 	info->stop = 1;
 
 
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
 	return 0;
 	return 0;
 }
 }
 
 
@@ -2015,11 +2010,6 @@ static int nsp_cs_resume(struct pcmcia_device *dev)
 
 
 	nsp_dbg(NSP_DEBUG_INIT, "event: resume");
 	nsp_dbg(NSP_DEBUG_INIT, "event: resume");
 
 
-	link->state &= ~DEV_SUSPEND;
-
-	if (link->state & DEV_CONFIG)
-		pcmcia_request_configuration(link->handle, &link->conf);
-
 	info->stop = 0;
 	info->stop = 0;
 
 
 	if (info->host != NULL) {
 	if (info->host != NULL) {

+ 0 - 13
drivers/scsi/pcmcia/qlogic_stub.c

@@ -311,22 +311,10 @@ static void qlogic_release(dev_link_t *link)
 
 
 /*====================================================================*/
 /*====================================================================*/
 
 
-static int qlogic_suspend(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
-	return 0;
-}
-
 static int qlogic_resume(struct pcmcia_device *dev)
 static int qlogic_resume(struct pcmcia_device *dev)
 {
 {
 	dev_link_t *link = dev_to_instance(dev);
 	dev_link_t *link = dev_to_instance(dev);
 
 
-	link->state &= ~DEV_SUSPEND;
 	if (link->state & DEV_CONFIG) {
 	if (link->state & DEV_CONFIG) {
 		scsi_info_t *info = link->priv;
 		scsi_info_t *info = link->priv;
 
 
@@ -375,7 +363,6 @@ static struct pcmcia_driver qlogic_cs_driver = {
 	.probe		= qlogic_attach,
 	.probe		= qlogic_attach,
 	.remove		= qlogic_detach,
 	.remove		= qlogic_detach,
 	.id_table       = qlogic_ids,
 	.id_table       = qlogic_ids,
-	.suspend	= qlogic_suspend,
 	.resume		= qlogic_resume,
 	.resume		= qlogic_resume,
 };
 };
 
 

+ 0 - 15
drivers/scsi/pcmcia/sym53c500_cs.c

@@ -857,26 +857,12 @@ cs_failed:
 	return;
 	return;
 } /* SYM53C500_config */
 } /* SYM53C500_config */
 
 
-static int sym53c500_suspend(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
-	return 0;
-}
-
 static int sym53c500_resume(struct pcmcia_device *dev)
 static int sym53c500_resume(struct pcmcia_device *dev)
 {
 {
 	dev_link_t *link = dev_to_instance(dev);
 	dev_link_t *link = dev_to_instance(dev);
 	struct scsi_info_t *info = link->priv;
 	struct scsi_info_t *info = link->priv;
 
 
-	link->state &= ~DEV_SUSPEND;
 	if (link->state & DEV_CONFIG) {
 	if (link->state & DEV_CONFIG) {
-		pcmcia_request_configuration(link->handle, &link->conf);
-
 		/* See earlier comment about manufacturer IDs. */
 		/* See earlier comment about manufacturer IDs. */
 		if ((info->manf_id == MANFID_MACNICA) ||
 		if ((info->manf_id == MANFID_MACNICA) ||
 		    (info->manf_id == MANFID_PIONEER) ||
 		    (info->manf_id == MANFID_PIONEER) ||
@@ -963,7 +949,6 @@ static struct pcmcia_driver sym53c500_cs_driver = {
 	.probe		= SYM53C500_attach,
 	.probe		= SYM53C500_attach,
 	.remove		= SYM53C500_detach,
 	.remove		= SYM53C500_detach,
 	.id_table       = sym53c500_ids,
 	.id_table       = sym53c500_ids,
-	.suspend	= sym53c500_suspend,
 	.resume		= sym53c500_resume,
 	.resume		= sym53c500_resume,
 };
 };
 
 

+ 2 - 7
drivers/serial/serial_cs.c

@@ -151,7 +151,6 @@ static void serial_remove(dev_link_t *link)
 static int serial_suspend(struct pcmcia_device *dev)
 static int serial_suspend(struct pcmcia_device *dev)
 {
 {
 	dev_link_t *link = dev_to_instance(dev);
 	dev_link_t *link = dev_to_instance(dev);
-	link->state |= DEV_SUSPEND;
 
 
 	if (link->state & DEV_CONFIG) {
 	if (link->state & DEV_CONFIG) {
 		struct serial_info *info = link->priv;
 		struct serial_info *info = link->priv;
@@ -160,8 +159,8 @@ static int serial_suspend(struct pcmcia_device *dev)
 		for (i = 0; i < info->ndev; i++)
 		for (i = 0; i < info->ndev; i++)
 			serial8250_suspend_port(info->line[i]);
 			serial8250_suspend_port(info->line[i]);
 
 
-		if (!info->slave)
-			pcmcia_release_configuration(link->handle);
+		if (info->slave)
+			link->state &= DEV_SUSPEND_NORELEASE;
 	}
 	}
 
 
 	return 0;
 	return 0;
@@ -170,15 +169,11 @@ static int serial_suspend(struct pcmcia_device *dev)
 static int serial_resume(struct pcmcia_device *dev)
 static int serial_resume(struct pcmcia_device *dev)
 {
 {
 	dev_link_t *link = dev_to_instance(dev);
 	dev_link_t *link = dev_to_instance(dev);
-	link->state &= ~DEV_SUSPEND;
 
 
 	if (DEV_OK(link)) {
 	if (DEV_OK(link)) {
 		struct serial_info *info = link->priv;
 		struct serial_info *info = link->priv;
 		int i;
 		int i;
 
 
-		if (!info->slave)
-			pcmcia_request_configuration(link->handle, &link->conf);
-
 		for (i = 0; i < info->ndev; i++)
 		for (i = 0; i < info->ndev; i++)
 			serial8250_resume_port(info->line[i]);
 			serial8250_resume_port(info->line[i]);
 	}
 	}

+ 0 - 24
drivers/telephony/ixj_pcmcia.c

@@ -232,28 +232,6 @@ static void ixj_cs_release(dev_link_t *link)
 	pcmcia_disable_device(link->handle);
 	pcmcia_disable_device(link->handle);
 }
 }
 
 
-static int ixj_suspend(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
-	return 0;
-}
-
-static int ixj_resume(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state &= ~DEV_SUSPEND;
-	if (DEV_OK(link))
-		pcmcia_request_configuration(link->handle, &link->conf);
-
-	return 0;
-}
-
 static struct pcmcia_device_id ixj_ids[] = {
 static struct pcmcia_device_id ixj_ids[] = {
 	PCMCIA_DEVICE_MANF_CARD(0x0257, 0x0600),
 	PCMCIA_DEVICE_MANF_CARD(0x0257, 0x0600),
 	PCMCIA_DEVICE_NULL
 	PCMCIA_DEVICE_NULL
@@ -268,8 +246,6 @@ static struct pcmcia_driver ixj_driver = {
 	.probe		= ixj_attach,
 	.probe		= ixj_attach,
 	.remove		= ixj_detach,
 	.remove		= ixj_detach,
 	.id_table	= ixj_ids,
 	.id_table	= ixj_ids,
-	.suspend	= ixj_suspend,
-	.resume		= ixj_resume,
 };
 };
 
 
 static int __init ixj_pcmcia_init(void)
 static int __init ixj_pcmcia_init(void)

+ 0 - 24
drivers/usb/host/sl811_cs.c

@@ -293,28 +293,6 @@ cs_failed:
 	}
 	}
 }
 }
 
 
-static int sl811_suspend(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state |= DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
-	return 0;
-}
-
-static int sl811_resume(struct pcmcia_device *dev)
-{
-	dev_link_t *link = dev_to_instance(dev);
-
-	link->state &= ~DEV_SUSPEND;
-	if (link->state & DEV_CONFIG)
-		pcmcia_request_configuration(link->handle, &link->conf);
-
-	return 0;
-}
-
 static int sl811_cs_attach(struct pcmcia_device *p_dev)
 static int sl811_cs_attach(struct pcmcia_device *p_dev)
 {
 {
 	local_info_t *local;
 	local_info_t *local;
@@ -359,8 +337,6 @@ static struct pcmcia_driver sl811_cs_driver = {
 	.probe		= sl811_cs_attach,
 	.probe		= sl811_cs_attach,
 	.remove		= sl811_cs_detach,
 	.remove		= sl811_cs_detach,
 	.id_table	= sl811_ids,
 	.id_table	= sl811_ids,
-	.suspend	= sl811_suspend,
-	.resume		= sl811_resume,
 };
 };
 
 
 /*====================================================================*/
 /*====================================================================*/

+ 1 - 2
include/pcmcia/ds.h

@@ -118,8 +118,7 @@ typedef struct dev_link_t {
 /* Flags for device state */
 /* Flags for device state */
 #define DEV_PRESENT		0x01
 #define DEV_PRESENT		0x01
 #define DEV_CONFIG		0x02
 #define DEV_CONFIG		0x02
-#define DEV_STALE_CONFIG	0x04	/* release on close */
-#define DEV_STALE_LINK		0x08	/* detach on release */
+#define DEV_SUSPEND_NORELEASE	0x04
 #define DEV_CONFIG_PENDING	0x10
 #define DEV_CONFIG_PENDING	0x10
 #define DEV_RELEASE_PENDING	0x20
 #define DEV_RELEASE_PENDING	0x20
 #define DEV_SUSPEND		0x40
 #define DEV_SUSPEND		0x40

+ 0 - 10
sound/pcmcia/pdaudiocf/pdaudiocf.c

@@ -284,16 +284,11 @@ static int pdacf_suspend(struct pcmcia_device *dev)
 	struct snd_pdacf *chip = link->priv;
 	struct snd_pdacf *chip = link->priv;
 
 
 	snd_printdd(KERN_DEBUG "SUSPEND\n");
 	snd_printdd(KERN_DEBUG "SUSPEND\n");
-	link->state |= DEV_SUSPEND;
 	if (chip) {
 	if (chip) {
 		snd_printdd(KERN_DEBUG "snd_pdacf_suspend calling\n");
 		snd_printdd(KERN_DEBUG "snd_pdacf_suspend calling\n");
 		snd_pdacf_suspend(chip, PMSG_SUSPEND);
 		snd_pdacf_suspend(chip, PMSG_SUSPEND);
 	}
 	}
 
 
-	snd_printdd(KERN_DEBUG "RESET_PHYSICAL\n");
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
-
 	return 0;
 	return 0;
 }
 }
 
 
@@ -303,12 +298,7 @@ static int pdacf_resume(struct pcmcia_device *dev)
 	struct snd_pdacf *chip = link->priv;
 	struct snd_pdacf *chip = link->priv;
 
 
 	snd_printdd(KERN_DEBUG "RESUME\n");
 	snd_printdd(KERN_DEBUG "RESUME\n");
-	link->state &= ~DEV_SUSPEND;
-
-	snd_printdd(KERN_DEBUG "CARD_RESET\n");
 	if (DEV_OK(link)) {
 	if (DEV_OK(link)) {
-		snd_printdd(KERN_DEBUG "requestconfig...\n");
-		pcmcia_request_configuration(link->handle, &link->conf);
 		if (chip) {
 		if (chip) {
 			snd_printdd(KERN_DEBUG "calling snd_pdacf_resume\n");
 			snd_printdd(KERN_DEBUG "calling snd_pdacf_resume\n");
 			snd_pdacf_resume(chip);
 			snd_pdacf_resume(chip);

+ 0 - 9
sound/pcmcia/vx/vxpocket.c

@@ -284,14 +284,10 @@ static int vxp_suspend(struct pcmcia_device *dev)
 	struct vx_core *chip = link->priv;
 	struct vx_core *chip = link->priv;
 
 
 	snd_printdd(KERN_DEBUG "SUSPEND\n");
 	snd_printdd(KERN_DEBUG "SUSPEND\n");
-	link->state |= DEV_SUSPEND;
 	if (chip) {
 	if (chip) {
 		snd_printdd(KERN_DEBUG "snd_vx_suspend calling\n");
 		snd_printdd(KERN_DEBUG "snd_vx_suspend calling\n");
 		snd_vx_suspend(chip, PMSG_SUSPEND);
 		snd_vx_suspend(chip, PMSG_SUSPEND);
 	}
 	}
-	snd_printdd(KERN_DEBUG "RESET_PHYSICAL\n");
-	if (link->state & DEV_CONFIG)
-		pcmcia_release_configuration(link->handle);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -302,13 +298,8 @@ static int vxp_resume(struct pcmcia_device *dev)
 	struct vx_core *chip = link->priv;
 	struct vx_core *chip = link->priv;
 
 
 	snd_printdd(KERN_DEBUG "RESUME\n");
 	snd_printdd(KERN_DEBUG "RESUME\n");
-	link->state &= ~DEV_SUSPEND;
-
-	snd_printdd(KERN_DEBUG "CARD_RESET\n");
 	if (DEV_OK(link)) {
 	if (DEV_OK(link)) {
 		//struct snd_vxpocket *vxp = (struct snd_vxpocket *)chip;
 		//struct snd_vxpocket *vxp = (struct snd_vxpocket *)chip;
-		snd_printdd(KERN_DEBUG "requestconfig...\n");
-		pcmcia_request_configuration(link->handle, &link->conf);
 		if (chip) {
 		if (chip) {
 			snd_printdd(KERN_DEBUG "calling snd_vx_resume\n");
 			snd_printdd(KERN_DEBUG "calling snd_vx_resume\n");
 			snd_vx_resume(chip);
 			snd_vx_resume(chip);