battery: Group battery info in a struct
Signed-off-by: Tim Crawford <tcrawford@system76.com>
This commit is contained in:
committed by
Jeremy Soller
parent
ee8ba5b72e
commit
f21cc6d602
@ -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);
|
||||
|
||||
|
@ -4,6 +4,8 @@
|
||||
#include <board/smbus.h>
|
||||
#include <common/debug.h>
|
||||
|
||||
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
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user