* [PATCH] input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS()
@ 2026-08-21 2:42 Triet Hoang
2026-08-21 2:50 ` sashiko-bot
0 siblings, 1 reply; 4+ messages in thread
From: Triet Hoang @ 2026-08-21 2:42 UTC (permalink / raw)
To: dmitry.torokhov; +Cc: linux-input, linux-kernel, Triet Hoang
Convert deprecated SIMPLE_DEV_PM_OPS
to DEFINE_SIMPLE_DEV_PM_OPS and pm_sleep_ptr().
This lets us drop the __maybe_unused annotations
from the resume callbacks and reduces kernel size
when CONFIG_PM or CONFIG_PM_SLEEP is disabled.
Signed-off-by: Triet Hoang <triet.hoang.dev@gmail.com>
---
drivers/input/misc/88pm80x_onkey.c | 4 ++--
drivers/input/misc/nxp-bbnsm-pwrkey.c | 8 ++++----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/input/misc/88pm80x_onkey.c b/drivers/input/misc/88pm80x_onkey.c
index fee28e537898..d4f344e2bf5c 100644
--- a/drivers/input/misc/88pm80x_onkey.c
+++ b/drivers/input/misc/88pm80x_onkey.c
@@ -47,7 +47,7 @@ static irqreturn_t pm80x_onkey_handler(int irq, void *data)
return IRQ_HANDLED;
}
-static SIMPLE_DEV_PM_OPS(pm80x_onkey_pm_ops, pm80x_dev_suspend,
+static DEFINE_SIMPLE_DEV_PM_OPS(pm80x_onkey_pm_ops, pm80x_dev_suspend,
pm80x_dev_resume);
static int pm80x_onkey_probe(struct platform_device *pdev)
@@ -138,7 +138,7 @@ static void pm80x_onkey_remove(struct platform_device *pdev)
static struct platform_driver pm80x_onkey_driver = {
.driver = {
.name = "88pm80x-onkey",
- .pm = &pm80x_onkey_pm_ops,
+ .pm = pm_sleep_ptr(&pm80x_onkey_pm_ops),
},
.probe = pm80x_onkey_probe,
.remove = pm80x_onkey_remove,
diff --git a/drivers/input/misc/nxp-bbnsm-pwrkey.c b/drivers/input/misc/nxp-bbnsm-pwrkey.c
index 0c7b8f8ef4a5..6af6e0f6395f 100644
--- a/drivers/input/misc/nxp-bbnsm-pwrkey.c
+++ b/drivers/input/misc/nxp-bbnsm-pwrkey.c
@@ -193,7 +193,7 @@ static void bbnsm_pwrkey_remove(struct platform_device *pdev)
device_init_wakeup(&pdev->dev, false);
}
-static int __maybe_unused bbnsm_pwrkey_suspend(struct device *dev)
+static int bbnsm_pwrkey_suspend(struct device *dev)
{
struct platform_device *pdev = to_platform_device(dev);
struct bbnsm_pwrkey *bbnsm = platform_get_drvdata(pdev);
@@ -203,7 +203,7 @@ static int __maybe_unused bbnsm_pwrkey_suspend(struct device *dev)
return 0;
}
-static int __maybe_unused bbnsm_pwrkey_resume(struct device *dev)
+static int bbnsm_pwrkey_resume(struct device *dev)
{
struct platform_device *pdev = to_platform_device(dev);
struct bbnsm_pwrkey *bbnsm = platform_get_drvdata(pdev);
@@ -213,7 +213,7 @@ static int __maybe_unused bbnsm_pwrkey_resume(struct device *dev)
return 0;
}
-static SIMPLE_DEV_PM_OPS(bbnsm_pwrkey_pm_ops, bbnsm_pwrkey_suspend,
+static DEFINE_SIMPLE_DEV_PM_OPS(bbnsm_pwrkey_pm_ops, bbnsm_pwrkey_suspend,
bbnsm_pwrkey_resume);
static const struct of_device_id bbnsm_pwrkey_ids[] = {
@@ -225,7 +225,7 @@ MODULE_DEVICE_TABLE(of, bbnsm_pwrkey_ids);
static struct platform_driver bbnsm_pwrkey_driver = {
.driver = {
.name = "bbnsm_pwrkey",
- .pm = &bbnsm_pwrkey_pm_ops,
+ .pm = pm_sleep_ptr(&bbnsm_pwrkey_pm_ops),
.of_match_table = bbnsm_pwrkey_ids,
},
.probe = bbnsm_pwrkey_probe,
--
2.53.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS()
2026-08-21 2:42 [PATCH] input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS() Triet Hoang
@ 2026-08-21 2:50 ` sashiko-bot
2026-08-21 4:15 ` [PATCH v2] " Triet Hoang
0 siblings, 1 reply; 4+ messages in thread
From: sashiko-bot @ 2026-08-21 2:50 UTC (permalink / raw)
To: Triet Hoang; +Cc: linux-input, dmitry.torokhov
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Low] The patch breaks the build when `CONFIG_PM` is disabled because `pm80x_dev_suspend` and `pm80x_dev_resume` become undeclared identifiers.
--
--- Patch [1]: [PATCH] input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS() ---
commit 831b6a38a335cea06b4312be1068bf63ef9bd3c9
Author: Triet Hoang <triet.hoang.dev@gmail.com>
input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS()
Convert deprecated SIMPLE_DEV_PM_OPS to DEFINE_SIMPLE_DEV_PM_OPS and
pm_sleep_ptr(). This drops the __maybe_unused annotations from the resume
callbacks and reduces kernel size when PM is disabled.
> diff --git a/drivers/input/misc/88pm80x_onkey.c b/drivers/input/misc/88pm80x_onkey.c
> index fee28e537898a..d4f344e2bf5c4 100644
> --- a/drivers/input/misc/88pm80x_onkey.c
> +++ b/drivers/input/misc/88pm80x_onkey.c
[ ... ]
> @@ -47,7 +47,7 @@ static irqreturn_t pm80x_onkey_handler(int irq, void *data)
> return IRQ_HANDLED;
> }
>
> -static SIMPLE_DEV_PM_OPS(pm80x_onkey_pm_ops, pm80x_dev_suspend,
> +static DEFINE_SIMPLE_DEV_PM_OPS(pm80x_onkey_pm_ops, pm80x_dev_suspend,
> pm80x_dev_resume);
[Severity: Low]
Does this break the build when CONFIG_PM is disabled?
Unlike SIMPLE_DEV_PM_OPS, DEFINE_SIMPLE_DEV_PM_OPS uses pm_sleep_ptr() which
evaluates the C ternary operator with IS_ENABLED(). This means the compiler
still parses the arguments and requires them to be declared, even if they are
ultimately discarded.
Looking at include/linux/mfd/88pm80x.h, pm80x_dev_suspend and pm80x_dev_resume
are wrapped in #ifdef CONFIG_PM without providing empty fallback stubs:
#ifdef CONFIG_PM
static inline int pm80x_dev_suspend(struct device *dev)
{
...
Will this result in undeclared identifier compilation errors when building with
CONFIG_PM=n?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821024215.55188-1-triet.hoang.dev@gmail.com?part=1
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2] input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS()
2026-08-21 2:50 ` sashiko-bot
@ 2026-08-21 4:15 ` Triet Hoang
2026-08-21 4:25 ` sashiko-bot
0 siblings, 1 reply; 4+ messages in thread
From: Triet Hoang @ 2026-08-21 4:15 UTC (permalink / raw)
To: sashiko-bot
Cc: dmitry.torokhov, linux-input, sashiko-reviews, triet.hoang.dev
Convert deprecated SIMPLE_DEV_PM_OPS
to DEFINE_SIMPLE_DEV_PM_OPS and pm_ptr/pm_sleep_ptr().
This lets us drop the __maybe_unused annotations
from the resume callbacks and reduces kernel size
when CONFIG_PM or CONFIG_PM_SLEEP is disabled.
Signed-off-by: Triet Hoang <triet.hoang.dev@gmail.com>
---
Changes in v2:
- Use pm_ptr() for pm80x_onkey_pm_ops
- Remove #ifdef CONFIG_PM
---
drivers/input/misc/88pm80x_onkey.c | 4 ++--
drivers/input/misc/nxp-bbnsm-pwrkey.c | 8 ++++----
include/linux/mfd/88pm80x.h | 2 --
3 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/input/misc/88pm80x_onkey.c b/drivers/input/misc/88pm80x_onkey.c
index fee28e537898..3d8fe0b4ed50 100644
--- a/drivers/input/misc/88pm80x_onkey.c
+++ b/drivers/input/misc/88pm80x_onkey.c
@@ -47,7 +47,7 @@ static irqreturn_t pm80x_onkey_handler(int irq, void *data)
return IRQ_HANDLED;
}
-static SIMPLE_DEV_PM_OPS(pm80x_onkey_pm_ops, pm80x_dev_suspend,
+static DEFINE_SIMPLE_DEV_PM_OPS(pm80x_onkey_pm_ops, pm80x_dev_suspend,
pm80x_dev_resume);
static int pm80x_onkey_probe(struct platform_device *pdev)
@@ -138,7 +138,7 @@ static void pm80x_onkey_remove(struct platform_device *pdev)
static struct platform_driver pm80x_onkey_driver = {
.driver = {
.name = "88pm80x-onkey",
- .pm = &pm80x_onkey_pm_ops,
+ .pm = pm_ptr(&pm80x_onkey_pm_ops),
},
.probe = pm80x_onkey_probe,
.remove = pm80x_onkey_remove,
diff --git a/drivers/input/misc/nxp-bbnsm-pwrkey.c b/drivers/input/misc/nxp-bbnsm-pwrkey.c
index 0c7b8f8ef4a5..6af6e0f6395f 100644
--- a/drivers/input/misc/nxp-bbnsm-pwrkey.c
+++ b/drivers/input/misc/nxp-bbnsm-pwrkey.c
@@ -193,7 +193,7 @@ static void bbnsm_pwrkey_remove(struct platform_device *pdev)
device_init_wakeup(&pdev->dev, false);
}
-static int __maybe_unused bbnsm_pwrkey_suspend(struct device *dev)
+static int bbnsm_pwrkey_suspend(struct device *dev)
{
struct platform_device *pdev = to_platform_device(dev);
struct bbnsm_pwrkey *bbnsm = platform_get_drvdata(pdev);
@@ -203,7 +203,7 @@ static int __maybe_unused bbnsm_pwrkey_suspend(struct device *dev)
return 0;
}
-static int __maybe_unused bbnsm_pwrkey_resume(struct device *dev)
+static int bbnsm_pwrkey_resume(struct device *dev)
{
struct platform_device *pdev = to_platform_device(dev);
struct bbnsm_pwrkey *bbnsm = platform_get_drvdata(pdev);
@@ -213,7 +213,7 @@ static int __maybe_unused bbnsm_pwrkey_resume(struct device *dev)
return 0;
}
-static SIMPLE_DEV_PM_OPS(bbnsm_pwrkey_pm_ops, bbnsm_pwrkey_suspend,
+static DEFINE_SIMPLE_DEV_PM_OPS(bbnsm_pwrkey_pm_ops, bbnsm_pwrkey_suspend,
bbnsm_pwrkey_resume);
static const struct of_device_id bbnsm_pwrkey_ids[] = {
@@ -225,7 +225,7 @@ MODULE_DEVICE_TABLE(of, bbnsm_pwrkey_ids);
static struct platform_driver bbnsm_pwrkey_driver = {
.driver = {
.name = "bbnsm_pwrkey",
- .pm = &bbnsm_pwrkey_pm_ops,
+ .pm = pm_sleep_ptr(&bbnsm_pwrkey_pm_ops),
.of_match_table = bbnsm_pwrkey_ids,
},
.probe = bbnsm_pwrkey_probe,
diff --git a/include/linux/mfd/88pm80x.h b/include/linux/mfd/88pm80x.h
index 551ef1c367d6..be1b0d961e01 100644
--- a/include/linux/mfd/88pm80x.h
+++ b/include/linux/mfd/88pm80x.h
@@ -339,7 +339,6 @@ static inline void pm80x_free_irq(struct pm80x_chip *pm80x, int irq, void *data)
free_irq(regmap_irq_get_virq(pm80x->irq_data, irq), data);
}
-#ifdef CONFIG_PM
static inline int pm80x_dev_suspend(struct device *dev)
{
struct platform_device *pdev = to_platform_device(dev);
@@ -363,7 +362,6 @@ static inline int pm80x_dev_resume(struct device *dev)
return 0;
}
-#endif
extern int pm80x_init(struct i2c_client *client);
extern int pm80x_deinit(void);
--
2.53.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2] input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS()
2026-08-21 4:15 ` [PATCH v2] " Triet Hoang
@ 2026-08-21 4:25 ` sashiko-bot
0 siblings, 0 replies; 4+ messages in thread
From: sashiko-bot @ 2026-08-21 4:25 UTC (permalink / raw)
To: Triet Hoang; +Cc: linux-input, dmitry.torokhov
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] Out-of-bounds memory access in `pm80x_dev_suspend` and `pm80x_dev_resume` due to using a virtual IRQ number as a bit index.
--
--- Patch [1]: [PATCH v2] input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS() ---
commit 34551f878a1e83fc07284971e8c372f8a5be3f46
Author: Triet Hoang <triet.hoang.dev@gmail.com>
input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS()
This commit converts the deprecated SIMPLE_DEV_PM_OPS to
DEFINE_SIMPLE_DEV_PM_OPS and uses pm_ptr/pm_sleep_ptr(). This allows
dropping the __maybe_unused annotations from the resume callbacks and
reduces kernel size when PM options are disabled.
[ ... ]
> diff --git a/include/linux/mfd/88pm80x.h b/include/linux/mfd/88pm80x.h
> index 551ef1c367d65..be1b0d961e01a 100644
> --- a/include/linux/mfd/88pm80x.h
> +++ b/include/linux/mfd/88pm80x.h
> @@ -339,7 +339,6 @@ static inline void pm80x_free_irq(struct pm80x_chip *pm80x, int irq, void *data)
> free_irq(regmap_irq_get_virq(pm80x->irq_data, irq), data);
> }
>
> -#ifdef CONFIG_PM
> static inline int pm80x_dev_suspend(struct device *dev)
> {
> struct platform_device *pdev = to_platform_device(dev);
[Severity: High]
This is a pre-existing issue, but does using the virtual IRQ as a bit
index here lead to out-of-bounds memory accesses?
Looking at the body of pm80x_dev_suspend():
int irq = platform_get_irq(pdev, 0);
if (device_may_wakeup(dev))
set_bit(irq, &chip->wu_flag);
Since platform_get_irq() returns a virtual IRQ number dynamically assigned
by the kernel, can this value exceed the capacity of the unsigned long
wu_flag?
Also, if platform_get_irq() returns a negative error code such as -ENXIO,
would passing it as an unsigned bit index to set_bit() cause a massive
out-of-bounds memory write and corrupt memory?
The same pattern exists in pm80x_dev_resume() with clear_bit().
> @@ -363,7 +362,6 @@ static inline int pm80x_dev_resume(struct device *dev)
>
> return 0;
> }
> -#endif
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821041546.110119-1-triet.hoang.dev@gmail.com?part=1
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-08-21 4:25 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-21 2:42 [PATCH] input: misc: Convert to DEFINE_SIMPLE_DEV_PM_OPS() Triet Hoang
2026-08-21 2:50 ` sashiko-bot
2026-08-21 4:15 ` [PATCH v2] " Triet Hoang
2026-08-21 4:25 ` sashiko-bot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.