From mboxrd@z Thu Jan 1 00:00:00 1970 From: Len Brown Subject: Re: [patch 10/12] acpi: preserve correct battery state through suspend/resume cycles Date: Sat, 14 Oct 2006 04:07:53 -0400 Message-ID: <200610140407.53973.len.brown@intel.com> References: <200610102120.k9ALKfDU024293@shell0.pdx.osdl.net> Reply-To: Len Brown Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Return-path: Received: from hera.kernel.org ([140.211.167.34]:62151 "EHLO hera.kernel.org") by vger.kernel.org with ESMTP id S1161003AbWJNIFY (ORCPT ); Sat, 14 Oct 2006 04:05:24 -0400 In-Reply-To: <200610102120.k9ALKfDU024293@shell0.pdx.osdl.net> Content-Disposition: inline Sender: linux-acpi-owner@vger.kernel.org List-Id: linux-acpi@vger.kernel.org To: akpm@osdl.org Cc: linux-acpi@vger.kernel.org, jikos@jikos.cz, pavel@ucw.cz, seife@suse.de Applied. thanks, -Len On Tuesday 10 October 2006 17:20, akpm@osdl.org wrote: > From: Jiri Kosina > > There is a problem in th following scenario(s): > > boot -> suspend -> (un)plug battery -> resume > > The problem arises in both cases - i.e. suspend with battery plugged in, > and resume with battery unplugged, or vice versa. > > After resume, when the battery status has changed (plugged in -> unplegged > or unplugged -> plugged in) during the time when the system was sleeping, > the /proc/acpi/battery/*/* is wrong (showing the state before suspend, not > the current state). > > The following patch adds ->resume method to the ACPI battery handler, which > has the only aim - to check whether the battery state has changed during > sleep, and if so, update the ACPI internal data structures, so that > information published through /proc/acpi/battery/*/* is correct even after > suspend/resume cycle, during which the battery was removed/inserted. > > The patch is against current ACPI git tree, but applies cleanly also > against -mm and probably other trees. Please apply. > > Signed-off-by: Jiri Kosina > Cc: "Brown, Len" > Cc: Stefan Seyfried > Acked-by: Pavel Machek > Signed-off-by: Andrew Morton > --- > > drivers/acpi/battery.c | 14 ++++++++++++++ > 1 files changed, 14 insertions(+) > > diff -puN drivers/acpi/battery.c~acpi-preserve-correct-battery-state-through-suspend-resume-cycles drivers/acpi/battery.c > --- a/drivers/acpi/battery.c~acpi-preserve-correct-battery-state-through-suspend-resume-cycles > +++ a/drivers/acpi/battery.c > @@ -64,6 +64,7 @@ extern void *acpi_unlock_battery_dir(str > > static int acpi_battery_add(struct acpi_device *device); > static int acpi_battery_remove(struct acpi_device *device, int type); > +static int acpi_battery_resume(struct acpi_device *device, int status); > > static struct acpi_driver acpi_battery_driver = { > .name = ACPI_BATTERY_DRIVER_NAME, > @@ -71,6 +72,7 @@ static struct acpi_driver acpi_battery_d > .ids = ACPI_BATTERY_HID, > .ops = { > .add = acpi_battery_add, > + .resume = acpi_battery_resume, > .remove = acpi_battery_remove, > }, > }; > @@ -753,6 +755,18 @@ static int acpi_battery_remove(struct ac > return 0; > } > > +/* this is needed to learn about changes made in suspended state */ > +static int acpi_battery_resume(struct acpi_device *device, int state) > +{ > + struct acpi_battery *battery; > + > + if (!device) > + return -EINVAL; > + > + battery = device->driver_data; > + return acpi_battery_check(battery); > +} > + > static int __init acpi_battery_init(void) > { > int result; > _ > - > To unsubscribe from this list: send the line "unsubscribe linux-acpi" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >