|
@@ -340,8 +340,8 @@ static void acpi_device_remove_files(struct acpi_device *dev)
|
|
|
ACPI Bus operations
|
|
|
-------------------------------------------------------------------------- */
|
|
|
|
|
|
-int acpi_match_device_ids(struct acpi_device *device,
|
|
|
- const struct acpi_device_id *ids)
|
|
|
+static const struct acpi_device_id *__acpi_match_device(
|
|
|
+ struct acpi_device *device, const struct acpi_device_id *ids)
|
|
|
{
|
|
|
const struct acpi_device_id *id;
|
|
|
struct acpi_hardware_id *hwid;
|
|
@@ -351,14 +351,44 @@ int acpi_match_device_ids(struct acpi_device *device,
|
|
|
* driver for it.
|
|
|
*/
|
|
|
if (!device->status.present)
|
|
|
- return -ENODEV;
|
|
|
+ return NULL;
|
|
|
|
|
|
for (id = ids; id->id[0]; id++)
|
|
|
list_for_each_entry(hwid, &device->pnp.ids, list)
|
|
|
if (!strcmp((char *) id->id, hwid->id))
|
|
|
- return 0;
|
|
|
+ return id;
|
|
|
+
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
|
|
|
- return -ENOENT;
|
|
|
+/**
|
|
|
+ * acpi_match_device - Match a struct device against a given list of ACPI IDs
|
|
|
+ * @ids: Array of struct acpi_device_id object to match against.
|
|
|
+ * @dev: The device structure to match.
|
|
|
+ *
|
|
|
+ * Check if @dev has a valid ACPI handle and if there is a struct acpi_device
|
|
|
+ * object for that handle and use that object to match against a given list of
|
|
|
+ * device IDs.
|
|
|
+ *
|
|
|
+ * Return a pointer to the first matching ID on success or %NULL on failure.
|
|
|
+ */
|
|
|
+const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids,
|
|
|
+ const struct device *dev)
|
|
|
+{
|
|
|
+ struct acpi_device *adev;
|
|
|
+
|
|
|
+ if (!ids || !dev->acpi_handle
|
|
|
+ || ACPI_FAILURE(acpi_bus_get_device(dev->acpi_handle, &adev)))
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ return __acpi_match_device(adev, ids);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(acpi_match_device);
|
|
|
+
|
|
|
+int acpi_match_device_ids(struct acpi_device *device,
|
|
|
+ const struct acpi_device_id *ids)
|
|
|
+{
|
|
|
+ return __acpi_match_device(device, ids) ? 0 : -ENOENT;
|
|
|
}
|
|
|
EXPORT_SYMBOL(acpi_match_device_ids);
|
|
|
|