diff options
-rw-r--r-- | drivers/power/power_supply_core.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c index b10c121244e5..bc82f9589a0d 100644 --- a/drivers/power/power_supply_core.c +++ b/drivers/power/power_supply_core.c | |||
@@ -98,7 +98,9 @@ static int __power_supply_is_system_supplied(struct device *dev, void *data) | |||
98 | { | 98 | { |
99 | union power_supply_propval ret = {0,}; | 99 | union power_supply_propval ret = {0,}; |
100 | struct power_supply *psy = dev_get_drvdata(dev); | 100 | struct power_supply *psy = dev_get_drvdata(dev); |
101 | unsigned int *count = data; | ||
101 | 102 | ||
103 | (*count)++; | ||
102 | if (psy->type != POWER_SUPPLY_TYPE_BATTERY) { | 104 | if (psy->type != POWER_SUPPLY_TYPE_BATTERY) { |
103 | if (psy->get_property(psy, POWER_SUPPLY_PROP_ONLINE, &ret)) | 105 | if (psy->get_property(psy, POWER_SUPPLY_PROP_ONLINE, &ret)) |
104 | return 0; | 106 | return 0; |
@@ -111,10 +113,18 @@ static int __power_supply_is_system_supplied(struct device *dev, void *data) | |||
111 | int power_supply_is_system_supplied(void) | 113 | int power_supply_is_system_supplied(void) |
112 | { | 114 | { |
113 | int error; | 115 | int error; |
116 | unsigned int count = 0; | ||
114 | 117 | ||
115 | error = class_for_each_device(power_supply_class, NULL, NULL, | 118 | error = class_for_each_device(power_supply_class, NULL, &count, |
116 | __power_supply_is_system_supplied); | 119 | __power_supply_is_system_supplied); |
117 | 120 | ||
121 | /* | ||
122 | * If no power class device was found at all, most probably we are | ||
123 | * running on a desktop system, so assume we are on mains power. | ||
124 | */ | ||
125 | if (count == 0) | ||
126 | return 1; | ||
127 | |||
118 | return error; | 128 | return error; |
119 | } | 129 | } |
120 | EXPORT_SYMBOL_GPL(power_supply_is_system_supplied); | 130 | EXPORT_SYMBOL_GPL(power_supply_is_system_supplied); |