diff -ur hal-0.5.11.old/hald/linux/device.c hal-0.5.11.new/hald/linux/device.c --- hal-0.5.11.old/hald/linux/device.c 2008-05-07 19:23:42.000000000 -0400 +++ hal-0.5.11.new/hald/linux/device.c 2008-11-05 18:26:33.000000000 -0500 @@ -175,7 +175,7 @@ { char *s; long bitmask[NBITS(KEY_MAX)]; - int num_bits; + int num_bits, bus_type; s = hal_util_get_string_from_file (sysfs_path, "capabilities/key"); if (s == NULL) @@ -183,11 +183,11 @@ num_bits = input_str_to_bitmask (s, bitmask, sizeof (bitmask)); - if (num_bits == 1) { - /* this is for input devices originating from the ACPI layer et. al. */ - - /* TODO: potentially test for BUS_HOST */ + if (!hal_util_get_int_from_file (sysfs_path, "id/bustype", &bus_type, 16)) + goto out; + if (num_bits == 1 && bus_type == BUS_HOST) { + /* this is for input devices originating from the ACPI layer et. al. */ hal_device_add_capability (d, "button"); hal_device_property_set_bool (d, "button.has_state", FALSE); if (test_bit (KEY_POWER, bitmask)) {