summaryrefslogtreecommitdiff
authorKyle McMartin <kmcmartin@redhat.com>2008-01-28 14:19:39 (GMT)
committer Danny Kukawka <danny.kukawka@web.de>2008-01-28 14:19:39 (GMT)
commit4541abd23fd02118a1a7f8b825aed338d2a5d638 (patch) (side-by-side diff)
tree156dc48e78e4b3d6ecbe7371596f77125a579ac8
parente3eb726da49a8cdc9e93905777a6e2d71ae878b3 (diff)
downloadhal-4541abd23fd02118a1a7f8b825aed338d2a5d638.zip
hal-4541abd23fd02118a1a7f8b825aed338d2a5d638.tar.gz
fix hal see same battery twice from sysfs and proc
I've turned on both ACPI_PROCFS_POWER and ACPI_SYSFS_POWER in Fedora rawhide. With both options set, hal sees two battery devices, when it should really only check the second if the first doesn't exist. Fix this up by only checking procfs if we don't find anything in sysfs.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--hald/linux/acpi.c13
-rw-r--r--hald/linux/device.c7
-rw-r--r--hald/linux/device.h1
3 files changed, 21 insertions, 0 deletions
diff --git a/hald/linux/acpi.c b/hald/linux/acpi.c
index cc97f15..a1f0fdd 100644
--- a/hald/linux/acpi.c
+++ b/hald/linux/acpi.c
@@ -944,10 +944,23 @@ acpi_synthesize_hotplug_events (void)
return TRUE;
}
+static gboolean
+is_power_supply(ACPIDevHandler *h)
+{
+ if (h && (h->acpi_type == ACPI_TYPE_BATTERY) ||
+ (h->acpi_type == ACPI_TYPE_AC_ADAPTER))
+ return TRUE;
+ return FALSE;
+}
+
static HalDevice *
acpi_generic_add (const gchar *acpi_path, HalDevice *parent, ACPIDevHandler *handler)
{
HalDevice *d;
+
+ if (is_power_supply(handler) && _have_sysfs_power_supply)
+ return NULL;
+
d = hal_device_new ();
hal_device_property_set_string (d, "linux.acpi_path", acpi_path);
hal_device_property_set_int (d, "linux.acpi_type", handler->acpi_type);
diff --git a/hald/linux/device.c b/hald/linux/device.c
index b55da25..5615b43 100644
--- a/hald/linux/device.c
+++ b/hald/linux/device.c
@@ -3232,6 +3232,11 @@ power_supply_refresh (HalDevice *d)
return TRUE;
}
+/* don't bother looking for /proc/acpi batteries if they're in
+ * sysfs.
+ */
+gboolean _have_sysfs_power_supply = FALSE;
+
static HalDevice *
power_supply_add (const gchar *sysfs_path, const gchar *device_file, HalDevice *physdev,
const gchar *sysfs_path_in_devices)
@@ -3282,6 +3287,8 @@ power_supply_add (const gchar *sysfs_path, const gchar *device_file, HalDevice *
refresh_ac_adapter (d);
hal_device_add_capability (d, "ac_adapter");
}
+
+ _have_sysfs_power_supply = TRUE;
finish:
return d;
}
diff --git a/hald/linux/device.h b/hald/linux/device.h
index 1bd7286..4a7fd92 100644
--- a/hald/linux/device.h
+++ b/hald/linux/device.h
@@ -52,5 +52,6 @@ HotplugEvent *dev_generate_remove_hotplug_event (HalDevice *d);
extern gboolean _have_sysfs_lid_button;
extern gboolean _have_sysfs_power_button;
extern gboolean _have_sysfs_sleep_button;
+extern gboolean _have_sysfs_power_supply;
#endif