From 4b9fb839cd5c0b62bfed100464d2e30945b44e00 Mon Sep 17 00:00:00 2001 From: kopecdav Date: Thu, 8 May 2025 15:24:14 +0200 Subject: [PATCH] refactor(core): split pmic as a separate feature [no changelog] --- .../models/T3W1/boards/trezor_t3w1_revA.h | 2 +- .../models/T3W1/boards/trezor_t3w1_revB.h | 2 +- .../models/T3W1/boards/trezor_t3w1_revC.h | 2 +- core/embed/projects/boardloader/main.c | 12 ++-- core/embed/rust/Cargo.toml | 1 + .../{npm1300/npm1300.h => inc/sys/pmic.h} | 54 ++++++++-------- .../embed/sys/power_manager/npm1300/npm1300.c | 64 +++++++++---------- .../sys/power_manager/stm32u5/power_control.c | 10 +-- .../sys/power_manager/stm32u5/power_manager.c | 10 +-- .../stm32u5/power_manager_internal.h | 8 +-- .../power_manager/stm32u5/power_monitoring.c | 28 ++++---- .../sys/power_manager/stm32u5/power_states.c | 9 +-- .../models/T3W1/trezor_t3w1_revA.py | 35 ++++++---- .../models/T3W1/trezor_t3w1_revB.py | 36 +++++++---- .../models/T3W1/trezor_t3w1_revC.py | 36 +++++++---- 15 files changed, 165 insertions(+), 144 deletions(-) rename core/embed/sys/power_manager/{npm1300/npm1300.h => inc/sys/pmic.h} (72%) diff --git a/core/embed/models/T3W1/boards/trezor_t3w1_revA.h b/core/embed/models/T3W1/boards/trezor_t3w1_revA.h index 783895f186..9e112e5eb3 100644 --- a/core/embed/models/T3W1/boards/trezor_t3w1_revA.h +++ b/core/embed/models/T3W1/boards/trezor_t3w1_revA.h @@ -29,7 +29,7 @@ #define TPS61062_EN_PORT GPIOB #define TPS61062_EN_CLK_ENA __HAL_RCC_GPIOB_CLK_ENABLE -#define NPM1300_I2C_INSTANCE 0 +#define PMIC_I2C_INSTANCE 0 #define STWLC38_I2C_INSTANCE 1 diff --git a/core/embed/models/T3W1/boards/trezor_t3w1_revB.h b/core/embed/models/T3W1/boards/trezor_t3w1_revB.h index ea606158bc..753a725565 100644 --- a/core/embed/models/T3W1/boards/trezor_t3w1_revB.h +++ b/core/embed/models/T3W1/boards/trezor_t3w1_revB.h @@ -29,7 +29,7 @@ #define TPS61062_EN_PORT GPIOB #define TPS61062_EN_CLK_ENA __HAL_RCC_GPIOB_CLK_ENABLE -#define NPM1300_I2C_INSTANCE 0 +#define PMIC_I2C_INSTANCE 0 #define STWLC38_I2C_INSTANCE 1 diff --git a/core/embed/models/T3W1/boards/trezor_t3w1_revC.h b/core/embed/models/T3W1/boards/trezor_t3w1_revC.h index f1b1424fc5..1c143efcb4 100644 --- a/core/embed/models/T3W1/boards/trezor_t3w1_revC.h +++ b/core/embed/models/T3W1/boards/trezor_t3w1_revC.h @@ -29,7 +29,7 @@ #define TPS61062_EN_PORT GPIOB #define TPS61062_EN_CLK_ENA __HAL_RCC_GPIOB_CLK_ENABLE -#define NPM1300_I2C_INSTANCE 0 +#define PMIC_I2C_INSTANCE 0 #define STWLC38_I2C_INSTANCE 1 diff --git a/core/embed/projects/boardloader/main.c b/core/embed/projects/boardloader/main.c index b4d3393ad4..3ca1628daf 100644 --- a/core/embed/projects/boardloader/main.c +++ b/core/embed/projects/boardloader/main.c @@ -32,8 +32,8 @@ #include #include -#ifdef USE_POWER_MANAGER -#include "../npm1300/npm1300.h" +#ifdef USE_PMIC +#include #endif #ifdef USE_PVD @@ -72,8 +72,8 @@ static const uint8_t * const BOARDLOADER_KEYS[] = { }; static void drivers_init(void) { -#ifdef USE_POWER_MANAGER - npm1300_init(); +#ifdef USE_PMIC + pmic_init(); #endif #ifdef USE_PVD pvd_init(); @@ -98,8 +98,8 @@ static void drivers_deinit(void) { // TODO #endif display_deinit(DISPLAY_JUMP_BEHAVIOR); -#ifdef USE_POWER_MANAGER - npm1300_deinit(); +#ifdef USE_PMIC + pmic_deinit(); #endif } diff --git a/core/embed/rust/Cargo.toml b/core/embed/rust/Cargo.toml index 07f59f1800..4e3314797c 100644 --- a/core/embed/rust/Cargo.toml +++ b/core/embed/rust/Cargo.toml @@ -40,6 +40,7 @@ haptic = [] sd_card = [] rgb_led = [] power_manager = [] +pmic = [] backlight = [] usb = [] optiga = [] diff --git a/core/embed/sys/power_manager/npm1300/npm1300.h b/core/embed/sys/power_manager/inc/sys/pmic.h similarity index 72% rename from core/embed/sys/power_manager/npm1300/npm1300.h rename to core/embed/sys/power_manager/inc/sys/pmic.h index f081a21314..fb376be05b 100644 --- a/core/embed/sys/power_manager/npm1300/npm1300.h +++ b/core/embed/sys/power_manager/inc/sys/pmic.h @@ -17,17 +17,16 @@ * along with this program. If not, see . */ -#ifndef TREZORHAL_NPM1300_H -#define TREZORHAL_NPM1300_H +#pragma once #include // Charging current limits -// - range of np1300 is 32-800mA +// - range of pmic is 32-800mA // - used battery limit is 180mA -#define NPM1300_CHARGING_LIMIT_MIN 32 // mA -#define NPM1300_CHARGING_LIMIT_MAX 180 // mA -#define NPM1300_CHARGING_LIMIT_DEFAULT 180 // mA +#define PMIC_CHARGING_LIMIT_MIN 32 // mA +#define PMIC_CHARGING_LIMIT_MAX 180 // mA +#define PMIC_CHARGING_LIMIT_DEFAULT 180 // mA typedef struct { // Battery voltage [V] @@ -43,25 +42,24 @@ typedef struct { // Die temperature [°C] float die_temp; // IBAT_MEAS_STATUS register value - // (for debugging purposes, see the NPM1300 datasheet) + // (for debugging purposes, see the datasheet) uint8_t ibat_meas_status; // BUCKSTATUS register value - // (for debugging purposes, see the NPM1300 datasheet) + // (for debugging purposes, see the datasheet) uint8_t buck_status; uint8_t usb_status; -} npm1300_report_t; +} pmic_report_t; -typedef void (*npm1300_report_callback_t)(void* context, - npm1300_report_t* report); +typedef void (*pmic_report_callback_t)(void* context, pmic_report_t* report); -// Initializes NPM1300 PMIC driver -bool npm1300_init(void); +// Initializes PMIC driver +bool pmic_init(void); -// Deinitializes NPM1300 PMIC driver -void npm1300_deinit(void); +// Deinitializes PMIC driver +void pmic_deinit(void); // Gets the cause of the last restart -uint8_t npm1300_restart_cause(void); +uint8_t pmic_restart_cause(void); // Switches the device to ship mode. // @@ -78,7 +76,7 @@ uint8_t npm1300_restart_cause(void); // // Returns `false` if the operation fails (likely due to uninitialized power // management). -bool npm1300_enter_shipmode(void); +bool pmic_enter_shipmode(void); // Starts the asynchronous measurement // @@ -88,7 +86,7 @@ bool npm1300_enter_shipmode(void); // The function returns `false` if the measurement cannot be started // (e.g. because the previous measurement is still in progress or // the the driver is not initialized). -bool npm1300_measure(npm1300_report_callback_t callback, void* context); +bool pmic_measure(pmic_report_callback_t callback, void* context); // Synchroneous version of the `pmic_measure` function. // @@ -97,12 +95,12 @@ bool npm1300_measure(npm1300_report_callback_t callback, void* context); // // Returns `true` if the measurement was successful and the report // is stored in the `report` structure. -bool npm1300_measure_sync(npm1300_report_t* report); +bool pmic_measure_sync(pmic_report_t* report); // Enables or disables the charging. // // The function returns `false` if the operation cannot be performed. -bool npm1300_set_charging(bool enable); +bool pmic_set_charging(bool enable); // Sets the charging current limit [mA]. // @@ -110,18 +108,16 @@ bool npm1300_set_charging(bool enable); // `NPM1300_CHARGING_LIMIT_MIN` and `NPM1300_CHARGING_LIMIT_MAX` constants. // // The function returns `false` if the operation cannot be performed. -bool npm1300_set_charging_limit(int i_charge); +bool pmic_set_charging_limit(int i_charge); // Gets the charging current limit [mA]. -int npm1300_get_charging_limit(void); +int pmic_get_charging_limit(void); typedef enum { - NPM1300_BUCK_MODE_AUTO, - NPM1300_BUCK_MODE_PWM, - NPM1300_BUCK_MODE_PFM, -} npm1300_buck_mode_t; + PMIC_BUCK_MODE_AUTO, + PMIC_BUCK_MODE_PWM, + PMIC_BUCK_MODE_PFM, +} pmic_buck_mode_t; // Set the buck voltage regulator mode -bool npm1300_set_buck_mode(npm1300_buck_mode_t buck_mode); - -#endif // TREZORHAL_NPM1300_H +bool pmic_set_buck_mode(pmic_buck_mode_t buck_mode); diff --git a/core/embed/sys/power_manager/npm1300/npm1300.c b/core/embed/sys/power_manager/npm1300/npm1300.c index a0cd509150..bc0899fbf7 100644 --- a/core/embed/sys/power_manager/npm1300/npm1300.c +++ b/core/embed/sys/power_manager/npm1300/npm1300.c @@ -24,9 +24,9 @@ #include #include +#include #include -#include "npm1300.h" #include "npm1300_defs.h" #ifdef KERNEL_MODE @@ -111,9 +111,9 @@ typedef struct { bool charging_requested; // Buck voltage regulator mode - npm1300_buck_mode_t buck_mode; // written value - npm1300_buck_mode_t buck_mode_requested; // requested value - npm1300_buck_mode_t buck_mode_set; // value beeing written + pmic_buck_mode_t buck_mode; // written value + pmic_buck_mode_t buck_mode_requested; // requested value + pmic_buck_mode_t buck_mode_set; // value beeing written // Enter ship mode bool shipmode_requested; @@ -123,7 +123,7 @@ typedef struct { bool adc_readout_requested; // Report callback used for asynchronous measurements - npm1300_report_callback_t report_callback; + pmic_report_callback_t report_callback; void* report_callback_context; } npm1300_driver_t; @@ -295,7 +295,7 @@ static bool npm1300_initialize(i2c_bus_t* bus, uint16_t i_charge, return true; } -bool npm1300_init(void) { +bool pmic_init(void) { npm1300_driver_t* drv = &g_npm1300_driver; if (drv->initialized) { @@ -304,17 +304,17 @@ bool npm1300_init(void) { memset(drv, 0, sizeof(npm1300_driver_t)); - drv->i_charge = NPM1300_CHARGING_LIMIT_DEFAULT; // mA - drv->i_limit = 500; // mA (268mA-1340mA) + drv->i_charge = PMIC_CHARGING_LIMIT_DEFAULT; // mA + drv->i_limit = 500; // mA (268mA-1340mA) drv->i_charge_set = drv->i_charge; drv->i_charge_requested = drv->i_charge; - drv->buck_mode_requested = NPM1300_BUCK_MODE_AUTO; - drv->buck_mode_set = NPM1300_BUCK_MODE_AUTO; - drv->buck_mode = NPM1300_BUCK_MODE_AUTO; + drv->buck_mode_requested = PMIC_BUCK_MODE_AUTO; + drv->buck_mode_set = PMIC_BUCK_MODE_AUTO; + drv->buck_mode = PMIC_BUCK_MODE_AUTO; - drv->i2c_bus = i2c_bus_open(NPM1300_I2C_INSTANCE); + drv->i2c_bus = i2c_bus_open(PMIC_I2C_INSTANCE); if (drv->i2c_bus == NULL) { goto cleanup; } @@ -337,11 +337,11 @@ bool npm1300_init(void) { return true; cleanup: - npm1300_deinit(); + pmic_deinit(); return false; } -void npm1300_deinit(void) { +void pmic_deinit(void) { npm1300_driver_t* drv = &g_npm1300_driver; i2c_bus_close(drv->i2c_bus); @@ -350,7 +350,7 @@ void npm1300_deinit(void) { memset(drv, 0, sizeof(npm1300_driver_t)); } -bool npm1300_enter_shipmode(void) { +bool pmic_enter_shipmode(void) { npm1300_driver_t* drv = &g_npm1300_driver; if (!drv->initialized) { @@ -365,7 +365,7 @@ bool npm1300_enter_shipmode(void) { return true; } -int npm1300_get_charging_limit(void) { +int pmic_get_charging_limit(void) { npm1300_driver_t* drv = &g_npm1300_driver; if (!drv->initialized) { @@ -375,15 +375,15 @@ int npm1300_get_charging_limit(void) { return drv->i_charge_requested; } -bool npm1300_set_charging_limit(int i_charge) { +bool pmic_set_charging_limit(int i_charge) { npm1300_driver_t* drv = &g_npm1300_driver; if (!drv->initialized) { return false; } - if (i_charge < NPM1300_CHARGING_LIMIT_MIN || - i_charge > NPM1300_CHARGING_LIMIT_MAX) { + if (i_charge < PMIC_CHARGING_LIMIT_MIN || + i_charge > PMIC_CHARGING_LIMIT_MAX) { // The value is out of range return false; } @@ -396,7 +396,7 @@ bool npm1300_set_charging_limit(int i_charge) { return true; } -bool npm1300_set_charging(bool enable) { +bool pmic_set_charging(bool enable) { npm1300_driver_t* drv = &g_npm1300_driver; if (!drv->initialized) { @@ -411,7 +411,7 @@ bool npm1300_set_charging(bool enable) { return true; } -bool npm1300_set_buck_mode(npm1300_buck_mode_t buck_mode) { +bool pmic_set_buck_mode(pmic_buck_mode_t buck_mode) { npm1300_driver_t* drv = &g_npm1300_driver; if (!drv->initialized) { @@ -436,7 +436,7 @@ uint8_t npm1300_restart_cause(void) { return drv->restart_cause; } -bool npm1300_measure(npm1300_report_callback_t callback, void* context) { +bool pmic_measure(pmic_report_callback_t callback, void* context) { npm1300_driver_t* drv = &g_npm1300_driver; if (!drv->initialized) { @@ -470,25 +470,25 @@ typedef struct { // Set when the measurement is done volatile bool done; // Report structure where the measurement is stored - npm1300_report_t* report; + pmic_report_t* report; } npm1300_sync_measure_t; // Callback for the synchronous measurement static void npm1300_sync_measure_callback(void* context, - npm1300_report_t* report) { + pmic_report_t* report) { npm1300_sync_measure_t* ctx = (npm1300_sync_measure_t*)context; *ctx->report = *report; ctx->done = true; } -bool npm1300_measure_sync(npm1300_report_t* report) { +bool pmic_measure_sync(pmic_report_t* report) { npm1300_sync_measure_t measure = { .done = false, .report = report, }; // Start asynchronous measurement - if (!npm1300_measure(npm1300_sync_measure_callback, &measure)) { + if (!pmic_measure(npm1300_sync_measure_callback, &measure)) { return false; } @@ -505,8 +505,8 @@ bool npm1300_measure_sync(npm1300_report_t* report) { // // This function is called in the irq context. static void npm1300_calculate_report(npm1300_driver_t* drv, - npm1300_report_t* report) { - memset(report, 0, sizeof(npm1300_report_t)); + pmic_report_t* report) { + memset(report, 0, sizeof(pmic_report_t)); npm1300_adc_regs_t* r = &drv->adc_regs; @@ -784,11 +784,11 @@ static void npm1300_i2c_callback(void* context, i2c_packet_t* packet) { case NPM1300_STATE_ADC_READOUT: drv->adc_readout_requested = false; - npm1300_report_t report; + pmic_report_t report; npm1300_calculate_report(drv, &report); // Invoke report callback - npm1300_report_callback_t report_callback = drv->report_callback; + pmic_report_callback_t report_callback = drv->report_callback; void* report_callback_context = drv->report_callback_context; // Clear the report callback before invoking it @@ -848,9 +848,9 @@ static void npm1300_fsm_continue(npm1300_driver_t* drv) { } } else if (drv->buck_mode != drv->buck_mode_requested) { drv->buck_mode_set = drv->buck_mode_requested; - if (drv->buck_mode_set == NPM1300_BUCK_MODE_PWM) { + if (drv->buck_mode_set == PMIC_BUCK_MODE_PWM) { npm1300_i2c_submit(drv, npm1300_ops_buck_pwm); - } else if (drv->buck_mode_set == NPM1300_BUCK_MODE_PFM) { + } else if (drv->buck_mode_set == PMIC_BUCK_MODE_PFM) { npm1300_i2c_submit(drv, npm1300_ops_buck_pfm); } else { npm1300_i2c_submit(drv, npm1300_ops_buck_auto); diff --git a/core/embed/sys/power_manager/stm32u5/power_control.c b/core/embed/sys/power_manager/stm32u5/power_control.c index 82c45563a9..c99a6c2ba0 100644 --- a/core/embed/sys/power_manager/stm32u5/power_control.c +++ b/core/embed/sys/power_manager/stm32u5/power_control.c @@ -23,9 +23,9 @@ #include #include #include +#include #include -#include "../npm1300/npm1300.h" #include "power_manager_internal.h" #ifdef USE_OPTIGA @@ -60,8 +60,8 @@ static void pm_background_tasks_resume(void); 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. + // Enable Backup domain retention in VBAT mode before entering the + // hibernation. BREN bit can be accessed only in LDO mode. __HAL_RCC_PWR_CLK_ENABLE(); // Switch to LDO regulator @@ -72,7 +72,7 @@ pm_status_t pm_control_hibernate() { // Enable backup domain retention PWR->BDCR1 |= PWR_BDCR1_BREN; - if (!npm1300_enter_shipmode()) { + if (!pmic_enter_shipmode()) { return PM_ERROR; } @@ -210,7 +210,7 @@ void pm_control_suspend() { static void pm_background_tasks_suspend(void) { // stwlc38 - // npm1300 + // pmic // nrf52 // ble // powerctl diff --git a/core/embed/sys/power_manager/stm32u5/power_manager.c b/core/embed/sys/power_manager/stm32u5/power_manager.c index dbb47657f9..5af1582fa7 100644 --- a/core/embed/sys/power_manager/stm32u5/power_manager.c +++ b/core/embed/sys/power_manager/stm32u5/power_manager.c @@ -19,11 +19,11 @@ #include #include +#include #include #include #include -#include "../npm1300/npm1300.h" #include "../stwlc38/stwlc38.h" #include "power_manager_internal.h" @@ -49,7 +49,7 @@ pm_status_t pm_init(bool inherit_state) { memset(drv, 0, sizeof(pm_driver_t)); // Initialize hardware subsystems - if (!npm1300_init() || !stwlc38_init()) { + if (!pmic_init() || !stwlc38_init()) { pm_deinit(); return PM_ERROR; } @@ -67,7 +67,7 @@ pm_status_t pm_init(bool inherit_state) { drv->shutdown_timer = systimer_create(pm_shutdown_timer_handler, NULL); // Initial power source measurement - npm1300_measure(pm_pmic_data_ready, NULL); + pmic_measure(pm_pmic_data_ready, NULL); // Try to recover SoC from the backup RAM backup_ram_power_manager_data_t pm_recovery_data; @@ -84,7 +84,7 @@ pm_status_t pm_init(bool inherit_state) { } if (inherit_state) { - // Inherit power manager state left in beckup RAM from bootloader. + // Inherit power manager state left in backup RAM from bootloader. // in case of error, start with PM_STATE_POWER_SAVE as a lowest state in // active mode. if (status != BACKUP_RAM_OK && @@ -140,7 +140,7 @@ void pm_deinit(void) { pm_store_data_to_backup_ram(); } - npm1300_deinit(); + pmic_deinit(); stwlc38_deinit(); drv->initialized = false; diff --git a/core/embed/sys/power_manager/stm32u5/power_manager_internal.h b/core/embed/sys/power_manager/stm32u5/power_manager_internal.h index 43b96e3608..e6742a4b9b 100644 --- a/core/embed/sys/power_manager/stm32u5/power_manager_internal.h +++ b/core/embed/sys/power_manager/stm32u5/power_manager_internal.h @@ -19,12 +19,12 @@ #pragma once +#include #include #include #include #include "../fuel_gauge/fuel_gauge.h" -#include "../npm1300/npm1300.h" #include "../stwlc38/stwlc38.h" // Power manager thresholds & timings @@ -50,7 +50,7 @@ #define PM_CLEAR_EVENT(flags, event) ((flags) &= ~(event)) #define PM_CLEAR_ALL_EVENTS(flags) ((flags) = 0) -// Power manager battery sampling data structure) +// Power manager battery sampling data structure typedef struct { float vbat; // Battery voltage [V] float ibat; // Battery current [mA] @@ -78,7 +78,7 @@ typedef struct { uint32_t charging_target_timestamp; // Power source hardware state - npm1300_report_t pmic_data; + pmic_report_t pmic_data; stwlc38_report_t wireless_data; uint32_t pmic_last_update_ms; uint32_t pmic_sampling_period_ms; @@ -118,7 +118,7 @@ extern pm_driver_t g_pm; // Internal function declarations void pm_monitor_power_sources(void); void pm_process_state_machine(void); -void pm_pmic_data_ready(void* context, npm1300_report_t* report); +void pm_pmic_data_ready(void* context, pmic_report_t* report); void pm_charging_controller(pm_driver_t* drv); void pm_battery_sampling(float vbat, float ibat, float ntc_temp); void pm_battery_initial_soc_guess(void); diff --git a/core/embed/sys/power_manager/stm32u5/power_monitoring.c b/core/embed/sys/power_manager/stm32u5/power_monitoring.c index 72dee9a525..0ba73b526f 100644 --- a/core/embed/sys/power_manager/stm32u5/power_monitoring.c +++ b/core/embed/sys/power_manager/stm32u5/power_monitoring.c @@ -19,11 +19,11 @@ */ #include +#include #include #include #include "../fuel_gauge/fuel_gauge.h" -#include "../npm1300/npm1300.h" #include "../stwlc38/stwlc38.h" #include "power_manager_internal.h" @@ -80,7 +80,7 @@ void pm_monitor_power_sources(void) { drv->pmic_data.ntc_temp); // Request fresh measurements - npm1300_measure(pm_pmic_data_ready, NULL); + pmic_measure(pm_pmic_data_ready, NULL); drv->pmic_measurement_ready = false; return; @@ -111,14 +111,14 @@ void pm_monitor_power_sources(void) { pm_store_data_to_backup_ram(); // Request fresh measurements - npm1300_measure(pm_pmic_data_ready, NULL); + pmic_measure(pm_pmic_data_ready, NULL); drv->pmic_measurement_ready = false; drv->state_machine_stabilized = true; } // PMIC measurement callback -void pm_pmic_data_ready(void* context, npm1300_report_t* report) { +void pm_pmic_data_ready(void* context, pmic_report_t* report) { pm_driver_t* drv = &g_pm; // Store measurement timestamp @@ -132,7 +132,7 @@ void pm_pmic_data_ready(void* context, npm1300_report_t* report) { drv->pmic_last_update_ms = systick_ms(); // Copy PMIC data - memcpy(&drv->pmic_data, report, sizeof(npm1300_report_t)); + memcpy(&drv->pmic_data, report, sizeof(pmic_report_t)); // Get wireless charger data stwlc38_get_report(&drv->wireless_data); @@ -152,22 +152,22 @@ void pm_charging_controller(pm_driver_t* drv) { } } else if (drv->usb_connected) { // USB connected, set maximum charging current right away - drv->charging_current_target_ma = NPM1300_CHARGING_LIMIT_MAX; + drv->charging_current_target_ma = PMIC_CHARGING_LIMIT_MAX; } else if (drv->wireless_connected) { // Gradually increase charging current to the maximum - if (drv->charging_current_target_ma == NPM1300_CHARGING_LIMIT_MAX) { + if (drv->charging_current_target_ma == PMIC_CHARGING_LIMIT_MAX) { // No action required } else if (drv->charging_current_target_ma == 0) { - drv->charging_current_target_ma = NPM1300_CHARGING_LIMIT_MIN; + drv->charging_current_target_ma = PMIC_CHARGING_LIMIT_MIN; drv->charging_target_timestamp = systick_ms(); } else if (systick_ms() - drv->charging_target_timestamp > PM_WPC_CHARGE_CURR_STEP_TIMEOUT_MS) { drv->charging_current_target_ma += PM_WPC_CHARGE_CURR_STEP_MA; drv->charging_target_timestamp = systick_ms(); - if (drv->charging_current_target_ma > NPM1300_CHARGING_LIMIT_MAX) { - drv->charging_current_target_ma = NPM1300_CHARGING_LIMIT_MAX; + if (drv->charging_current_target_ma > PMIC_CHARGING_LIMIT_MAX) { + drv->charging_current_target_ma = PMIC_CHARGING_LIMIT_MAX; } } @@ -177,15 +177,15 @@ void pm_charging_controller(pm_driver_t* drv) { } // Set charging target - if (drv->charging_current_target_ma != npm1300_get_charging_limit()) { + if (drv->charging_current_target_ma != pmic_get_charging_limit()) { // Set charging current limit - npm1300_set_charging_limit(drv->charging_current_target_ma); + pmic_set_charging_limit(drv->charging_current_target_ma); } if (drv->charging_current_target_ma == 0) { - npm1300_set_charging(false); + pmic_set_charging(false); } else { - npm1300_set_charging(true); + pmic_set_charging(true); } } diff --git a/core/embed/sys/power_manager/stm32u5/power_states.c b/core/embed/sys/power_manager/stm32u5/power_states.c index b6d13d5572..b355675f6f 100644 --- a/core/embed/sys/power_manager/stm32u5/power_states.c +++ b/core/embed/sys/power_manager/stm32u5/power_states.c @@ -18,14 +18,11 @@ */ #include -#ifdef USE_BUTTON -#include -#endif #include +#include #include #include -#include "../npm1300/npm1300.h" #include "power_manager_internal.h" // State handler lookup table @@ -140,12 +137,11 @@ pm_internal_state_t pm_handle_state_charging(pm_driver_t* drv) { return PM_STATE_CHARGING; } - // Not implemented yet return drv->state; } pm_internal_state_t pm_handle_state_suspend(pm_driver_t* drv) { - // immediatelly return to power save state after wakeup + // immediately return to power save state after wakeup return PM_STATE_POWER_SAVE; } @@ -158,7 +154,6 @@ pm_internal_state_t pm_handle_state_startup_rejected(pm_driver_t* drv) { return PM_STATE_HIBERNATE; } - // Not implemented yet return drv->state; } diff --git a/core/site_scons/models/T3W1/trezor_t3w1_revA.py b/core/site_scons/models/T3W1/trezor_t3w1_revA.py index 63f82d11a5..06f0372fbf 100644 --- a/core/site_scons/models/T3W1/trezor_t3w1_revA.py +++ b/core/site_scons/models/T3W1/trezor_t3w1_revA.py @@ -235,19 +235,28 @@ def configure( ("USE_OEM_KEYS_CHECK", "1"), ] - sources += [ - "embed/sys/power_manager/stm32u5/power_manager.c", - "embed/sys/power_manager/stm32u5/power_monitoring.c", - "embed/sys/power_manager/stm32u5/power_states.c", - "embed/sys/power_manager/stm32u5/power_control.c", - "embed/sys/power_manager/npm1300/npm1300.c", - "embed/sys/power_manager/fuel_gauge/fuel_gauge.c", - "embed/sys/power_manager/fuel_gauge/battery_model.c", - "embed/sys/power_manager/stwlc38/stwlc38.c", - "embed/sys/power_manager/stwlc38/stwlc38_patching.c", - ] - paths += ["embed/sys/power_manager/inc"] - defines += [("USE_POWER_MANAGER", "1")] + if ("pmic" in features_wanted) or ("power_manager" in features_wanted): + sources += [ + "embed/sys/power_manager/npm1300/npm1300.c" + ] + paths += ["embed/sys/power_manager/inc"] + defines += ["USE_PMIC"] + features_available.append("pmic") + + if "power_manager" in features_wanted: + sources += [ + "embed/sys/power_manager/stm32u5/power_manager.c", + "embed/sys/power_manager/stm32u5/power_monitoring.c", + "embed/sys/power_manager/stm32u5/power_states.c", + "embed/sys/power_manager/stm32u5/power_control.c", + "embed/sys/power_manager/fuel_gauge/fuel_gauge.c", + "embed/sys/power_manager/fuel_gauge/battery_model.c", + "embed/sys/power_manager/stwlc38/stwlc38.c", + "embed/sys/power_manager/stwlc38/stwlc38_patching.c", + ] + paths += ["embed/sys/power_manager/inc"] + defines += [("USE_POWER_MANAGER", "1")] + features_available.append("power_manager") env.get("ENV")["LINKER_SCRIPT"] = linker_script diff --git a/core/site_scons/models/T3W1/trezor_t3w1_revB.py b/core/site_scons/models/T3W1/trezor_t3w1_revB.py index f806d1f024..525b298950 100644 --- a/core/site_scons/models/T3W1/trezor_t3w1_revB.py +++ b/core/site_scons/models/T3W1/trezor_t3w1_revB.py @@ -240,19 +240,29 @@ def configure( ("USE_OEM_KEYS_CHECK", "1"), ] - sources += [ - "embed/sys/power_manager/stm32u5/power_manager.c", - "embed/sys/power_manager/stm32u5/power_monitoring.c", - "embed/sys/power_manager/stm32u5/power_states.c", - "embed/sys/power_manager/stm32u5/power_control.c", - "embed/sys/power_manager/npm1300/npm1300.c", - "embed/sys/power_manager/fuel_gauge/fuel_gauge.c", - "embed/sys/power_manager/fuel_gauge/battery_model.c", - "embed/sys/power_manager/stwlc38/stwlc38.c", - "embed/sys/power_manager/stwlc38/stwlc38_patching.c", - ] - paths += ["embed/sys/power_manager/inc"] - defines += [("USE_POWER_MANAGER", "1")] + if ("pmic" in features_wanted) or ("power_manager" in features_wanted): + sources += [ + "embed/sys/power_manager/npm1300/npm1300.c" + ] + paths += ["embed/sys/power_manager/inc"] + defines += ["USE_PMIC"] + features_available.append("pmic") + + if "power_manager" in features_wanted: + sources += [ + "embed/sys/power_manager/stm32u5/power_manager.c", + "embed/sys/power_manager/stm32u5/power_monitoring.c", + "embed/sys/power_manager/stm32u5/power_states.c", + "embed/sys/power_manager/stm32u5/power_control.c", + "embed/sys/power_manager/fuel_gauge/fuel_gauge.c", + "embed/sys/power_manager/fuel_gauge/battery_model.c", + "embed/sys/power_manager/stwlc38/stwlc38.c", + "embed/sys/power_manager/stwlc38/stwlc38_patching.c", + ] + paths += ["embed/sys/power_manager/inc"] + defines += [("USE_POWER_MANAGER", "1")] + features_available.append("power_manager") + env.get("ENV")["LINKER_SCRIPT"] = linker_script diff --git a/core/site_scons/models/T3W1/trezor_t3w1_revC.py b/core/site_scons/models/T3W1/trezor_t3w1_revC.py index e91265ca8d..80f18b36c8 100644 --- a/core/site_scons/models/T3W1/trezor_t3w1_revC.py +++ b/core/site_scons/models/T3W1/trezor_t3w1_revC.py @@ -240,19 +240,29 @@ def configure( ("USE_OEM_KEYS_CHECK", "1"), ] - sources += [ - "embed/sys/power_manager/stm32u5/power_manager.c", - "embed/sys/power_manager/stm32u5/power_monitoring.c", - "embed/sys/power_manager/stm32u5/power_states.c", - "embed/sys/power_manager/stm32u5/power_control.c", - "embed/sys/power_manager/npm1300/npm1300.c", - "embed/sys/power_manager/fuel_gauge/fuel_gauge.c", - "embed/sys/power_manager/fuel_gauge/battery_model.c", - "embed/sys/power_manager/stwlc38/stwlc38.c", - "embed/sys/power_manager/stwlc38/stwlc38_patching.c", - ] - paths += ["embed/sys/power_manager/inc"] - defines += [("USE_POWER_MANAGER", "1")] + if ("pmic" in features_wanted) or ("power_manager" in features_wanted): + sources += [ + "embed/sys/power_manager/npm1300/npm1300.c" + ] + paths += ["embed/sys/power_manager/inc"] + defines += ["USE_PMIC"] + features_available.append("pmic") + + if "power_manager" in features_wanted: + sources += [ + "embed/sys/power_manager/stm32u5/power_manager.c", + "embed/sys/power_manager/stm32u5/power_monitoring.c", + "embed/sys/power_manager/stm32u5/power_states.c", + "embed/sys/power_manager/stm32u5/power_control.c", + "embed/sys/power_manager/fuel_gauge/fuel_gauge.c", + "embed/sys/power_manager/fuel_gauge/battery_model.c", + "embed/sys/power_manager/stwlc38/stwlc38.c", + "embed/sys/power_manager/stwlc38/stwlc38_patching.c", + ] + paths += ["embed/sys/power_manager/inc"] + defines += [("USE_POWER_MANAGER", "1")] + features_available.append("power_manager") + env.get("ENV")["LINKER_SCRIPT"] = linker_script