diff --git a/src/board/system76/common/acpi.c b/src/board/system76/common/acpi.c index 45f61db..e5d4209 100644 --- a/src/board/system76/common/acpi.c +++ b/src/board/system76/common/acpi.c @@ -102,32 +102,32 @@ uint8_t acpi_read(uint8_t addr) { // AC adapter connected data |= BIT(0); } - if (battery_status & BATTERY_INITIALIZED) { + if (battery_info.status & BATTERY_INITIALIZED) { // BAT0 connected data |= BIT(2); } break; - ACPI_16(0x16, battery_design_capacity); - ACPI_16(0x1A, battery_full_capacity); - ACPI_16(0x22, battery_design_voltage); + ACPI_16(0x16, battery_info.design_capacity); + ACPI_16(0x1A, battery_info.full_capacity); + ACPI_16(0x22, battery_info.design_voltage); case 0x26: // If AC adapter connected if (!gpio_get(&ACIN_N)) { // And battery is not fully charged - if (battery_current != 0) { + if (battery_info.current != 0) { // Battery is charging data |= BIT(1); } } break; - ACPI_16(0x2A, battery_current); - ACPI_16(0x2E, battery_remaining_capacity); - ACPI_16(0x32, battery_voltage); + ACPI_16(0x2A, battery_info.current); + ACPI_16(0x2E, battery_info.remaining_capacity); + ACPI_16(0x32, battery_info.voltage); - ACPI_16(0x42, battery_cycle_count); + ACPI_16(0x42, battery_info.cycle_count); ACPI_8(0x68, acpi_ecos); diff --git a/src/board/system76/common/battery.c b/src/board/system76/common/battery.c index 25ff853..f6904bd 100644 --- a/src/board/system76/common/battery.c +++ b/src/board/system76/common/battery.c @@ -4,6 +4,8 @@ #include #include +struct battery_info battery_info = { 0 }; + // Default values to disable battery charging thresholds #define BATTERY_START_DEFAULT 0 #define BATTERY_END_DEFAULT 100 @@ -56,7 +58,7 @@ int16_t battery_charger_configure(void) { // Stop threshold not configured: Always charge on AC. should_charge = true; } - else if (battery_charge >= battery_get_end_threshold()) { + else if (battery_info.charge >= battery_get_end_threshold()) { // Stop threshold configured: Stop charging at threshold. should_charge = false; } @@ -64,7 +66,7 @@ int16_t battery_charger_configure(void) { // Start threshold not configured: Always charge up to stop threshold. should_charge = true; } - else if (battery_charge <= battery_get_start_threshold()) { + else if (battery_info.charge <= battery_get_start_threshold()) { // Start threshold configured: Start charging at threshold. should_charge = true; } @@ -74,17 +76,6 @@ int16_t battery_charger_configure(void) { return battery_charger_disable(); } -uint16_t battery_temp = 0; -uint16_t battery_voltage = 0; -uint16_t battery_current = 0; -uint16_t battery_charge = 0; -uint16_t battery_remaining_capacity = 0; -uint16_t battery_full_capacity = 0; -uint16_t battery_status = 0; -uint16_t battery_cycle_count = 0; -uint16_t battery_design_capacity = 0; -uint16_t battery_design_voltage = 0; - void battery_event(void) { int16_t res = 0; @@ -95,16 +86,16 @@ void battery_event(void) { } \ } - command(battery_temp, 0x08); - command(battery_voltage, 0x09); - command(battery_current, 0x0A); - command(battery_charge, 0x0D); - command(battery_remaining_capacity, 0x0F); - command(battery_full_capacity, 0x10); - command(battery_status, 0x16); - command(battery_cycle_count, 0x17); - command(battery_design_capacity, 0x18); - command(battery_design_voltage, 0x19); + command(battery_info.temp, 0x08); + command(battery_info.voltage, 0x09); + command(battery_info.current, 0x0A); + command(battery_info.charge, 0x0D); + command(battery_info.remaining_capacity, 0x0F); + command(battery_info.full_capacity, 0x10); + command(battery_info.status, 0x16); + command(battery_info.cycle_count, 0x17); + command(battery_info.design_capacity, 0x18); + command(battery_info.design_voltage, 0x19); #undef command diff --git a/src/board/system76/common/include/board/battery.h b/src/board/system76/common/include/board/battery.h index de8b4c7..a236f0c 100644 --- a/src/board/system76/common/include/board/battery.h +++ b/src/board/system76/common/include/board/battery.h @@ -18,16 +18,19 @@ #define BATTERY_INITIALIZED BIT(7) -extern uint16_t battery_temp; -extern uint16_t battery_voltage; -extern uint16_t battery_current; -extern uint16_t battery_charge; -extern uint16_t battery_remaining_capacity; -extern uint16_t battery_full_capacity; -extern uint16_t battery_status; -extern uint16_t battery_cycle_count; -extern uint16_t battery_design_capacity; -extern uint16_t battery_design_voltage; +struct battery_info { + uint16_t temp; + uint16_t voltage; + uint16_t current; + uint16_t charge; + uint16_t remaining_capacity; + uint16_t full_capacity; + uint16_t status; + uint16_t cycle_count; + uint16_t design_capacity; + uint16_t design_voltage; +}; +extern struct battery_info battery_info; uint8_t battery_get_start_threshold(void); bool battery_set_start_threshold(uint8_t value); diff --git a/src/board/system76/common/power.c b/src/board/system76/common/power.c index 4de7a46..0aa14b2 100644 --- a/src/board/system76/common/power.c +++ b/src/board/system76/common/power.c @@ -578,7 +578,7 @@ void power_event(void) { //TODO: do not require both LEDs #if HAVE_LED_BAT_CHG && HAVE_LED_BAT_FULL - if (!(battery_status & BATTERY_INITIALIZED)) { + if (!(battery_info.status & BATTERY_INITIALIZED)) { // No battery connected gpio_set(&LED_BAT_CHG, false); gpio_set(&LED_BAT_FULL, false); @@ -586,7 +586,7 @@ void power_event(void) { // Discharging (no AC adapter) gpio_set(&LED_BAT_CHG, false); gpio_set(&LED_BAT_FULL, false); - } else if (battery_current == 0) { + } else if (battery_info.current == 0) { // Fully charged // TODO: turn off charger gpio_set(&LED_BAT_CHG, false);