Skip to content

Commit

Permalink
olpc_battery: Add an 'error' sysfs device that displays raw errors
Browse files Browse the repository at this point in the history
Grab the error code from EC_BAT_ERRCODE and let the user see it (rather
than attempting to decode it as we do with PROP_HEALTH) with a separate
error sysfs file.

Signed-off-by: Andres Salomon <dilinger@collabora.co.uk>
Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>
  • Loading branch information
Andres Salomon authored and Anton Vorontsov committed Jun 30, 2009
1 parent b294a29 commit 144bbea
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions drivers/power/olpc_battery.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/err.h>
#include <linux/device.h>
#include <linux/platform_device.h>
#include <linux/power_supply.h>
#include <linux/jiffies.h>
Expand Down Expand Up @@ -379,6 +381,29 @@ static struct bin_attribute olpc_bat_eeprom = {
.read = olpc_bat_eeprom_read,
};

/* Allow userspace to see the specific error value pulled from the EC */

static ssize_t olpc_bat_error_read(struct device *dev,
struct device_attribute *attr, char *buf)
{
uint8_t ec_byte;
ssize_t ret;

ret = olpc_ec_cmd(EC_BAT_ERRCODE, NULL, 0, &ec_byte, 1);
if (ret < 0)
return ret;

return sprintf(buf, "%d\n", ec_byte);
}

static struct device_attribute olpc_bat_error = {
.attr = {
.name = "error",
.mode = S_IRUGO,
},
.show = olpc_bat_error_read,
};

/*********************************************************************
* Initialisation
*********************************************************************/
Expand Down Expand Up @@ -442,8 +467,14 @@ static int __init olpc_bat_init(void)
if (ret)
goto eeprom_failed;

ret = device_create_file(olpc_bat.dev, &olpc_bat_error);
if (ret)
goto error_failed;

goto success;

error_failed:
device_remove_bin_file(olpc_bat.dev, &olpc_bat_eeprom);
eeprom_failed:
power_supply_unregister(&olpc_bat);
battery_failed:
Expand All @@ -456,6 +487,7 @@ static int __init olpc_bat_init(void)

static void __exit olpc_bat_exit(void)
{
device_remove_file(olpc_bat.dev, &olpc_bat_error);
device_remove_bin_file(olpc_bat.dev, &olpc_bat_eeprom);
power_supply_unregister(&olpc_bat);
power_supply_unregister(&olpc_ac);
Expand Down

0 comments on commit 144bbea

Please sign in to comment.