Merge tag 'pm-5.17-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull more power management updates from Rafael Wysocki: "This is a continuation of the rework of device power management macros used for declaring device power management callbacks (Paul Cercueil)" * tag 'pm-5.17-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: iio: pressure: bmp280: Use new PM macros PM: runtime: Add EXPORT[_GPL]_RUNTIME_DEV_PM_OPS macros PM: runtime: Add DEFINE_RUNTIME_DEV_PM_OPS() macro PM: core: Add EXPORT[_GPL]_SIMPLE_DEV_PM_OPS macros PM: core: Remove static qualifier in DEFINE_SIMPLE_DEV_PM_OPS macro PM: core: Remove DEFINE_UNIVERSAL_DEV_PM_OPS() macro
This commit is contained in:
@@ -1138,7 +1138,6 @@ int bmp280_common_probe(struct device *dev,
|
||||
}
|
||||
EXPORT_SYMBOL(bmp280_common_probe);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static int bmp280_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct iio_dev *indio_dev = dev_get_drvdata(dev);
|
||||
@@ -1159,15 +1158,9 @@ static int bmp280_runtime_resume(struct device *dev)
|
||||
usleep_range(data->start_up_time, data->start_up_time + 100);
|
||||
return data->chip_info->chip_config(data);
|
||||
}
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
const struct dev_pm_ops bmp280_dev_pm_ops = {
|
||||
SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
|
||||
pm_runtime_force_resume)
|
||||
SET_RUNTIME_PM_OPS(bmp280_runtime_suspend,
|
||||
bmp280_runtime_resume, NULL)
|
||||
};
|
||||
EXPORT_SYMBOL(bmp280_dev_pm_ops);
|
||||
EXPORT_RUNTIME_DEV_PM_OPS(bmp280_dev_pm_ops, bmp280_runtime_suspend,
|
||||
bmp280_runtime_resume, NULL);
|
||||
|
||||
MODULE_AUTHOR("Vlad Dogaru <vlad.dogaru@intel.com>");
|
||||
MODULE_DESCRIPTION("Driver for Bosch Sensortec BMP180/BMP280 pressure and temperature sensor");
|
||||
|
||||
@@ -58,7 +58,7 @@ static struct i2c_driver bmp280_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "bmp280",
|
||||
.of_match_table = bmp280_of_i2c_match,
|
||||
.pm = &bmp280_dev_pm_ops,
|
||||
.pm = pm_ptr(&bmp280_dev_pm_ops),
|
||||
},
|
||||
.probe = bmp280_i2c_probe,
|
||||
.id_table = bmp280_i2c_id,
|
||||
|
||||
@@ -109,7 +109,7 @@ static struct spi_driver bmp280_spi_driver = {
|
||||
.driver = {
|
||||
.name = "bmp280",
|
||||
.of_match_table = bmp280_of_spi_match,
|
||||
.pm = &bmp280_dev_pm_ops,
|
||||
.pm = pm_ptr(&bmp280_dev_pm_ops),
|
||||
},
|
||||
.id_table = bmp280_spi_id,
|
||||
.probe = bmp280_spi_probe,
|
||||
|
||||
@@ -1128,8 +1128,8 @@ static int jz4740_mmc_resume(struct device *dev)
|
||||
return pinctrl_select_default_state(dev);
|
||||
}
|
||||
|
||||
DEFINE_SIMPLE_DEV_PM_OPS(jz4740_mmc_pm_ops, jz4740_mmc_suspend,
|
||||
jz4740_mmc_resume);
|
||||
static DEFINE_SIMPLE_DEV_PM_OPS(jz4740_mmc_pm_ops, jz4740_mmc_suspend,
|
||||
jz4740_mmc_resume);
|
||||
|
||||
static struct platform_driver jz4740_mmc_driver = {
|
||||
.probe = jz4740_mmc_probe,
|
||||
|
||||
@@ -1210,7 +1210,7 @@ static int mxcmci_resume(struct device *dev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
DEFINE_SIMPLE_DEV_PM_OPS(mxcmci_pm_ops, mxcmci_suspend, mxcmci_resume);
|
||||
static DEFINE_SIMPLE_DEV_PM_OPS(mxcmci_pm_ops, mxcmci_suspend, mxcmci_resume);
|
||||
|
||||
static struct platform_driver mxcmci_driver = {
|
||||
.probe = mxcmci_probe,
|
||||
|
||||
+40
-15
@@ -8,6 +8,7 @@
|
||||
#ifndef _LINUX_PM_H
|
||||
#define _LINUX_PM_H
|
||||
|
||||
#include <linux/export.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/spinlock.h>
|
||||
@@ -357,13 +358,47 @@ struct dev_pm_ops {
|
||||
#define SET_RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn)
|
||||
#endif
|
||||
|
||||
#define _DEFINE_DEV_PM_OPS(name, \
|
||||
suspend_fn, resume_fn, \
|
||||
runtime_suspend_fn, runtime_resume_fn, idle_fn) \
|
||||
const struct dev_pm_ops name = { \
|
||||
SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
|
||||
RUNTIME_PM_OPS(runtime_suspend_fn, runtime_resume_fn, idle_fn) \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
|
||||
runtime_resume_fn, idle_fn, sec) \
|
||||
_DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
|
||||
runtime_resume_fn, idle_fn); \
|
||||
_EXPORT_SYMBOL(name, sec)
|
||||
#else
|
||||
#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
|
||||
runtime_resume_fn, idle_fn, sec) \
|
||||
static __maybe_unused _DEFINE_DEV_PM_OPS(__static_##name, suspend_fn, \
|
||||
resume_fn, runtime_suspend_fn, \
|
||||
runtime_resume_fn, idle_fn)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Use this if you want to use the same suspend and resume callbacks for suspend
|
||||
* to RAM and hibernation.
|
||||
*
|
||||
* If the underlying dev_pm_ops struct symbol has to be exported, use
|
||||
* EXPORT_SIMPLE_DEV_PM_OPS() or EXPORT_GPL_SIMPLE_DEV_PM_OPS() instead.
|
||||
*/
|
||||
#define DEFINE_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
|
||||
static const struct dev_pm_ops name = { \
|
||||
SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
|
||||
_DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL)
|
||||
|
||||
#define EXPORT_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
|
||||
_EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "")
|
||||
#define EXPORT_GPL_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
|
||||
_EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "_gpl")
|
||||
|
||||
/* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
|
||||
#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
|
||||
const struct dev_pm_ops __maybe_unused name = { \
|
||||
SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -378,20 +413,10 @@ static const struct dev_pm_ops name = { \
|
||||
* suspend and "early" resume callback pointers, .suspend_late() and
|
||||
* .resume_early(), to the same routines as .runtime_suspend() and
|
||||
* .runtime_resume(), respectively (and analogously for hibernation).
|
||||
*
|
||||
* Deprecated. You most likely don't want this macro. Use
|
||||
* DEFINE_RUNTIME_DEV_PM_OPS() instead.
|
||||
*/
|
||||
#define DEFINE_UNIVERSAL_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
|
||||
static const struct dev_pm_ops name = { \
|
||||
SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
|
||||
RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
|
||||
}
|
||||
|
||||
/* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
|
||||
#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
|
||||
const struct dev_pm_ops __maybe_unused name = { \
|
||||
SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
|
||||
}
|
||||
|
||||
/* Deprecated. Use DEFINE_UNIVERSAL_DEV_PM_OPS() instead. */
|
||||
#define UNIVERSAL_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
|
||||
const struct dev_pm_ops __maybe_unused name = { \
|
||||
SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
|
||||
|
||||
@@ -22,6 +22,30 @@
|
||||
usage_count */
|
||||
#define RPM_AUTO 0x08 /* Use autosuspend_delay */
|
||||
|
||||
/*
|
||||
* Use this for defining a set of PM operations to be used in all situations
|
||||
* (system suspend, hibernation or runtime PM).
|
||||
*
|
||||
* Note that the behaviour differs from the deprecated UNIVERSAL_DEV_PM_OPS()
|
||||
* macro, which uses the provided callbacks for both runtime PM and system
|
||||
* sleep, while DEFINE_RUNTIME_DEV_PM_OPS() uses pm_runtime_force_suspend()
|
||||
* and pm_runtime_force_resume() for its system sleep callbacks.
|
||||
*
|
||||
* If the underlying dev_pm_ops struct symbol has to be exported, use
|
||||
* EXPORT_RUNTIME_DEV_PM_OPS() or EXPORT_GPL_RUNTIME_DEV_PM_OPS() instead.
|
||||
*/
|
||||
#define DEFINE_RUNTIME_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
|
||||
_DEFINE_DEV_PM_OPS(name, pm_runtime_force_suspend, \
|
||||
pm_runtime_force_resume, suspend_fn, \
|
||||
resume_fn, idle_fn)
|
||||
|
||||
#define EXPORT_RUNTIME_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
|
||||
_EXPORT_DEV_PM_OPS(name, pm_runtime_force_suspend, pm_runtime_force_resume, \
|
||||
suspend_fn, resume_fn, idle_fn, "")
|
||||
#define EXPORT_GPL_RUNTIME_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
|
||||
_EXPORT_DEV_PM_OPS(name, pm_runtime_force_suspend, pm_runtime_force_resume, \
|
||||
suspend_fn, resume_fn, idle_fn, "_gpl")
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
extern struct workqueue_struct *pm_wq;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user