sniper: Power off when the power on reason is not a valid one

In most cases, userspace will attempt to power off the device with HALT instead
of POWER_OFF, which triggers a reset instead of a proper power off from the
TWL4030. Hence, it is up to the bootloader to actually turn the device off when
there is no reason to turn it on.

A reboot identified with the OMAP reboot mode bits set is acceptable, as well as
a power on reason from either the power button, USB or charger plug.

Other cases should trigger a power off. Note that for the U-Boot reset command
to take effect, we have to fill-in the OMAP reboot bits.

Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
Reviewed-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
Paul Kocialkowski 2015-07-20 15:17:17 +02:00 committed by Tom Rini
parent 69f25415ed
commit 0e14f88957

View File

@ -94,6 +94,7 @@ int misc_init_r(void)
char serial_string[17] = { 0 };
char reboot_mode[2] = { 0 };
u32 dieid[4] = { 0 };
unsigned char data = 0;
/* Power button reset init */
@ -107,6 +108,18 @@ int misc_init_r(void)
setenv("reboot-mode", (char *)reboot_mode);
omap_reboot_mode_clear();
} else {
/*
* When not rebooting, valid power on reasons are either the
* power button, charger plug or USB plug.
*/
data |= twl4030_input_power_button();
data |= twl4030_input_charger();
data |= twl4030_input_usb();
if (!data)
twl4030_power_off();
}
/* Serial number */
@ -145,6 +158,11 @@ void get_board_serial(struct tag_serialnr *serialnr)
}
}
void reset_misc(void)
{
omap_reboot_mode_store('u');
}
int fb_set_reboot_flag(void)
{
return omap_reboot_mode_store('b');