提交 57f3674f 编写于 作者: B Bjorn Helgaas 提交者: Len Brown

ACPI: simplify building device HID/CID list

Minor code cleanup, no functional change.  Instead of remembering
what HIDs & CIDs to add later, just add them immediately.
Signed-off-by: NBjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: NLen Brown <len.brown@intel.com>
上级 6622d8ce
...@@ -1016,21 +1016,19 @@ static void acpi_add_id(struct acpi_device *device, const char *dev_id) ...@@ -1016,21 +1016,19 @@ static void acpi_add_id(struct acpi_device *device, const char *dev_id)
static void acpi_device_set_id(struct acpi_device *device) static void acpi_device_set_id(struct acpi_device *device)
{ {
struct acpi_device_info *info = NULL;
char *hid = NULL;
struct acpica_device_id_list *cid_list = NULL;
char *cid_add = NULL;
acpi_status status; acpi_status status;
struct acpi_device_info *info;
struct acpica_device_id_list *cid_list;
int i; int i;
switch (device->device_type) { switch (device->device_type) {
case ACPI_BUS_TYPE_DEVICE: case ACPI_BUS_TYPE_DEVICE:
if (ACPI_IS_ROOT_DEVICE(device)) { if (ACPI_IS_ROOT_DEVICE(device)) {
hid = ACPI_SYSTEM_HID; acpi_add_id(device, ACPI_SYSTEM_HID);
break; break;
} else if (ACPI_IS_ROOT_DEVICE(device->parent)) { } else if (ACPI_IS_ROOT_DEVICE(device->parent)) {
/* \_SB_, the only root-level namespace device */ /* \_SB_, the only root-level namespace device */
hid = ACPI_BUS_HID; acpi_add_id(device, ACPI_BUS_HID);
strcpy(device->pnp.device_name, ACPI_BUS_DEVICE_NAME); strcpy(device->pnp.device_name, ACPI_BUS_DEVICE_NAME);
strcpy(device->pnp.device_class, ACPI_BUS_CLASS); strcpy(device->pnp.device_class, ACPI_BUS_CLASS);
break; break;
...@@ -1043,41 +1041,43 @@ static void acpi_device_set_id(struct acpi_device *device) ...@@ -1043,41 +1041,43 @@ static void acpi_device_set_id(struct acpi_device *device)
} }
if (info->valid & ACPI_VALID_HID) if (info->valid & ACPI_VALID_HID)
hid = info->hardware_id.string; acpi_add_id(device, info->hardware_id.string);
if (info->valid & ACPI_VALID_CID) if (info->valid & ACPI_VALID_CID) {
cid_list = &info->compatible_id_list; cid_list = &info->compatible_id_list;
for (i = 0; i < cid_list->count; i++)
acpi_add_id(device, cid_list->ids[i].string);
}
if (info->valid & ACPI_VALID_ADR) { if (info->valid & ACPI_VALID_ADR) {
device->pnp.bus_address = info->address; device->pnp.bus_address = info->address;
device->flags.bus_address = 1; device->flags.bus_address = 1;
} }
/* If we have a video/bay/dock device, add our selfdefined /*
HID to the CID list. Like that the video/bay/dock drivers * Some devices don't reliably have _HIDs & _CIDs, so add
will get autoloaded and the device might still match * synthetic HIDs to make sure drivers can find them.
against another driver. */
*/
if (acpi_is_video_device(device)) if (acpi_is_video_device(device))
cid_add = ACPI_VIDEO_HID; acpi_add_id(device, ACPI_VIDEO_HID);
else if (ACPI_SUCCESS(acpi_bay_match(device))) else if (ACPI_SUCCESS(acpi_bay_match(device)))
cid_add = ACPI_BAY_HID; acpi_add_id(device, ACPI_BAY_HID);
else if (ACPI_SUCCESS(acpi_dock_match(device))) else if (ACPI_SUCCESS(acpi_dock_match(device)))
cid_add = ACPI_DOCK_HID; acpi_add_id(device, ACPI_DOCK_HID);
break; break;
case ACPI_BUS_TYPE_POWER: case ACPI_BUS_TYPE_POWER:
hid = ACPI_POWER_HID; acpi_add_id(device, ACPI_POWER_HID);
break; break;
case ACPI_BUS_TYPE_PROCESSOR: case ACPI_BUS_TYPE_PROCESSOR:
hid = ACPI_PROCESSOR_OBJECT_HID; acpi_add_id(device, ACPI_PROCESSOR_OBJECT_HID);
break; break;
case ACPI_BUS_TYPE_THERMAL: case ACPI_BUS_TYPE_THERMAL:
hid = ACPI_THERMAL_HID; acpi_add_id(device, ACPI_THERMAL_HID);
break; break;
case ACPI_BUS_TYPE_POWER_BUTTON: case ACPI_BUS_TYPE_POWER_BUTTON:
hid = ACPI_BUTTON_HID_POWERF; acpi_add_id(device, ACPI_BUTTON_HID_POWERF);
break; break;
case ACPI_BUS_TYPE_SLEEP_BUTTON: case ACPI_BUS_TYPE_SLEEP_BUTTON:
hid = ACPI_BUTTON_HID_SLEEPF; acpi_add_id(device, ACPI_BUTTON_HID_SLEEPF);
break; break;
} }
...@@ -1088,18 +1088,8 @@ static void acpi_device_set_id(struct acpi_device *device) ...@@ -1088,18 +1088,8 @@ static void acpi_device_set_id(struct acpi_device *device)
* This generic ID isn't useful for driver binding, but it provides * This generic ID isn't useful for driver binding, but it provides
* the useful property that "every acpi_device has an ID." * the useful property that "every acpi_device has an ID."
*/ */
if (!hid && !cid_list && !cid_add) if (list_empty(&device->pnp.ids))
hid = "device"; acpi_add_id(device, "device");
if (hid)
acpi_add_id(device, hid);
if (cid_list)
for (i = 0; i < cid_list->count; i++)
acpi_add_id(device, cid_list->ids[i].string);
if (cid_add)
acpi_add_id(device, cid_add);
kfree(info);
} }
static int acpi_device_set_context(struct acpi_device *device) static int acpi_device_set_context(struct acpi_device *device)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册