1
0
Fork 0
forked from len0rd/rockbox

erosq: Initial PM support for "hw4" variant

(They renamed the battery from 'battery' to 'axp_battery')

Change-Id: Ic42c31e1d5c01eafc3fe01b144d9f22d88933e04
This commit is contained in:
Solomon Peachy 2024-10-10 10:12:29 -04:00
parent 41abd8e32f
commit edbcf0b0f4
3 changed files with 56 additions and 6 deletions

View file

@ -86,5 +86,7 @@
#define ROOTDRIVE_DEV "/sys/block/mmcblk0" #define ROOTDRIVE_DEV "/sys/block/mmcblk0"
/* More common stuff */ /* More common stuff */
#ifndef EROS_Q
#define BATTERY_DEV_NAME "battery" #define BATTERY_DEV_NAME "battery"
#endif
#define POWER_DEV_NAME "usb" #define POWER_DEV_NAME "usb"

View file

@ -28,17 +28,34 @@
#include "power.h" #include "power.h"
#include "panic.h" #include "panic.h"
#include "sysfs.h" #include "sysfs.h"
#include "tick.h"
const char * const sysfs_bat_voltage = const char * const sysfs_bat_voltage[2] = {
"/sys/class/power_supply/battery/voltage_now"; "/sys/class/power_supply/battery/voltage_now",
"/sys/class/power_supply/axp_battery/voltage_now",
};
const char * const sysfs_bat_capacity = const char * const sysfs_bat_capacity[2] = {
"/sys/class/power_supply/battery/capacity"; "/sys/class/power_supply/battery/capacity",
"/sys/class/power_supply/axp_battery/capacity",
};
const char * const sysfs_bat_status[2] = {
"/sys/class/power_supply/battery/status",
"/sys/class/power_supply/axp_battery/status",
};
static int hwver = 0;
unsigned int erosq_power_get_battery_voltage(void) unsigned int erosq_power_get_battery_voltage(void)
{ {
int battery_voltage; int battery_voltage;
sysfs_get_int(sysfs_bat_voltage, &battery_voltage); int x = sysfs_get_int(sysfs_bat_voltage[hwver], &battery_voltage);
if (!x) {
hwver ^= 1;
sysfs_get_int(sysfs_bat_voltage[hwver], &battery_voltage);
}
return battery_voltage/1000; return battery_voltage/1000;
} }
@ -46,7 +63,33 @@ unsigned int erosq_power_get_battery_voltage(void)
unsigned int erosq_power_get_battery_capacity(void) unsigned int erosq_power_get_battery_capacity(void)
{ {
int battery_capacity; int battery_capacity;
sysfs_get_int(sysfs_bat_capacity, &battery_capacity); int x = sysfs_get_int(sysfs_bat_capacity[hwver], &battery_capacity);
if (!x) {
hwver ^= 1;
sysfs_get_int(sysfs_bat_capacity[hwver], &battery_capacity);
}
return battery_capacity; return battery_capacity;
} }
/* We get called multiple times per tick, let's cut that back! */
static long last_tick = 0;
static bool last_power = false;
bool charging_state(void)
{
if ((current_tick - last_tick) > HZ/2 ) {
char buf[12] = {0};
int x = sysfs_get_string(sysfs_bat_status[hwver], buf, sizeof(buf));
if (!x) {
hwver ^= 1;
sysfs_get_string(sysfs_bat_status[hwver], buf, sizeof(buf));
}
last_tick = current_tick;
last_power = (strncmp(buf, "Charging", 8) == 0);
}
return last_power;
}

View file

@ -33,9 +33,13 @@
#include "usb.h" #include "usb.h"
#endif #endif
#ifdef BATTERY_DEV_NAME
#define BATTERY_STATUS_PATH "/sys/class/power_supply/" BATTERY_DEV_NAME "/status" #define BATTERY_STATUS_PATH "/sys/class/power_supply/" BATTERY_DEV_NAME "/status"
#endif
#define POWER_STATUS_PATH "/sys/class/power_supply/" POWER_DEV_NAME "/online" #define POWER_STATUS_PATH "/sys/class/power_supply/" POWER_DEV_NAME "/online"
#ifdef BATTERY_DEV_NAME
/* We get called multiple times per tick, let's cut that back! */ /* We get called multiple times per tick, let's cut that back! */
static long last_tick = 0; static long last_tick = 0;
static bool last_power = false; static bool last_power = false;
@ -51,6 +55,7 @@ bool charging_state(void)
} }
return last_power; return last_power;
} }
#endif
unsigned int power_input_status(void) unsigned int power_input_status(void)
{ {