Skip to content

Commit 02a1124

Browse files
digetxrafaeljw
authored andcommitted
regulator: pfuze100: Use devm_register_sys_off_handler()
Use devm_register_sys_off_handler() that replaces global pm_power_off_prepare variable and allows to register multiple power-off handlers. Acked-by: Mark Brown <broonie@kernel.org> Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
1 parent 98f30d0 commit 02a1124

1 file changed

Lines changed: 17 additions & 25 deletions

File tree

drivers/regulator/pfuze100-regulator.c

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <linux/of_device.h>
1111
#include <linux/regulator/of_regulator.h>
1212
#include <linux/platform_device.h>
13+
#include <linux/reboot.h>
1314
#include <linux/regulator/driver.h>
1415
#include <linux/regulator/machine.h>
1516
#include <linux/regulator/pfuze100.h>
@@ -569,10 +570,10 @@ static inline struct device_node *match_of_node(int index)
569570
return pfuze_matches[index].of_node;
570571
}
571572

572-
static struct pfuze_chip *syspm_pfuze_chip;
573-
574-
static void pfuze_power_off_prepare(void)
573+
static int pfuze_power_off_prepare(struct sys_off_data *data)
575574
{
575+
struct pfuze_chip *syspm_pfuze_chip = data->cb_data;
576+
576577
dev_info(syspm_pfuze_chip->dev, "Configure standby mode for power off");
577578

578579
/* Switch from default mode: APS/APS to APS/Off */
@@ -607,28 +608,30 @@ static void pfuze_power_off_prepare(void)
607608
regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN6VOL,
608609
PFUZE100_VGENxLPWR | PFUZE100_VGENxSTBY,
609610
PFUZE100_VGENxSTBY);
611+
612+
return NOTIFY_DONE;
610613
}
611614

612615
static int pfuze_power_off_prepare_init(struct pfuze_chip *pfuze_chip)
613616
{
617+
int err;
618+
614619
if (pfuze_chip->chip_id != PFUZE100) {
615620
dev_warn(pfuze_chip->dev, "Requested pm_power_off_prepare handler for not supported chip\n");
616621
return -ENODEV;
617622
}
618623

619-
if (pm_power_off_prepare) {
620-
dev_warn(pfuze_chip->dev, "pm_power_off_prepare is already registered.\n");
621-
return -EBUSY;
624+
err = devm_register_sys_off_handler(pfuze_chip->dev,
625+
SYS_OFF_MODE_POWER_OFF_PREPARE,
626+
SYS_OFF_PRIO_DEFAULT,
627+
pfuze_power_off_prepare,
628+
pfuze_chip);
629+
if (err) {
630+
dev_err(pfuze_chip->dev, "failed to register sys-off handler: %d\n",
631+
err);
632+
return err;
622633
}
623634

624-
if (syspm_pfuze_chip) {
625-
dev_warn(pfuze_chip->dev, "syspm_pfuze_chip is already set.\n");
626-
return -EBUSY;
627-
}
628-
629-
syspm_pfuze_chip = pfuze_chip;
630-
pm_power_off_prepare = pfuze_power_off_prepare;
631-
632635
return 0;
633636
}
634637

@@ -837,23 +840,12 @@ static int pfuze100_regulator_probe(struct i2c_client *client,
837840
return 0;
838841
}
839842

840-
static int pfuze100_regulator_remove(struct i2c_client *client)
841-
{
842-
if (syspm_pfuze_chip) {
843-
syspm_pfuze_chip = NULL;
844-
pm_power_off_prepare = NULL;
845-
}
846-
847-
return 0;
848-
}
849-
850843
static struct i2c_driver pfuze_driver = {
851844
.driver = {
852845
.name = "pfuze100-regulator",
853846
.of_match_table = pfuze_dt_ids,
854847
},
855848
.probe = pfuze100_regulator_probe,
856-
.remove = pfuze100_regulator_remove,
857849
};
858850
module_i2c_driver(pfuze_driver);
859851

0 commit comments

Comments
 (0)