1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
From: Roland Hieber <rohieb@rohieb.name>
Subject: Use power_now instead of current_now to read power from sysfs
Apparently, current_now was renamed to power_now around kernel 2.6.36. The fix
in this patch first tries to read from the new file name, if this does not
exist, it tries the old name.
Bug: 644567
Author: niko2gare <http://sourceforge.net/users/niko2gare/>
Origin: http://sourceforge.net/tracker/?func=detail&aid=3172707&group_id=58904&atid=489239
Last-Update: 2012-10-12
Modification to avoid checking closed battery
From: Bernd Rinn (z-bb)
Origin: https://bugs.launchpad.net/ubuntu/+source/cpufreqd/+bug/733507/+attachment/3022414/+files/cpufreqd-bug%23733507.patch
Index: cpufreqd/src/cpufreqd_acpi_battery.c
===================================================================
--- cpufreqd.orig/src/cpufreqd_acpi_battery.c 2013-03-23 21:37:28.268379010 +0900
+++ cpufreqd/src/cpufreqd_acpi_battery.c 2013-03-23 21:38:23.392952250 +0900
@@ -36,6 +36,7 @@
#define PRESENT "present"
#define STATUS "status"
#define CURRENT_NOW "current_now"
+#define POWER_NOW "power_now"
struct battery_info {
int capacity;
@@ -145,9 +146,13 @@
binfo->status = get_class_device_attribute(binfo->cdev, STATUS);
if (!binfo->status)
return -1;
- binfo->current_now = get_class_device_attribute(binfo->cdev, CURRENT_NOW);
- if (!binfo->current_now)
- return -1;
+ binfo->current_now = get_class_device_attribute(binfo->cdev, POWER_NOW);
+ if (!binfo->current_now) {
+ /* try the "current_now" name */
+ binfo->current_now = get_class_device_attribute(binfo->cdev, CURRENT_NOW);
+ if (!binfo->current_now)
+ return -1;
+ }
/* read the last full capacity, this is not going to change
* very often, so no need to poke it later */
@@ -311,6 +316,10 @@
/* Read battery informations */
for (i = 0; i < bat_dir_num; i++) {
+ if (!info[i].open) {
+ clog(LOG_INFO, "Skipping %s (closed)\n", info[i].cdev->name);
+ continue;
+ }
if (read_int(info[i].present, &info[i].is_present) != 0) {
clog(LOG_INFO, "Skipping %s\n", info[i].cdev->name);
|