ACPI / Battery: Return -ENODEV for unknown values in get_property()
authorRafael J. Wysocki <rjw@sisk.pl>
Sat, 23 Oct 2010 17:35:15 +0000 (19:35 +0200)
committerLen Brown <len.brown@intel.com>
Sat, 23 Oct 2010 18:05:03 +0000 (14:05 -0400)
commita1b4bd694a803eba49d637de32bb249638ceadb4
tree30b3b4efbf394b8cd500b694c80485561a6827ab
parentf6f94e2ab1b33f0082ac22d71f66385a60d8157f
ACPI / Battery: Return -ENODEV for unknown values in get_property()

The function acpi_battery_get_property() is called by the
power supply framework's function power_supply_show_property()
implementing the sysfs interface for power supply devices as the
ACPI battery driver's ->get_property() callback.  Thus it is supposed
to return error code if the value of the given property is unknown.
Unfortunately, however, it returns 0 in those cases and puts a
wrong (negative) value into the intval field of the
union power_supply_propval object provided by
power_supply_show_property().  In consequence, wrong negative
values are read by user space from the battery's sysfs files.

Fix this by making acpi_battery_get_property() return -ENODEV
for properties with unknown values (-ENODEV is returned, because
power_supply_uevent() returns with error for any other error code
returned by power_supply_show_property()).

Reported-and-tested-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Len Brown <len.brown@intel.com>
drivers/acpi/battery.c