diff options
Diffstat (limited to 'drivers/acpi/utils.c')
| -rw-r--r-- | drivers/acpi/utils.c | 31 | 
1 files changed, 31 insertions, 0 deletions
diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c index 475c9079bf85..f2f9873bb5c3 100644 --- a/drivers/acpi/utils.c +++ b/drivers/acpi/utils.c @@ -29,6 +29,7 @@  #include <linux/dynamic_debug.h>  #include "internal.h" +#include "sleep.h"  #define _COMPONENT		ACPI_BUS_COMPONENT  ACPI_MODULE_NAME("utils"); @@ -709,6 +710,36 @@ bool acpi_check_dsm(acpi_handle handle, const u8 *uuid, int rev, u64 funcs)  }  EXPORT_SYMBOL(acpi_check_dsm); +/** + * acpi_dev_present - Detect presence of a given ACPI device in the system. + * @hid: Hardware ID of the device. + * + * Return %true if the device was present at the moment of invocation. + * Note that if the device is pluggable, it may since have disappeared. + * + * For this function to work, acpi_bus_scan() must have been executed + * which happens in the subsys_initcall() subsection. Hence, do not + * call from a subsys_initcall() or earlier (use acpi_get_devices() + * instead). Calling from module_init() is fine (which is synonymous + * with device_initcall()). + */ +bool acpi_dev_present(const char *hid) +{ +	struct acpi_device_bus_id *acpi_device_bus_id; +	bool found = false; + +	mutex_lock(&acpi_device_lock); +	list_for_each_entry(acpi_device_bus_id, &acpi_bus_id_list, node) +		if (!strcmp(acpi_device_bus_id->bus_id, hid)) { +			found = true; +			break; +		} +	mutex_unlock(&acpi_device_lock); + +	return found; +} +EXPORT_SYMBOL(acpi_dev_present); +  /*   * acpi_backlight= handling, this is done here rather then in video_detect.c   * because __setup cannot be used in modules.  | 
