Commit 516d5ccdc61178b9701af1adfa86a306d51fbad2
Committed by
Chris Ball
1 parent
d3fe37b1a1
Exists in
master
and in
7 other branches
mmc: add runtime PM handlers
Add MMC runtime PM handlers, which call mmc_power_save_host and mmc_power_restore_host in response to runtime_suspend and runtime_resume events. Runtime PM is still disabled by default, so this patch alone has no immediate effect. Signed-off-by: Ohad Ben-Cohen <ohad@wizery.com> Tested-by: Luciano Coelho <luciano.coelho@nokia.com> Signed-off-by: Chris Ball <cjb@laptop.org>
Showing 1 changed file with 37 additions and 0 deletions Side-by-side Diff
drivers/mmc/core/bus.c
... | ... | @@ -14,6 +14,7 @@ |
14 | 14 | #include <linux/device.h> |
15 | 15 | #include <linux/err.h> |
16 | 16 | #include <linux/slab.h> |
17 | +#include <linux/pm_runtime.h> | |
17 | 18 | |
18 | 19 | #include <linux/mmc/card.h> |
19 | 20 | #include <linux/mmc/host.h> |
... | ... | @@ -141,6 +142,41 @@ |
141 | 142 | return ret; |
142 | 143 | } |
143 | 144 | |
145 | +#ifdef CONFIG_PM_RUNTIME | |
146 | + | |
147 | +static int mmc_runtime_suspend(struct device *dev) | |
148 | +{ | |
149 | + struct mmc_card *card = mmc_dev_to_card(dev); | |
150 | + | |
151 | + return mmc_power_save_host(card->host); | |
152 | +} | |
153 | + | |
154 | +static int mmc_runtime_resume(struct device *dev) | |
155 | +{ | |
156 | + struct mmc_card *card = mmc_dev_to_card(dev); | |
157 | + | |
158 | + return mmc_power_restore_host(card->host); | |
159 | +} | |
160 | + | |
161 | +static int mmc_runtime_idle(struct device *dev) | |
162 | +{ | |
163 | + return pm_runtime_suspend(dev); | |
164 | +} | |
165 | + | |
166 | +static const struct dev_pm_ops mmc_bus_pm_ops = { | |
167 | + .runtime_suspend = mmc_runtime_suspend, | |
168 | + .runtime_resume = mmc_runtime_resume, | |
169 | + .runtime_idle = mmc_runtime_idle, | |
170 | +}; | |
171 | + | |
172 | +#define MMC_PM_OPS_PTR (&mmc_bus_pm_ops) | |
173 | + | |
174 | +#else /* !CONFIG_PM_RUNTIME */ | |
175 | + | |
176 | +#define MMC_PM_OPS_PTR NULL | |
177 | + | |
178 | +#endif /* !CONFIG_PM_RUNTIME */ | |
179 | + | |
144 | 180 | static struct bus_type mmc_bus_type = { |
145 | 181 | .name = "mmc", |
146 | 182 | .dev_attrs = mmc_dev_attrs, |
... | ... | @@ -150,6 +186,7 @@ |
150 | 186 | .remove = mmc_bus_remove, |
151 | 187 | .suspend = mmc_bus_suspend, |
152 | 188 | .resume = mmc_bus_resume, |
189 | + .pm = MMC_PM_OPS_PTR, | |
153 | 190 | }; |
154 | 191 | |
155 | 192 | int mmc_register_bus(void) |