-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Am Mon, 27 Dec 2010 19:23:44 +0000
schrieb Richard Hughes <[email protected]>:
> Sorry for the delay. I've been dealing with a family death and then
> Christmas got in the way. I think the attached patch is better, as it
> supports the fallback to old kernels and also deals with mAh reporting
> systems. Can you please test this. Thanks.
Fist of all: Your patch works for me as well.
But something I doesn't understand. I missunderstood my links to kernel
commits. In my opinion current_now is removed completely. But you are
right: power_now replaces current_now only if the value is reported in
uWh. So since 2.6.30 either current_now (reporting uWh) or power_now
(reporting uVh) exists. Both files must be handled and my patch is
incorrect.
But however I doesn't understand your patch fully. In my opinion it
should be:
(voltage = present voltage calculated line 580)
energy_rate = (power_now exists) ? power_now : (current_now * voltage)
energy = voltage * ((charge_now exists)? charge_now : charge_avg)
But you uses voltage_design instead of voltage mixed up energy and
energy_rate. "energy_rate *= voltage_design" should be independent of
charge_{now,avg} and not mixed in if conditions.
Sorry, I doesn't tried to understand the whole function so if I'm wrong
please ignore me ;-). As far as I can test it, it works for me. But my
battery uses energy_battery_props.
Thanks,
Florian
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.16 (GNU/Linux)
iQIcBAEBCAAGBQJNGTRhAAoJEDG1ZAdA+6K+i5QQAMhRsV1rbUouYPbAk4toizn6
Rk15ivwckjmiXGt4fzb1t43kqiuSi4VrXInJ7EtX5dwt9QbWgxeMlZbpeY7ZWbS5
YdIeX8pSZTQWwfD2LDZCU/PjTgadgZOwAKhdECGNUnryKxUvDF9Kg+AZSnRsXi9N
UnBIm8MuhpY7ESQQxBkBY13LWJIYX2DfBQG2gUXgqb2Pt0zWRu7i5uE0SJUDBiJi
VaJI+RLapC/Ud07/sHdtCxmGa1qHs6TMFRrO9ZMWKFB38Rs+CJzk3FV2m23U3dBO
0X0yYwG553pCz7QeKk3bQq8/Fr/oY+vgtWJN+3IZSeIIUD0pQIGsnMF/oUoaqdFA
QDvlIW9rQhYyveqIR94xuOuzN3q36droZPWFp1MlsYEL0gld/XES5+SOj2qR7MF0
o2ID38Gier2lE14X4Kd33bjbE8TIXHTH/7AENRGZtVDTDKG54djOyr+3vGK2haUE
OsR8Y4xhchk2NVORk7WQ8ahEnmZfoKCvEn3hFlQul47TxFqSrTnsDYlPv1a6rJxa
NU+nm4+Sd3sQXdTvCE7RQOzhmruzXUj9nx7fZ4TY5wZTKZagacl6rBikOLpKX1WE
FxMmH7JJm+8dA4wPnOZlpo06rFELa9bvBFc7CHj4X+NNTNBziDPu2d395jRGkOiy
o6w9R7rBXFys8ZhMeDCC
=v49F
-----END PGP SIGNATURE-----
From 5bb6d676f87900e79cf398dac5cb9a159519e10f Mon Sep 17 00:00:00 2001
From: Florian Eitel <[email protected]>
Date: Tue, 28 Dec 2010 01:31:53 +0100
Subject: [PATCH] [PATCH] Support the power_now sysfs attribute to get time remaining on new kernels
The kernel has removed the insanity of providing current_now in either
(and unspecified) units of uVh or uWh. Instead power_now provides uWh
and old current_now provides uVh value.
Related commits:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=b137b9942a07843c64a934cfdb7d43155e507e13
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=7faa144a518c456e2057918f030f50100144ccc6
---
src/linux/up-device-supply.c | 22 +++++++++++++---------
1 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/src/linux/up-device-supply.c b/src/linux/up-device-supply.c
index 341f5df..636e89f 100644
--- a/src/linux/up-device-supply.c
+++ b/src/linux/up-device-supply.c
@@ -554,16 +554,25 @@ up_device_supply_refresh_battery (UpDeviceSupply *supply)
supply->priv->unknown_retries = 0;
}
+ /* present voltage */
+ voltage = sysfs_get_double (native_path, "voltage_now") / 1000000.0;
+ if (voltage == 0)
+ voltage = sysfs_get_double (native_path, "voltage_avg") / 1000000.0;
+
- /* get rate; it seems odd as it's either in uVh or uWh */
- energy_rate = fabs (sysfs_get_double (native_path, "current_now") / 1000000.0);
+ /* this is the new value in mWh */
+ energy_rate = fabs (sysfs_get_double (native_path, "power_now") / 1000000.0);
+ if (energy_rate == 0) {
+ /* get the old rate; which is either in uVh */
+ energy_rate = fabs (sysfs_get_double (native_path, "current_now") / 1000000.0);
+ energy_rate *= voltage;
+ }
/* convert charge to energy */
if (energy == 0) {
energy = sysfs_get_double (native_path, "charge_now") / 1000000.0;
if (energy == 0)
energy = sysfs_get_double (native_path, "charge_avg") / 1000000.0;
- energy *= voltage_design;
- energy_rate *= voltage_design;
+ energy *= voltage;
}
/* some batteries don't update last_full attribute */
@@ -572,11 +581,6 @@ up_device_supply_refresh_battery (UpDeviceSupply *supply)
energy_full = energy;
}
- /* present voltage */
- voltage = sysfs_get_double (native_path, "voltage_now") / 1000000.0;
- if (voltage == 0)
- voltage = sysfs_get_double (native_path, "voltage_avg") / 1000000.0;
-
/* ACPI gives out the special 'Ones' value for rate when it's unable
* to calculate the true rate. We should set the rate zero, and wait
* for the BIOS to stabilise. */
--
1.7.2.5
_______________________________________________
devkit-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/devkit-devel