[PATCH v2 2/2] sunxi: Add option to prevent booting on power plug-in
Chris Morgan
macromorgan at hotmail.com
Fri Jan 21 17:35:33 CET 2022
On Fri, Jan 21, 2022 at 01:37:32PM +0000, Andre Przywara wrote:
> From: Chris Morgan <macromorgan at hotmail.com>
>
> For sunxi boards with the AXP209, AXP221, AXP809, and AXP818 PMICs
> (plus possibly others, I only confirmed the datasheets for these),
> it is sometimes desirable to not boot whenever the device is
> plugged in. An example would be when using the NTC CHIP inside a
> PocketCHIP.
> This provides a configurable option to check if bit 0 of
> register 0 of the PMIC says it was powered because of a power button
> press (0) or a plug-in event (1). If the value is 1 and this option
> is selected, the device shuts down shortly after printing a message
> to console stating the reason why it's shutting down. Powering up the
> board with the power button is not affected.
Tested-By: Chris Morgan <macromorgan at hotmail.com>
>
> Signed-off-by: Chris Morgan <macromorgan at hotmail.com>
> [Andre: reword to speak of boot, remove #ifdefs]
> Signed-off-by: Andre Przywara <andre.przywara at arm.com>
>
> adapt board.c to generic AXP symbols
> ---
> arch/arm/mach-sunxi/Kconfig | 10 ++++++++++
> board/sunxi/board.c | 11 +++++++++++
> 2 files changed, 21 insertions(+)
>
> diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig
> index 2c18cf02d1..d7f9a03152 100644
> --- a/arch/arm/mach-sunxi/Kconfig
> +++ b/arch/arm/mach-sunxi/Kconfig
> @@ -785,6 +785,16 @@ config AXP_GPIO
> ---help---
> Say Y here to enable support for the gpio pins of the axp PMIC ICs.
>
> +config AXP_DISABLE_BOOT_ON_POWERON
> + bool "Disable device boot on power plug-in"
> + depends on AXP209_POWER || AXP221_POWER || AXP809_POWER || AXP818_POWER
> + default n
> + ---help---
> + Say Y here to prevent the device from booting up because of a plug-in
> + event. When set, the device will boot into the SPL briefly to
> + determine why it was powered on, and if it was determined because of
> + a plug-in event instead of a button press event it will shut back off.
> +
> config VIDEO_SUNXI
> bool "Enable graphical uboot console on HDMI, LCD or VGA"
> depends on !MACH_SUN8I_A83T
> diff --git a/board/sunxi/board.c b/board/sunxi/board.c
> index fdbcd40269..3b5e7f3cdc 100644
> --- a/board/sunxi/board.c
> +++ b/board/sunxi/board.c
> @@ -27,6 +27,7 @@
> #include <asm/arch/dram.h>
> #include <asm/arch/mmc.h>
> #include <asm/arch/prcm.h>
> +#include <asm/arch/pmic_bus.h>
> #include <asm/arch/spl.h>
> #include <asm/global_data.h>
> #include <linux/delay.h>
> @@ -601,6 +602,16 @@ void sunxi_board_init(void)
> defined CONFIG_AXP809_POWER || defined CONFIG_AXP818_POWER
> power_failed = axp_init();
>
> + if (IS_ENABLED(AXP_DISABLE_BOOT_ON_POWERON) && !power_failed) {
This doesn't work for me unless I change this to
IS_ENABLED(CONFIG_AXP_DISABLE_BOOT_ON_POWERON)
With this change though, it works just fine on my use case.
> + u8 boot_reason;
> +
> + pmic_bus_read(AXP_POWER_STATUS, &boot_reason);
> + if (boot_reason & AXP_POWER_STATUS_ALDO_IN) {
> + printf("Power on by plug-in, shutting down.\n");
> + pmic_bus_write(0x32, BIT(7));
> + }
> + }
> +
> #if defined CONFIG_AXP221_POWER || defined CONFIG_AXP809_POWER || \
> defined CONFIG_AXP818_POWER
> power_failed |= axp_set_dcdc1(CONFIG_AXP_DCDC1_VOLT);
> --
> 2.25.1
>
More information about the U-Boot
mailing list