| From ad8d52b897a14711e026889053befbbee7fd51ba Mon Sep 17 00:00:00 2001 |
| From: Russell King <rmk+kernel@armlinux.org.uk> |
| Date: Wed, 31 Aug 2016 08:49:43 +0100 |
| Subject: pcmcia: ds: fix suspend/resume |
| |
| From: Russell King <rmk+kernel@armlinux.org.uk> |
| |
| commit ad8d52b897a14711e026889053befbbee7fd51ba upstream. |
| |
| PCMCIA suspend/resume no longer works since the commit mentioned below, |
| as the callbacks are no longer made. Convert the driver to the new |
| dev_pm_ops, which restores the suspend/resume functionality. Tested on |
| the arm arch Assabet platform. |
| |
| Fixes: aa8e54b559479 ("PM / sleep: Go direct_complete if driver has no callbacks") |
| Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/pcmcia/ds.c | 12 +++++++----- |
| 1 file changed, 7 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/pcmcia/ds.c |
| +++ b/drivers/pcmcia/ds.c |
| @@ -977,7 +977,7 @@ static int pcmcia_bus_uevent(struct devi |
| |
| /************************ runtime PM support ***************************/ |
| |
| -static int pcmcia_dev_suspend(struct device *dev, pm_message_t state); |
| +static int pcmcia_dev_suspend(struct device *dev); |
| static int pcmcia_dev_resume(struct device *dev); |
| |
| static int runtime_suspend(struct device *dev) |
| @@ -985,7 +985,7 @@ static int runtime_suspend(struct device |
| int rc; |
| |
| device_lock(dev); |
| - rc = pcmcia_dev_suspend(dev, PMSG_SUSPEND); |
| + rc = pcmcia_dev_suspend(dev); |
| device_unlock(dev); |
| return rc; |
| } |
| @@ -1135,7 +1135,7 @@ ATTRIBUTE_GROUPS(pcmcia_dev); |
| |
| /* PM support, also needed for reset */ |
| |
| -static int pcmcia_dev_suspend(struct device *dev, pm_message_t state) |
| +static int pcmcia_dev_suspend(struct device *dev) |
| { |
| struct pcmcia_device *p_dev = to_pcmcia_dev(dev); |
| struct pcmcia_driver *p_drv = NULL; |
| @@ -1410,6 +1410,9 @@ static struct class_interface pcmcia_bus |
| .remove_dev = &pcmcia_bus_remove_socket, |
| }; |
| |
| +static const struct dev_pm_ops pcmcia_bus_pm_ops = { |
| + SET_SYSTEM_SLEEP_PM_OPS(pcmcia_dev_suspend, pcmcia_dev_resume) |
| +}; |
| |
| struct bus_type pcmcia_bus_type = { |
| .name = "pcmcia", |
| @@ -1418,8 +1421,7 @@ struct bus_type pcmcia_bus_type = { |
| .dev_groups = pcmcia_dev_groups, |
| .probe = pcmcia_device_probe, |
| .remove = pcmcia_device_remove, |
| - .suspend = pcmcia_dev_suspend, |
| - .resume = pcmcia_dev_resume, |
| + .pm = &pcmcia_bus_pm_ops, |
| }; |
| |
| |