Hi,
This patchset updates the DRM drivers to use the new set of PM-related
macros introduced recently.
The point of these macros is to allow the PM functions to be
automatically dropped by the compiler when CONFIG_PM or CONFIG_SUSPEND
is disabled, without having to use #ifdef guards.
This has the advantages of always compiling these functions in,
independently of any Kconfig option. Thanks to that, bugs and other
regressions are subsequently easier to catch.
Note that some drivers (etnaviv, tegra, vc4) currently don't have any
.suspend/.resume callbacks, but do provide
.runtime_suspend/.runtime_resume callbacks. These drivers should most
likely use DEFINE_RUNTIME_DEV_PM_OPS(), which provides .suspend/.resume
callbacks as well (pm_runtime_force_suspend / pm_runtime_force_resume
respectively). I did not do that, because that would be a functional
change and the callbacks being missing may actually be on purpose.
Checkpatch complains about patch [11/26], as I replaced a
"#if defined(IS_NOT_BROKEN)" to a "if (IS_ENABLED(IS_NOT_BROKEN))".
I don't really know how to make it better so I left it like that.
Compile-tested with allyesconfig, with the following cases:
- CONFIG_PM=y CONFIG_PM_SLEEP=y
- CONFIG_PM=y CONFIG_PM_SLEEP=n
- CONFIG_PM=n
Cheers,
-Paul
Paul Cercueil (26):
drm: modeset-helper: Export dev_pm_ops for simple drivers
drm: bochs: Use the dev_pm_ops provided by modeset helper
drm: imx: Use the dev_pm_ops provided by modeset helper
drm: rockchip: Use the dev_pm_ops provided by modeset helper
drm: tegra: Use the dev_pm_ops provided by modeset helper
drm: sun4i: Use the dev_pm_ops provided by modeset helper
drm: msxfb: Use the dev_pm_ops provided by modeset helper
drm: atmel-hlcdc: Remove #ifdef guards for PM related functions
drm: exynos: Remove #ifdef guards for PM related functions
drm: imx/dcss: Remove #ifdef guards for PM related functions
drm: bridge/dw-hdmi: Remove #ifdef guards for PM related functions
drm: etnaviv: Remove #ifdef guards for PM related functions
drm: fsl-dcu: Remove #ifdef guards for PM related functions
drm: mediatek: Remove #ifdef guards for PM related functions
drm: omap: Remove #ifdef guards for PM related functions
drm: panfrost: Remove #ifdef guards for PM related functions
drm: rcar-du: Remove #ifdef guards for PM related functions
drm: rockchip: Remove #ifdef guards for PM related functions
drm: shmobile: Remove #ifdef guards for PM related functions
drm: tegra: Remove #ifdef guards for PM related functions
drm: tilcdc: Remove #ifdef guards for PM related functions
drm: vboxvideo: Remove #ifdef guards for PM related functions
drm: vc4: Remove #ifdef guards for PM related functions
drm: gm12u320: Remove #ifdef guards for PM related functions
drm: tidss: Remove #ifdef guards for PM related functions
drm/i915/gt: Remove #ifdef guards for PM related functions
drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 9 +++---
.../drm/bridge/synopsys/dw-hdmi-ahb-audio.c | 17 ++++------
drivers/gpu/drm/drm_modeset_helper.c | 32 +++++++++++++++++++
drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 30 +++++++----------
drivers/gpu/drm/exynos/exynos5433_drm_decon.c | 13 +++-----
drivers/gpu/drm/exynos/exynos7_drm_decon.c | 12 ++-----
drivers/gpu/drm/exynos/exynos_dp.c | 11 ++-----
drivers/gpu/drm/exynos/exynos_drm_fimc.c | 11 ++-----
drivers/gpu/drm/exynos/exynos_drm_fimd.c | 11 ++-----
drivers/gpu/drm/exynos/exynos_drm_g2d.c | 10 ++----
drivers/gpu/drm/exynos/exynos_drm_mic.c | 11 ++-----
drivers/gpu/drm/exynos/exynos_drm_rotator.c | 12 ++-----
drivers/gpu/drm/exynos/exynos_drm_scaler.c | 12 ++-----
drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 9 ++----
drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c | 8 +----
drivers/gpu/drm/imx/dcss/dcss-dev.c | 17 +++++-----
drivers/gpu/drm/imx/dcss/dcss-dev.h | 7 ++--
drivers/gpu/drm/imx/dcss/dcss-drv.c | 8 +----
drivers/gpu/drm/imx/imx-drm-core.c | 21 ++----------
drivers/gpu/drm/mediatek/mtk_dp.c | 6 ++--
drivers/gpu/drm/mediatek/mtk_hdmi.c | 9 +++---
drivers/gpu/drm/mxsfb/mxsfb_drv.c | 22 +------------
drivers/gpu/drm/omapdrm/omap_dmm_tiler.c | 6 ++--
drivers/gpu/drm/omapdrm/omap_drv.c | 7 ++--
drivers/gpu/drm/omapdrm/omap_gem.c | 5 +--
drivers/gpu/drm/omapdrm/omap_gem.h | 2 --
drivers/gpu/drm/panfrost/panfrost_device.c | 10 +++---
drivers/gpu/drm/panfrost/panfrost_device.h | 4 +--
drivers/gpu/drm/panfrost/panfrost_drv.c | 7 +---
drivers/gpu/drm/rcar-du/rcar_du_drv.c | 9 ++----
.../gpu/drm/rockchip/analogix_dp-rockchip.c | 6 +---
drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 23 +------------
drivers/gpu/drm/shmobile/shmob_drm_drv.c | 9 ++----
drivers/gpu/drm/sun4i/sun4i_drv.c | 24 ++------------
drivers/gpu/drm/tegra/dpaux.c | 6 ++--
drivers/gpu/drm/tegra/drm.c | 21 +-----------
drivers/gpu/drm/tidss/tidss_drv.c | 29 ++++++++---------
drivers/gpu/drm/tilcdc/tilcdc_drv.c | 9 ++----
drivers/gpu/drm/tiny/bochs.c | 27 ++--------------
drivers/gpu/drm/tiny/gm12u320.c | 15 ++++-----
drivers/gpu/drm/vboxvideo/vbox_drv.c | 6 +---
drivers/gpu/drm/vc4/vc4_v3d.c | 6 ++--
include/drm/drm_modeset_helper.h | 4 +++
43 files changed, 171 insertions(+), 362 deletions(-)
--
2.35.1
Use the EXPORT_GPL_DEV_PM_OPS() and pm_ptr() macros to handle the PM
callbacks.
These macros allow the PM functions to be automatically dropped by the
compiler when CONFIG_PM is disabled, without having to use #ifdef
guards.
This has the advantage of always compiling these functions in,
independently of any Kconfig option. Thanks to that, bugs and other
regressions are subsequently easier to catch.
Signed-off-by: Paul Cercueil <[email protected]>
---
Cc: Laurentiu Palcu <[email protected]>
Cc: Lucas Stach <[email protected]>
Cc: Philipp Zabel <[email protected]>
Cc: Shawn Guo <[email protected]>
Cc: Sascha Hauer <[email protected]>
Cc: Pengutronix Kernel Team <[email protected]>
Cc: Fabio Estevam <[email protected]>
Cc: NXP Linux Team <[email protected]>
Cc: [email protected]
---
drivers/gpu/drm/imx/dcss/dcss-dev.c | 17 +++++++++--------
drivers/gpu/drm/imx/dcss/dcss-dev.h | 7 +++----
drivers/gpu/drm/imx/dcss/dcss-drv.c | 8 +-------
3 files changed, 13 insertions(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/imx/dcss/dcss-dev.c b/drivers/gpu/drm/imx/dcss/dcss-dev.c
index 3f5750cc2673..66d9233ffb98 100644
--- a/drivers/gpu/drm/imx/dcss/dcss-dev.c
+++ b/drivers/gpu/drm/imx/dcss/dcss-dev.c
@@ -249,8 +249,7 @@ void dcss_dev_destroy(struct dcss_dev *dcss)
kfree(dcss);
}
-#ifdef CONFIG_PM_SLEEP
-int dcss_dev_suspend(struct device *dev)
+static int dcss_dev_suspend(struct device *dev)
{
struct dcss_dev *dcss = dcss_drv_dev_to_dcss(dev);
struct drm_device *ddev = dcss_drv_dev_to_drm(dev);
@@ -273,7 +272,7 @@ int dcss_dev_suspend(struct device *dev)
return 0;
}
-int dcss_dev_resume(struct device *dev)
+static int dcss_dev_resume(struct device *dev)
{
struct dcss_dev *dcss = dcss_drv_dev_to_dcss(dev);
struct drm_device *ddev = dcss_drv_dev_to_drm(dev);
@@ -296,10 +295,8 @@ int dcss_dev_resume(struct device *dev)
return 0;
}
-#endif /* CONFIG_PM_SLEEP */
-#ifdef CONFIG_PM
-int dcss_dev_runtime_suspend(struct device *dev)
+static int dcss_dev_runtime_suspend(struct device *dev)
{
struct dcss_dev *dcss = dcss_drv_dev_to_dcss(dev);
int ret;
@@ -313,7 +310,7 @@ int dcss_dev_runtime_suspend(struct device *dev)
return 0;
}
-int dcss_dev_runtime_resume(struct device *dev)
+static int dcss_dev_runtime_resume(struct device *dev)
{
struct dcss_dev *dcss = dcss_drv_dev_to_dcss(dev);
@@ -325,4 +322,8 @@ int dcss_dev_runtime_resume(struct device *dev)
return 0;
}
-#endif /* CONFIG_PM */
+
+EXPORT_GPL_DEV_PM_OPS(dcss_dev_pm_ops) = {
+ RUNTIME_PM_OPS(dcss_dev_runtime_suspend, dcss_dev_runtime_resume, NULL)
+ SYSTEM_SLEEP_PM_OPS(dcss_dev_suspend, dcss_dev_resume)
+};
diff --git a/drivers/gpu/drm/imx/dcss/dcss-dev.h b/drivers/gpu/drm/imx/dcss/dcss-dev.h
index 1e582270c6ea..f27b87c09599 100644
--- a/drivers/gpu/drm/imx/dcss/dcss-dev.h
+++ b/drivers/gpu/drm/imx/dcss/dcss-dev.h
@@ -9,6 +9,7 @@
#include <drm/drm_fourcc.h>
#include <drm/drm_plane.h>
#include <linux/io.h>
+#include <linux/pm.h>
#include <video/videomode.h>
#define SET 0x04
@@ -95,13 +96,11 @@ struct dcss_dev *dcss_drv_dev_to_dcss(struct device *dev);
struct drm_device *dcss_drv_dev_to_drm(struct device *dev);
struct dcss_dev *dcss_dev_create(struct device *dev, bool hdmi_output);
void dcss_dev_destroy(struct dcss_dev *dcss);
-int dcss_dev_runtime_suspend(struct device *dev);
-int dcss_dev_runtime_resume(struct device *dev);
-int dcss_dev_suspend(struct device *dev);
-int dcss_dev_resume(struct device *dev);
void dcss_enable_dtg_and_ss(struct dcss_dev *dcss);
void dcss_disable_dtg_and_ss(struct dcss_dev *dcss);
+extern const struct dev_pm_ops dcss_dev_pm_ops;
+
/* BLKCTL */
int dcss_blkctl_init(struct dcss_dev *dcss, unsigned long blkctl_base);
void dcss_blkctl_cfg(struct dcss_blkctl *blkctl);
diff --git a/drivers/gpu/drm/imx/dcss/dcss-drv.c b/drivers/gpu/drm/imx/dcss/dcss-drv.c
index 1c70f70247f6..431510bd811b 100644
--- a/drivers/gpu/drm/imx/dcss/dcss-drv.c
+++ b/drivers/gpu/drm/imx/dcss/dcss-drv.c
@@ -117,19 +117,13 @@ static const struct of_device_id dcss_of_match[] = {
MODULE_DEVICE_TABLE(of, dcss_of_match);
-static const struct dev_pm_ops dcss_dev_pm = {
- SET_SYSTEM_SLEEP_PM_OPS(dcss_dev_suspend, dcss_dev_resume)
- SET_RUNTIME_PM_OPS(dcss_dev_runtime_suspend,
- dcss_dev_runtime_resume, NULL)
-};
-
static struct platform_driver dcss_platform_driver = {
.probe = dcss_drv_platform_probe,
.remove = dcss_drv_platform_remove,
.driver = {
.name = "imx-dcss",
.of_match_table = dcss_of_match,
- .pm = &dcss_dev_pm,
+ .pm = pm_ptr(&dcss_dev_pm_ops),
},
};
--
2.35.1
Use the drm_mode_config_pm_ops structure exported by
drm_modeset_helper.c, which provides the exact same PM callbacks.
Signed-off-by: Paul Cercueil <[email protected]>
---
Cc: Maxime Ripard <[email protected]>
Cc: Chen-Yu Tsai <[email protected]>
Cc: Jernej Skrabec <[email protected]>
Cc: Samuel Holland <[email protected]>
Cc: [email protected]
Cc: [email protected]
---
drivers/gpu/drm/sun4i/sun4i_drv.c | 24 ++----------------------
1 file changed, 2 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
index d06ffd99d86e..8147b2abe5ba 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
@@ -13,6 +13,7 @@
#include <linux/of_graph.h>
#include <linux/of_reserved_mem.h>
#include <linux/platform_device.h>
+#include <linux/pm.h>
#include <drm/drm_aperture.h>
#include <drm/drm_atomic_helper.h>
@@ -339,27 +340,6 @@ static int sun4i_drv_add_endpoints(struct device *dev,
return count;
}
-#ifdef CONFIG_PM_SLEEP
-static int sun4i_drv_drm_sys_suspend(struct device *dev)
-{
- struct drm_device *drm = dev_get_drvdata(dev);
-
- return drm_mode_config_helper_suspend(drm);
-}
-
-static int sun4i_drv_drm_sys_resume(struct device *dev)
-{
- struct drm_device *drm = dev_get_drvdata(dev);
-
- return drm_mode_config_helper_resume(drm);
-}
-#endif
-
-static const struct dev_pm_ops sun4i_drv_drm_pm_ops = {
- SET_SYSTEM_SLEEP_PM_OPS(sun4i_drv_drm_sys_suspend,
- sun4i_drv_drm_sys_resume)
-};
-
static int sun4i_drv_probe(struct platform_device *pdev)
{
struct component_match *match = NULL;
@@ -440,7 +420,7 @@ static struct platform_driver sun4i_drv_platform_driver = {
.driver = {
.name = "sun4i-drm",
.of_match_table = sun4i_drv_of_table,
- .pm = &sun4i_drv_drm_pm_ops,
+ .pm = pm_sleep_ptr(&drm_mode_config_pm_ops),
},
};
drm_module_platform_driver(sun4i_drv_platform_driver);
--
2.35.1
Use the DEFINE_RUNTIME_DEV_PM_OPS(), SYSTEM_SLEEP_PM_OPS(),
RUNTIME_PM_OPS() and pm_ptr() macros to handle the runtime and suspend
PM callbacks.
These macros allow the suspend and resume functions to be automatically
dropped by the compiler when CONFIG_PM is disabled, without having
to use #ifdef guards.
This has the advantage of always compiling these functions in,
independently of any Kconfig option. Thanks to that, bugs and other
regressions are subsequently easier to catch.
Signed-off-by: Paul Cercueil <[email protected]>
---
Cc: Inki Dae <[email protected]>
Cc: Seung-Woo Kim <[email protected]>
Cc: Kyungmin Park <[email protected]>
Cc: Krzysztof Kozlowski <[email protected]>
Cc: Alim Akhtar <[email protected]>
Cc: Jingoo Han <[email protected]>
Cc: [email protected]
Cc: [email protected]
---
drivers/gpu/drm/exynos/exynos5433_drm_decon.c | 13 ++++---------
drivers/gpu/drm/exynos/exynos7_drm_decon.c | 12 +++---------
drivers/gpu/drm/exynos/exynos_dp.c | 11 +++--------
drivers/gpu/drm/exynos/exynos_drm_fimc.c | 11 +++--------
drivers/gpu/drm/exynos/exynos_drm_fimd.c | 11 +++--------
drivers/gpu/drm/exynos/exynos_drm_g2d.c | 10 +++-------
drivers/gpu/drm/exynos/exynos_drm_mic.c | 11 +++--------
drivers/gpu/drm/exynos/exynos_drm_rotator.c | 12 +++---------
drivers/gpu/drm/exynos/exynos_drm_scaler.c | 12 +++---------
9 files changed, 28 insertions(+), 75 deletions(-)
diff --git a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
index 8155d7e650f1..2867b39fa35e 100644
--- a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
+++ b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
@@ -710,7 +710,6 @@ static irqreturn_t decon_irq_handler(int irq, void *dev_id)
return IRQ_HANDLED;
}
-#ifdef CONFIG_PM
static int exynos5433_decon_suspend(struct device *dev)
{
struct decon_context *ctx = dev_get_drvdata(dev);
@@ -741,14 +740,10 @@ static int exynos5433_decon_resume(struct device *dev)
return ret;
}
-#endif
-static const struct dev_pm_ops exynos5433_decon_pm_ops = {
- SET_RUNTIME_PM_OPS(exynos5433_decon_suspend, exynos5433_decon_resume,
- NULL)
- SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
- pm_runtime_force_resume)
-};
+static DEFINE_RUNTIME_DEV_PM_OPS(exynos5433_decon_pm_ops,
+ exynos5433_decon_suspend,
+ exynos5433_decon_resume, NULL);
static const struct of_device_id exynos5433_decon_driver_dt_match[] = {
{
@@ -881,7 +876,7 @@ struct platform_driver exynos5433_decon_driver = {
.remove = exynos5433_decon_remove,
.driver = {
.name = "exynos5433-decon",
- .pm = &exynos5433_decon_pm_ops,
+ .pm = pm_ptr(&exynos5433_decon_pm_ops),
.of_match_table = exynos5433_decon_driver_dt_match,
},
};
diff --git a/drivers/gpu/drm/exynos/exynos7_drm_decon.c b/drivers/gpu/drm/exynos/exynos7_drm_decon.c
index 7080cf7952ec..3126f735dedc 100644
--- a/drivers/gpu/drm/exynos/exynos7_drm_decon.c
+++ b/drivers/gpu/drm/exynos/exynos7_drm_decon.c
@@ -779,7 +779,6 @@ static int decon_remove(struct platform_device *pdev)
return 0;
}
-#ifdef CONFIG_PM
static int exynos7_decon_suspend(struct device *dev)
{
struct decon_context *ctx = dev_get_drvdata(dev);
@@ -836,21 +835,16 @@ static int exynos7_decon_resume(struct device *dev)
err_pclk_enable:
return ret;
}
-#endif
-static const struct dev_pm_ops exynos7_decon_pm_ops = {
- SET_RUNTIME_PM_OPS(exynos7_decon_suspend, exynos7_decon_resume,
- NULL)
- SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
- pm_runtime_force_resume)
-};
+static DEFINE_RUNTIME_DEV_PM_OPS(exynos7_decon_pm_ops, exynos7_decon_suspend,
+ exynos7_decon_resume, NULL);
struct platform_driver decon_driver = {
.probe = decon_probe,
.remove = decon_remove,
.driver = {
.name = "exynos-decon",
- .pm = &exynos7_decon_pm_ops,
+ .pm = pm_ptr(&exynos7_decon_pm_ops),
.of_match_table = decon_driver_dt_match,
},
};
diff --git a/drivers/gpu/drm/exynos/exynos_dp.c b/drivers/gpu/drm/exynos/exynos_dp.c
index 4e3d3d5f6866..3404ec1367fb 100644
--- a/drivers/gpu/drm/exynos/exynos_dp.c
+++ b/drivers/gpu/drm/exynos/exynos_dp.c
@@ -260,7 +260,6 @@ static int exynos_dp_remove(struct platform_device *pdev)
return 0;
}
-#ifdef CONFIG_PM
static int exynos_dp_suspend(struct device *dev)
{
struct exynos_dp_device *dp = dev_get_drvdata(dev);
@@ -274,13 +273,9 @@ static int exynos_dp_resume(struct device *dev)
return analogix_dp_resume(dp->adp);
}
-#endif
-static const struct dev_pm_ops exynos_dp_pm_ops = {
- SET_RUNTIME_PM_OPS(exynos_dp_suspend, exynos_dp_resume, NULL)
- SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
- pm_runtime_force_resume)
-};
+static DEFINE_RUNTIME_DEV_PM_OPS(exynos_dp_pm_ops, exynos_dp_suspend,
+ exynos_dp_resume, NULL);
static const struct of_device_id exynos_dp_match[] = {
{ .compatible = "samsung,exynos5-dp" },
@@ -294,7 +289,7 @@ struct platform_driver dp_driver = {
.driver = {
.name = "exynos-dp",
.owner = THIS_MODULE,
- .pm = &exynos_dp_pm_ops,
+ .pm = pm_ptr(&exynos_dp_pm_ops),
.of_match_table = exynos_dp_match,
},
};
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimc.c b/drivers/gpu/drm/exynos/exynos_drm_fimc.c
index 0ee32e4b1e43..8de2714599fc 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimc.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimc.c
@@ -1381,7 +1381,6 @@ static int fimc_remove(struct platform_device *pdev)
return 0;
}
-#ifdef CONFIG_PM
static int fimc_runtime_suspend(struct device *dev)
{
struct fimc_context *ctx = get_fimc_context(dev);
@@ -1398,13 +1397,9 @@ static int fimc_runtime_resume(struct device *dev)
DRM_DEV_DEBUG_KMS(dev, "id[%d]\n", ctx->id);
return clk_prepare_enable(ctx->clocks[FIMC_CLK_GATE]);
}
-#endif
-static const struct dev_pm_ops fimc_pm_ops = {
- SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
- pm_runtime_force_resume)
- SET_RUNTIME_PM_OPS(fimc_runtime_suspend, fimc_runtime_resume, NULL)
-};
+static DEFINE_RUNTIME_DEV_PM_OPS(fimc_pm_ops, fimc_runtime_suspend,
+ fimc_runtime_resume, NULL);
static const struct of_device_id fimc_of_match[] = {
{ .compatible = "samsung,exynos4210-fimc" },
@@ -1420,6 +1415,6 @@ struct platform_driver fimc_driver = {
.of_match_table = fimc_of_match,
.name = "exynos-drm-fimc",
.owner = THIS_MODULE,
- .pm = &fimc_pm_ops,
+ .pm = pm_ptr(&fimc_pm_ops),
},
};
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
index ae6636e6658e..7f4a0be03dd1 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
@@ -1287,7 +1287,6 @@ static int fimd_remove(struct platform_device *pdev)
return 0;
}
-#ifdef CONFIG_PM
static int exynos_fimd_suspend(struct device *dev)
{
struct fimd_context *ctx = dev_get_drvdata(dev);
@@ -1321,13 +1320,9 @@ static int exynos_fimd_resume(struct device *dev)
return 0;
}
-#endif
-static const struct dev_pm_ops exynos_fimd_pm_ops = {
- SET_RUNTIME_PM_OPS(exynos_fimd_suspend, exynos_fimd_resume, NULL)
- SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
- pm_runtime_force_resume)
-};
+static DEFINE_RUNTIME_DEV_PM_OPS(exynos_fimd_pm_ops, exynos_fimd_suspend,
+ exynos_fimd_resume, NULL);
struct platform_driver fimd_driver = {
.probe = fimd_probe,
@@ -1335,7 +1330,7 @@ struct platform_driver fimd_driver = {
.driver = {
.name = "exynos4-fb",
.owner = THIS_MODULE,
- .pm = &exynos_fimd_pm_ops,
+ .pm = pm_ptr(&exynos_fimd_pm_ops),
.of_match_table = fimd_driver_dt_match,
},
};
diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
index 471fd6c8135f..7711cb67b807 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
@@ -1549,7 +1549,6 @@ static int g2d_remove(struct platform_device *pdev)
return 0;
}
-#ifdef CONFIG_PM_SLEEP
static int g2d_suspend(struct device *dev)
{
struct g2d_data *g2d = dev_get_drvdata(dev);
@@ -1574,9 +1573,7 @@ static int g2d_resume(struct device *dev)
return 0;
}
-#endif
-#ifdef CONFIG_PM
static int g2d_runtime_suspend(struct device *dev)
{
struct g2d_data *g2d = dev_get_drvdata(dev);
@@ -1597,11 +1594,10 @@ static int g2d_runtime_resume(struct device *dev)
return ret;
}
-#endif
static const struct dev_pm_ops g2d_pm_ops = {
- SET_SYSTEM_SLEEP_PM_OPS(g2d_suspend, g2d_resume)
- SET_RUNTIME_PM_OPS(g2d_runtime_suspend, g2d_runtime_resume, NULL)
+ SYSTEM_SLEEP_PM_OPS(g2d_suspend, g2d_resume)
+ RUNTIME_PM_OPS(g2d_runtime_suspend, g2d_runtime_resume, NULL)
};
static const struct of_device_id exynos_g2d_match[] = {
@@ -1617,7 +1613,7 @@ struct platform_driver g2d_driver = {
.driver = {
.name = "exynos-drm-g2d",
.owner = THIS_MODULE,
- .pm = &g2d_pm_ops,
+ .pm = pm_ptr(&g2d_pm_ops),
.of_match_table = exynos_g2d_match,
},
};
diff --git a/drivers/gpu/drm/exynos/exynos_drm_mic.c b/drivers/gpu/drm/exynos/exynos_drm_mic.c
index 09ce28ee08d9..17bab5b1663f 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_mic.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_mic.c
@@ -340,7 +340,6 @@ static const struct component_ops exynos_mic_component_ops = {
.unbind = exynos_mic_unbind,
};
-#ifdef CONFIG_PM
static int exynos_mic_suspend(struct device *dev)
{
struct exynos_mic *mic = dev_get_drvdata(dev);
@@ -369,13 +368,9 @@ static int exynos_mic_resume(struct device *dev)
}
return 0;
}
-#endif
-static const struct dev_pm_ops exynos_mic_pm_ops = {
- SET_RUNTIME_PM_OPS(exynos_mic_suspend, exynos_mic_resume, NULL)
- SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
- pm_runtime_force_resume)
-};
+static DEFINE_RUNTIME_DEV_PM_OPS(exynos_mic_pm_ops, exynos_mic_suspend,
+ exynos_mic_resume, NULL);
static int exynos_mic_probe(struct platform_device *pdev)
{
@@ -470,7 +465,7 @@ struct platform_driver mic_driver = {
.remove = exynos_mic_remove,
.driver = {
.name = "exynos-mic",
- .pm = &exynos_mic_pm_ops,
+ .pm = pm_ptr(&exynos_mic_pm_ops),
.owner = THIS_MODULE,
.of_match_table = exynos_mic_of_match,
},
diff --git a/drivers/gpu/drm/exynos/exynos_drm_rotator.c b/drivers/gpu/drm/exynos/exynos_drm_rotator.c
index dec7df35baa9..8706f377c349 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_rotator.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_rotator.c
@@ -340,7 +340,6 @@ static int rotator_remove(struct platform_device *pdev)
return 0;
}
-#ifdef CONFIG_PM
static int rotator_runtime_suspend(struct device *dev)
{
struct rot_context *rot = dev_get_drvdata(dev);
@@ -355,7 +354,6 @@ static int rotator_runtime_resume(struct device *dev)
return clk_prepare_enable(rot->clock);
}
-#endif
static const struct drm_exynos_ipp_limit rotator_s5pv210_rbg888_limits[] = {
{ IPP_SIZE_LIMIT(BUFFER, .h = { 8, SZ_16K }, .v = { 8, SZ_16K }) },
@@ -450,12 +448,8 @@ static const struct of_device_id exynos_rotator_match[] = {
};
MODULE_DEVICE_TABLE(of, exynos_rotator_match);
-static const struct dev_pm_ops rotator_pm_ops = {
- SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
- pm_runtime_force_resume)
- SET_RUNTIME_PM_OPS(rotator_runtime_suspend, rotator_runtime_resume,
- NULL)
-};
+static DEFINE_RUNTIME_DEV_PM_OPS(rotator_pm_ops, rotator_runtime_suspend,
+ rotator_runtime_resume, NULL);
struct platform_driver rotator_driver = {
.probe = rotator_probe,
@@ -463,7 +457,7 @@ struct platform_driver rotator_driver = {
.driver = {
.name = "exynos-rotator",
.owner = THIS_MODULE,
- .pm = &rotator_pm_ops,
+ .pm = pm_ptr(&rotator_pm_ops),
.of_match_table = exynos_rotator_match,
},
};
diff --git a/drivers/gpu/drm/exynos/exynos_drm_scaler.c b/drivers/gpu/drm/exynos/exynos_drm_scaler.c
index 3c049fb658a3..20608e9780ce 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_scaler.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_scaler.c
@@ -550,8 +550,6 @@ static int scaler_remove(struct platform_device *pdev)
return 0;
}
-#ifdef CONFIG_PM
-
static int clk_disable_unprepare_wrapper(struct clk *clk)
{
clk_disable_unprepare(clk);
@@ -584,13 +582,9 @@ static int scaler_runtime_resume(struct device *dev)
return scaler_clk_ctrl(scaler, true);
}
-#endif
-static const struct dev_pm_ops scaler_pm_ops = {
- SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
- pm_runtime_force_resume)
- SET_RUNTIME_PM_OPS(scaler_runtime_suspend, scaler_runtime_resume, NULL)
-};
+static DEFINE_RUNTIME_DEV_PM_OPS(scaler_pm_ops, scaler_runtime_suspend,
+ scaler_runtime_resume, NULL);
static const struct drm_exynos_ipp_limit scaler_5420_two_pixel_hv_limits[] = {
{ IPP_SIZE_LIMIT(BUFFER, .h = { 16, SZ_8K }, .v = { 16, SZ_8K }) },
@@ -731,7 +725,7 @@ struct platform_driver scaler_driver = {
.driver = {
.name = "exynos-scaler",
.owner = THIS_MODULE,
- .pm = &scaler_pm_ops,
+ .pm = pm_ptr(&scaler_pm_ops),
.of_match_table = exynos_scaler_match,
},
};
--
2.35.1
Hi Paul,
On Mon, Nov 07, 2022 at 05:50:50PM +0000, Paul Cercueil wrote:
> Use the EXPORT_GPL_DEV_PM_OPS() and pm_ptr() macros to handle the PM
> callbacks.
>
> These macros allow the PM functions to be automatically dropped by the
> compiler when CONFIG_PM is disabled, without having to use #ifdef
> guards.
>
> This has the advantage of always compiling these functions in,
> independently of any Kconfig option. Thanks to that, bugs and other
> regressions are subsequently easier to catch.
>
> Signed-off-by: Paul Cercueil <[email protected]>
Reviewed-by: Laurentiu Palcu <[email protected]>
Tested-by: Laurentiu Palcu <[email protected]>
Thanks,
Laurentiu
> ---
> Cc: Laurentiu Palcu <[email protected]>
> Cc: Lucas Stach <[email protected]>
> Cc: Philipp Zabel <[email protected]>
> Cc: Shawn Guo <[email protected]>
> Cc: Sascha Hauer <[email protected]>
> Cc: Pengutronix Kernel Team <[email protected]>
> Cc: Fabio Estevam <[email protected]>
> Cc: NXP Linux Team <[email protected]>
> Cc: [email protected]
> ---
> drivers/gpu/drm/imx/dcss/dcss-dev.c | 17 +++++++++--------
> drivers/gpu/drm/imx/dcss/dcss-dev.h | 7 +++----
> drivers/gpu/drm/imx/dcss/dcss-drv.c | 8 +-------
> 3 files changed, 13 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/gpu/drm/imx/dcss/dcss-dev.c b/drivers/gpu/drm/imx/dcss/dcss-dev.c
> index 3f5750cc2673..66d9233ffb98 100644
> --- a/drivers/gpu/drm/imx/dcss/dcss-dev.c
> +++ b/drivers/gpu/drm/imx/dcss/dcss-dev.c
> @@ -249,8 +249,7 @@ void dcss_dev_destroy(struct dcss_dev *dcss)
> kfree(dcss);
> }
>
> -#ifdef CONFIG_PM_SLEEP
> -int dcss_dev_suspend(struct device *dev)
> +static int dcss_dev_suspend(struct device *dev)
> {
> struct dcss_dev *dcss = dcss_drv_dev_to_dcss(dev);
> struct drm_device *ddev = dcss_drv_dev_to_drm(dev);
> @@ -273,7 +272,7 @@ int dcss_dev_suspend(struct device *dev)
> return 0;
> }
>
> -int dcss_dev_resume(struct device *dev)
> +static int dcss_dev_resume(struct device *dev)
> {
> struct dcss_dev *dcss = dcss_drv_dev_to_dcss(dev);
> struct drm_device *ddev = dcss_drv_dev_to_drm(dev);
> @@ -296,10 +295,8 @@ int dcss_dev_resume(struct device *dev)
>
> return 0;
> }
> -#endif /* CONFIG_PM_SLEEP */
>
> -#ifdef CONFIG_PM
> -int dcss_dev_runtime_suspend(struct device *dev)
> +static int dcss_dev_runtime_suspend(struct device *dev)
> {
> struct dcss_dev *dcss = dcss_drv_dev_to_dcss(dev);
> int ret;
> @@ -313,7 +310,7 @@ int dcss_dev_runtime_suspend(struct device *dev)
> return 0;
> }
>
> -int dcss_dev_runtime_resume(struct device *dev)
> +static int dcss_dev_runtime_resume(struct device *dev)
> {
> struct dcss_dev *dcss = dcss_drv_dev_to_dcss(dev);
>
> @@ -325,4 +322,8 @@ int dcss_dev_runtime_resume(struct device *dev)
>
> return 0;
> }
> -#endif /* CONFIG_PM */
> +
> +EXPORT_GPL_DEV_PM_OPS(dcss_dev_pm_ops) = {
> + RUNTIME_PM_OPS(dcss_dev_runtime_suspend, dcss_dev_runtime_resume, NULL)
> + SYSTEM_SLEEP_PM_OPS(dcss_dev_suspend, dcss_dev_resume)
> +};
> diff --git a/drivers/gpu/drm/imx/dcss/dcss-dev.h b/drivers/gpu/drm/imx/dcss/dcss-dev.h
> index 1e582270c6ea..f27b87c09599 100644
> --- a/drivers/gpu/drm/imx/dcss/dcss-dev.h
> +++ b/drivers/gpu/drm/imx/dcss/dcss-dev.h
> @@ -9,6 +9,7 @@
> #include <drm/drm_fourcc.h>
> #include <drm/drm_plane.h>
> #include <linux/io.h>
> +#include <linux/pm.h>
> #include <video/videomode.h>
>
> #define SET 0x04
> @@ -95,13 +96,11 @@ struct dcss_dev *dcss_drv_dev_to_dcss(struct device *dev);
> struct drm_device *dcss_drv_dev_to_drm(struct device *dev);
> struct dcss_dev *dcss_dev_create(struct device *dev, bool hdmi_output);
> void dcss_dev_destroy(struct dcss_dev *dcss);
> -int dcss_dev_runtime_suspend(struct device *dev);
> -int dcss_dev_runtime_resume(struct device *dev);
> -int dcss_dev_suspend(struct device *dev);
> -int dcss_dev_resume(struct device *dev);
> void dcss_enable_dtg_and_ss(struct dcss_dev *dcss);
> void dcss_disable_dtg_and_ss(struct dcss_dev *dcss);
>
> +extern const struct dev_pm_ops dcss_dev_pm_ops;
> +
> /* BLKCTL */
> int dcss_blkctl_init(struct dcss_dev *dcss, unsigned long blkctl_base);
> void dcss_blkctl_cfg(struct dcss_blkctl *blkctl);
> diff --git a/drivers/gpu/drm/imx/dcss/dcss-drv.c b/drivers/gpu/drm/imx/dcss/dcss-drv.c
> index 1c70f70247f6..431510bd811b 100644
> --- a/drivers/gpu/drm/imx/dcss/dcss-drv.c
> +++ b/drivers/gpu/drm/imx/dcss/dcss-drv.c
> @@ -117,19 +117,13 @@ static const struct of_device_id dcss_of_match[] = {
>
> MODULE_DEVICE_TABLE(of, dcss_of_match);
>
> -static const struct dev_pm_ops dcss_dev_pm = {
> - SET_SYSTEM_SLEEP_PM_OPS(dcss_dev_suspend, dcss_dev_resume)
> - SET_RUNTIME_PM_OPS(dcss_dev_runtime_suspend,
> - dcss_dev_runtime_resume, NULL)
> -};
> -
> static struct platform_driver dcss_platform_driver = {
> .probe = dcss_drv_platform_probe,
> .remove = dcss_drv_platform_remove,
> .driver = {
> .name = "imx-dcss",
> .of_match_table = dcss_of_match,
> - .pm = &dcss_dev_pm,
> + .pm = pm_ptr(&dcss_dev_pm_ops),
> },
> };
>
> --
> 2.35.1
>
On 11/7/22 11:50, Paul Cercueil wrote:
> Use the drm_mode_config_pm_ops structure exported by
> drm_modeset_helper.c, which provides the exact same PM callbacks.
>
> Signed-off-by: Paul Cercueil <[email protected]>
> ---
> Cc: Maxime Ripard <[email protected]>
> Cc: Chen-Yu Tsai <[email protected]>
> Cc: Jernej Skrabec <[email protected]>
> Cc: Samuel Holland <[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> ---
> drivers/gpu/drm/sun4i/sun4i_drv.c | 24 ++----------------------
> 1 file changed, 2 insertions(+), 22 deletions(-)
Reviewed-by: Samuel Holland <[email protected]>
Hi,
2022년 11월 8일 (화) 오전 2:52, Paul Cercueil <[email protected]>님이 작성:
>
> Use the DEFINE_RUNTIME_DEV_PM_OPS(), SYSTEM_SLEEP_PM_OPS(),
> RUNTIME_PM_OPS() and pm_ptr() macros to handle the runtime and suspend
> PM callbacks.
>
> These macros allow the suspend and resume functions to be automatically
> dropped by the compiler when CONFIG_PM is disabled, without having
> to use #ifdef guards.
>
> This has the advantage of always compiling these functions in,
> independently of any Kconfig option. Thanks to that, bugs and other
> regressions are subsequently easier to catch.
>
> Signed-off-by: Paul Cercueil <[email protected]>
Acked-by : Inki Dae <[email protected]>
Thanks for cleanup,
Inki Dae
> ---
> Cc: Inki Dae <[email protected]>
> Cc: Seung-Woo Kim <[email protected]>
> Cc: Kyungmin Park <[email protected]>
> Cc: Krzysztof Kozlowski <[email protected]>
> Cc: Alim Akhtar <[email protected]>
> Cc: Jingoo Han <[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> ---
> drivers/gpu/drm/exynos/exynos5433_drm_decon.c | 13 ++++---------
> drivers/gpu/drm/exynos/exynos7_drm_decon.c | 12 +++---------
> drivers/gpu/drm/exynos/exynos_dp.c | 11 +++--------
> drivers/gpu/drm/exynos/exynos_drm_fimc.c | 11 +++--------
> drivers/gpu/drm/exynos/exynos_drm_fimd.c | 11 +++--------
> drivers/gpu/drm/exynos/exynos_drm_g2d.c | 10 +++-------
> drivers/gpu/drm/exynos/exynos_drm_mic.c | 11 +++--------
> drivers/gpu/drm/exynos/exynos_drm_rotator.c | 12 +++---------
> drivers/gpu/drm/exynos/exynos_drm_scaler.c | 12 +++---------
> 9 files changed, 28 insertions(+), 75 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
> index 8155d7e650f1..2867b39fa35e 100644
> --- a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
> +++ b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
> @@ -710,7 +710,6 @@ static irqreturn_t decon_irq_handler(int irq, void *dev_id)
> return IRQ_HANDLED;
> }
>
> -#ifdef CONFIG_PM
> static int exynos5433_decon_suspend(struct device *dev)
> {
> struct decon_context *ctx = dev_get_drvdata(dev);
> @@ -741,14 +740,10 @@ static int exynos5433_decon_resume(struct device *dev)
>
> return ret;
> }
> -#endif
>
> -static const struct dev_pm_ops exynos5433_decon_pm_ops = {
> - SET_RUNTIME_PM_OPS(exynos5433_decon_suspend, exynos5433_decon_resume,
> - NULL)
> - SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
> - pm_runtime_force_resume)
> -};
> +static DEFINE_RUNTIME_DEV_PM_OPS(exynos5433_decon_pm_ops,
> + exynos5433_decon_suspend,
> + exynos5433_decon_resume, NULL);
>
> static const struct of_device_id exynos5433_decon_driver_dt_match[] = {
> {
> @@ -881,7 +876,7 @@ struct platform_driver exynos5433_decon_driver = {
> .remove = exynos5433_decon_remove,
> .driver = {
> .name = "exynos5433-decon",
> - .pm = &exynos5433_decon_pm_ops,
> + .pm = pm_ptr(&exynos5433_decon_pm_ops),
> .of_match_table = exynos5433_decon_driver_dt_match,
> },
> };
> diff --git a/drivers/gpu/drm/exynos/exynos7_drm_decon.c b/drivers/gpu/drm/exynos/exynos7_drm_decon.c
> index 7080cf7952ec..3126f735dedc 100644
> --- a/drivers/gpu/drm/exynos/exynos7_drm_decon.c
> +++ b/drivers/gpu/drm/exynos/exynos7_drm_decon.c
> @@ -779,7 +779,6 @@ static int decon_remove(struct platform_device *pdev)
> return 0;
> }
>
> -#ifdef CONFIG_PM
> static int exynos7_decon_suspend(struct device *dev)
> {
> struct decon_context *ctx = dev_get_drvdata(dev);
> @@ -836,21 +835,16 @@ static int exynos7_decon_resume(struct device *dev)
> err_pclk_enable:
> return ret;
> }
> -#endif
>
> -static const struct dev_pm_ops exynos7_decon_pm_ops = {
> - SET_RUNTIME_PM_OPS(exynos7_decon_suspend, exynos7_decon_resume,
> - NULL)
> - SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
> - pm_runtime_force_resume)
> -};
> +static DEFINE_RUNTIME_DEV_PM_OPS(exynos7_decon_pm_ops, exynos7_decon_suspend,
> + exynos7_decon_resume, NULL);
>
> struct platform_driver decon_driver = {
> .probe = decon_probe,
> .remove = decon_remove,
> .driver = {
> .name = "exynos-decon",
> - .pm = &exynos7_decon_pm_ops,
> + .pm = pm_ptr(&exynos7_decon_pm_ops),
> .of_match_table = decon_driver_dt_match,
> },
> };
> diff --git a/drivers/gpu/drm/exynos/exynos_dp.c b/drivers/gpu/drm/exynos/exynos_dp.c
> index 4e3d3d5f6866..3404ec1367fb 100644
> --- a/drivers/gpu/drm/exynos/exynos_dp.c
> +++ b/drivers/gpu/drm/exynos/exynos_dp.c
> @@ -260,7 +260,6 @@ static int exynos_dp_remove(struct platform_device *pdev)
> return 0;
> }
>
> -#ifdef CONFIG_PM
> static int exynos_dp_suspend(struct device *dev)
> {
> struct exynos_dp_device *dp = dev_get_drvdata(dev);
> @@ -274,13 +273,9 @@ static int exynos_dp_resume(struct device *dev)
>
> return analogix_dp_resume(dp->adp);
> }
> -#endif
>
> -static const struct dev_pm_ops exynos_dp_pm_ops = {
> - SET_RUNTIME_PM_OPS(exynos_dp_suspend, exynos_dp_resume, NULL)
> - SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
> - pm_runtime_force_resume)
> -};
> +static DEFINE_RUNTIME_DEV_PM_OPS(exynos_dp_pm_ops, exynos_dp_suspend,
> + exynos_dp_resume, NULL);
>
> static const struct of_device_id exynos_dp_match[] = {
> { .compatible = "samsung,exynos5-dp" },
> @@ -294,7 +289,7 @@ struct platform_driver dp_driver = {
> .driver = {
> .name = "exynos-dp",
> .owner = THIS_MODULE,
> - .pm = &exynos_dp_pm_ops,
> + .pm = pm_ptr(&exynos_dp_pm_ops),
> .of_match_table = exynos_dp_match,
> },
> };
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimc.c b/drivers/gpu/drm/exynos/exynos_drm_fimc.c
> index 0ee32e4b1e43..8de2714599fc 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fimc.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimc.c
> @@ -1381,7 +1381,6 @@ static int fimc_remove(struct platform_device *pdev)
> return 0;
> }
>
> -#ifdef CONFIG_PM
> static int fimc_runtime_suspend(struct device *dev)
> {
> struct fimc_context *ctx = get_fimc_context(dev);
> @@ -1398,13 +1397,9 @@ static int fimc_runtime_resume(struct device *dev)
> DRM_DEV_DEBUG_KMS(dev, "id[%d]\n", ctx->id);
> return clk_prepare_enable(ctx->clocks[FIMC_CLK_GATE]);
> }
> -#endif
>
> -static const struct dev_pm_ops fimc_pm_ops = {
> - SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
> - pm_runtime_force_resume)
> - SET_RUNTIME_PM_OPS(fimc_runtime_suspend, fimc_runtime_resume, NULL)
> -};
> +static DEFINE_RUNTIME_DEV_PM_OPS(fimc_pm_ops, fimc_runtime_suspend,
> + fimc_runtime_resume, NULL);
>
> static const struct of_device_id fimc_of_match[] = {
> { .compatible = "samsung,exynos4210-fimc" },
> @@ -1420,6 +1415,6 @@ struct platform_driver fimc_driver = {
> .of_match_table = fimc_of_match,
> .name = "exynos-drm-fimc",
> .owner = THIS_MODULE,
> - .pm = &fimc_pm_ops,
> + .pm = pm_ptr(&fimc_pm_ops),
> },
> };
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> index ae6636e6658e..7f4a0be03dd1 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> @@ -1287,7 +1287,6 @@ static int fimd_remove(struct platform_device *pdev)
> return 0;
> }
>
> -#ifdef CONFIG_PM
> static int exynos_fimd_suspend(struct device *dev)
> {
> struct fimd_context *ctx = dev_get_drvdata(dev);
> @@ -1321,13 +1320,9 @@ static int exynos_fimd_resume(struct device *dev)
>
> return 0;
> }
> -#endif
>
> -static const struct dev_pm_ops exynos_fimd_pm_ops = {
> - SET_RUNTIME_PM_OPS(exynos_fimd_suspend, exynos_fimd_resume, NULL)
> - SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
> - pm_runtime_force_resume)
> -};
> +static DEFINE_RUNTIME_DEV_PM_OPS(exynos_fimd_pm_ops, exynos_fimd_suspend,
> + exynos_fimd_resume, NULL);
>
> struct platform_driver fimd_driver = {
> .probe = fimd_probe,
> @@ -1335,7 +1330,7 @@ struct platform_driver fimd_driver = {
> .driver = {
> .name = "exynos4-fb",
> .owner = THIS_MODULE,
> - .pm = &exynos_fimd_pm_ops,
> + .pm = pm_ptr(&exynos_fimd_pm_ops),
> .of_match_table = fimd_driver_dt_match,
> },
> };
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> index 471fd6c8135f..7711cb67b807 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> @@ -1549,7 +1549,6 @@ static int g2d_remove(struct platform_device *pdev)
> return 0;
> }
>
> -#ifdef CONFIG_PM_SLEEP
> static int g2d_suspend(struct device *dev)
> {
> struct g2d_data *g2d = dev_get_drvdata(dev);
> @@ -1574,9 +1573,7 @@ static int g2d_resume(struct device *dev)
>
> return 0;
> }
> -#endif
>
> -#ifdef CONFIG_PM
> static int g2d_runtime_suspend(struct device *dev)
> {
> struct g2d_data *g2d = dev_get_drvdata(dev);
> @@ -1597,11 +1594,10 @@ static int g2d_runtime_resume(struct device *dev)
>
> return ret;
> }
> -#endif
>
> static const struct dev_pm_ops g2d_pm_ops = {
> - SET_SYSTEM_SLEEP_PM_OPS(g2d_suspend, g2d_resume)
> - SET_RUNTIME_PM_OPS(g2d_runtime_suspend, g2d_runtime_resume, NULL)
> + SYSTEM_SLEEP_PM_OPS(g2d_suspend, g2d_resume)
> + RUNTIME_PM_OPS(g2d_runtime_suspend, g2d_runtime_resume, NULL)
> };
>
> static const struct of_device_id exynos_g2d_match[] = {
> @@ -1617,7 +1613,7 @@ struct platform_driver g2d_driver = {
> .driver = {
> .name = "exynos-drm-g2d",
> .owner = THIS_MODULE,
> - .pm = &g2d_pm_ops,
> + .pm = pm_ptr(&g2d_pm_ops),
> .of_match_table = exynos_g2d_match,
> },
> };
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_mic.c b/drivers/gpu/drm/exynos/exynos_drm_mic.c
> index 09ce28ee08d9..17bab5b1663f 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_mic.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_mic.c
> @@ -340,7 +340,6 @@ static const struct component_ops exynos_mic_component_ops = {
> .unbind = exynos_mic_unbind,
> };
>
> -#ifdef CONFIG_PM
> static int exynos_mic_suspend(struct device *dev)
> {
> struct exynos_mic *mic = dev_get_drvdata(dev);
> @@ -369,13 +368,9 @@ static int exynos_mic_resume(struct device *dev)
> }
> return 0;
> }
> -#endif
>
> -static const struct dev_pm_ops exynos_mic_pm_ops = {
> - SET_RUNTIME_PM_OPS(exynos_mic_suspend, exynos_mic_resume, NULL)
> - SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
> - pm_runtime_force_resume)
> -};
> +static DEFINE_RUNTIME_DEV_PM_OPS(exynos_mic_pm_ops, exynos_mic_suspend,
> + exynos_mic_resume, NULL);
>
> static int exynos_mic_probe(struct platform_device *pdev)
> {
> @@ -470,7 +465,7 @@ struct platform_driver mic_driver = {
> .remove = exynos_mic_remove,
> .driver = {
> .name = "exynos-mic",
> - .pm = &exynos_mic_pm_ops,
> + .pm = pm_ptr(&exynos_mic_pm_ops),
> .owner = THIS_MODULE,
> .of_match_table = exynos_mic_of_match,
> },
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_rotator.c b/drivers/gpu/drm/exynos/exynos_drm_rotator.c
> index dec7df35baa9..8706f377c349 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_rotator.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_rotator.c
> @@ -340,7 +340,6 @@ static int rotator_remove(struct platform_device *pdev)
> return 0;
> }
>
> -#ifdef CONFIG_PM
> static int rotator_runtime_suspend(struct device *dev)
> {
> struct rot_context *rot = dev_get_drvdata(dev);
> @@ -355,7 +354,6 @@ static int rotator_runtime_resume(struct device *dev)
>
> return clk_prepare_enable(rot->clock);
> }
> -#endif
>
> static const struct drm_exynos_ipp_limit rotator_s5pv210_rbg888_limits[] = {
> { IPP_SIZE_LIMIT(BUFFER, .h = { 8, SZ_16K }, .v = { 8, SZ_16K }) },
> @@ -450,12 +448,8 @@ static const struct of_device_id exynos_rotator_match[] = {
> };
> MODULE_DEVICE_TABLE(of, exynos_rotator_match);
>
> -static const struct dev_pm_ops rotator_pm_ops = {
> - SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
> - pm_runtime_force_resume)
> - SET_RUNTIME_PM_OPS(rotator_runtime_suspend, rotator_runtime_resume,
> - NULL)
> -};
> +static DEFINE_RUNTIME_DEV_PM_OPS(rotator_pm_ops, rotator_runtime_suspend,
> + rotator_runtime_resume, NULL);
>
> struct platform_driver rotator_driver = {
> .probe = rotator_probe,
> @@ -463,7 +457,7 @@ struct platform_driver rotator_driver = {
> .driver = {
> .name = "exynos-rotator",
> .owner = THIS_MODULE,
> - .pm = &rotator_pm_ops,
> + .pm = pm_ptr(&rotator_pm_ops),
> .of_match_table = exynos_rotator_match,
> },
> };
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_scaler.c b/drivers/gpu/drm/exynos/exynos_drm_scaler.c
> index 3c049fb658a3..20608e9780ce 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_scaler.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_scaler.c
> @@ -550,8 +550,6 @@ static int scaler_remove(struct platform_device *pdev)
> return 0;
> }
>
> -#ifdef CONFIG_PM
> -
> static int clk_disable_unprepare_wrapper(struct clk *clk)
> {
> clk_disable_unprepare(clk);
> @@ -584,13 +582,9 @@ static int scaler_runtime_resume(struct device *dev)
>
> return scaler_clk_ctrl(scaler, true);
> }
> -#endif
>
> -static const struct dev_pm_ops scaler_pm_ops = {
> - SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
> - pm_runtime_force_resume)
> - SET_RUNTIME_PM_OPS(scaler_runtime_suspend, scaler_runtime_resume, NULL)
> -};
> +static DEFINE_RUNTIME_DEV_PM_OPS(scaler_pm_ops, scaler_runtime_suspend,
> + scaler_runtime_resume, NULL);
>
> static const struct drm_exynos_ipp_limit scaler_5420_two_pixel_hv_limits[] = {
> { IPP_SIZE_LIMIT(BUFFER, .h = { 16, SZ_8K }, .v = { 16, SZ_8K }) },
> @@ -731,7 +725,7 @@ struct platform_driver scaler_driver = {
> .driver = {
> .name = "exynos-scaler",
> .owner = THIS_MODULE,
> - .pm = &scaler_pm_ops,
> + .pm = pm_ptr(&scaler_pm_ops),
> .of_match_table = exynos_scaler_match,
> },
> };
> --
> 2.35.1
>