diff options
Diffstat (limited to 'drivers/pnp/card.c')
-rw-r--r-- | drivers/pnp/card.c | 49 |
1 files changed, 26 insertions, 23 deletions
diff --git a/drivers/pnp/card.c b/drivers/pnp/card.c index bb19c64073c6..227600cd6360 100644 --- a/drivers/pnp/card.c +++ b/drivers/pnp/card.c | |||
@@ -5,7 +5,6 @@ | |||
5 | * | 5 | * |
6 | */ | 6 | */ |
7 | 7 | ||
8 | #include <linux/config.h> | ||
9 | #include <linux/module.h> | 8 | #include <linux/module.h> |
10 | #include <linux/slab.h> | 9 | #include <linux/slab.h> |
11 | #include <linux/pnp.h> | 10 | #include <linux/pnp.h> |
@@ -60,30 +59,34 @@ static void card_remove_first(struct pnp_dev * dev) | |||
60 | card_remove(dev); | 59 | card_remove(dev); |
61 | } | 60 | } |
62 | 61 | ||
63 | static int card_probe(struct pnp_card * card, struct pnp_card_driver * drv) | 62 | static int card_probe(struct pnp_card *card, struct pnp_card_driver *drv) |
64 | { | 63 | { |
65 | const struct pnp_card_device_id *id = match_card(drv,card); | 64 | const struct pnp_card_device_id *id; |
66 | if (id) { | 65 | struct pnp_card_link *clink; |
67 | struct pnp_card_link * clink = pnp_alloc(sizeof(struct pnp_card_link)); | 66 | struct pnp_dev *dev; |
68 | if (!clink) | 67 | |
69 | return 0; | 68 | if (!drv->probe) |
70 | clink->card = card; | 69 | return 0; |
71 | clink->driver = drv; | 70 | id = match_card(drv,card); |
72 | clink->pm_state = PMSG_ON; | 71 | if (!id) |
73 | if (drv->probe) { | 72 | return 0; |
74 | if (drv->probe(clink, id)>=0) | 73 | |
75 | return 1; | 74 | clink = pnp_alloc(sizeof(*clink)); |
76 | else { | 75 | if (!clink) |
77 | struct pnp_dev * dev; | 76 | return 0; |
78 | card_for_each_dev(card, dev) { | 77 | clink->card = card; |
79 | if (dev->card_link == clink) | 78 | clink->driver = drv; |
80 | pnp_release_card_device(dev); | 79 | clink->pm_state = PMSG_ON; |
81 | } | 80 | |
82 | kfree(clink); | 81 | if (drv->probe(clink, id) >= 0) |
83 | } | 82 | return 1; |
84 | } else | 83 | |
85 | return 1; | 84 | /* Recovery */ |
85 | card_for_each_dev(card, dev) { | ||
86 | if (dev->card_link == clink) | ||
87 | pnp_release_card_device(dev); | ||
86 | } | 88 | } |
89 | kfree(clink); | ||
87 | return 0; | 90 | return 0; |
88 | } | 91 | } |
89 | 92 | ||