1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-06-28 02:42:34 +00:00

refactor(core): split pmic as a separate feature

[no changelog]
This commit is contained in:
kopecdav 2025-05-08 15:24:14 +02:00 committed by kopecdav
parent 58e31be4ec
commit 4b9fb839cd
15 changed files with 165 additions and 144 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -32,8 +32,8 @@
#include <util/option_bytes.h>
#include <util/rsod.h>
#ifdef USE_POWER_MANAGER
#include "../npm1300/npm1300.h"
#ifdef USE_PMIC
#include <sys/pmic.h>
#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
}

View File

@ -40,6 +40,7 @@ haptic = []
sd_card = []
rgb_led = []
power_manager = []
pmic = []
backlight = []
usb = []
optiga = []

View File

@ -17,17 +17,16 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef TREZORHAL_NPM1300_H
#define TREZORHAL_NPM1300_H
#pragma once
#include <trezor_types.h>
// 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);

View File

@ -24,9 +24,9 @@
#include <io/i2c_bus.h>
#include <sys/irq.h>
#include <sys/pmic.h>
#include <sys/systimer.h>
#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);

View File

@ -23,9 +23,9 @@
#include <io/display.h>
#include <io/usb.h>
#include <sys/irq.h>
#include <sys/pmic.h>
#include <sys/systick.h>
#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

View File

@ -19,11 +19,11 @@
#include <sys/backup_ram.h>
#include <sys/irq.h>
#include <sys/pmic.h>
#include <sys/systick.h>
#include <sys/systimer.h>
#include <trezor_rtl.h>
#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;

View File

@ -19,12 +19,12 @@
#pragma once
#include <sys/pmic.h>
#include <sys/power_manager.h>
#include <sys/systimer.h>
#include <trezor_types.h>
#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);

View File

@ -19,11 +19,11 @@
*/
#include <sys/backup_ram.h>
#include <sys/pmic.h>
#include <sys/systick.h>
#include <trezor_rtl.h>
#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);
}
}

View File

@ -18,14 +18,11 @@
*/
#include <io/backlight.h>
#ifdef USE_BUTTON
#include <io/button.h>
#endif
#include <sys/bootutils.h>
#include <sys/pmic.h>
#include <sys/systick.h>
#include <sys/systimer.h>
#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;
}

View File

@ -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

View File

@ -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

View File

@ -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