Commit ae9458d6 authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.infradead.org/battery-2.6

* git://git.infradead.org/battery-2.6:
  apm_power: check I.intval for zero value, we use it as the divisor
  MAINTAINERS: remove kernel-discuss@handhelds.org list
  pda_power: implement polling
  pda_power: various cleanups
  apm_power: support using VOLTAGE_* properties for apm calculations
  pda_power: add suspend/resume support
  power_supply: add few more values and props
  pda_power: only register available psu
  power: fix incorrect unregistration in power_supply_create_attrs error path
  power: remove POWER_SUPPLY_PROP_CAPACITY_LEVEL
  [BATTERY] power_supply_leds: use kasprintf
  [BATTERY] Every file should include the headers containing the prototypes for its global functions.
parents 63e9b66e e91926e9
...@@ -87,6 +87,10 @@ batteries use voltage for very approximated calculation of capacity. ...@@ -87,6 +87,10 @@ batteries use voltage for very approximated calculation of capacity.
Battery driver also can use this attribute just to inform userspace Battery driver also can use this attribute just to inform userspace
about maximal and minimal voltage thresholds of a given battery. about maximal and minimal voltage thresholds of a given battery.
VOLTAGE_MAX, VOLTAGE_MIN - same as _DESIGN voltage values except that
these ones should be used if hardware could only guess (measure and
retain) the thresholds of a given power supply.
CHARGE_FULL_DESIGN, CHARGE_EMPTY_DESIGN - design charge values, when CHARGE_FULL_DESIGN, CHARGE_EMPTY_DESIGN - design charge values, when
battery considered full/empty. battery considered full/empty.
...@@ -100,8 +104,6 @@ age)". I.e. these attributes represents real thresholds, not design values. ...@@ -100,8 +104,6 @@ age)". I.e. these attributes represents real thresholds, not design values.
ENERGY_FULL, ENERGY_EMPTY - same as above but for energy. ENERGY_FULL, ENERGY_EMPTY - same as above but for energy.
CAPACITY - capacity in percents. CAPACITY - capacity in percents.
CAPACITY_LEVEL - capacity level. This corresponds to
POWER_SUPPLY_CAPACITY_LEVEL_*.
TEMP - temperature of the power supply. TEMP - temperature of the power supply.
TEMP_AMBIENT - ambient temperature. TEMP_AMBIENT - ambient temperature.
......
...@@ -3053,7 +3053,6 @@ M: cbou@mail.ru ...@@ -3053,7 +3053,6 @@ M: cbou@mail.ru
P: David Woodhouse P: David Woodhouse
M: dwmw2@infradead.org M: dwmw2@infradead.org
L: linux-kernel@vger.kernel.org L: linux-kernel@vger.kernel.org
L: kernel-discuss@handhelds.org
T: git git.infradead.org/battery-2.6.git T: git git.infradead.org/battery-2.6.git
S: Maintained S: Maintained
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
#include <linux/power_supply.h> #include <linux/power_supply.h>
#include <linux/apm-emulation.h> #include <linux/apm-emulation.h>
static DEFINE_MUTEX(apm_mutex);
#define PSY_PROP(psy, prop, val) psy->get_property(psy, \ #define PSY_PROP(psy, prop, val) psy->get_property(psy, \
POWER_SUPPLY_PROP_##prop, val) POWER_SUPPLY_PROP_##prop, val)
...@@ -22,8 +22,15 @@ static DEFINE_MUTEX(apm_mutex); ...@@ -22,8 +22,15 @@ static DEFINE_MUTEX(apm_mutex);
#define MPSY_PROP(prop, val) _MPSY_PROP(POWER_SUPPLY_PROP_##prop, val) #define MPSY_PROP(prop, val) _MPSY_PROP(POWER_SUPPLY_PROP_##prop, val)
static DEFINE_MUTEX(apm_mutex);
static struct power_supply *main_battery; static struct power_supply *main_battery;
enum apm_source {
SOURCE_ENERGY,
SOURCE_CHARGE,
SOURCE_VOLTAGE,
};
struct find_bat_param { struct find_bat_param {
struct power_supply *main; struct power_supply *main;
struct power_supply *bat; struct power_supply *bat;
...@@ -107,7 +114,7 @@ static void find_main_battery(void) ...@@ -107,7 +114,7 @@ static void find_main_battery(void)
} }
} }
static int calculate_time(int status, int using_charge) static int do_calculate_time(int status, enum apm_source source)
{ {
union power_supply_propval full; union power_supply_propval full;
union power_supply_propval empty; union power_supply_propval empty;
...@@ -126,20 +133,37 @@ static int calculate_time(int status, int using_charge) ...@@ -126,20 +133,37 @@ static int calculate_time(int status, int using_charge)
return -1; return -1;
} }
if (using_charge) { if (!I.intval)
return 0;
switch (source) {
case SOURCE_CHARGE:
full_prop = POWER_SUPPLY_PROP_CHARGE_FULL; full_prop = POWER_SUPPLY_PROP_CHARGE_FULL;
full_design_prop = POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN; full_design_prop = POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN;
empty_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY; empty_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY;
empty_design_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY; empty_design_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY;
cur_avg_prop = POWER_SUPPLY_PROP_CHARGE_AVG; cur_avg_prop = POWER_SUPPLY_PROP_CHARGE_AVG;
cur_now_prop = POWER_SUPPLY_PROP_CHARGE_NOW; cur_now_prop = POWER_SUPPLY_PROP_CHARGE_NOW;
} else { break;
case SOURCE_ENERGY:
full_prop = POWER_SUPPLY_PROP_ENERGY_FULL; full_prop = POWER_SUPPLY_PROP_ENERGY_FULL;
full_design_prop = POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN; full_design_prop = POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN;
empty_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY; empty_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY;
empty_design_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY; empty_design_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY;
cur_avg_prop = POWER_SUPPLY_PROP_ENERGY_AVG; cur_avg_prop = POWER_SUPPLY_PROP_ENERGY_AVG;
cur_now_prop = POWER_SUPPLY_PROP_ENERGY_NOW; cur_now_prop = POWER_SUPPLY_PROP_ENERGY_NOW;
break;
case SOURCE_VOLTAGE:
full_prop = POWER_SUPPLY_PROP_VOLTAGE_MAX;
full_design_prop = POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN;
empty_prop = POWER_SUPPLY_PROP_VOLTAGE_MIN;
empty_design_prop = POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN;
cur_avg_prop = POWER_SUPPLY_PROP_VOLTAGE_AVG;
cur_now_prop = POWER_SUPPLY_PROP_VOLTAGE_NOW;
break;
default:
printk(KERN_ERR "Unsupported source: %d\n", source);
return -1;
} }
if (_MPSY_PROP(full_prop, &full)) { if (_MPSY_PROP(full_prop, &full)) {
...@@ -166,7 +190,26 @@ static int calculate_time(int status, int using_charge) ...@@ -166,7 +190,26 @@ static int calculate_time(int status, int using_charge)
return -((cur.intval - empty.intval) * 60L) / I.intval; return -((cur.intval - empty.intval) * 60L) / I.intval;
} }
static int calculate_capacity(int using_charge) static int calculate_time(int status)
{
int time;
time = do_calculate_time(status, SOURCE_ENERGY);
if (time != -1)
return time;
time = do_calculate_time(status, SOURCE_CHARGE);
if (time != -1)
return time;
time = do_calculate_time(status, SOURCE_VOLTAGE);
if (time != -1)
return time;
return -1;
}
static int calculate_capacity(enum apm_source source)
{ {
enum power_supply_property full_prop, empty_prop; enum power_supply_property full_prop, empty_prop;
enum power_supply_property full_design_prop, empty_design_prop; enum power_supply_property full_design_prop, empty_design_prop;
...@@ -174,20 +217,33 @@ static int calculate_capacity(int using_charge) ...@@ -174,20 +217,33 @@ static int calculate_capacity(int using_charge)
union power_supply_propval empty, full, cur; union power_supply_propval empty, full, cur;
int ret; int ret;
if (using_charge) { switch (source) {
case SOURCE_CHARGE:
full_prop = POWER_SUPPLY_PROP_CHARGE_FULL; full_prop = POWER_SUPPLY_PROP_CHARGE_FULL;
empty_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY; empty_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY;
full_design_prop = POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN; full_design_prop = POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN;
empty_design_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN; empty_design_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN;
now_prop = POWER_SUPPLY_PROP_CHARGE_NOW; now_prop = POWER_SUPPLY_PROP_CHARGE_NOW;
avg_prop = POWER_SUPPLY_PROP_CHARGE_AVG; avg_prop = POWER_SUPPLY_PROP_CHARGE_AVG;
} else { break;
case SOURCE_ENERGY:
full_prop = POWER_SUPPLY_PROP_ENERGY_FULL; full_prop = POWER_SUPPLY_PROP_ENERGY_FULL;
empty_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY; empty_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY;
full_design_prop = POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN; full_design_prop = POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN;
empty_design_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN; empty_design_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN;
now_prop = POWER_SUPPLY_PROP_ENERGY_NOW; now_prop = POWER_SUPPLY_PROP_ENERGY_NOW;
avg_prop = POWER_SUPPLY_PROP_ENERGY_AVG; avg_prop = POWER_SUPPLY_PROP_ENERGY_AVG;
case SOURCE_VOLTAGE:
full_prop = POWER_SUPPLY_PROP_VOLTAGE_MAX;
empty_prop = POWER_SUPPLY_PROP_VOLTAGE_MIN;
full_design_prop = POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN;
empty_design_prop = POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN;
now_prop = POWER_SUPPLY_PROP_VOLTAGE_NOW;
avg_prop = POWER_SUPPLY_PROP_VOLTAGE_AVG;
break;
default:
printk(KERN_ERR "Unsupported source: %d\n", source);
return -1;
} }
if (_MPSY_PROP(full_prop, &full)) { if (_MPSY_PROP(full_prop, &full)) {
...@@ -254,10 +310,12 @@ static void apm_battery_apm_get_power_status(struct apm_power_info *info) ...@@ -254,10 +310,12 @@ static void apm_battery_apm_get_power_status(struct apm_power_info *info)
info->battery_life = capacity.intval; info->battery_life = capacity.intval;
} else { } else {
/* try calculate using energy */ /* try calculate using energy */
info->battery_life = calculate_capacity(0); info->battery_life = calculate_capacity(SOURCE_ENERGY);
/* if failed try calculate using charge instead */ /* if failed try calculate using charge instead */
if (info->battery_life == -1) if (info->battery_life == -1)
info->battery_life = calculate_capacity(1); info->battery_life = calculate_capacity(SOURCE_CHARGE);
if (info->battery_life == -1)
info->battery_life = calculate_capacity(SOURCE_VOLTAGE);
} }
/* charging status */ /* charging status */
...@@ -280,22 +338,16 @@ static void apm_battery_apm_get_power_status(struct apm_power_info *info) ...@@ -280,22 +338,16 @@ static void apm_battery_apm_get_power_status(struct apm_power_info *info)
if (status.intval == POWER_SUPPLY_STATUS_CHARGING) { if (status.intval == POWER_SUPPLY_STATUS_CHARGING) {
if (!MPSY_PROP(TIME_TO_FULL_AVG, &time_to_full) || if (!MPSY_PROP(TIME_TO_FULL_AVG, &time_to_full) ||
!MPSY_PROP(TIME_TO_FULL_NOW, &time_to_full)) { !MPSY_PROP(TIME_TO_FULL_NOW, &time_to_full))
info->time = time_to_full.intval / 60; info->time = time_to_full.intval / 60;
} else { else
info->time = calculate_time(status.intval, 0); info->time = calculate_time(status.intval);
if (info->time == -1)
info->time = calculate_time(status.intval, 1);
}
} else { } else {
if (!MPSY_PROP(TIME_TO_EMPTY_AVG, &time_to_empty) || if (!MPSY_PROP(TIME_TO_EMPTY_AVG, &time_to_empty) ||
!MPSY_PROP(TIME_TO_EMPTY_NOW, &time_to_empty)) { !MPSY_PROP(TIME_TO_EMPTY_NOW, &time_to_empty))
info->time = time_to_empty.intval / 60; info->time = time_to_empty.intval / 60;
} else { else
info->time = calculate_time(status.intval, 0); info->time = calculate_time(status.intval);
if (info->time == -1)
info->time = calculate_time(status.intval, 1);
}
} }
mutex_unlock(&apm_mutex); mutex_unlock(&apm_mutex);
......
...@@ -226,14 +226,6 @@ static int olpc_bat_get_property(struct power_supply *psy, ...@@ -226,14 +226,6 @@ static int olpc_bat_get_property(struct power_supply *psy,
return ret; return ret;
val->intval = ec_byte; val->intval = ec_byte;
break; break;
case POWER_SUPPLY_PROP_CAPACITY_LEVEL:
if (ec_byte & BAT_STAT_FULL)
val->intval = POWER_SUPPLY_CAPACITY_LEVEL_FULL;
else if (ec_byte & BAT_STAT_LOW)
val->intval = POWER_SUPPLY_CAPACITY_LEVEL_LOW;
else
val->intval = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
break;
case POWER_SUPPLY_PROP_TEMP: case POWER_SUPPLY_PROP_TEMP:
ret = olpc_ec_cmd(EC_BAT_TEMP, NULL, 0, (void *)&ec_word, 2); ret = olpc_ec_cmd(EC_BAT_TEMP, NULL, 0, (void *)&ec_word, 2);
if (ret) if (ret)
...@@ -265,7 +257,6 @@ static enum power_supply_property olpc_bat_props[] = { ...@@ -265,7 +257,6 @@ static enum power_supply_property olpc_bat_props[] = {
POWER_SUPPLY_PROP_VOLTAGE_AVG, POWER_SUPPLY_PROP_VOLTAGE_AVG,
POWER_SUPPLY_PROP_CURRENT_AVG, POWER_SUPPLY_PROP_CURRENT_AVG,
POWER_SUPPLY_PROP_CAPACITY, POWER_SUPPLY_PROP_CAPACITY,
POWER_SUPPLY_PROP_CAPACITY_LEVEL,
POWER_SUPPLY_PROP_TEMP, POWER_SUPPLY_PROP_TEMP,
POWER_SUPPLY_PROP_TEMP_AMBIENT, POWER_SUPPLY_PROP_TEMP_AMBIENT,
POWER_SUPPLY_PROP_MANUFACTURER, POWER_SUPPLY_PROP_MANUFACTURER,
......
This diff is collapsed.
...@@ -10,8 +10,11 @@ ...@@ -10,8 +10,11 @@
* You may use this code as per GPL version 2 * You may use this code as per GPL version 2
*/ */
#include <linux/kernel.h>
#include <linux/power_supply.h> #include <linux/power_supply.h>
#include "power_supply.h"
/* Battery specific LEDs triggers. */ /* Battery specific LEDs triggers. */
static void power_supply_update_bat_leds(struct power_supply *psy) static void power_supply_update_bat_leds(struct power_supply *psy)
...@@ -46,28 +49,20 @@ static int power_supply_create_bat_triggers(struct power_supply *psy) ...@@ -46,28 +49,20 @@ static int power_supply_create_bat_triggers(struct power_supply *psy)
{ {
int rc = 0; int rc = 0;
psy->charging_full_trig_name = kmalloc(strlen(psy->name) + psy->charging_full_trig_name = kasprintf(GFP_KERNEL,
sizeof("-charging-or-full"), GFP_KERNEL); "%s-charging-or-full", psy->name);
if (!psy->charging_full_trig_name) if (!psy->charging_full_trig_name)
goto charging_full_failed; goto charging_full_failed;
psy->charging_trig_name = kmalloc(strlen(psy->name) + psy->charging_trig_name = kasprintf(GFP_KERNEL,
sizeof("-charging"), GFP_KERNEL); "%s-charging", psy->name);
if (!psy->charging_trig_name) if (!psy->charging_trig_name)
goto charging_failed; goto charging_failed;
psy->full_trig_name = kmalloc(strlen(psy->name) + psy->full_trig_name = kasprintf(GFP_KERNEL, "%s-full", psy->name);
sizeof("-full"), GFP_KERNEL);
if (!psy->full_trig_name) if (!psy->full_trig_name)
goto full_failed; goto full_failed;
strcpy(psy->charging_full_trig_name, psy->name);
strcat(psy->charging_full_trig_name, "-charging-or-full");
strcpy(psy->charging_trig_name, psy->name);
strcat(psy->charging_trig_name, "-charging");
strcpy(psy->full_trig_name, psy->name);
strcat(psy->full_trig_name, "-full");
led_trigger_register_simple(psy->charging_full_trig_name, led_trigger_register_simple(psy->charging_full_trig_name,
&psy->charging_full_trig); &psy->charging_full_trig);
led_trigger_register_simple(psy->charging_trig_name, led_trigger_register_simple(psy->charging_trig_name,
...@@ -118,14 +113,10 @@ static int power_supply_create_gen_triggers(struct power_supply *psy) ...@@ -118,14 +113,10 @@ static int power_supply_create_gen_triggers(struct power_supply *psy)
{ {
int rc = 0; int rc = 0;
psy->online_trig_name = kmalloc(strlen(psy->name) + sizeof("-online"), psy->online_trig_name = kasprintf(GFP_KERNEL, "%s-online", psy->name);
GFP_KERNEL);
if (!psy->online_trig_name) if (!psy->online_trig_name)
goto online_failed; goto online_failed;
strcpy(psy->online_trig_name, psy->name);
strcat(psy->online_trig_name, "-online");
led_trigger_register_simple(psy->online_trig_name, &psy->online_trig); led_trigger_register_simple(psy->online_trig_name, &psy->online_trig);
goto success; goto success;
......
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
#include <linux/ctype.h> #include <linux/ctype.h>
#include <linux/power_supply.h> #include <linux/power_supply.h>
#include "power_supply.h"
/* /*
* This is because the name "current" breaks the device attr macro. * This is because the name "current" breaks the device attr macro.
* The "current" word resolves to "(get_current())" so instead of * The "current" word resolves to "(get_current())" so instead of
...@@ -46,10 +48,8 @@ static ssize_t power_supply_show_property(struct device *dev, ...@@ -46,10 +48,8 @@ static ssize_t power_supply_show_property(struct device *dev,
"Unspecified failure" "Unspecified failure"
}; };
static char *technology_text[] = { static char *technology_text[] = {
"Unknown", "NiMH", "Li-ion", "Li-poly", "LiFe", "NiCd" "Unknown", "NiMH", "Li-ion", "Li-poly", "LiFe", "NiCd",
}; "LiMn"
static char *capacity_level_text[] = {
"Unknown", "Critical", "Low", "Normal", "High", "Full"
}; };
ssize_t ret; ssize_t ret;
struct power_supply *psy = dev_get_drvdata(dev); struct power_supply *psy = dev_get_drvdata(dev);
...@@ -71,9 +71,6 @@ static ssize_t power_supply_show_property(struct device *dev, ...@@ -71,9 +71,6 @@ static ssize_t power_supply_show_property(struct device *dev,
return sprintf(buf, "%s\n", health_text[value.intval]); return sprintf(buf, "%s\n", health_text[value.intval]);
else if (off == POWER_SUPPLY_PROP_TECHNOLOGY) else if (off == POWER_SUPPLY_PROP_TECHNOLOGY)
return sprintf(buf, "%s\n", technology_text[value.intval]); return sprintf(buf, "%s\n", technology_text[value.intval]);
else if (off == POWER_SUPPLY_PROP_CAPACITY_LEVEL)
return sprintf(buf, "%s\n",
capacity_level_text[value.intval]);
else if (off >= POWER_SUPPLY_PROP_MODEL_NAME) else if (off >= POWER_SUPPLY_PROP_MODEL_NAME)
return sprintf(buf, "%s\n", value.strval); return sprintf(buf, "%s\n", value.strval);
...@@ -88,6 +85,8 @@ static struct device_attribute power_supply_attrs[] = { ...@@ -88,6 +85,8 @@ static struct device_attribute power_supply_attrs[] = {
POWER_SUPPLY_ATTR(present), POWER_SUPPLY_ATTR(present),
POWER_SUPPLY_ATTR(online), POWER_SUPPLY_ATTR(online),
POWER_SUPPLY_ATTR(technology), POWER_SUPPLY_ATTR(technology),
POWER_SUPPLY_ATTR(voltage_max),
POWER_SUPPLY_ATTR(voltage_min),
POWER_SUPPLY_ATTR(voltage_max_design), POWER_SUPPLY_ATTR(voltage_max_design),
POWER_SUPPLY_ATTR(voltage_min_design), POWER_SUPPLY_ATTR(voltage_min_design),
POWER_SUPPLY_ATTR(voltage_now), POWER_SUPPLY_ATTR(voltage_now),
...@@ -159,8 +158,7 @@ int power_supply_create_attrs(struct power_supply *psy) ...@@ -159,8 +158,7 @@ int power_supply_create_attrs(struct power_supply *psy)
&power_supply_attrs[psy->properties[j]]); &power_supply_attrs[psy->properties[j]]);
statics_failed: statics_failed:
while (i--) while (i--)
device_remove_file(psy->dev, device_remove_file(psy->dev, &power_supply_static_attrs[i]);
&power_supply_static_attrs[psy->properties[i]]);
succeed: succeed:
return rc; return rc;
} }
...@@ -170,8 +168,7 @@ void power_supply_remove_attrs(struct power_supply *psy) ...@@ -170,8 +168,7 @@ void power_supply_remove_attrs(struct power_supply *psy)
int i; int i;
for (i = 0; i < ARRAY_SIZE(power_supply_static_attrs); i++) for (i = 0; i < ARRAY_SIZE(power_supply_static_attrs); i++)
device_remove_file(psy->dev, device_remove_file(psy->dev, &power_supply_static_attrs[i]);
&power_supply_static_attrs[i]);
for (i = 0; i < psy->num_properties; i++) for (i = 0; i < psy->num_properties; i++)
device_remove_file(psy->dev, device_remove_file(psy->dev,
......
...@@ -26,6 +26,7 @@ struct pda_power_pdata { ...@@ -26,6 +26,7 @@ struct pda_power_pdata {
unsigned int wait_for_status; /* msecs, default is 500 */ unsigned int wait_for_status; /* msecs, default is 500 */
unsigned int wait_for_charger; /* msecs, default is 500 */ unsigned int wait_for_charger; /* msecs, default is 500 */
unsigned int polling_interval; /* msecs, default is 2000 */
}; };
#endif /* __PDA_POWER_H__ */ #endif /* __PDA_POWER_H__ */
...@@ -54,15 +54,7 @@ enum { ...@@ -54,15 +54,7 @@ enum {
POWER_SUPPLY_TECHNOLOGY_LIPO, POWER_SUPPLY_TECHNOLOGY_LIPO,
POWER_SUPPLY_TECHNOLOGY_LiFe, POWER_SUPPLY_TECHNOLOGY_LiFe,
POWER_SUPPLY_TECHNOLOGY_NiCd, POWER_SUPPLY_TECHNOLOGY_NiCd,
}; POWER_SUPPLY_TECHNOLOGY_LiMn,
enum {
POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL,
POWER_SUPPLY_CAPACITY_LEVEL_LOW,
POWER_SUPPLY_CAPACITY_LEVEL_NORMAL,
POWER_SUPPLY_CAPACITY_LEVEL_HIGH,
POWER_SUPPLY_CAPACITY_LEVEL_FULL,
}; };
enum power_supply_property { enum power_supply_property {
...@@ -72,6 +64,8 @@ enum power_supply_property { ...@@ -72,6 +64,8 @@ enum power_supply_property {
POWER_SUPPLY_PROP_PRESENT, POWER_SUPPLY_PROP_PRESENT,
POWER_SUPPLY_PROP_ONLINE, POWER_SUPPLY_PROP_ONLINE,
POWER_SUPPLY_PROP_TECHNOLOGY, POWER_SUPPLY_PROP_TECHNOLOGY,
POWER_SUPPLY_PROP_VOLTAGE_MAX,
POWER_SUPPLY_PROP_VOLTAGE_MIN,
POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
POWER_SUPPLY_PROP_VOLTAGE_NOW, POWER_SUPPLY_PROP_VOLTAGE_NOW,
...@@ -91,7 +85,6 @@ enum power_supply_property { ...@@ -91,7 +85,6 @@ enum power_supply_property {
POWER_SUPPLY_PROP_ENERGY_NOW, POWER_SUPPLY_PROP_ENERGY_NOW,
POWER_SUPPLY_PROP_ENERGY_AVG, POWER_SUPPLY_PROP_ENERGY_AVG,
POWER_SUPPLY_PROP_CAPACITY, /* in percents! */ POWER_SUPPLY_PROP_CAPACITY, /* in percents! */
POWER_SUPPLY_PROP_CAPACITY_LEVEL,
POWER_SUPPLY_PROP_TEMP, POWER_SUPPLY_PROP_TEMP,
POWER_SUPPLY_PROP_TEMP_AMBIENT, POWER_SUPPLY_PROP_TEMP_AMBIENT,
POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment