[PATCH] pcmcia: new suspend core
[deliverable/linux.git] / drivers / scsi / pcmcia / sym53c500_cs.c
index 98b64b2aa8ee49f69a9d95c1749c4853399435b0..c4e3e2294c66b6c0e9f4268d6aa0ed79691176ec 100644 (file)
@@ -872,11 +872,48 @@ cs_failed:
        return;
 } /* 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)
+{
+       dev_link_t *link = dev_to_instance(dev);
+       struct scsi_info_t *info = link->priv;
+
+       link->state &= ~DEV_SUSPEND;
+       if (link->state & DEV_CONFIG) {
+               pcmcia_request_configuration(link->handle, &link->conf);
+
+               /* See earlier comment about manufacturer IDs. */
+               if ((info->manf_id == MANFID_MACNICA) ||
+                   (info->manf_id == MANFID_PIONEER) ||
+                   (info->manf_id == 0x0098)) {
+                       outb(0x80, link->io.BasePort1 + 0xd);
+                       outb(0x24, link->io.BasePort1 + 0x9);
+                       outb(0x04, link->io.BasePort1 + 0xd);
+               }
+               /*
+                *  If things don't work after a "resume",
+                *  this is a good place to start looking.
+                */
+               SYM53C500_int_host_reset(link->io.BasePort1);
+       }
+
+       return 0;
+}
+
 static int
 SYM53C500_event(event_t event, int priority, event_callback_args_t *args)
 {
        dev_link_t *link = args->client_data;
-       struct scsi_info_t *info = link->priv;
 
        DEBUG(1, "SYM53C500_event(0x%06x)\n", event);
 
@@ -890,34 +927,6 @@ SYM53C500_event(event_t event, int priority, event_callback_args_t *args)
                link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
                SYM53C500_config(link);
                break;
-       case CS_EVENT_PM_SUSPEND:
-               link->state |= DEV_SUSPEND;
-               /* Fall through... */
-       case CS_EVENT_RESET_PHYSICAL:
-               if (link->state & DEV_CONFIG)
-                       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);
-                       /* See earlier comment about manufacturer IDs. */
-                       if ((info->manf_id == MANFID_MACNICA) ||
-                           (info->manf_id == MANFID_PIONEER) ||
-                           (info->manf_id == 0x0098)) {
-                               outb(0x80, link->io.BasePort1 + 0xd);
-                               outb(0x24, link->io.BasePort1 + 0x9);
-                               outb(0x04, link->io.BasePort1 + 0xd);
-                       }
-                       /*
-                       *  If things don't work after a "resume",
-                       *  this is a good place to start looking.
-                       */
-                       SYM53C500_int_host_reset(link->io.BasePort1);
-               }
-               break;
        }
        return 0;
 } /* SYM53C500_event */
@@ -1012,6 +1021,8 @@ static struct pcmcia_driver sym53c500_cs_driver = {
        .event          = SYM53C500_event,
        .detach         = SYM53C500_detach,
        .id_table       = sym53c500_ids,
+       .suspend        = sym53c500_suspend,
+       .resume         = sym53c500_resume,
 };
 
 static int __init
This page took 0.030034 seconds and 5 git commands to generate.