summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--etc/UPower.conf9
-rw-r--r--src/linux/up-device-supply.c16
2 files changed, 22 insertions, 3 deletions
diff --git a/etc/UPower.conf b/etc/UPower.conf
index 801f52f..920b256 100644
--- a/etc/UPower.conf
+++ b/etc/UPower.conf
@@ -26,6 +26,15 @@ EnableWattsUpPro=false
# default=false
PollDockDevices=false
+# Don't poll the kernel for battery level changes.
+#
+# Some hardware will send us battery level changes through
+# events, rather than us having to poll for it. This option
+# allows disabling polling for hardware that sends out events.
+#
+# default=false
+NoPollBatteries=false
+
# Do we ignore the lid state
#
# Some laptops are broken. The lid state is either inverted, or stuck
diff --git a/src/linux/up-device-supply.c b/src/linux/up-device-supply.c
index 5fb7cb0..3a3ceea 100644
--- a/src/linux/up-device-supply.c
+++ b/src/linux/up-device-supply.c
@@ -34,6 +34,7 @@
#include <gudev/gudev.h>
#include "sysfs-utils.h"
+#include "up-config.h"
#include "up-types.h"
#include "up-device-supply.h"
@@ -58,7 +59,8 @@ struct UpDeviceSupplyPrivate
guint energy_old_first;
gdouble rate_old;
guint unknown_retries;
- gboolean enable_poll;
+ gboolean enable_poll; /* calculated */
+ gboolean disable_battery_poll; /* from configuration */
gboolean is_power_supply;
gboolean shown_invalid_voltage_warning;
};
@@ -1110,8 +1112,10 @@ up_device_supply_refresh (UpDevice *device)
up_device_supply_disable_poll (device);
ret = up_device_supply_refresh_battery (supply, &state);
/* Seems that we don't get change uevents from the
- * kernel on some BIOS types */
- up_device_supply_setup_poll (device, state);
+ * kernel on some BIOS types, but if polling
+ * is disabled in the configuration, do nothing */
+ if (!supply->priv->disable_battery_poll)
+ up_device_supply_setup_poll (device, state);
break;
default:
up_device_supply_disable_poll (device);
@@ -1135,6 +1139,8 @@ up_device_supply_refresh (UpDevice *device)
static void
up_device_supply_init (UpDeviceSupply *supply)
{
+ UpConfig *config;
+
supply->priv = UP_DEVICE_SUPPLY_GET_PRIVATE (supply);
supply->priv->enable_poll = TRUE;
@@ -1143,6 +1149,10 @@ up_device_supply_init (UpDeviceSupply *supply)
supply->priv->energy_old_timespec = g_new (GTimeVal, UP_DEVICE_SUPPLY_ENERGY_OLD_LENGTH);
supply->priv->shown_invalid_voltage_warning = FALSE;
+
+ config = up_config_new ();
+ supply->priv->disable_battery_poll = up_config_get_boolean (config, "NoPollBatteries");
+ g_object_unref (config);
}
/**