mfd: Expose TurnOnStatus in ab8500 sysfs
Expose TurnOnStatus (Power key, RTC alarm, Vbus detect, etc) in sysfs. This magic value can be read by system users to determine what caused the platform to turn on last (this) time. Signed-off-by: Andrew Lynn <andrew.lynn@stericsson.com> Reviewed-by: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> Reviewed-by: Jonas Aaberg <jonas.aberg@stericsson.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
9b626ddd7f
commit
b4a3103732
|
@ -92,6 +92,8 @@
|
||||||
#define AB8500_REV_REG 0x80
|
#define AB8500_REV_REG 0x80
|
||||||
#define AB8500_SWITCH_OFF_STATUS 0x00
|
#define AB8500_SWITCH_OFF_STATUS 0x00
|
||||||
|
|
||||||
|
#define AB8500_TURN_ON_STATUS 0x00
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Map interrupt numbers to the LATCH and MASK register offsets, Interrupt
|
* Map interrupt numbers to the LATCH and MASK register offsets, Interrupt
|
||||||
* numbers are indexed into this array with (num / 8).
|
* numbers are indexed into this array with (num / 8).
|
||||||
|
@ -812,12 +814,40 @@ static ssize_t show_switch_off_status(struct device *dev,
|
||||||
return sprintf(buf, "%#x\n", value);
|
return sprintf(buf, "%#x\n", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ab8500 has turned on due to (TURN_ON_STATUS):
|
||||||
|
* 0x01 PORnVbat
|
||||||
|
* 0x02 PonKey1dbF
|
||||||
|
* 0x04 PonKey2dbF
|
||||||
|
* 0x08 RTCAlarm
|
||||||
|
* 0x10 MainChDet
|
||||||
|
* 0x20 VbusDet
|
||||||
|
* 0x40 UsbIDDetect
|
||||||
|
* 0x80 Reserved
|
||||||
|
*/
|
||||||
|
static ssize_t show_turn_on_status(struct device *dev,
|
||||||
|
struct device_attribute *attr, char *buf)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
u8 value;
|
||||||
|
struct ab8500 *ab8500;
|
||||||
|
|
||||||
|
ab8500 = dev_get_drvdata(dev);
|
||||||
|
ret = get_register_interruptible(ab8500, AB8500_SYS_CTRL1_BLOCK,
|
||||||
|
AB8500_TURN_ON_STATUS, &value);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
return sprintf(buf, "%#x\n", value);
|
||||||
|
}
|
||||||
|
|
||||||
static DEVICE_ATTR(chip_id, S_IRUGO, show_chip_id, NULL);
|
static DEVICE_ATTR(chip_id, S_IRUGO, show_chip_id, NULL);
|
||||||
static DEVICE_ATTR(switch_off_status, S_IRUGO, show_switch_off_status, NULL);
|
static DEVICE_ATTR(switch_off_status, S_IRUGO, show_switch_off_status, NULL);
|
||||||
|
static DEVICE_ATTR(turn_on_status, S_IRUGO, show_turn_on_status, NULL);
|
||||||
|
|
||||||
static struct attribute *ab8500_sysfs_entries[] = {
|
static struct attribute *ab8500_sysfs_entries[] = {
|
||||||
&dev_attr_chip_id.attr,
|
&dev_attr_chip_id.attr,
|
||||||
&dev_attr_switch_off_status.attr,
|
&dev_attr_switch_off_status.attr,
|
||||||
|
&dev_attr_turn_on_status.attr,
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue