Merge branch 'pnpacpi-invalid-device-id' into release
This commit is contained in:
commit
b10b977b79
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue