[PATCH] pcmcia: new suspend core
[deliverable/linux.git] / drivers / net / pcmcia / 3c574_cs.c
index 71fd41122c911f785ded502f1dcd41978ec3699c..80414a77fe7570f308abc2a4bd0d5ca20ccaa454 100644 (file)
@@ -547,6 +547,38 @@ static void tc574_release(dev_link_t *link)
        link->state &= ~DEV_CONFIG;
 }
 
+static int tc574_suspend(struct pcmcia_device *p_dev)
+{
+       dev_link_t *link = dev_to_instance(p_dev);
+       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);
+       }
+
+       return 0;
+}
+
+static int tc574_resume(struct pcmcia_device *p_dev)
+{
+       dev_link_t *link = dev_to_instance(p_dev);
+       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);
+               }
+       }
+
+       return 0;
+}
+
 /*
        The card status event handler.  Mostly, this schedules other
        stuff to run after an event is received.  A CARD_REMOVAL event
@@ -572,28 +604,6 @@ static int tc574_event(event_t event, int priority,
                link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
                tc574_config(link);
                break;
-       case CS_EVENT_PM_SUSPEND:
-               link->state |= DEV_SUSPEND;
-               /* Fall through... */
-       case CS_EVENT_RESET_PHYSICAL:
-               if (link->state & DEV_CONFIG) {
-                       if (link->open)
-                               netif_device_detach(dev);
-                       pcmcia_release_configuration(link->handle);
-               }
-               break;
-       case CS_EVENT_PM_RESUME:
-               link->state &= ~DEV_SUSPEND;
-               /* Fall through... */
-       case CS_EVENT_CARD_RESET:
-               if (link->state & DEV_CONFIG) {
-                       pcmcia_request_configuration(link->handle, &link->conf);
-                       if (link->open) {
-                               tc574_reset(dev);
-                               netif_device_attach(dev);
-                       }
-               }
-               break;
        }
        return 0;
 } /* tc574_event */
@@ -1296,6 +1306,8 @@ static struct pcmcia_driver tc574_driver = {
        .event          = tc574_event,
        .detach         = tc574_detach,
        .id_table       = tc574_ids,
+       .suspend        = tc574_suspend,
+       .resume         = tc574_resume,
 };
 
 static int __init init_tc574(void)
This page took 0.024617 seconds and 5 git commands to generate.