mirror of
https://github.com/u-boot/u-boot.git
synced 2024-12-02 09:03:27 +08:00
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:
parent
69f25415ed
commit
0e14f88957
@ -94,6 +94,7 @@ int misc_init_r(void)
|
|||||||
char serial_string[17] = { 0 };
|
char serial_string[17] = { 0 };
|
||||||
char reboot_mode[2] = { 0 };
|
char reboot_mode[2] = { 0 };
|
||||||
u32 dieid[4] = { 0 };
|
u32 dieid[4] = { 0 };
|
||||||
|
unsigned char data = 0;
|
||||||
|
|
||||||
/* Power button reset init */
|
/* Power button reset init */
|
||||||
|
|
||||||
@ -107,6 +108,18 @@ int misc_init_r(void)
|
|||||||
setenv("reboot-mode", (char *)reboot_mode);
|
setenv("reboot-mode", (char *)reboot_mode);
|
||||||
|
|
||||||
omap_reboot_mode_clear();
|
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 */
|
/* 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)
|
int fb_set_reboot_flag(void)
|
||||||
{
|
{
|
||||||
return omap_reboot_mode_store('b');
|
return omap_reboot_mode_store('b');
|
||||||
|
Loading…
Reference in New Issue
Block a user