Annotation of /trunk/hal/patches/hal-0.5.10-fix-normalised_rate-if-dis-charging-state-is-unknow.patch
Parent Directory | Revision Log
Revision 597 -
(hide annotations)
(download)
Mon May 19 19:05:19 2008 UTC (16 years, 4 months ago) by niro
File size: 3334 byte(s)
Mon May 19 19:05:19 2008 UTC (16 years, 4 months ago) by niro
File size: 3334 byte(s)
-gentoo patches
1 | niro | 597 | From ea62ec238eed49bf0565559a2a22a49aff46af44 Mon Sep 17 00:00:00 2001 |
2 | From: Danny Kukawka <danny.kukawka@web.de> | ||
3 | Date: Thu, 6 Dec 2007 21:23:05 +0100 | ||
4 | Subject: [PATCH] fix normalised_rate if dis-/charging state is unknown | ||
5 | |||
6 | This fixes problems with machines which report not the correct charging | ||
7 | state in some cases (e.g. battery report 'charged' if on battery). With this | ||
8 | patch normalised_rate get set only to 0 if: | ||
9 | |||
10 | * the battery is not a primary (ACPI) battery | ||
11 | * the machines is on AC or | ||
12 | * there is in a multi battery system an other primary (ACPI) battery is | ||
13 | discharging | ||
14 | |||
15 | This should fix: https://bugzilla.novell.com/show_bug.cgi?id=258755 | ||
16 | --- | ||
17 | hald/device_pm.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++- | ||
18 | 1 files changed, 53 insertions(+), 2 deletions(-) | ||
19 | |||
20 | diff --git a/hald/device_pm.c b/hald/device_pm.c | ||
21 | index e84c4ff..c4fee3b 100644 | ||
22 | --- a/hald/device_pm.c | ||
23 | +++ b/hald/device_pm.c | ||
24 | @@ -32,6 +32,7 @@ | ||
25 | |||
26 | #include <glib.h> | ||
27 | |||
28 | +#include "hald.h" | ||
29 | #include "logger.h" | ||
30 | #include "util_pm.h" | ||
31 | #include "device_pm.h" | ||
32 | @@ -127,8 +128,58 @@ device_pm_abstract_props (HalDevice *d) | ||
33 | charging = hal_device_property_get_bool (d, "battery.rechargeable.is_charging"); | ||
34 | discharging = hal_device_property_get_bool (d, "battery.rechargeable.is_discharging"); | ||
35 | |||
36 | - if (!charging && !discharging) | ||
37 | - normalised_rate = 0; | ||
38 | + if (!charging && !discharging) { | ||
39 | + GSList *i; | ||
40 | + GSList *devices; | ||
41 | + HalDevice *_d; | ||
42 | + gboolean online; | ||
43 | + const char *bat_type; | ||
44 | + | ||
45 | + online = FALSE; | ||
46 | + | ||
47 | + /* check if this is a primary, mean laptop battery */ | ||
48 | + bat_type = hal_device_property_get_string (d, "battery.type"); | ||
49 | + if (bat_type != NULL && !strncmp (bat_type, "primary", 7)) { | ||
50 | + | ||
51 | + /* check if the machine is on AC or on battery */ | ||
52 | + devices = hal_device_store_match_multiple_key_value_string (hald_get_gdl (), | ||
53 | + "info.category", | ||
54 | + "ac_adapter"); | ||
55 | + for (i = devices; i != NULL; i = g_slist_next (i)) { | ||
56 | + _d = HAL_DEVICE (i->data); | ||
57 | + if (hal_device_has_property (_d, "linux.acpi_type")) { | ||
58 | + if (hal_device_property_get_bool (_d, "ac_adapter.present")) { | ||
59 | + online = TRUE; | ||
60 | + } | ||
61 | + } | ||
62 | + } | ||
63 | + g_slist_free (devices); | ||
64 | + | ||
65 | + if (online) { | ||
66 | + normalised_rate = 0; | ||
67 | + } else { | ||
68 | + /* check if there is an other battery already discharing, if so: set normalised_rate = 0 */ | ||
69 | + devices = hal_device_store_match_multiple_key_value_string (hald_get_gdl (), | ||
70 | + "info.category", | ||
71 | + "battery"); | ||
72 | + for (i = devices; i != NULL; i = g_slist_next (i)) { | ||
73 | + _d = HAL_DEVICE (i->data); | ||
74 | + if (hal_device_has_property (_d, "linux.acpi_type")) { | ||
75 | + bat_type = hal_device_property_get_string (_d, "battery.type"); | ||
76 | + if (bat_type != NULL && !strncmp (bat_type, "primary", 7)) { | ||
77 | + if (strcmp (hal_device_get_udi(d), hal_device_get_udi(_d)) != 0) { | ||
78 | + if (hal_device_property_get_bool (_d, "battery.rechargeable.is_discharging")) | ||
79 | + normalised_rate = 0; | ||
80 | + } | ||
81 | + } | ||
82 | + } | ||
83 | + } | ||
84 | + g_slist_free(devices); | ||
85 | + } | ||
86 | + } else { | ||
87 | + normalised_rate = 0; | ||
88 | + } | ||
89 | + } | ||
90 | |||
91 | /* Some laptops report current charge much larger than | ||
92 | * full charge when at 100%. Clamp back down to 100%. */ | ||
93 | -- | ||
94 | 1.5.3.7 | ||
95 |