Merge branch 'pnpacpi-invalid-device-id' into release

This commit is contained in:
Len Brown 2010-10-25 02:13:44 -04:00
commit b10b977b79
1 changed files with 24 additions and 5 deletions

View File

@ -28,7 +28,7 @@
#include "../base.h" #include "../base.h"
#include "pnpacpi.h" #include "pnpacpi.h"
static int num = 0; static int num;
/* We need only to blacklist devices that have already an acpi driver that /* We need only to blacklist devices that have already an acpi driver that
* can't use pnp layer. We don't need to blacklist device that are directly * can't use pnp layer. We don't need to blacklist device that are directly
@ -180,11 +180,24 @@ struct pnp_protocol pnpacpi_protocol = {
}; };
EXPORT_SYMBOL(pnpacpi_protocol); EXPORT_SYMBOL(pnpacpi_protocol);
static char *pnpacpi_get_id(struct acpi_device *device)
{
struct acpi_hardware_id *id;
list_for_each_entry(id, &device->pnp.ids, list) {
if (ispnpidacpi(id->id))
return id->id;
}
return NULL;
}
static int __init pnpacpi_add_device(struct acpi_device *device) static int __init pnpacpi_add_device(struct acpi_device *device)
{ {
acpi_handle temp = NULL; acpi_handle temp = NULL;
acpi_status status; acpi_status status;
struct pnp_dev *dev; struct pnp_dev *dev;
char *pnpid;
struct acpi_hardware_id *id; struct acpi_hardware_id *id;
/* /*
@ -192,11 +205,17 @@ static int __init pnpacpi_add_device(struct acpi_device *device)
* driver should not be loaded. * driver should not be loaded.
*/ */
status = acpi_get_handle(device->handle, "_CRS", &temp); status = acpi_get_handle(device->handle, "_CRS", &temp);
if (ACPI_FAILURE(status) || !ispnpidacpi(acpi_device_hid(device)) || if (ACPI_FAILURE(status))
is_exclusive_device(device) || (!device->status.present))
return 0; return 0;
dev = pnp_alloc_dev(&pnpacpi_protocol, num, acpi_device_hid(device)); pnpid = pnpacpi_get_id(device);
if (!pnpid)
return 0;
if (is_exclusive_device(device) || !device->status.present)
return 0;
dev = pnp_alloc_dev(&pnpacpi_protocol, num, pnpid);
if (!dev) if (!dev)
return -ENOMEM; return -ENOMEM;
@ -227,7 +246,7 @@ static int __init pnpacpi_add_device(struct acpi_device *device)
pnpacpi_parse_resource_option_data(dev); pnpacpi_parse_resource_option_data(dev);
list_for_each_entry(id, &device->pnp.ids, list) { list_for_each_entry(id, &device->pnp.ids, list) {
if (!strcmp(id->id, acpi_device_hid(device))) if (!strcmp(id->id, pnpid))
continue; continue;
if (!ispnpidacpi(id->id)) if (!ispnpidacpi(id->id))
continue; continue;