diff --git a/core/embed/sys/power_manager/stm32u5/power_control.c b/core/embed/sys/power_manager/stm32u5/power_control.c
index 69fb1bba33..9947805e6e 100644
--- a/core/embed/sys/power_manager/stm32u5/power_control.c
+++ b/core/embed/sys/power_manager/stm32u5/power_control.c
@@ -17,36 +17,33 @@
* along with this program. If not, see .
*/
-
+#include
#include
#include
-#include
-#include "power_manager_internal.h"
#include "../../powerctl/npm1300/npm1300.h"
+#include "power_manager_internal.h"
-pm_status_t pm_control_hibernate(){
+pm_status_t pm_control_hibernate() {
+ // TEMPORARY FIX:
+ // Enable Backup domain retentaion in VBAT mode before entering the
+ // hiberbation. BREN bit can be accessed only in LDO mode.
+ __HAL_RCC_PWR_CLK_ENABLE();
- // TEMPORARY FIX:
- // Enable Backup domain retentaion in VBAT mode before entering the
- // hiberbation. BREN bit can be accessed only in LDO mode.
- __HAL_RCC_PWR_CLK_ENABLE();
-
- // Switch to LDO regulator
- CLEAR_BIT(PWR->CR3, PWR_CR3_REGSEL);
- // Wait until system switch on new regulator
- while (HAL_IS_BIT_SET(PWR->SVMSR, PWR_SVMSR_REGS))
- ;
- // Enable backup domain retention
- PWR->BDCR1 |= PWR_BDCR1_BREN;
-
- if (!npm1300_enter_shipmode()) {
- return PM_ERROR;
- }
-
- // Wait for the device to power off
- systick_delay_ms(50);
+ // Switch to LDO regulator
+ CLEAR_BIT(PWR->CR3, PWR_CR3_REGSEL);
+ // Wait until system switch on new regulator
+ while (HAL_IS_BIT_SET(PWR->SVMSR, PWR_SVMSR_REGS))
+ ;
+ // Enable backup domain retention
+ PWR->BDCR1 |= PWR_BDCR1_BREN;
+ if (!npm1300_enter_shipmode()) {
return PM_ERROR;
-
+ }
+
+ // Wait for the device to power off
+ systick_delay_ms(50);
+
+ return PM_ERROR;
}
diff --git a/core/embed/sys/power_manager/stm32u5/power_manager.c b/core/embed/sys/power_manager/stm32u5/power_manager.c
index 5788d3b50d..54872ed30a 100644
--- a/core/embed/sys/power_manager/stm32u5/power_manager.c
+++ b/core/embed/sys/power_manager/stm32u5/power_manager.c
@@ -17,11 +17,11 @@
* along with this program. If not, see .
*/
+#include
#include
#include
#include
#include
-#include
#include "../../powerctl/npm1300/npm1300.h"
#include "../../powerctl/stwlc38/stwlc38.h"
@@ -59,41 +59,34 @@ pm_status_t pm_init(bool skip_bootup_sequence) {
PM_FUEL_GAUGE_R_AGGRESSIVE, PM_FUEL_GAUGE_Q_AGGRESSIVE,
PM_FUEL_GAUGE_P_INIT);
-
- if(skip_bootup_sequence) {
-
+ if (skip_bootup_sequence) {
// Skip bootup sequence and try to recover the power manages state left
// by the bootloader in backup ram.
backup_ram_power_manager_data_t pm_recovery_data;
- backup_ram_status_t status
- = backup_ram_read_power_manager_data(&pm_recovery_data);
+ backup_ram_status_t status =
+ backup_ram_read_power_manager_data(&pm_recovery_data);
if (status != BACKUP_RAM_OK &&
(pm_recovery_data.bootloader_exit_state != PM_STATE_POWER_SAVE &&
pm_recovery_data.bootloader_exit_state != PM_STATE_ACTIVE)) {
-
drv->state = PM_STATE_POWER_SAVE;
drv->fuel_gauge_request_new_guess = true;
- }else{
-
+ } else {
// Backup RAM contain valid data
drv->state = pm_recovery_data.bootloader_exit_state;
drv->fuel_gauge.soc = pm_recovery_data.soc;
drv->fuel_gauge_request_new_guess = false;
-
}
drv->fuel_gauge_initialized = true;
- }else{
-
+ } else {
// Start in lowest state and wait for the bootup sequence to
// finish (call of pm_turn_on())
drv->state = PM_STATE_HIBERNATE;
drv->initialized = false;
-
}
// Disable charging by default
@@ -241,9 +234,9 @@ pm_status_t pm_turn_on(void) {
// Try to recover SoC from the backup RAM
backup_ram_power_manager_data_t pm_recovery_data;
backup_ram_status_t status =
- backup_ram_read_power_manager_data(&pm_recovery_data);
+ backup_ram_read_power_manager_data(&pm_recovery_data);
- if(status == BACKUP_RAM_OK && pm_recovery_data.soc != 0.0f) {
+ if (status == BACKUP_RAM_OK && pm_recovery_data.soc != 0.0f) {
drv->fuel_gauge.soc = pm_recovery_data.soc;
} else {
pm_battery_initial_soc_guess();
@@ -314,7 +307,7 @@ pm_status_t pm_charging_disable(void) {
return PM_OK;
}
-pm_status_t pm_store_data_to_backup_ram(void){
+pm_status_t pm_store_data_to_backup_ram(void) {
pm_driver_t* drv = &g_pm;
if (!drv->initialized) {
@@ -325,8 +318,7 @@ pm_status_t pm_store_data_to_backup_ram(void){
pm_data.bootloader_exit_state = drv->state;
pm_data.soc = drv->fuel_gauge.soc;
- backup_ram_status_t status
- = backup_ram_store_power_manager_data(&pm_data);
+ backup_ram_status_t status = backup_ram_store_power_manager_data(&pm_data);
if (status != BACKUP_RAM_OK) {
return PM_ERROR;
@@ -345,5 +337,3 @@ static void pm_shutdown_timer_handler(void* context) {
drv->shutdown_timer_elapsed = true;
pm_process_state_machine();
}
-
-
diff --git a/core/embed/sys/power_manager/stm32u5/power_monitoring.c b/core/embed/sys/power_manager/stm32u5/power_monitoring.c
index f74c77e60b..175ba7931f 100644
--- a/core/embed/sys/power_manager/stm32u5/power_monitoring.c
+++ b/core/embed/sys/power_manager/stm32u5/power_monitoring.c
@@ -18,9 +18,9 @@
* along with this program. If not, see .
*/
+#include
#include
#include
-#include
#include "../../powerctl/fuel_gauge/fuel_gauge.h"
#include "../../powerctl/npm1300/npm1300.h"
@@ -37,43 +37,36 @@ void pm_monitor_power_sources(void) {
// Update fuel gauge state
if (drv->fuel_gauge_initialized) {
-
- if(drv->fuel_gauge_request_new_guess){
-
+ if (drv->fuel_gauge_request_new_guess) {
// Request new single SoC guess based on the latest measurements
fuel_gauge_initial_guess(&drv->fuel_gauge, drv->pmic_data.vbat,
- drv->pmic_data.ibat, drv->pmic_data.ntc_temp);
+ drv->pmic_data.ibat, drv->pmic_data.ntc_temp);
drv->fuel_gauge_request_new_guess = false;
- }else{
-
+ } else {
fuel_gauge_update(&drv->fuel_gauge, PM_BATTERY_SAMPLING_PERIOD_MS,
- drv->pmic_data.vbat, drv->pmic_data.ibat,
- drv->pmic_data.ntc_temp);
+ drv->pmic_data.vbat, drv->pmic_data.ibat,
+ drv->pmic_data.ntc_temp);
// Ceil the float soc to user friendly integer
- uint8_t soc_ceiled_temp = (int)(drv->fuel_gauge.soc_latched * 100 + 0.999f);
+ uint8_t soc_ceiled_temp =
+ (int)(drv->fuel_gauge.soc_latched * 100 + 0.999f);
if (soc_ceiled_temp != drv->soc_ceiled) {
drv->soc_ceiled = soc_ceiled_temp;
PM_SET_EVENT(drv->event_flags, PM_EVENT_SOC_UPDATED);
}
-
}
} else {
-
pm_battery_sampling(drv->pmic_data.vbat, drv->pmic_data.ibat,
drv->pmic_data.ntc_temp);
// Battery sampling period, collect data before initial guess is made.
fuel_gauge_initial_guess(&drv->fuel_gauge, drv->pmic_data.vbat,
drv->pmic_data.ibat, drv->pmic_data.ntc_temp);
-
}
-
-
// Check USB power source status
if (drv->pmic_data.usb_status != 0x0) {
if (!drv->usb_connected) {
@@ -255,8 +248,7 @@ void pm_battery_initial_soc_guess(void) {
fuel_gauge_initial_guess(&drv->fuel_gauge, vbat_g, ibat_g, ntc_temp_g);
}
-void pm_store_power_manager_data(pm_driver_t* drv){
-
+void pm_store_power_manager_data(pm_driver_t* drv) {
backup_ram_power_manager_data_t pm_data = {0};
// Store the current state of the power manager
@@ -265,6 +257,4 @@ void pm_store_power_manager_data(pm_driver_t* drv){
// Store the data in backup RAM
backup_ram_store_power_manager_data(&pm_data);
-
}
-
diff --git a/core/embed/sys/power_manager/stm32u5/power_states.c b/core/embed/sys/power_manager/stm32u5/power_states.c
index 1c396c2e53..d43e21565c 100644
--- a/core/embed/sys/power_manager/stm32u5/power_states.c
+++ b/core/embed/sys/power_manager/stm32u5/power_states.c
@@ -309,7 +309,6 @@ void pm_enter_suspend(pm_driver_t* drv) {
}
void pm_enter_hibernate(pm_driver_t* drv) {
-
pm_store_power_manager_data(drv);
reboot_device();