From: Hector Martin <hector@marcansoft.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: astarikovskiy@suse.de, lenb@kernel.org, linux-acpi@vger.kernel.org
Subject: Re: [PATCH] Work around negative s16 battery current on Acer
Date: Thu, 02 Jul 2009 05:51:56 +0200 [thread overview]
Message-ID: <4A4C2EDC.6070209@marcansoft.com> (raw)
In-Reply-To: <20090701112958.1d24e06f.akpm@linux-foundation.org>
[-- Attachment #1: Type: text/plain, Size: 301 bytes --]
Andrew Morton wrote:
> acpi_battery has no field `current_now' in 2.6.30 or 2.6.31-rc1. Which
> kernel version are you patching here?
Updated patch for 2.6.30 attached. current_now got renamed to rate_now.
--
Hector Martin (hector@marcansoft.com)
Public Key: http://www.marcansoft.com/marcan.asc
[-- Attachment #2: acpi-battery-acer-rate-quirk2.patch --]
[-- Type: text/plain, Size: 1740 bytes --]
Signed-off-by: Hector Martin <hector@marcansoft.com">
--- linux-2.6.30-gentoo-r1/drivers/acpi/battery.c.old 2009-07-02 04:04:52.000000000 +0200
+++ linux-2.6.30-gentoo-r1/drivers/acpi/battery.c 2009-07-02 04:07:20.000000000 +0200
@@ -85,6 +85,10 @@ static const struct acpi_device_id batte
MODULE_DEVICE_TABLE(acpi, battery_device_ids);
+/* For buggy DSDTs that report negative 16-bit values for either charging
+ * or discharging current and/or report 0 as 65536 due to bad math.
+ */
+#define QUIRK_SIGNED16_CURRENT 0x0001
struct acpi_battery {
struct mutex lock;
@@ -112,6 +116,7 @@ struct acpi_battery {
int state;
int power_unit;
u8 alarm_present;
+ long quirks;
};
#define to_acpi_battery(x) container_of(x, struct acpi_battery, bat);
@@ -390,6 +395,11 @@ static int acpi_battery_get_state(struct
state_offsets, ARRAY_SIZE(state_offsets));
battery->update_time = jiffies;
kfree(buffer.pointer);
+
+ if ((battery->quirks & QUIRK_SIGNED16_CURRENT) &&
+ battery->rate_now != -1)
+ battery->rate_now = abs((s16)battery->rate_now);
+
return result;
}
@@ -495,6 +505,14 @@ static void sysfs_remove_battery(struct
}
#endif
+static void acpi_battery_quirks(struct acpi_battery *battery)
+{
+ battery->quirks = 0;
+ if (dmi_name_in_vendors("Acer") && battery->power_unit) {
+ battery->quirks |= QUIRK_SIGNED16_CURRENT;
+ }
+}
+
static int acpi_battery_update(struct acpi_battery *battery)
{
int result, old_present = acpi_battery_present(battery);
@@ -513,6 +531,7 @@ static int acpi_battery_update(struct ac
result = acpi_battery_get_info(battery);
if (result)
return result;
+ acpi_battery_quirks(battery);
acpi_battery_init_alarm(battery);
}
#ifdef CONFIG_ACPI_SYSFS_POWER
next prev parent reply other threads:[~2009-07-02 3:51 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-01 18:20 [PATCH] Work around negative s16 battery current on Acer Hector Martin
2009-07-01 18:27 ` Alexey Starikovskiy
2009-07-01 18:29 ` Andrew Morton
2009-07-01 18:38 ` Alexey Starikovskiy
2009-07-01 20:19 ` Hector Martin
2009-07-02 3:51 ` Hector Martin [this message]
2009-07-02 22:56 ` Andrew Morton
2009-07-02 23:46 ` [PATCH] Work around negative s16 battery current on Acer (take 3) Hector Martin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A4C2EDC.6070209@marcansoft.com \
--to=hector@marcansoft.com \
--cc=akpm@linux-foundation.org \
--cc=astarikovskiy@suse.de \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.