From: Soeren Sonnenburg <kernel@nn7.de>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Linux Kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH]: pbook apm_emu.c fix remaining time when charging
Date: Sun, 10 Oct 2004 09:16:01 +0200 [thread overview]
Message-ID: <1097392561.3419.7.camel@localhost> (raw)
In-Reply-To: <1097366985.5591.16.camel@gaston>
[-- Attachment #1: Type: text/plain, Size: 1939 bytes --]
On Sun, 2004-10-10 at 10:09 +1000, Benjamin Herrenschmidt wrote:
> On Sun, 2004-10-10 at 06:11, Soeren Sonnenburg wrote:
[...]
> if (amperage < 0) {
> + /* when less than 100mA are used the machine must be on AC and as it is
> + not charging the battery is only slightly self decharging and thus full be definition */
> + if (amperage < 100) {
>
> There must be something wrong in the above...
Yes you are right, I check for amperage < 0 first and then for
amperage < 100. It should of course be amperage < -100 and is meant for
the case where one is on AC, battery was fully charged and which is now
slightly decharging by less than 100mA/min leading to a remaining time
being displayed of more than 700 hours left.
/proc/apm output with that patch (but wrong check amperage < 100):
0.5 1.1 0x00 0x01 0x00 0x01 99% 92276 min
/proc/apm output with new patch:
0.5 1.1 0x00 0x01 0x00 0x01 99% 0 min
This is the /proc/pmu/battery_0 equivalent.
flags : 00000011
charge : 3130
max_charge : 3148
current : -2
voltage : 16629
time rem. : 5634000
Well it is a special case to be dealt with... one could aswell change
the flags from 'high battery' status to 'charging' or return -1 as the
remaining time... However the battery is fully charged but as the system
is on AC it is simply idling messing up the remaining time.
> + time_units = (charge * 59) / (amperage * -1);
> + else
> + time_units = (charge * 16440) / (amperage * -60);
>
> Can you make sure also that amperage is never 0 ?
actually that is dealt with already as there is a check for both
amperage < 0 and for amperage > 0.
Soeren.
--
Sometimes, there's a moment as you're waking, when you become aware of
the real world around you, but you're still dreaming.
[-- Attachment #2: apm_emu_fix.diff --]
[-- Type: text/x-patch, Size: 1885 bytes --]
--- t/linux-2.6.9-rc3/drivers/macintosh/apm_emu.c 2004-09-30 05:05:41.000000000 +0200
+++ linux-2.6.9-rc3-sonne/drivers/macintosh/apm_emu.c 2004-10-10 08:46:33.000000000 +0200
@@ -440,6 +440,7 @@
char * p = buf;
char charging = 0;
long charge = -1;
+ long max_charge = -1;
long amperage = 0;
unsigned long btype = 0;
@@ -450,9 +451,12 @@
percentage = 0;
if (charge < 0)
charge = 0;
+ if (max_charge < 0)
+ max_charge = 0;
percentage += (pmu_batteries[i].charge * 100) /
pmu_batteries[i].max_charge;
charge += pmu_batteries[i].charge;
+ max_charge += pmu_batteries[i].max_charge;
amperage += pmu_batteries[i].amperage;
if (btype == 0)
btype = (pmu_batteries[i].flags & PMU_BATT_TYPE_MASK);
@@ -461,13 +465,27 @@
charging++;
}
}
+
if (real_count) {
if (amperage < 0) {
+ /* when less than 100mA are used the machine must be on AC and as it is
+ not charging the battery is only slightly self decharging and thus full be definition */
+ if (amperage < -100) {
+ if (btype == PMU_BATT_TYPE_SMART)
+ time_units = (charge * 59) / (amperage * -1);
+ else
+ time_units = (charge * 16440) / (amperage * -60);
+ }
+ else
+ time_units = 0;
+ }
+ else if (amperage > 0 && max_charge >= charge) {
if (btype == PMU_BATT_TYPE_SMART)
- time_units = (charge * 59) / (amperage * -1);
+ time_units = ( (max_charge - charge) * 59) / amperage;
else
- time_units = (charge * 16440) / (amperage * -60);
+ time_units = ( (max_charge - charge) * 16440) / amperage;
}
+
percentage /= real_count;
if (charging > 0) {
battery_status = 0x03;
@@ -483,6 +501,7 @@
battery_flag = 0x01;
}
}
+
p += sprintf(p, "%s %d.%d 0x%02x 0x%02x 0x%02x 0x%02x %d%% %d %s\n",
driver_version,
(FAKE_APM_BIOS_VERSION >> 8) & 0xff,
prev parent reply other threads:[~2004-10-10 14:54 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-10-09 20:11 [PATCH]: pbook apm_emu.c fix remaining time when charging Soeren Sonnenburg
2004-10-10 0:09 ` Benjamin Herrenschmidt
2004-10-10 7:16 ` Soeren Sonnenburg [this message]
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=1097392561.3419.7.camel@localhost \
--to=kernel@nn7.de \
--cc=benh@kernel.crashing.org \
--cc=linux-kernel@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.