mmc: remove MMC bus legacy suspend/resume method
PATCH v3 1/1 mmc: remove MMC bus legacy suspend/resume method
MMC bus is using legacy suspend/resume method, which is not compatible if runtime pm callbacks are used. In this scenario, MMC bus suspend/resume callbacks cannot be called when system entering S3. So change to use the new defined dev_pm_ops for system sleeping mode
---
Changes in v2:
use SET_SYSTEM_SLEEP_PM_OPS to define sleep callbacks as Rafael suggested
Changes in v3:
remove NULL pointer define for runtime callbacks when PM_RUNTIME is not selected, as Ulf Hansson suggested
drivers/mmc/card/block.c | 2 +- drivers/mmc/core/bus.c | 24 ++++++------------------ include/linux/mmc/card.h | 2 +- 3 files changed, 8 insertions(+), 20 deletions(-)
drivers/mmc/card/block.c +1 -1
@@ -1826,7 +1826,7 @@ static void mmc_blk_remove(struct mmc_card *card) }#ifdef CONFIG_PM -static int mmc_blk_suspend (struct mmc_card *card,pm_message_t state) +static int mmc_blk_suspend (struct mmc_card *card) {struct mmc_blk_data *part_md;struct mmc_blk_data *md =mmc_get_drvdata (card);
drivers/mmc/core/bus.c +6 -18
@@ -122,14 +122,14 @@ static int mmc_bus_remove(struct device *dev)return 0 ; } -static int mmc_bus_suspend (struct device *dev,pm_message_t state) +static int mmc_bus_suspend (struct device *dev) {struct mmc_driver *drv =to_mmc_driver (dev->driver);struct mmc_card *card =mmc_dev_to_card (dev);int ret =0 ;if (dev->driver && drv->suspend) - ret = drv->suspend (card, state); + ret = drv->suspend (card);return ret; }
@@ -144,8 +144,6 @@ static int mmc_bus_resume(struct device *dev)return ret; } -#ifdef CONFIG_PM_RUNTIME -static int mmc_runtime_suspend (struct device *dev) {struct mmc_card *card =mmc_dev_to_card (dev);
@@ -166,19 +164,11 @@ static int mmc_runtime_idle(struct device *dev) }static const struct dev_pm_ops mmc_bus_pm_ops = { - .runtime_suspend = mmc_runtime_suspend, - .runtime_resume = mmc_runtime_resume, - .runtime_idle = mmc_runtime_idle, + SET_RUNTIME_PM_OPS(mmc_runtime_suspend, mmc_runtime_resume, + mmc_runtime_idle) +SET_SYSTEM_SLEEP_PM_OPS (mmc_bus_suspend, mmc_bus_resume) }; -#define MMC_PM_OPS_PTR (&mmc_bus_pm_ops) - -#else /* !CONFIG_PM_RUNTIME */ - -#define MMC_PM_OPS_PTR NULL - -#endif /* !CONFIG_PM_RUNTIME */ -static struct bus_type mmc_bus_type = { .name ="mmc" , .dev_attrs = mmc_dev_attrs,
@@ -186,9 +176,7 @@ static struct bus_type mmc_bus_type = { .uevent = mmc_bus_uevent, .probe = mmc_bus_probe, .remove = mmc_bus_remove, - .suspend = mmc_bus_suspend, - .resume = mmc_bus_resume, - .pm = MMC_PM_OPS_PTR, + .pm = &mmc_bus_pm_ops, };int mmc_register_bus (void )
include/linux/mmc/card.h +1 -1
@@ -480,7 +480,7 @@ struct mmc_driver {struct device_driver drv;int (*probe)(struct mmc_card *);void (*remove)(struct mmc_card *); -int (*suspend)(struct mmc_card *,pm_message_t ); +int (*suspend)(struct mmc_card *);int (*resume)(struct mmc_card *); };
Signature · 1 line
1.7.1
Quoted 55 lines · Chuanxiao Dong
MMC bus is using legacy suspend/resume method, which is not compatible if runtime pm callbacks are used. In this scenario, MMC bus suspend/resume callbacks cannot be called when system entering S3. So change to use the new defined
dev_pm_opsfor system sleeping modeSigned-off-by Chuanxiao Dong<[email protected]>---
Changes in v2:
useSET_SYSTEM_SLEEP_PM_OPSto define sleep callbacks as Rafael suggestedChanges in v3:
remove NULL pointer define for runtime callbacks whenPM_RUNTIMEis not selected, as Ulf Hansson suggesteddrivers/mmc/card/block.c | 2 +- drivers/mmc/core/bus.c | 24 ++++++------------------ include/linux/mmc/card.h | 2 +- 3 files changed, 8 insertions(+), 20 deletions(-)drivers/mmc/card/block.c +1
-1@@ -1826,7 +1826,7 @@ static void mmc_blk_remove(struct mmc_card *card) }#ifdef CONFIG_PM -static int mmc_blk_suspend (struct mmc_card *card,pm_message_t state) +static int mmc_blk_suspend (struct mmc_card *card) {struct mmc_blk_data *part_md;struct mmc_blk_data *md =mmc_get_drvdata (card);drivers/mmc/core/bus.c +2
-2@@ -122,14 +122,14 @@ static int mmc_bus_remove(struct device *dev)return 0 ; } -static int mmc_bus_suspend (struct device *dev,pm_message_t state) +static int mmc_bus_suspend (struct device *dev) {struct mmc_driver *drv =to_mmc_driver (dev->driver);struct mmc_card *card =mmc_dev_to_card (dev);int ret =0 ;if (dev->driver&& drv->suspend) - ret = drv->suspend (card, state); + ret = drv->suspend (card);return ret; }
drivers/mmc/core/bus.c static int mmc_bus_resume(struct device *dev) · line 147
Quoted 4 lines
drivers/mmc/core/bus.c +0
-1@@ -144,8 +144,6 @@ static int mmc_bus_resume(struct device *dev)return ret; } -#ifdef CONFIG_PM_RUNTIME
I don't think this "idfef" shall removed. Won't that trigger compiler warnings when !CONFIG_PM_RUNTIME?
Just remove these three lines from patch v2...
+#define mmc_runtime_suspend NULL
+#define mmc_runtime_resume NULL
+#define mmc_runtime_idle NULL
...and thus the "else" to the CONFIG_PM_RUNTIME, as done below.
Quoted 43 lines
drivers/mmc/core/bus.c +4
-15-static int mmc_runtime_suspend (struct device *dev) {struct mmc_card *card =mmc_dev_to_card (dev);@@ -166,19 +164,11 @@ static int mmc_runtime_idle(struct device *dev) }static const struct dev_pm_ops mmc_bus_pm_ops = { - .runtime_suspend = mmc_runtime_suspend, - .runtime_resume = mmc_runtime_resume, - .runtime_idle = mmc_runtime_idle, + SET_RUNTIME_PM_OPS(mmc_runtime_suspend, mmc_runtime_resume, + mmc_runtime_idle) +SET_SYSTEM_SLEEP_PM_OPS (mmc_bus_suspend, mmc_bus_resume) }; -#define MMC_PM_OPS_PTR (&mmc_bus_pm_ops) - -#else /* !CONFIG_PM_RUNTIME */ - -#define MMC_PM_OPS_PTR NULL - -#endif /* !CONFIG_PM_RUNTIME */ -static struct bus_type mmc_bus_type = { .name ="mmc" , .dev_attrs = mmc_dev_attrs,@@ -186,9 +176,7 @@ static struct bus_type mmc_bus_type = { .uevent = mmc_bus_uevent, .probe = mmc_bus_probe, .remove = mmc_bus_remove, - .suspend = mmc_bus_suspend, - .resume = mmc_bus_resume, - .pm = MMC_PM_OPS_PTR, + .pm =&mmc_bus_pm_ops, };int mmc_register_bus (void )include/linux/mmc/card.h +0
-0
include/linux/mmc/card.h struct mmc_driver { · line 486
Quoted 8 lines
include/linux/mmc/card.h +1
-1@@ -480,7 +480,7 @@ struct mmc_driver {struct device_driver drv;int (*probe)(struct mmc_card *);void (*remove)(struct mmc_card *); -int (*suspend)(struct mmc_card *,pm_message_t ); +int (*suspend)(struct mmc_card *);int (*resume)(struct mmc_card *); };
Kind regards
Ulf Hansson
Quoted 65 lines
-----Original Message-----
From: Ulf Hansson [mailto:[email protected]]
Sent: Tuesday, April 10, 2012 10:33 PM
To: Dong, Chuanxiao
Cc: [email protected]; [email protected]; [email protected]; [email protected]; [email protected]
Subject: Re: [PATCH V3]mmc: remove MMC bus legacy suspend/resume methodQuoted 54 lines · Chuanxiao Dong
MMC bus is using legacy suspend/resume method, which is not compatible if runtime pm callbacks are used. In this scenario, MMC bus suspend/resume callbacks cannot be called when system entering S3. So change to use the new defined
dev_pm_opsfor system sleeping modeSigned-off-by Chuanxiao Dong<[email protected]>---
Changes in v2:
useSET_SYSTEM_SLEEP_PM_OPSto define sleep callbacks as Rafael suggestedChanges in v3:
remove NULL pointer define for runtime callbacks whenPM_RUNTIMEis not selected, as Ulf Hansson suggesteddrivers/mmc/card/block.c | 2 +- drivers/mmc/core/bus.c | 24 ++++++------------------ include/linux/mmc/card.h | 2 +- 3 files changed, 8 insertions(+), 20 deletions(-)drivers/mmc/card/block.c index renamed from drivers/mmc/card/block.c +0
-0f2020d3..3582c03 100644
drivers/mmc/card/block.c +1
-1@@ -1826,7 +1826,7 @@ static void mmc_blk_remove(struct mmc_card *card) }#ifdef CONFIG_PM -static int mmc_blk_suspend (struct mmc_card *card,pm_message_t state) +static int mmc_blk_suspend (struct mmc_card *card) {struct mmc_blk_data *part_md; struct mmc_blk_data *md = mmc_get_drvdata(card); diff --git
a/drivers/mmc/core/bus.cb/drivers/mmc/core/bus.cindex 5d011a3..1996c9b 100644drivers/mmc/core/bus.c +2
-2@@ -122,14 +122,14 @@ static int mmc_bus_remove(struct device *dev)return 0 ; } -static int mmc_bus_suspend (struct device *dev,pm_message_t state) +static int mmc_bus_suspend (struct device *dev) {struct mmc_driver *drv =to_mmc_driver (dev->driver);struct mmc_card *card =mmc_dev_to_card (dev);int ret =0 ;if (dev->driver&& drv->suspend) - ret = drv->suspend (card, state); + ret = drv->suspend (card);return ret; }
Quoted 8 lines
drivers/mmc/core/bus.c static int mmc_bus_resume(struct device *dev) · line 147
Quoted 5 lines
drivers/mmc/core/bus.c +0
-1@@ -144,8 +144,6 @@ static int mmc_bus_resume(struct device *dev)return ret; } -#ifdef CONFIG_PM_RUNTIME I don't think this "idfef" shall removed. Won't that trigger compiler warnings when !CONFIG_PM_RUNTIME?
Yes, missed this. Will fix it. Thanks a lot!
Thanks
Chuanxiao
Quoted 64 lines
Just remove these three lines from patch v2...
(quoted diff) +3
-0+#define mmc_runtime_suspend NULL +#define mmc_runtime_resume NULL +#define mmc_runtime_idle NULL...and thus the "else" to the
CONFIG_PM_RUNTIME, as done below.drivers/mmc/core/bus.c static int mmc_bus_resume(struct device *dev)
Quoted 4 lines
drivers/mmc/core/bus.c +0
-1-static int mmc_runtime_suspend (struct device *dev) { struct mmc_card *card = mmc_dev_to_card(dev); @@ -166,19 +164,11@@
Quoted 39 lines
static int
mmc_runtime_idle(struct device *dev)
}static const struct dev_pm_ops mmc_bus_pm_ops = {drivers/mmc/core/bus.c +4
-14- .runtime_suspend = mmc_runtime_suspend, - .runtime_resume = mmc_runtime_resume, - .runtime_idle = mmc_runtime_idle, +SET_RUNTIME_PM_OPS (mmc_runtime_suspend, mmc_runtime_resume, + mmc_runtime_idle) +SET_SYSTEM_SLEEP_PM_OPS (mmc_bus_suspend, mmc_bus_resume) }; -#define MMC_PM_OPS_PTR (&mmc_bus_pm_ops) - -#else /* !CONFIG_PM_RUNTIME */ - -#define MMC_PM_OPS_PTR NULL - -#endif /* !CONFIG_PM_RUNTIME */ -static struct bus_type mmc_bus_type = { .name ="mmc" , .dev_attrs = mmc_dev_attrs,@@ -186,9 +176,7 @@ static struct bus_type mmc_bus_type = { .uevent = mmc_bus_uevent, .probe = mmc_bus_probe, .remove = mmc_bus_remove, - .suspend = mmc_bus_suspend, - .resume = mmc_bus_resume, - .pm = MMC_PM_OPS_PTR, + .pm =&mmc_bus_pm_ops, };int mmc_register_bus (void )include/linux/mmc/card.h index renamed from include/linux/mmc/card.h +0
-01a1ca71..c984c9a 100644
include/linux/mmc/card.h struct mmc_driver { · line 486
Quoted 8 lines
include/linux/mmc/card.h +1
-1@@ -480,7 +480,7 @@ struct mmc_driver {struct device_driver drv;int (*probe)(struct mmc_card *);void (*remove)(struct mmc_card *); -int (*suspend)(struct mmc_card *,pm_message_t ); +int (*suspend)(struct mmc_card *);int (*resume)(struct mmc_card *); };Kind regards
Ulf Hansson