summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/atmel_cs.c2
-rw-r--r--drivers/net/wireless/ray_cs.c2
-rw-r--r--drivers/net/wireless/wavelan_cs.c1
-rw-r--r--drivers/pcmcia/ds.c48
-rw-r--r--drivers/telephony/ixj_pcmcia.c1
-rw-r--r--include/pcmcia/ds.h6
6 files changed, 30 insertions, 30 deletions
diff --git a/drivers/net/wireless/atmel_cs.c b/drivers/net/wireless/atmel_cs.c
index 962272c1342a..d09b1472e673 100644
--- a/drivers/net/wireless/atmel_cs.c
+++ b/drivers/net/wireless/atmel_cs.c
@@ -220,7 +220,7 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
static int card_present(void *arg)
{
struct pcmcia_device *link = (struct pcmcia_device *)arg;
- if (link->state & DEV_SUSPEND)
+ if (link->suspended)
return 0;
else if (link->state & DEV_PRESENT)
return 1;
diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c
index 8cfe9332a3c1..e3924339fabe 100644
--- a/drivers/net/wireless/ray_cs.c
+++ b/drivers/net/wireless/ray_cs.c
@@ -1968,7 +1968,7 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id, struct pt_regs * regs)
local = (ray_dev_t *)dev->priv;
link = (struct pcmcia_device *)local->finder;
- if ( ! (link->state & DEV_PRESENT) || link->state & DEV_SUSPEND ) {
+ if ( ! (link->state & DEV_PRESENT) || link->suspended ) {
DEBUG(2,"ray_cs interrupt from device not present or suspended.\n");
return IRQ_NONE;
}
diff --git a/drivers/net/wireless/wavelan_cs.c b/drivers/net/wireless/wavelan_cs.c
index 7373caf6e8e8..6b6769654777 100644
--- a/drivers/net/wireless/wavelan_cs.c
+++ b/drivers/net/wireless/wavelan_cs.c
@@ -4744,7 +4744,6 @@ static int wavelan_resume(struct pcmcia_device *link)
{
struct net_device * dev = (struct net_device *) link->priv;
- link->state &= ~DEV_SUSPEND;
if ((link->state & DEV_CONFIG) && (link->open)) {
wv_hw_reset(dev);
netif_device_attach(dev);
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c
index e8fe544f2e9c..34e634aa48e4 100644
--- a/drivers/pcmcia/ds.c
+++ b/drivers/pcmcia/ds.c
@@ -945,7 +945,7 @@ static ssize_t pcmcia_show_pm_state(struct device *dev, struct device_attribute
{
struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
- if (p_dev->dev.power.power_state.event != PM_EVENT_ON)
+ if (p_dev->suspended)
return sprintf(buf, "off\n");
else
return sprintf(buf, "on\n");
@@ -960,11 +960,9 @@ static ssize_t pcmcia_store_pm_state(struct device *dev, struct device_attribute
if (!count)
return -EINVAL;
- if ((p_dev->dev.power.power_state.event == PM_EVENT_ON) &&
- (!strncmp(buf, "off", 3)))
+ if ((!p_dev->suspended) && !strncmp(buf, "off", 3))
ret = dpm_runtime_suspend(dev, PMSG_SUSPEND);
- else if ((p_dev->dev.power.power_state.event != PM_EVENT_ON) &&
- (!strncmp(buf, "on", 2)))
+ else if (p_dev->suspended && !strncmp(buf, "on", 2))
dpm_runtime_resume(dev);
return ret ? ret : count;
@@ -1030,7 +1028,7 @@ static int pcmcia_dev_suspend(struct device * dev, pm_message_t state)
{
struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
struct pcmcia_driver *p_drv = NULL;
- int ret;
+ int ret = 0;
if (dev->driver)
p_drv = to_pcmcia_drv(dev->driver);
@@ -1038,14 +1036,16 @@ static int pcmcia_dev_suspend(struct device * dev, pm_message_t state)
if (p_drv && p_drv->suspend) {
ret = p_drv->suspend(p_dev);
if (ret)
- return ret;
- p_dev->state |= DEV_SUSPEND;
- if ((p_dev->state & DEV_CONFIG) &&
- !(p_dev->state & DEV_SUSPEND_NORELEASE))
- pcmcia_release_configuration(p_dev);
+ goto out;
+ if ((p_dev->state & DEV_CONFIG) &&
+ !(p_dev->state & DEV_SUSPEND_NORELEASE))
+ pcmcia_release_configuration(p_dev);
}
- return 0;
+ out:
+ if (!ret)
+ p_dev->suspended = 1;
+ return ret;
}
@@ -1053,24 +1053,26 @@ static int pcmcia_dev_resume(struct device * dev)
{
struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
struct pcmcia_driver *p_drv = NULL;
- int ret;
+ int ret = 0;
if (dev->driver)
p_drv = to_pcmcia_drv(dev->driver);
if (p_drv && p_drv->resume) {
- p_dev->state &= ~DEV_SUSPEND;
- if ((p_dev->state & DEV_CONFIG) &&
- !(p_dev->state & DEV_SUSPEND_NORELEASE)){
- ret = pcmcia_request_configuration(p_dev,
- &p_dev->conf);
- if (ret)
- return ret;
- }
- return p_drv->resume(p_dev);
+ if ((p_dev->state & DEV_CONFIG) &&
+ !(p_dev->state & DEV_SUSPEND_NORELEASE)){
+ ret = pcmcia_request_configuration(p_dev,
+ &p_dev->conf);
+ if (ret)
+ goto out;
+ }
+ ret = p_drv->resume(p_dev);
}
- return 0;
+ out:
+ if (!ret)
+ p_dev->suspended = 0;
+ return ret;
}
diff --git a/drivers/telephony/ixj_pcmcia.c b/drivers/telephony/ixj_pcmcia.c
index a27df6101dc6..5c7611c2ac6c 100644
--- a/drivers/telephony/ixj_pcmcia.c
+++ b/drivers/telephony/ixj_pcmcia.c
@@ -60,7 +60,6 @@ static void ixj_detach(struct pcmcia_device *link)
{
DEBUG(0, "ixj_detach(0x%p)\n", link);
- link->state &= ~DEV_RELEASE_PENDING;
if (link->state & DEV_CONFIG)
ixj_cs_release(link);
diff --git a/include/pcmcia/ds.h b/include/pcmcia/ds.h
index 557d8aea1a86..93a7ebc34156 100644
--- a/include/pcmcia/ds.h
+++ b/include/pcmcia/ds.h
@@ -108,8 +108,6 @@ typedef struct dev_node_t {
#define DEV_CONFIG 0x02
#define DEV_SUSPEND_NORELEASE 0x04
#define DEV_CONFIG_PENDING 0x10
-#define DEV_RELEASE_PENDING 0x20
-#define DEV_SUSPEND 0x40
#define DEV_BUSY 0x80
#define DEV_OK(l) \
@@ -163,13 +161,15 @@ struct pcmcia_device {
u_int p_state;
+ u8 suspended:1;
+ u8 reserved:3;
+
/* information about this device */
u8 has_manf_id:1;
u8 has_card_id:1;
u8 has_func_id:1;
u8 allow_func_id_match:1;
- u8 reserved:4;
u8 func_id;
u16 manf_id;