From: blacksilver Date: Mon, 30 Oct 2023 13:48:05 +0000 (+0100) Subject: Add poweroff support to 88pm88x driver X-Git-Tag: v6.6-pxa1908^0 X-Git-Url: https://git.dujemihanovic.xyz/?a=commitdiff_plain;h=80318011d9fec6646a64b0df617646b1fb4ba4ac;p=linux.git Add poweroff support to 88pm88x driver --- diff --git a/drivers/mfd/88pm88x-core.c b/drivers/mfd/88pm88x-core.c index 04409a2b0356..3ad8f5ff4de8 100644 --- a/drivers/mfd/88pm88x-core.c +++ b/drivers/mfd/88pm88x-core.c @@ -554,31 +554,14 @@ void pm88x_dev_exit(struct pm88x_chip *chip) pm88x_irq_exit(chip); } -void pm88x_power_off(void) +static int pm88x_power_off(struct pm88x_chip *chip) { - pr_info("powers off the system."); - /* TODO: implement later */ - - for (;;) - cpu_relax(); + return regmap_update_bits(chip->base_regmap, + PM88X_MISC_CONFIG1, PM88X_SW_PDOWN, PM88X_SW_PDOWN); } -int pm88x_reboot_notifier_callback(struct notifier_block *this, - unsigned long code, void *unused) +int pm88x_power_off_handler(struct sys_off_data *data) { - struct pm88x_chip *chip = - container_of(this, struct pm88x_chip, reboot_notifier); - - switch (code) { - case SYS_HALT: - case SYS_POWER_OFF: - dev_info(chip->dev, "system is down.\n"); - break; - case SYS_RESTART: - default: - dev_info(chip->dev, "system will reboot.\n"); - break; - } - - return 0; -} + pm88x_power_off(data->cb_data); + return NOTIFY_DONE; +} \ No newline at end of file diff --git a/drivers/mfd/88pm88x-i2c.c b/drivers/mfd/88pm88x-i2c.c index 7650014d9c90..ae4a09f3b34b 100644 --- a/drivers/mfd/88pm88x-i2c.c +++ b/drivers/mfd/88pm88x-i2c.c @@ -86,10 +86,12 @@ static int pm88x_i2c_probe(struct i2c_client *client) goto err_apply_patch; } - pm_power_off = pm88x_power_off; - - chip->reboot_notifier.notifier_call = pm88x_reboot_notifier_callback; - register_reboot_notifier(&(chip->reboot_notifier)); + ret = devm_register_power_off_handler(chip->dev, + pm88x_power_off_handler, chip); + if (ret) { + dev_err(chip->dev, "failed to register power-off handler: %d\n", ret); + return ret; + } return 0; diff --git a/include/linux/mfd/88pm88x.h b/include/linux/mfd/88pm88x.h index ceffd976d3b7..188f7f31c660 100644 --- a/include/linux/mfd/88pm88x.h +++ b/include/linux/mfd/88pm88x.h @@ -200,10 +200,6 @@ int pm88x_apply_patch(struct pm88x_chip *chip); int pm88x_stepping_fixup(struct pm88x_chip *chip); int pm88x_apply_board_fixup(struct pm88x_chip *chip, struct device_node *np); -struct pm88x_chip *pm88x_get_chip(void); -void pm88x_set_chip(struct pm88x_chip *chip); -void pm88x_power_off(void); -int pm88x_reboot_notifier_callback(struct notifier_block *nb, - unsigned long code, void *unused); +int pm88x_power_off_handler(struct sys_off_data *data); #endif /* __LINUX_MFD_88PM88X_H */