diff options
Diffstat (limited to 'drivers/pcmcia/ds.c')
-rw-r--r-- | drivers/pcmcia/ds.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c index 8c87343707cf..677105e35759 100644 --- a/drivers/pcmcia/ds.c +++ b/drivers/pcmcia/ds.c | |||
@@ -469,6 +469,7 @@ static void pcmcia_card_remove(struct pcmcia_socket *s) | |||
469 | } | 469 | } |
470 | p_dev = list_entry((&s->devices_list)->next, struct pcmcia_device, socket_device_list); | 470 | p_dev = list_entry((&s->devices_list)->next, struct pcmcia_device, socket_device_list); |
471 | list_del(&p_dev->socket_device_list); | 471 | list_del(&p_dev->socket_device_list); |
472 | p_dev->_removed=1; | ||
472 | spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags); | 473 | spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags); |
473 | 474 | ||
474 | device_unregister(&p_dev->dev); | 475 | device_unregister(&p_dev->dev); |
@@ -1163,6 +1164,32 @@ static int ds_event(struct pcmcia_socket *skt, event_t event, int priority) | |||
1163 | } /* ds_event */ | 1164 | } /* ds_event */ |
1164 | 1165 | ||
1165 | 1166 | ||
1167 | struct pcmcia_device * pcmcia_dev_present(struct pcmcia_device *_p_dev) | ||
1168 | { | ||
1169 | struct pcmcia_device *p_dev; | ||
1170 | struct pcmcia_device *ret = NULL; | ||
1171 | |||
1172 | p_dev = pcmcia_get_dev(_p_dev); | ||
1173 | if (!p_dev) | ||
1174 | return NULL; | ||
1175 | |||
1176 | if (!p_dev->socket->pcmcia_state.present) | ||
1177 | goto out; | ||
1178 | |||
1179 | if (p_dev->_removed) | ||
1180 | goto out; | ||
1181 | |||
1182 | if (p_dev->suspended) | ||
1183 | goto out; | ||
1184 | |||
1185 | ret = p_dev; | ||
1186 | out: | ||
1187 | pcmcia_put_dev(p_dev); | ||
1188 | return ret; | ||
1189 | } | ||
1190 | EXPORT_SYMBOL(pcmcia_dev_present); | ||
1191 | |||
1192 | |||
1166 | static struct pcmcia_callback pcmcia_bus_callback = { | 1193 | static struct pcmcia_callback pcmcia_bus_callback = { |
1167 | .owner = THIS_MODULE, | 1194 | .owner = THIS_MODULE, |
1168 | .event = ds_event, | 1195 | .event = ds_event, |