aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2014-05-29 22:21:52 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2014-05-30 10:04:35 -0400
commitaca0a4eb4e325914ddb22a8ed06fcb0222da2a26 (patch)
tree5f7aafa1c328c72f41c0cc99c21935870cb6f926
parent52d1d0b12beaf98b6d144d7d1b24eb96cfea60f6 (diff)
ACPI / scan: .match() callback for ACPI scan handlers
Introduce a .match() callback for ACPI scan handlers to allow them to use more elaborate matching algorithms if necessary. That is needed for the upcoming PNP scan handler in particular. This change is based on a Zhang Rui's prototype. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
-rw-r--r--drivers/acpi/scan.c3
-rw-r--r--include/acpi/acpi_bus.h1
2 files changed, 4 insertions, 0 deletions
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index df6e4c924b35..e44438f7917b 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -1977,6 +1977,9 @@ static bool acpi_scan_handler_matching(struct acpi_scan_handler *handler,
1977{ 1977{
1978 const struct acpi_device_id *devid; 1978 const struct acpi_device_id *devid;
1979 1979
1980 if (handler->match)
1981 return handler->match(idstr, matchid);
1982
1980 for (devid = handler->ids; devid->id[0]; devid++) 1983 for (devid = handler->ids; devid->id[0]; devid++)
1981 if (!strcmp((char *)devid->id, idstr)) { 1984 if (!strcmp((char *)devid->id, idstr)) {
1982 if (matchid) 1985 if (matchid)
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
index 7417a16c8d86..c241c7594bbc 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
@@ -131,6 +131,7 @@ static inline struct acpi_hotplug_profile *to_acpi_hotplug_profile(
131struct acpi_scan_handler { 131struct acpi_scan_handler {
132 const struct acpi_device_id *ids; 132 const struct acpi_device_id *ids;
133 struct list_head list_node; 133 struct list_head list_node;
134 bool (*match)(char *idstr, const struct acpi_device_id **matchid);
134 int (*attach)(struct acpi_device *dev, const struct acpi_device_id *id); 135 int (*attach)(struct acpi_device *dev, const struct acpi_device_id *id);
135 void (*detach)(struct acpi_device *dev); 136 void (*detach)(struct acpi_device *dev);
136 void (*bind)(struct device *phys_dev); 137 void (*bind)(struct device *phys_dev);