| From | Dmitry Osipenko <> | Subject | [PATCH v2 37/45] mfd: tps65910: Use devm_register_simple_power_off_handler() | Date | Thu, 28 Oct 2021 00:17:07 +0300 |
| |
Use devm_register_simple_power_off_handler() that replaces global pm_power_off variable and allows to register multiple power-off handlers.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com> --- drivers/mfd/tps65910.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c index 6e105cca27d4..8fab30dc84e5 100644 --- a/drivers/mfd/tps65910.c +++ b/drivers/mfd/tps65910.c @@ -16,6 +16,7 @@ #include <linux/irq.h> #include <linux/irqdomain.h> #include <linux/mfd/core.h> +#include <linux/reboot.h> #include <linux/regmap.h> #include <linux/mfd/tps65910.h> #include <linux/of.h> @@ -429,9 +430,9 @@ struct tps65910_board *tps65910_parse_dt(struct i2c_client *client, } #endif -static struct i2c_client *tps65910_i2c_client; -static void tps65910_power_off(void) +static void tps65910_power_off(void *data) { + struct i2c_client *tps65910_i2c_client = data; struct tps65910 *tps65910; tps65910 = dev_get_drvdata(&tps65910_i2c_client->dev); @@ -503,9 +504,15 @@ static int tps65910_i2c_probe(struct i2c_client *i2c, tps65910_ck32k_init(tps65910, pmic_plat_data); tps65910_sleepinit(tps65910, pmic_plat_data); - if (pmic_plat_data->pm_off && !pm_power_off) { - tps65910_i2c_client = i2c; - pm_power_off = tps65910_power_off; + if (pmic_plat_data->pm_off) { + ret = devm_register_simple_power_off_handler(&i2c->dev, + tps65910_power_off, + i2c); + if (ret) { + dev_err(&i2c->dev, + "failed to register power-off handler: %d\n", ret); + return ret; + } } ret = devm_mfd_add_devices(tps65910->dev, -1, -- 2.33.1
|