ACPI ac: update AC status first when querying from sysfs
PATCH 1/2 ACPI ac: update AC status first when querying from sysfs
Sometimes the AC driver doesn't get notifications when it's plugged/unplugged. And this results in the incorrect AC status reported by the power supply sysfs I/F.
http://marc.info/?l=linux-acpi&m=128855015826728&w=2
https://bugzilla.kernel.org/show_bug.cgi?id=21722
Update the AC status first when querying from sysfs.
Signed-off-by Zhang Rui <[email protected]>
Tested-by Seblu <[email protected]>
--- drivers/acpi/ac.c | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-)
drivers/acpi/ac.c +28 -17
@@ -100,24 +100,7 @@ static const struct file_operations acpi .release = single_release, };#endif -static int get_ac_property (struct power_supply *psy, -enum power_supply_property psp, -union power_supply_propval *val) -{ -struct acpi_ac *ac =to_acpi_ac (psy); -switch (psp) { -case POWER_SUPPLY_PROP_ONLINE : - val->intval = ac->state; -break ; -default : -return -EINVAL ; - } -return 0 ; -} -static enum power_supply_property ac_props[] = { -POWER_SUPPLY_PROP_ONLINE , -};/* -------------------------------------------------------------------------- AC Adapter Management -------------------------------------------------------------------------- */
@@ -140,6 +123,34 @@ static int acpi_ac_get_state(struct acpireturn 0 ; } +/* -------------------------------------------------------------------------- +sysfs I/F +-------------------------------------------------------------------------- */ +static int get_ac_property (struct power_supply *psy, +enum power_supply_property psp, +union power_supply_propval *val) +{ +struct acpi_ac *ac =to_acpi_ac (psy); + +if (!ac) +return -ENODEV ; + +if (acpi_ac_get_state (ac)) +return -ENODEV ; + +switch (psp) { +case POWER_SUPPLY_PROP_ONLINE : + val->intval = ac->state; +break ; +default : +return -EINVAL ; + } +return 0 ; +} + +static enum power_supply_property ac_props[] = { +POWER_SUPPLY_PROP_ONLINE , +};#ifdef CONFIG_ACPI_PROCFS_POWER /* -------------------------------------------------------------------------- FS Interface (/proc)