[PATCH v2 2/9] cmd: boot: implement PMIC based poweroff
Simon Glass
sjg at chromium.org
Sun Jul 23 05:48:25 CEST 2023
Hi Svyatoslav,
On Thu, 20 Jul 2023 at 02:48, Svyatoslav Ryhel <clamor95 at gmail.com> wrote:
>
> Use new PMIC ops to perform device poweroff.
>
> Signed-off-by: Svyatoslav Ryhel <clamor95 at 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
More information about the U-Boot
mailing list