aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/spi/spi.c34
1 files changed, 14 insertions, 20 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 5e5d29bb2dd5..1ad12afc6ba0 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -76,39 +76,33 @@ static int spi_uevent(struct device *dev, struct kobj_uevent_env *env)
76 76
77#ifdef CONFIG_PM 77#ifdef CONFIG_PM
78 78
79/*
80 * NOTE: the suspend() method for an spi_master controller driver
81 * should verify that all its child devices are marked as suspended;
82 * suspend requests delivered through sysfs power/state files don't
83 * enforce such constraints.
84 */
85static int spi_suspend(struct device *dev, pm_message_t message) 79static int spi_suspend(struct device *dev, pm_message_t message)
86{ 80{
87 int value; 81 int value = 0;
88 struct spi_driver *drv = to_spi_driver(dev->driver); 82 struct spi_driver *drv = to_spi_driver(dev->driver);
89 83
90 if (!drv || !drv->suspend)
91 return 0;
92
93 /* suspend will stop irqs and dma; no more i/o */ 84 /* suspend will stop irqs and dma; no more i/o */
94 value = drv->suspend(to_spi_device(dev), message); 85 if (drv) {
95 if (value == 0) 86 if (drv->suspend)
96 dev->power.power_state = message; 87 value = drv->suspend(to_spi_device(dev), message);
88 else
89 dev_dbg(dev, "... can't suspend\n");
90 }
97 return value; 91 return value;
98} 92}
99 93
100static int spi_resume(struct device *dev) 94static int spi_resume(struct device *dev)
101{ 95{
102 int value; 96 int value = 0;
103 struct spi_driver *drv = to_spi_driver(dev->driver); 97 struct spi_driver *drv = to_spi_driver(dev->driver);
104 98
105 if (!drv || !drv->resume)
106 return 0;
107
108 /* resume may restart the i/o queue */ 99 /* resume may restart the i/o queue */
109 value = drv->resume(to_spi_device(dev)); 100 if (drv) {
110 if (value == 0) 101 if (drv->resume)
111 dev->power.power_state = PMSG_ON; 102 value = drv->resume(to_spi_device(dev));
103 else
104 dev_dbg(dev, "... can't resume\n");
105 }
112 return value; 106 return value;
113} 107}
114 108