diff options
author | Daniel Mack <daniel@caiaq.de> | 2009-07-23 14:35:53 -0400 |
---|---|---|
committer | Anton Vorontsov <cbouatmailru@gmail.com> | 2009-07-30 09:49:15 -0400 |
commit | e5f5ccb646bc6009572b5c23201b5e81638ff150 (patch) | |
tree | e0f132871a46d76b98cdaa505f80a2f0e500ff6b | |
parent | ff3417e7effe57cc002a8882a48bcb8e1a7e7267 (diff) |
power_supply: get_by_name and set_charged functionality
This adds a function that indicates that a battery is fully charged.
It also includes functions to get a power_supply device from the class
of registered devices by name reference. These can be used to find a
specific battery to call power_supply_set_battery_charged() on.
Some battery drivers might need this information to calibrate
themselves.
Signed-off-by: Daniel Mack <daniel@caiaq.de>
Cc: Ian Molton <spyro@f2s.com>
Cc: Anton Vorontsov <cbou@mail.ru>
Cc: Matt Reimer <mreimer@vpop.net>
Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>
-rw-r--r-- | drivers/power/power_supply_core.c | 28 | ||||
-rw-r--r-- | include/linux/power_supply.h | 3 |
2 files changed, 31 insertions, 0 deletions
diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c index 12cd6e36ff1d..cce75b40b435 100644 --- a/drivers/power/power_supply_core.c +++ b/drivers/power/power_supply_core.c | |||
@@ -116,6 +116,34 @@ int power_supply_is_system_supplied(void) | |||
116 | } | 116 | } |
117 | EXPORT_SYMBOL_GPL(power_supply_is_system_supplied); | 117 | EXPORT_SYMBOL_GPL(power_supply_is_system_supplied); |
118 | 118 | ||
119 | int power_supply_set_battery_charged(struct power_supply *psy) | ||
120 | { | ||
121 | if (psy->type == POWER_SUPPLY_TYPE_BATTERY && psy->set_charged) { | ||
122 | psy->set_charged(psy); | ||
123 | return 0; | ||
124 | } | ||
125 | |||
126 | return -EINVAL; | ||
127 | } | ||
128 | EXPORT_SYMBOL_GPL(power_supply_set_battery_charged); | ||
129 | |||
130 | static int power_supply_match_device_by_name(struct device *dev, void *data) | ||
131 | { | ||
132 | const char *name = data; | ||
133 | struct power_supply *psy = dev_get_drvdata(dev); | ||
134 | |||
135 | return strcmp(psy->name, name) == 0; | ||
136 | } | ||
137 | |||
138 | struct power_supply *power_supply_get_by_name(char *name) | ||
139 | { | ||
140 | struct device *dev = class_find_device(power_supply_class, NULL, name, | ||
141 | power_supply_match_device_by_name); | ||
142 | |||
143 | return dev ? dev_get_drvdata(dev) : NULL; | ||
144 | } | ||
145 | EXPORT_SYMBOL_GPL(power_supply_get_by_name); | ||
146 | |||
119 | int power_supply_register(struct device *parent, struct power_supply *psy) | 147 | int power_supply_register(struct device *parent, struct power_supply *psy) |
120 | { | 148 | { |
121 | int rc = 0; | 149 | int rc = 0; |
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index 4c7c6fc35487..b5d096d3a9be 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h | |||
@@ -144,6 +144,7 @@ struct power_supply { | |||
144 | enum power_supply_property psp, | 144 | enum power_supply_property psp, |
145 | union power_supply_propval *val); | 145 | union power_supply_propval *val); |
146 | void (*external_power_changed)(struct power_supply *psy); | 146 | void (*external_power_changed)(struct power_supply *psy); |
147 | void (*set_charged)(struct power_supply *psy); | ||
147 | 148 | ||
148 | /* For APM emulation, think legacy userspace. */ | 149 | /* For APM emulation, think legacy userspace. */ |
149 | int use_for_apm; | 150 | int use_for_apm; |
@@ -183,8 +184,10 @@ struct power_supply_info { | |||
183 | int use_for_apm; | 184 | int use_for_apm; |
184 | }; | 185 | }; |
185 | 186 | ||
187 | extern struct power_supply *power_supply_get_by_name(char *name); | ||
186 | extern void power_supply_changed(struct power_supply *psy); | 188 | extern void power_supply_changed(struct power_supply *psy); |
187 | extern int power_supply_am_i_supplied(struct power_supply *psy); | 189 | extern int power_supply_am_i_supplied(struct power_supply *psy); |
190 | extern int power_supply_set_battery_charged(struct power_supply *psy); | ||
188 | 191 | ||
189 | #if defined(CONFIG_POWER_SUPPLY) || defined(CONFIG_POWER_SUPPLY_MODULE) | 192 | #if defined(CONFIG_POWER_SUPPLY) || defined(CONFIG_POWER_SUPPLY_MODULE) |
190 | extern int power_supply_is_system_supplied(void); | 193 | extern int power_supply_is_system_supplied(void); |