Message ID | 20240205194437.180802-12-afd@ti.com |
---|---|
State | Superseded |
Headers | show |
Series | Remove pm_power_off use in drivers/power/reset | expand |
Il 05/02/24 20:44, Andrew Davis ha scritto: > Use device life-cycle managed register function to simplify probe and > exit paths. > > Signed-off-by: Andrew Davis <afd@ti.com> > --- > drivers/power/reset/mt6323-poweroff.c | 28 ++++++++++++++------------- > 1 file changed, 15 insertions(+), 13 deletions(-) > > diff --git a/drivers/power/reset/mt6323-poweroff.c b/drivers/power/reset/mt6323-poweroff.c > index 57a63c0ab7fb7..ca5d11b17ff03 100644 > --- a/drivers/power/reset/mt6323-poweroff.c > +++ b/drivers/power/reset/mt6323-poweroff.c > @@ -14,6 +14,7 @@ > #include <linux/platform_device.h> > #include <linux/mfd/mt6397/core.h> > #include <linux/mfd/mt6397/rtc.h> > +#include <linux/reboot.h> > > struct mt6323_pwrc { > struct device *dev; > @@ -21,11 +22,9 @@ struct mt6323_pwrc { > u32 base; > }; > > -static struct mt6323_pwrc *mt_pwrc; > - > -static void mt6323_do_pwroff(void) > +static int mt6323_do_pwroff(struct sys_off_data *data) > { > - struct mt6323_pwrc *pwrc = mt_pwrc; > + struct mt6323_pwrc *pwrc = data->cb_data; > unsigned int val; > int ret; > > @@ -44,6 +43,8 @@ static void mt6323_do_pwroff(void) > mdelay(1000); > > WARN_ONCE(1, "Unable to power off system\n"); > + > + return NOTIFY_DONE; > } > > static int mt6323_pwrc_probe(struct platform_device *pdev) > @@ -51,6 +52,7 @@ static int mt6323_pwrc_probe(struct platform_device *pdev) > struct mt6397_chip *mt6397_chip = dev_get_drvdata(pdev->dev.parent); > struct mt6323_pwrc *pwrc; > struct resource *res; > + int ret; > > pwrc = devm_kzalloc(&pdev->dev, sizeof(*pwrc), GFP_KERNEL); > if (!pwrc) > @@ -63,19 +65,20 @@ static int mt6323_pwrc_probe(struct platform_device *pdev) > pwrc->base = res->start; > pwrc->regmap = mt6397_chip->regmap; > pwrc->dev = &pdev->dev; > - mt_pwrc = pwrc; > > - pm_power_off = &mt6323_do_pwroff; > + ret = devm_register_sys_off_handler(pwrc->dev, > + SYS_OFF_MODE_POWER_OFF, > + SYS_OFF_PRIO_DEFAULT, > + mt6323_do_pwroff, > + pwrc); if (ret) return dev_err_probe(....); Regards, Angelo > + if (ret) { > + dev_err(pwrc->dev, "failed to register power-off handler: %d\n", ret); > + return ret; > + } >
diff --git a/drivers/power/reset/mt6323-poweroff.c b/drivers/power/reset/mt6323-poweroff.c index 57a63c0ab7fb7..ca5d11b17ff03 100644 --- a/drivers/power/reset/mt6323-poweroff.c +++ b/drivers/power/reset/mt6323-poweroff.c @@ -14,6 +14,7 @@ #include <linux/platform_device.h> #include <linux/mfd/mt6397/core.h> #include <linux/mfd/mt6397/rtc.h> +#include <linux/reboot.h> struct mt6323_pwrc { struct device *dev; @@ -21,11 +22,9 @@ struct mt6323_pwrc { u32 base; }; -static struct mt6323_pwrc *mt_pwrc; - -static void mt6323_do_pwroff(void) +static int mt6323_do_pwroff(struct sys_off_data *data) { - struct mt6323_pwrc *pwrc = mt_pwrc; + struct mt6323_pwrc *pwrc = data->cb_data; unsigned int val; int ret; @@ -44,6 +43,8 @@ static void mt6323_do_pwroff(void) mdelay(1000); WARN_ONCE(1, "Unable to power off system\n"); + + return NOTIFY_DONE; } static int mt6323_pwrc_probe(struct platform_device *pdev) @@ -51,6 +52,7 @@ static int mt6323_pwrc_probe(struct platform_device *pdev) struct mt6397_chip *mt6397_chip = dev_get_drvdata(pdev->dev.parent); struct mt6323_pwrc *pwrc; struct resource *res; + int ret; pwrc = devm_kzalloc(&pdev->dev, sizeof(*pwrc), GFP_KERNEL); if (!pwrc) @@ -63,19 +65,20 @@ static int mt6323_pwrc_probe(struct platform_device *pdev) pwrc->base = res->start; pwrc->regmap = mt6397_chip->regmap; pwrc->dev = &pdev->dev; - mt_pwrc = pwrc; - pm_power_off = &mt6323_do_pwroff; + ret = devm_register_sys_off_handler(pwrc->dev, + SYS_OFF_MODE_POWER_OFF, + SYS_OFF_PRIO_DEFAULT, + mt6323_do_pwroff, + pwrc); + if (ret) { + dev_err(pwrc->dev, "failed to register power-off handler: %d\n", ret); + return ret; + } return 0; } -static void mt6323_pwrc_remove(struct platform_device *pdev) -{ - if (pm_power_off == &mt6323_do_pwroff) - pm_power_off = NULL; -} - static const struct of_device_id mt6323_pwrc_dt_match[] = { { .compatible = "mediatek,mt6323-pwrc" }, {}, @@ -84,7 +87,6 @@ MODULE_DEVICE_TABLE(of, mt6323_pwrc_dt_match); static struct platform_driver mt6323_pwrc_driver = { .probe = mt6323_pwrc_probe, - .remove_new = mt6323_pwrc_remove, .driver = { .name = "mt6323-pwrc", .of_match_table = mt6323_pwrc_dt_match,
Use device life-cycle managed register function to simplify probe and exit paths. Signed-off-by: Andrew Davis <afd@ti.com> --- drivers/power/reset/mt6323-poweroff.c | 28 ++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-)