Hi Svyatoslav, On Thu, 20 Jul 2023 at 02:48, Svyatoslav Ryhel <clamo...@gmail.com> wrote: > > Use new PMIC ops to perform device poweroff. > > Signed-off-by: Svyatoslav Ryhel <clamo...@gmail.com> > --- > cmd/Kconfig | 6 ++++++ > cmd/boot.c | 40 ++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 46 insertions(+) > > diff --git a/cmd/Kconfig b/cmd/Kconfig > index ecfd575237..47654297f8 100644 > --- a/cmd/Kconfig > +++ b/cmd/Kconfig > @@ -1439,6 +1439,12 @@ config CMD_POWEROFF > help > Poweroff/Shutdown the system > > +config CMD_PMIC_POWEROFF > + bool "PMIC poweroff" > + select CMD_POWEROFF > + help > + Shutdown the system using PMIC poweroff sequence. > + > config CMD_READ > bool "read - Read binary data from a partition" > help > diff --git a/cmd/boot.c b/cmd/boot.c > index 14839c1ced..4270034194 100644 > --- a/cmd/boot.c > +++ b/cmd/boot.c > @@ -9,7 +9,13 @@ > */ > #include <common.h> > #include <command.h> > +#include <dm.h> > +#include <log.h> > #include <net.h> > +#include <dm/device-internal.h> > +#include <dm/uclass-internal.h> > +#include <power/pmic.h> > +#include <linux/delay.h> > > #ifdef CONFIG_CMD_GO > > @@ -64,6 +70,40 @@ U_BOOT_CMD( > ); > > #ifdef CONFIG_CMD_POWEROFF > +#ifdef CONFIG_CMD_PMIC_POWEROFF > +int do_poweroff(struct cmd_tbl *cmdtp, int flag, > + int argc, char *const argv[]) > +{ > + struct uc_pmic_priv *pmic_priv; > + struct udevice *dev; > + int ret; > + > + for (uclass_find_first_device(UCLASS_PMIC, &dev); > + dev; > + uclass_find_next_device(&dev)) { > + if (dev && !device_active(dev)) { > + ret = device_probe(dev); > + if (ret) > + return ret; > + } > + > + /* value we need to check is set after probe */ > + pmic_priv = dev_get_uclass_priv(dev); > + if (pmic_priv->sys_pow_ctrl) { > + ret = pmic_poweroff(dev); > + > + /* wait some time and then print error */ > + mdelay(5000); > + log_err("Failed to power off!!!\n"); > + return ret; > + } > + } > + > + /* no device should reach here */ > + return 1; > +} > +#endif > + > U_BOOT_CMD( > poweroff, 1, 0, do_poweroff, > "Perform POWEROFF of the device", > -- > 2.39.2 >
How does this relate to sysreset_walk(SYSRESET_POWER_OFF) and do_poweroff() in cmd/boot.c? Regards, Simon