diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-29 17:21:42 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-29 17:21:42 -0800 |
commit | c0f79c4cb11acca545f9802ee0e14ad3b5cc123d (patch) | |
tree | 89d44f772a625bca06c7cf1bbed748f58dcab24a /drivers/pcmcia/yenta_socket.c | |
parent | 7a20655bc5316ccec0f036cde46e609ba5571f5e (diff) | |
parent | f901b8c46fa9748b9d6836e9b158cf7be89447f1 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-fixes-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-fixes-2.6:
[PATCH] PCMCIA: fix __must_check warnings
[PATCH] PCMCIA: handle sysfs, PCI errors
[PATCH] Export soc_common_drv_pcmcia_remove to allow modular PCMCIA.
[PATCH] ioremap balanced with iounmap for drivers/pcmcia
[PATCH] pcmcia: au1000_generic fix
[PATCH] i82092: wire up errors from pci_register_driver()
[PATCH] CONFIG_PM=n slim: drivers/pcmcia/*
[PATCH] pcmcia/ds: driver layer error checking
[PATCH] pcmcia: update alloc_io_space for conflict checking for multifunction PC card
[PATCH] pcmcia: add more IDs to hostap_cs.c
[PATCH] pcmcia: at91_cf update
Diffstat (limited to 'drivers/pcmcia/yenta_socket.c')
-rw-r--r-- | drivers/pcmcia/yenta_socket.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c index 26229d9da76..da471bddc97 100644 --- a/drivers/pcmcia/yenta_socket.c +++ b/drivers/pcmcia/yenta_socket.c @@ -1197,8 +1197,12 @@ static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_i ret = pcmcia_register_socket(&socket->socket); if (ret == 0) { /* Add the yenta register attributes */ - device_create_file(&dev->dev, &dev_attr_yenta_registers); - goto out; + ret = device_create_file(&dev->dev, &dev_attr_yenta_registers); + if (ret == 0) + goto out; + + /* error path... */ + pcmcia_unregister_socket(&socket->socket); } unmap: @@ -1213,7 +1217,7 @@ static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_i return ret; } - +#ifdef CONFIG_PM static int yenta_dev_suspend (struct pci_dev *dev, pm_message_t state) { struct yenta_socket *socket = pci_get_drvdata(dev); @@ -1248,12 +1252,18 @@ static int yenta_dev_resume (struct pci_dev *dev) struct yenta_socket *socket = pci_get_drvdata(dev); if (socket) { + int rc; + pci_set_power_state(dev, 0); /* FIXME: pci_restore_state needs to have a better interface */ pci_restore_state(dev); pci_write_config_dword(dev, 16*4, socket->saved_state[0]); pci_write_config_dword(dev, 17*4, socket->saved_state[1]); - pci_enable_device(dev); + + rc = pci_enable_device(dev); + if (rc) + return rc; + pci_set_master(dev); if (socket->type && socket->type->restore_state) @@ -1262,7 +1272,7 @@ static int yenta_dev_resume (struct pci_dev *dev) return pcmcia_socket_dev_resume(&dev->dev); } - +#endif #define CB_ID(vend,dev,type) \ { \ @@ -1359,8 +1369,10 @@ static struct pci_driver yenta_cardbus_driver = { .id_table = yenta_table, .probe = yenta_probe, .remove = __devexit_p(yenta_close), +#ifdef CONFIG_PM .suspend = yenta_dev_suspend, .resume = yenta_dev_resume, +#endif }; |