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:
parent
41abd8e32f
commit
edbcf0b0f4
3 changed files with 56 additions and 6 deletions
|
@ -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"
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue