diff options
| -rw-r--r-- | drivers/acpi/scan.c | 56 | 
1 files changed, 23 insertions, 33 deletions
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c index da11b5379dc8..468921bed22f 100644 --- a/drivers/acpi/scan.c +++ b/drivers/acpi/scan.c  | |||
| @@ -1016,21 +1016,19 @@ static void acpi_add_id(struct acpi_device *device, const char *dev_id) | |||
| 1016 | 1016 | ||
| 1017 | static void acpi_device_set_id(struct acpi_device *device) | 1017 | static void acpi_device_set_id(struct acpi_device *device) | 
| 1018 | { | 1018 | { | 
| 1019 | struct acpi_device_info *info = NULL; | ||
| 1020 | char *hid = NULL; | ||
| 1021 | struct acpica_device_id_list *cid_list = NULL; | ||
| 1022 | char *cid_add = NULL; | ||
| 1023 | acpi_status status; | 1019 | acpi_status status; | 
| 1020 | struct acpi_device_info *info; | ||
| 1021 | struct acpica_device_id_list *cid_list; | ||
| 1024 | int i; | 1022 | int i; | 
| 1025 | 1023 | ||
| 1026 | switch (device->device_type) { | 1024 | switch (device->device_type) { | 
| 1027 | case ACPI_BUS_TYPE_DEVICE: | 1025 | case ACPI_BUS_TYPE_DEVICE: | 
| 1028 | if (ACPI_IS_ROOT_DEVICE(device)) { | 1026 | if (ACPI_IS_ROOT_DEVICE(device)) { | 
| 1029 | hid = ACPI_SYSTEM_HID; | 1027 | acpi_add_id(device, ACPI_SYSTEM_HID); | 
| 1030 | break; | 1028 | break; | 
| 1031 | } else if (ACPI_IS_ROOT_DEVICE(device->parent)) { | 1029 | } else if (ACPI_IS_ROOT_DEVICE(device->parent)) { | 
| 1032 | /* \_SB_, the only root-level namespace device */ | 1030 | /* \_SB_, the only root-level namespace device */ | 
| 1033 | hid = ACPI_BUS_HID; | 1031 | acpi_add_id(device, ACPI_BUS_HID); | 
| 1034 | strcpy(device->pnp.device_name, ACPI_BUS_DEVICE_NAME); | 1032 | strcpy(device->pnp.device_name, ACPI_BUS_DEVICE_NAME); | 
| 1035 | strcpy(device->pnp.device_class, ACPI_BUS_CLASS); | 1033 | strcpy(device->pnp.device_class, ACPI_BUS_CLASS); | 
| 1036 | break; | 1034 | break; | 
| @@ -1043,41 +1041,43 @@ static void acpi_device_set_id(struct acpi_device *device) | |||
| 1043 | } | 1041 | } | 
| 1044 | 1042 | ||
| 1045 | if (info->valid & ACPI_VALID_HID) | 1043 | if (info->valid & ACPI_VALID_HID) | 
| 1046 | hid = info->hardware_id.string; | 1044 | acpi_add_id(device, info->hardware_id.string); | 
| 1047 | if (info->valid & ACPI_VALID_CID) | 1045 | if (info->valid & ACPI_VALID_CID) { | 
| 1048 | cid_list = &info->compatible_id_list; | 1046 | cid_list = &info->compatible_id_list; | 
| 1047 | for (i = 0; i < cid_list->count; i++) | ||
| 1048 | acpi_add_id(device, cid_list->ids[i].string); | ||
| 1049 | } | ||
| 1049 | if (info->valid & ACPI_VALID_ADR) { | 1050 | if (info->valid & ACPI_VALID_ADR) { | 
| 1050 | device->pnp.bus_address = info->address; | 1051 | device->pnp.bus_address = info->address; | 
| 1051 | device->flags.bus_address = 1; | 1052 | device->flags.bus_address = 1; | 
| 1052 | } | 1053 | } | 
| 1053 | 1054 | ||
| 1054 | /* If we have a video/bay/dock device, add our selfdefined | 1055 | /* | 
| 1055 | HID to the CID list. Like that the video/bay/dock drivers | 1056 | * Some devices don't reliably have _HIDs & _CIDs, so add | 
| 1056 | will get autoloaded and the device might still match | 1057 | * synthetic HIDs to make sure drivers can find them. | 
| 1057 | against another driver. | 1058 | */ | 
| 1058 | */ | ||
| 1059 | if (acpi_is_video_device(device)) | 1059 | if (acpi_is_video_device(device)) | 
| 1060 | cid_add = ACPI_VIDEO_HID; | 1060 | acpi_add_id(device, ACPI_VIDEO_HID); | 
| 1061 | else if (ACPI_SUCCESS(acpi_bay_match(device))) | 1061 | else if (ACPI_SUCCESS(acpi_bay_match(device))) | 
| 1062 | cid_add = ACPI_BAY_HID; | 1062 | acpi_add_id(device, ACPI_BAY_HID); | 
| 1063 | else if (ACPI_SUCCESS(acpi_dock_match(device))) | 1063 | else if (ACPI_SUCCESS(acpi_dock_match(device))) | 
| 1064 | cid_add = ACPI_DOCK_HID; | 1064 | acpi_add_id(device, ACPI_DOCK_HID); | 
| 1065 | 1065 | ||
| 1066 | break; | 1066 | break; | 
| 1067 | case ACPI_BUS_TYPE_POWER: | 1067 | case ACPI_BUS_TYPE_POWER: | 
| 1068 | hid = ACPI_POWER_HID; | 1068 | acpi_add_id(device, ACPI_POWER_HID); | 
| 1069 | break; | 1069 | break; | 
| 1070 | case ACPI_BUS_TYPE_PROCESSOR: | 1070 | case ACPI_BUS_TYPE_PROCESSOR: | 
| 1071 | hid = ACPI_PROCESSOR_OBJECT_HID; | 1071 | acpi_add_id(device, ACPI_PROCESSOR_OBJECT_HID); | 
| 1072 | break; | 1072 | break; | 
| 1073 | case ACPI_BUS_TYPE_THERMAL: | 1073 | case ACPI_BUS_TYPE_THERMAL: | 
| 1074 | hid = ACPI_THERMAL_HID; | 1074 | acpi_add_id(device, ACPI_THERMAL_HID); | 
| 1075 | break; | 1075 | break; | 
| 1076 | case ACPI_BUS_TYPE_POWER_BUTTON: | 1076 | case ACPI_BUS_TYPE_POWER_BUTTON: | 
| 1077 | hid = ACPI_BUTTON_HID_POWERF; | 1077 | acpi_add_id(device, ACPI_BUTTON_HID_POWERF); | 
| 1078 | break; | 1078 | break; | 
| 1079 | case ACPI_BUS_TYPE_SLEEP_BUTTON: | 1079 | case ACPI_BUS_TYPE_SLEEP_BUTTON: | 
| 1080 | hid = ACPI_BUTTON_HID_SLEEPF; | 1080 | acpi_add_id(device, ACPI_BUTTON_HID_SLEEPF); | 
| 1081 | break; | 1081 | break; | 
| 1082 | } | 1082 | } | 
| 1083 | 1083 | ||
| @@ -1088,18 +1088,8 @@ static void acpi_device_set_id(struct acpi_device *device) | |||
| 1088 | * This generic ID isn't useful for driver binding, but it provides | 1088 | * This generic ID isn't useful for driver binding, but it provides | 
| 1089 | * the useful property that "every acpi_device has an ID." | 1089 | * the useful property that "every acpi_device has an ID." | 
| 1090 | */ | 1090 | */ | 
| 1091 | if (!hid && !cid_list && !cid_add) | 1091 | if (list_empty(&device->pnp.ids)) | 
| 1092 | hid = "device"; | 1092 | acpi_add_id(device, "device"); | 
| 1093 | |||
| 1094 | if (hid) | ||
| 1095 | acpi_add_id(device, hid); | ||
| 1096 | if (cid_list) | ||
| 1097 | for (i = 0; i < cid_list->count; i++) | ||
| 1098 | acpi_add_id(device, cid_list->ids[i].string); | ||
| 1099 | if (cid_add) | ||
| 1100 | acpi_add_id(device, cid_add); | ||
| 1101 | |||
| 1102 | kfree(info); | ||
| 1103 | } | 1093 | } | 
| 1104 | 1094 | ||
| 1105 | static int acpi_device_set_context(struct acpi_device *device) | 1095 | static int acpi_device_set_context(struct acpi_device *device) | 
