* [PATCH] drivers/clk: Convert to DEFINE_SIMPLE_DEV_PM_OPS()
@ 2026-08-20 6:59 Triet Hoang
2026-08-20 7:08 ` sashiko-bot
0 siblings, 1 reply; 2+ messages in thread
From: Triet Hoang @ 2026-08-20 6:59 UTC (permalink / raw)
To: mturquette
Cc: sboyd, bmasney, luca.ceresoli, krzk, s.nawrocki, cw00.choi,
peter.griffin, alim.akhtar, michal.simek, shubhrajyoti.datta,
linux-clk, linux-kernel, linux-samsung-soc, linux-arm-kernel,
Triet Hoang
Convert the deprecated SIMPLE_DEV_PM_OPS
to DEFINE_SIMPLE_DEV_PM_OPS and pm_sleep_ptr().
This lets us drop the __maybe_unused annotations from its suspend and
resume callbacks, and reduces kernel size in case CONFIG_PM or
CONFIG_PM_SLEEP is disabled.
Signed-off-by: Triet Hoang <triet.hoang.dev@gmail.com>
---
drivers/clk/clk-si521xx.c | 8 ++++----
drivers/clk/clk-versaclock5.c | 8 ++++----
drivers/clk/samsung/clk-exynos-clkout.c | 8 ++++----
drivers/clk/xilinx/clk-xlnx-clock-wizard.c | 8 ++++----
4 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/drivers/clk/clk-si521xx.c b/drivers/clk/clk-si521xx.c
index ceadc07bcb6d..9336d08e8083 100644
--- a/drivers/clk/clk-si521xx.c
+++ b/drivers/clk/clk-si521xx.c
@@ -341,7 +341,7 @@ static int si521xx_probe(struct i2c_client *client)
return ret;
}
-static int __maybe_unused si521xx_suspend(struct device *dev)
+static int si521xx_suspend(struct device *dev)
{
struct si521xx *si = dev_get_drvdata(dev);
@@ -351,7 +351,7 @@ static int __maybe_unused si521xx_suspend(struct device *dev)
return 0;
}
-static int __maybe_unused si521xx_resume(struct device *dev)
+static int si521xx_resume(struct device *dev)
{
struct si521xx *si = dev_get_drvdata(dev);
int ret;
@@ -379,12 +379,12 @@ static const struct of_device_id clk_si521xx_of_match[] = {
};
MODULE_DEVICE_TABLE(of, clk_si521xx_of_match);
-static SIMPLE_DEV_PM_OPS(si521xx_pm_ops, si521xx_suspend, si521xx_resume);
+static DEFINE_SIMPLE_DEV_PM_OPS(si521xx_pm_ops, si521xx_suspend, si521xx_resume);
static struct i2c_driver si521xx_driver = {
.driver = {
.name = "clk-si521xx",
- .pm = &si521xx_pm_ops,
+ .pm = pm_sleep_ptr(&si521xx_pm_ops),
.of_match_table = clk_si521xx_of_match,
},
.probe = si521xx_probe,
diff --git a/drivers/clk/clk-versaclock5.c b/drivers/clk/clk-versaclock5.c
index 913fcc5675f1..bf2276981e01 100644
--- a/drivers/clk/clk-versaclock5.c
+++ b/drivers/clk/clk-versaclock5.c
@@ -1223,7 +1223,7 @@ static void vc5_remove(struct i2c_client *client)
clk_unregister_fixed_rate(vc5->pin_xin);
}
-static int __maybe_unused vc5_suspend(struct device *dev)
+static int vc5_suspend(struct device *dev)
{
struct vc5_driver_data *vc5 = dev_get_drvdata(dev);
@@ -1233,7 +1233,7 @@ static int __maybe_unused vc5_suspend(struct device *dev)
return 0;
}
-static int __maybe_unused vc5_resume(struct device *dev)
+static int vc5_resume(struct device *dev)
{
struct vc5_driver_data *vc5 = dev_get_drvdata(dev);
int ret;
@@ -1335,12 +1335,12 @@ static const struct of_device_id clk_vc5_of_match[] = {
};
MODULE_DEVICE_TABLE(of, clk_vc5_of_match);
-static SIMPLE_DEV_PM_OPS(vc5_pm_ops, vc5_suspend, vc5_resume);
+static DEFINE_SIMPLE_DEV_PM_OPS(vc5_pm_ops, vc5_suspend, vc5_resume);
static struct i2c_driver vc5_driver = {
.driver = {
.name = "vc5",
- .pm = &vc5_pm_ops,
+ .pm = pm_sleep_ptr(&vc5_pm_ops),
.of_match_table = clk_vc5_of_match,
},
.probe = vc5_probe,
diff --git a/drivers/clk/samsung/clk-exynos-clkout.c b/drivers/clk/samsung/clk-exynos-clkout.c
index 5f64d93b2fac..9c8b17cb5e7c 100644
--- a/drivers/clk/samsung/clk-exynos-clkout.c
+++ b/drivers/clk/samsung/clk-exynos-clkout.c
@@ -214,7 +214,7 @@ static void exynos_clkout_remove(struct platform_device *pdev)
iounmap(clkout->reg);
}
-static int __maybe_unused exynos_clkout_suspend(struct device *dev)
+static int exynos_clkout_suspend(struct device *dev)
{
struct exynos_clkout *clkout = dev_get_drvdata(dev);
@@ -223,7 +223,7 @@ static int __maybe_unused exynos_clkout_suspend(struct device *dev)
return 0;
}
-static int __maybe_unused exynos_clkout_resume(struct device *dev)
+static int exynos_clkout_resume(struct device *dev)
{
struct exynos_clkout *clkout = dev_get_drvdata(dev);
@@ -232,13 +232,13 @@ static int __maybe_unused exynos_clkout_resume(struct device *dev)
return 0;
}
-static SIMPLE_DEV_PM_OPS(exynos_clkout_pm_ops, exynos_clkout_suspend,
+static DEFINE_SIMPLE_DEV_PM_OPS(exynos_clkout_pm_ops, exynos_clkout_suspend,
exynos_clkout_resume);
static struct platform_driver exynos_clkout_driver = {
.driver = {
.name = DRV_NAME,
- .pm = &exynos_clkout_pm_ops,
+ .pm = pm_sleep_ptr(&exynos_clkout_pm_ops),
},
.probe = exynos_clkout_probe,
.remove = exynos_clkout_remove,
diff --git a/drivers/clk/xilinx/clk-xlnx-clock-wizard.c b/drivers/clk/xilinx/clk-xlnx-clock-wizard.c
index 4a0136349f71..da62c7b7f24d 100644
--- a/drivers/clk/xilinx/clk-xlnx-clock-wizard.c
+++ b/drivers/clk/xilinx/clk-xlnx-clock-wizard.c
@@ -955,7 +955,7 @@ static int clk_wzrd_clk_notifier(struct notifier_block *nb, unsigned long event,
}
}
-static int __maybe_unused clk_wzrd_suspend(struct device *dev)
+static int clk_wzrd_suspend(struct device *dev)
{
struct clk_wzrd *clk_wzrd = dev_get_drvdata(dev);
@@ -965,7 +965,7 @@ static int __maybe_unused clk_wzrd_suspend(struct device *dev)
return 0;
}
-static int __maybe_unused clk_wzrd_resume(struct device *dev)
+static int clk_wzrd_resume(struct device *dev)
{
int ret;
struct clk_wzrd *clk_wzrd = dev_get_drvdata(dev);
@@ -981,7 +981,7 @@ static int __maybe_unused clk_wzrd_resume(struct device *dev)
return 0;
}
-static SIMPLE_DEV_PM_OPS(clk_wzrd_dev_pm_ops, clk_wzrd_suspend,
+static DEFINE_SIMPLE_DEV_PM_OPS(clk_wzrd_dev_pm_ops, clk_wzrd_suspend,
clk_wzrd_resume);
static const struct versal_clk_data versal_data = {
@@ -1242,7 +1242,7 @@ static struct platform_driver clk_wzrd_driver = {
.driver = {
.name = "clk-wizard",
.of_match_table = clk_wzrd_ids,
- .pm = &clk_wzrd_dev_pm_ops,
+ .pm = pm_sleep_ptr(&clk_wzrd_dev_pm_ops),
},
.probe = clk_wzrd_probe,
};
--
2.53.0
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] drivers/clk: Convert to DEFINE_SIMPLE_DEV_PM_OPS()
2026-08-20 6:59 [PATCH] drivers/clk: Convert to DEFINE_SIMPLE_DEV_PM_OPS() Triet Hoang
@ 2026-08-20 7:08 ` sashiko-bot
0 siblings, 0 replies; 2+ messages in thread
From: sashiko-bot @ 2026-08-20 7:08 UTC (permalink / raw)
To: Triet Hoang; +Cc: linux-clk
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
Pre-existing issues:
- [High] Clock references obtained via `of_clk_get_by_name()` are leaked on the successful probe path.
- [Low] Missing named initializers for struct i2c_device_id array elements.
--
--- Patch [1]: [PATCH] drivers/clk: Convert to DEFINE_SIMPLE_DEV_PM_OPS() ---
commit 905f2dc2a103be650ab5a8a95761cebf0202b40a
Author: Triet Hoang <triet.hoang.dev@gmail.com>
drivers/clk: Convert to DEFINE_SIMPLE_DEV_PM_OPS()
Convert the deprecated SIMPLE_DEV_PM_OPS to DEFINE_SIMPLE_DEV_PM_OPS and
pm_sleep_ptr(). This lets us drop the maybe unused annotations from its
suspend and resume callbacks, and reduces kernel size in case CONFIG_PM or
CONFIG_PM_SLEEP is disabled.
> diff --git a/drivers/clk/clk-si521xx.c b/drivers/clk/clk-si521xx.c
> index ceadc07bcb6df..9336d08e80830 100644
> --- a/drivers/clk/clk-si521xx.c
> +++ b/drivers/clk/clk-si521xx.c
[ ... ]
> @@ -379,12 +379,12 @@ static const struct of_device_id clk_si521xx_of_match[] = {
> };
> MODULE_DEVICE_TABLE(of, clk_si521xx_of_match);
>
> -static SIMPLE_DEV_PM_OPS(si521xx_pm_ops, si521xx_suspend, si521xx_resume);
> +static DEFINE_SIMPLE_DEV_PM_OPS(si521xx_pm_ops, si521xx_suspend, si521xx_resume);
>
> static struct i2c_driver si521xx_driver = {
> .driver = {
> .name = "clk-si521xx",
> - .pm = &si521xx_pm_ops,
> + .pm = pm_sleep_ptr(&si521xx_pm_ops),
> .of_match_table = clk_si521xx_of_match,
> },
> .probe = si521xx_probe,
[Severity: Low]
This is a pre-existing issue, but I noticed the si521xx_id array assigned
to the id_table near here uses a positional initializer for the
i2c_device_id name field. Does the I2C subsystem require named initializers
for i2c_device_id arrays?
> diff --git a/drivers/clk/clk-versaclock5.c b/drivers/clk/clk-versaclock5.c
> index 913fcc5675f19..bf2276981e01d 100644
> --- a/drivers/clk/clk-versaclock5.c
> +++ b/drivers/clk/clk-versaclock5.c
[ ... ]
> @@ -1335,12 +1335,12 @@ static const struct of_device_id clk_vc5_of_match[] = {
> };
> MODULE_DEVICE_TABLE(of, clk_vc5_of_match);
>
> -static SIMPLE_DEV_PM_OPS(vc5_pm_ops, vc5_suspend, vc5_resume);
> +static DEFINE_SIMPLE_DEV_PM_OPS(vc5_pm_ops, vc5_suspend, vc5_resume);
>
> static struct i2c_driver vc5_driver = {
> .driver = {
> .name = "vc5",
> - .pm = &vc5_pm_ops,
> + .pm = pm_sleep_ptr(&vc5_pm_ops),
> .of_match_table = clk_vc5_of_match,
> },
> .probe = vc5_probe,
[Severity: Low]
This is also a pre-existing issue, but similar to the si521xx driver, the
vc5_id array uses a positional initializer. Should this be updated to use
a named initializer to match I2C subsystem guidelines?
> diff --git a/drivers/clk/samsung/clk-exynos-clkout.c b/drivers/clk/samsung/clk-exynos-clkout.c
> index 5f64d93b2facf..9c8b17cb5e7c1 100644
> --- a/drivers/clk/samsung/clk-exynos-clkout.c
> +++ b/drivers/clk/samsung/clk-exynos-clkout.c
> @@ -214,7 +214,7 @@ static void exynos_clkout_remove(struct platform_device *pdev)
[Severity: High]
This is a pre-existing issue, but looking at exynos_clkout_probe() right
above this remove function, do we leak clock references on probe success?
It appears that exynos_clkout_probe() retrieves parent clock references
using of_clk_get_by_name() and stores them in a local parents array. While
clk_put() is correctly called in the err_clk_unreg path, the function
returns 0 on success without dropping the references.
Could this permanently leak the references when the local array goes out of
scope, preventing the provider modules from ever being unloaded?
> iounmap(clkout->reg);
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260820065904.2032536-1-triet.hoang.dev@gmail.com?part=1
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-08-20 7:08 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-20 6:59 [PATCH] drivers/clk: Convert to DEFINE_SIMPLE_DEV_PM_OPS() Triet Hoang
2026-08-20 7:08 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).