This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / drivers / isdn / hisax / teles_cs.c
index 74b89d8..98f8e28 100644 (file)
@@ -252,6 +252,19 @@ static void teles_detach(dev_link_t *link)
     if (link->state & DEV_CONFIG)
         teles_cs_release(link);
 
+    /*
+       If the device is currently configured and active, we won't
+       actually delete it yet.  Instead, it is marked so that when
+       the release() function is called, that will trigger a proper
+       detach().
+    */
+    if (link->state & DEV_CONFIG) {
+      DEBUG(0, "teles_cs: detach postponed, '%s' "
+               "still locked\n", link->dev->dev_name);
+        link->state |= DEV_STALE_LINK;
+        return;
+    }
+
     /* Break the link with Card Services */
     if (link->handle) {
         ret = pcmcia_deregister_client(link->handle);
@@ -448,6 +461,10 @@ static void teles_cs_release(dev_link_t *link)
     pcmcia_release_io(link->handle, &link->io);
     pcmcia_release_irq(link->handle, &link->irq);
     link->state &= ~DEV_CONFIG;
+
+    if (link->state & DEV_STALE_LINK)
+        teles_detach(link);
+
 } /* teles_cs_release */
 
 /*======================================================================