Skip to content

Commit

Permalink
power_supply: Add function to return system-wide power state
Browse files Browse the repository at this point in the history
Certain drivers benefit from knowing whether the system is on ac or
battery, for instance when determining which backlight registers to
read. This adds a simple call to determine whether there's an online
power supply other than any batteries.

Signed-off-by: Matthew Garrett <mjg@redhat.com>
Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>
  • Loading branch information
Matthew Garrett authored and Anton Vorontsov committed Aug 31, 2008
1 parent e82374f commit 942ed16
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
25 changes: 25 additions & 0 deletions drivers/power/power_supply_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,30 @@ int power_supply_am_i_supplied(struct power_supply *psy)
return error;
}

static int __power_supply_is_system_supplied(struct device *dev, void *data)
{
union power_supply_propval ret = {0,};
struct power_supply *psy = dev_get_drvdata(dev);

if (psy->type != POWER_SUPPLY_TYPE_BATTERY) {
if (psy->get_property(psy, POWER_SUPPLY_PROP_ONLINE, &ret))
return 0;
if (ret.intval)
return ret.intval;
}
return 0;
}

int power_supply_is_system_supplied(void)
{
int error;

error = class_for_each_device(power_supply_class, NULL, NULL,
__power_supply_is_system_supplied);

return error;
}

int power_supply_register(struct device *parent, struct power_supply *psy)
{
int rc = 0;
Expand Down Expand Up @@ -148,6 +172,7 @@ static void __exit power_supply_class_exit(void)

EXPORT_SYMBOL_GPL(power_supply_changed);
EXPORT_SYMBOL_GPL(power_supply_am_i_supplied);
EXPORT_SYMBOL_GPL(power_supply_is_system_supplied);
EXPORT_SYMBOL_GPL(power_supply_register);
EXPORT_SYMBOL_GPL(power_supply_unregister);

Expand Down
6 changes: 6 additions & 0 deletions include/linux/power_supply.h
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,12 @@ struct power_supply_info {
extern void power_supply_changed(struct power_supply *psy);
extern int power_supply_am_i_supplied(struct power_supply *psy);

#if defined(CONFIG_POWER_SUPPLY) || defined(CONFIG_POWER_SUPPLY_MODULE)
extern int power_supply_is_system_supplied(void);
#else
static inline int power_supply_is_system_supplied(void) { return -ENOSYS; }
#endif

extern int power_supply_register(struct device *parent,
struct power_supply *psy);
extern void power_supply_unregister(struct power_supply *psy);
Expand Down

0 comments on commit 942ed16

Please sign in to comment.