aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pcmcia
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pcmcia')
-rw-r--r--drivers/pcmcia/ds.c27
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
1167struct 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}
1190EXPORT_SYMBOL(pcmcia_dev_present);
1191
1192
1166static struct pcmcia_callback pcmcia_bus_callback = { 1193static struct pcmcia_callback pcmcia_bus_callback = {
1167 .owner = THIS_MODULE, 1194 .owner = THIS_MODULE,
1168 .event = ds_event, 1195 .event = ds_event,