Hey,

On Sat, May 01, 2010 at 05:23:18AM +0900, Komuro wrote:
> Hi,
> 
> >> But, after "pccardctl reset", the card still does not work.
> >
> >Why is "pccardctl reset" needed in any case? 
> 
> When the device becomes unstable, "pccardctl reset" reset the driver.
> 
> 
> >It seems that the CIS is
> >different when you call "pccardctl reset" compared to what it used to be.
> 
> The CIS is same. I don't change the card.

What about this patch on top of the previous one? If it still fails, dynamic
debug output would be very helpful.

Thanks & best,

        Dominik

From: Dominik Brodowski <li...@dominikbrodowski.net>
Date: Mon, 3 May 2010 15:10:09 +0200
Subject: [PATCH] pcmcia: order userspace suspend and resume requests

Assert that userspace suspend and resume requests appearing
(almost) immediately are executed in the following order:
suspend, resume. This should fix "pccardctl reset".

Signed-off-by: Dominik Brodowski <li...@dominikbrodowski.net>

diff --git a/drivers/pcmcia/cs.c b/drivers/pcmcia/cs.c
index 75ed866..c338375 100644
--- a/drivers/pcmcia/cs.c
+++ b/drivers/pcmcia/cs.c
@@ -671,20 +671,22 @@ static int pccardd(void *__skt)
                                socket_remove(skt);
                        if (sysfs_events & PCMCIA_UEVENT_INSERT)
                                socket_insert(skt);
-                       if ((sysfs_events & PCMCIA_UEVENT_RESUME) &&
-                               !(skt->state & SOCKET_CARDBUS)) {
-                               ret = socket_resume(skt);
-                               if (!ret && skt->callback)
-                                       skt->callback->resume(skt);
-                       }
                        if ((sysfs_events & PCMCIA_UEVENT_SUSPEND) &&
                                !(skt->state & SOCKET_CARDBUS)) {
                                if (skt->callback)
                                        ret = skt->callback->suspend(skt);
                                else
                                        ret = 0;
-                               if (!ret)
+                               if (!ret) {
                                        socket_suspend(skt);
+                                       msleep(100);
+                               }
+                       }
+                       if ((sysfs_events & PCMCIA_UEVENT_RESUME) &&
+                               !(skt->state & SOCKET_CARDBUS)) {
+                               ret = socket_resume(skt);
+                               if (!ret && skt->callback)
+                                       skt->callback->resume(skt);
                        }
                        if ((sysfs_events & PCMCIA_UEVENT_REQUERY) &&
                                !(skt->state & SOCKET_CARDBUS)) {

_______________________________________________
Linux PCMCIA reimplementation list
http://lists.infradead.org/mailman/listinfo/linux-pcmcia

Reply via email to