diff options
author | Bjorn Helgaas <bjorn.helgaas@hp.com> | 2007-10-17 10:31:09 +0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-17 19:43:04 +0400 |
commit | 5bfc43a0b65a11ca1e9edfa0c2bd34ce43da0346 (patch) | |
tree | eaf5d1d10cfd25c9523336864b7b747cd1db7cca /drivers/pnp | |
parent | 402b310cb6e523779149139b20f46899a890e963 (diff) | |
download | linux-5bfc43a0b65a11ca1e9edfa0c2bd34ce43da0346.tar.xz |
PNP: simplify PNP card error handling
No functional change; just return errors early instead of putting the main
part of the function inside an "if" statement.
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Cc: Adam Belay <ambx1@neo.rr.com>
Cc: Len Brown <lenb@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/pnp')
-rw-r--r-- | drivers/pnp/card.c | 57 |
1 files changed, 29 insertions, 28 deletions
diff --git a/drivers/pnp/card.c b/drivers/pnp/card.c index fae28913f459..3b48aef8f4eb 100644 --- a/drivers/pnp/card.c +++ b/drivers/pnp/card.c @@ -197,33 +197,34 @@ int pnp_add_card(struct pnp_card *card) card->dev.bus = NULL; card->dev.release = &pnp_release_card; error = device_register(&card->dev); - - if (error == 0) { - pnp_interface_attach_card(card); - spin_lock(&pnp_lock); - list_add_tail(&card->global_list, &pnp_cards); - list_add_tail(&card->protocol_list, &card->protocol->cards); - spin_unlock(&pnp_lock); - - /* we wait until now to add devices in order to ensure the drivers - * will be able to use all of the related devices on the card - * without waiting any unresonable length of time */ - list_for_each(pos, &card->devices) { - struct pnp_dev *dev = card_to_pnp_dev(pos); - __pnp_add_device(dev); - } - - /* match with card drivers */ - list_for_each_safe(pos, temp, &pnp_card_drivers) { - struct pnp_card_driver *drv = - list_entry(pos, struct pnp_card_driver, - global_list); - card_probe(card, drv); - } - } else + if (error) { pnp_err("sysfs failure, card '%s' will be unavailable", card->dev.bus_id); - return error; + return error; + } + + pnp_interface_attach_card(card); + spin_lock(&pnp_lock); + list_add_tail(&card->global_list, &pnp_cards); + list_add_tail(&card->protocol_list, &card->protocol->cards); + spin_unlock(&pnp_lock); + + /* we wait until now to add devices in order to ensure the drivers + * will be able to use all of the related devices on the card + * without waiting an unreasonable length of time */ + list_for_each(pos, &card->devices) { + struct pnp_dev *dev = card_to_pnp_dev(pos); + __pnp_add_device(dev); + } + + /* match with card drivers */ + list_for_each_safe(pos, temp, &pnp_card_drivers) { + struct pnp_card_driver *drv = + list_entry(pos, struct pnp_card_driver, + global_list); + card_probe(card, drv); + } + return 0; } /** @@ -291,14 +292,15 @@ struct pnp_dev *pnp_request_card_device(struct pnp_card_link *clink, struct pnp_card *card; if (!clink || !id) - goto done; + return NULL; + card = clink->card; drv = clink->driver; if (!from) { pos = card->devices.next; } else { if (from->card != card) - goto done; + return NULL; pos = from->card_list.next; } while (pos != &card->devices) { @@ -308,7 +310,6 @@ struct pnp_dev *pnp_request_card_device(struct pnp_card_link *clink, pos = pos->next; } -done: return NULL; found: |