summaryrefslogtreecommitdiff
path: root/drivers/modem/m6718_spi/modem_driver.c
diff options
context:
space:
mode:
authorChris Blair <chris.blair@stericsson.com>2012-01-04 16:19:01 +0000
committerPhilippe Langlais <philippe.langlais@linaro.org>2012-03-19 09:02:46 +0100
commit575081a711374d8913635c8deeb7882151c1ebac (patch)
tree360146e0616bbc0e5d4c289fda561cb92cf3cb0d /drivers/modem/m6718_spi/modem_driver.c
parent4e8e4ffe6b2a493bcf167a22ebfa07809b6c412f (diff)
modem m6718: Handle modem irq before resume
Handles the scenario where the modem wakes up the APE and the modem irq is serviced before the IPC driver is resumed. The event is regsitered and serviced later when the driver resume hook is called. ST-Ericsson ID: 405458 ST-Ericsson FOSS-OUT ID: Trivial ST-Ericsson Linux next: NA Change-Id: I441decea1cbc657e8dc13ca63a3116f50581c6a7 Signed-off-by: Chris Blair <chris.blair@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/44410 Reviewed-by: QATOOLS Reviewed-by: QABUILD Reviewed-by: Rickard EVERTSSON <rickard.evertsson@stericsson.com> Reviewed-by: Linus WALLEIJ <linus.walleij@stericsson.com>
Diffstat (limited to 'drivers/modem/m6718_spi/modem_driver.c')
-rw-r--r--drivers/modem/m6718_spi/modem_driver.c34
1 files changed, 29 insertions, 5 deletions
diff --git a/drivers/modem/m6718_spi/modem_driver.c b/drivers/modem/m6718_spi/modem_driver.c
index 623a9191d27..8086e97aa7c 100644
--- a/drivers/modem/m6718_spi/modem_driver.c
+++ b/drivers/modem/m6718_spi/modem_driver.c
@@ -214,13 +214,25 @@ static int __exit spi_remove(struct spi_device *sdev)
static int spi_suspend(struct spi_device *sdev, pm_message_t mesg)
{
bool busy;
+ int ret = -EBUSY;
+ dev_dbg(&sdev->dev, "suspend called\n");
busy = modem_protocol_is_busy(sdev);
- dev_dbg(&sdev->dev, "suspend called, protocol busy:%d\n", busy);
- if (!busy)
- return modem_net_suspend(modem_driver_data.ndev);
- else
+ if (busy) {
+ dev_warn(&sdev->dev, "suspend failed (protocol busy)\n");
return -EBUSY;
+ }
+ ret = modem_protocol_suspend(sdev);
+ if (ret) {
+ dev_warn(&sdev->dev, "suspend failed, (protocol suspend))\n");
+ return ret;
+ }
+ ret = modem_net_suspend(modem_driver_data.ndev);
+ if (ret) {
+ dev_warn(&sdev->dev, "suspend failed, (netdev suspend)\n");
+ return ret;
+ }
+ return 0;
}
/**
@@ -229,8 +241,20 @@ static int spi_suspend(struct spi_device *sdev, pm_message_t mesg)
*/
static int spi_resume(struct spi_device *sdev)
{
+ int ret;
+
dev_dbg(&sdev->dev, "resume called\n");
- return modem_net_resume(modem_driver_data.ndev);
+ ret = modem_protocol_resume(sdev);
+ if (ret) {
+ dev_warn(&sdev->dev, "resume failed, (protocol resume))\n");
+ return ret;
+ }
+ ret = modem_net_resume(modem_driver_data.ndev);
+ if (ret) {
+ dev_warn(&sdev->dev, "resume failed, (netdev resume))\n");
+ return ret;
+ }
+ return 0;
}
#endif /* CONFIG_PM */