aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/device_pm.c12
-rw-r--r--drivers/acpi/ec.c2
-rw-r--r--drivers/acpi/fan.c8
-rw-r--r--drivers/acpi/scan.c4
-rw-r--r--drivers/acpi/utils.c12
-rw-r--r--drivers/acpi/video.c10
6 files changed, 30 insertions, 18 deletions
diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c
index 897640188acd..c2daa85fc9f7 100644
--- a/drivers/acpi/device_pm.c
+++ b/drivers/acpi/device_pm.c
@@ -680,13 +680,21 @@ static int acpi_device_wakeup(struct acpi_device *adev, u32 target_state,
680 if (error) 680 if (error)
681 return error; 681 return error;
682 682
683 if (adev->wakeup.flags.enabled)
684 return 0;
685
683 res = acpi_enable_gpe(wakeup->gpe_device, wakeup->gpe_number); 686 res = acpi_enable_gpe(wakeup->gpe_device, wakeup->gpe_number);
684 if (ACPI_FAILURE(res)) { 687 if (ACPI_SUCCESS(res)) {
688 adev->wakeup.flags.enabled = 1;
689 } else {
685 acpi_disable_wakeup_device_power(adev); 690 acpi_disable_wakeup_device_power(adev);
686 return -EIO; 691 return -EIO;
687 } 692 }
688 } else { 693 } else {
689 acpi_disable_gpe(wakeup->gpe_device, wakeup->gpe_number); 694 if (adev->wakeup.flags.enabled) {
695 acpi_disable_gpe(wakeup->gpe_device, wakeup->gpe_number);
696 adev->wakeup.flags.enabled = 0;
697 }
690 acpi_disable_wakeup_device_power(adev); 698 acpi_disable_wakeup_device_power(adev);
691 } 699 }
692 return 0; 700 return 0;
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 5f9b74b9b71f..1b5853f384e2 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -844,6 +844,8 @@ static int ec_install_handlers(struct acpi_ec *ec)
844 844
845static void ec_remove_handlers(struct acpi_ec *ec) 845static void ec_remove_handlers(struct acpi_ec *ec)
846{ 846{
847 if (!test_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags))
848 return;
847 acpi_disable_gpe(NULL, ec->gpe); 849 acpi_disable_gpe(NULL, ec->gpe);
848 if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle, 850 if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle,
849 ACPI_ADR_SPACE_EC, &acpi_ec_space_handler))) 851 ACPI_ADR_SPACE_EC, &acpi_ec_space_handler)))
diff --git a/drivers/acpi/fan.c b/drivers/acpi/fan.c
index caf9b76b7ef8..7a36f02598a6 100644
--- a/drivers/acpi/fan.c
+++ b/drivers/acpi/fan.c
@@ -325,6 +325,7 @@ static int acpi_fan_probe(struct platform_device *pdev)
325 struct thermal_cooling_device *cdev; 325 struct thermal_cooling_device *cdev;
326 struct acpi_fan *fan; 326 struct acpi_fan *fan;
327 struct acpi_device *device = ACPI_COMPANION(&pdev->dev); 327 struct acpi_device *device = ACPI_COMPANION(&pdev->dev);
328 char *name;
328 329
329 fan = devm_kzalloc(&pdev->dev, sizeof(*fan), GFP_KERNEL); 330 fan = devm_kzalloc(&pdev->dev, sizeof(*fan), GFP_KERNEL);
330 if (!fan) { 331 if (!fan) {
@@ -346,7 +347,12 @@ static int acpi_fan_probe(struct platform_device *pdev)
346 } 347 }
347 } 348 }
348 349
349 cdev = thermal_cooling_device_register("Fan", device, 350 if (!strncmp(pdev->name, "PNP0C0B", strlen("PNP0C0B")))
351 name = "Fan";
352 else
353 name = acpi_device_bid(device);
354
355 cdev = thermal_cooling_device_register(name, device,
350 &fan_cooling_ops); 356 &fan_cooling_ops);
351 if (IS_ERR(cdev)) { 357 if (IS_ERR(cdev)) {
352 result = PTR_ERR(cdev); 358 result = PTR_ERR(cdev);
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 1b1cf558d3d3..16914cc30882 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -2214,7 +2214,7 @@ static void acpi_device_dep_initialize(struct acpi_device *adev)
2214 status = acpi_evaluate_reference(adev->handle, "_DEP", NULL, 2214 status = acpi_evaluate_reference(adev->handle, "_DEP", NULL,
2215 &dep_devices); 2215 &dep_devices);
2216 if (ACPI_FAILURE(status)) { 2216 if (ACPI_FAILURE(status)) {
2217 dev_err(&adev->dev, "Failed to evaluate _DEP.\n"); 2217 dev_dbg(&adev->dev, "Failed to evaluate _DEP.\n");
2218 return; 2218 return;
2219 } 2219 }
2220 2220
@@ -2224,7 +2224,7 @@ static void acpi_device_dep_initialize(struct acpi_device *adev)
2224 2224
2225 status = acpi_get_object_info(dep_devices.handles[i], &info); 2225 status = acpi_get_object_info(dep_devices.handles[i], &info);
2226 if (ACPI_FAILURE(status)) { 2226 if (ACPI_FAILURE(status)) {
2227 dev_err(&adev->dev, "Error reading device info\n"); 2227 dev_dbg(&adev->dev, "Error reading _DEP device info\n");
2228 continue; 2228 continue;
2229 } 2229 }
2230 2230
diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c
index dd8ff63ee2b4..cd49a3982b6a 100644
--- a/drivers/acpi/utils.c
+++ b/drivers/acpi/utils.c
@@ -346,22 +346,16 @@ acpi_evaluate_reference(acpi_handle handle,
346 package = buffer.pointer; 346 package = buffer.pointer;
347 347
348 if ((buffer.length == 0) || !package) { 348 if ((buffer.length == 0) || !package) {
349 printk(KERN_ERR PREFIX "No return object (len %X ptr %p)\n",
350 (unsigned)buffer.length, package);
351 status = AE_BAD_DATA; 349 status = AE_BAD_DATA;
352 acpi_util_eval_error(handle, pathname, status); 350 acpi_util_eval_error(handle, pathname, status);
353 goto end; 351 goto end;
354 } 352 }
355 if (package->type != ACPI_TYPE_PACKAGE) { 353 if (package->type != ACPI_TYPE_PACKAGE) {
356 printk(KERN_ERR PREFIX "Expecting a [Package], found type %X\n",
357 package->type);
358 status = AE_BAD_DATA; 354 status = AE_BAD_DATA;
359 acpi_util_eval_error(handle, pathname, status); 355 acpi_util_eval_error(handle, pathname, status);
360 goto end; 356 goto end;
361 } 357 }
362 if (!package->package.count) { 358 if (!package->package.count) {
363 printk(KERN_ERR PREFIX "[Package] has zero elements (%p)\n",
364 package);
365 status = AE_BAD_DATA; 359 status = AE_BAD_DATA;
366 acpi_util_eval_error(handle, pathname, status); 360 acpi_util_eval_error(handle, pathname, status);
367 goto end; 361 goto end;
@@ -380,17 +374,13 @@ acpi_evaluate_reference(acpi_handle handle,
380 374
381 if (element->type != ACPI_TYPE_LOCAL_REFERENCE) { 375 if (element->type != ACPI_TYPE_LOCAL_REFERENCE) {
382 status = AE_BAD_DATA; 376 status = AE_BAD_DATA;
383 printk(KERN_ERR PREFIX
384 "Expecting a [Reference] package element, found type %X\n",
385 element->type);
386 acpi_util_eval_error(handle, pathname, status); 377 acpi_util_eval_error(handle, pathname, status);
387 break; 378 break;
388 } 379 }
389 380
390 if (!element->reference.handle) { 381 if (!element->reference.handle) {
391 printk(KERN_WARNING PREFIX "Invalid reference in"
392 " package %s\n", pathname);
393 status = AE_NULL_ENTRY; 382 status = AE_NULL_ENTRY;
383 acpi_util_eval_error(handle, pathname, status);
394 break; 384 break;
395 } 385 }
396 /* Get the acpi_handle. */ 386 /* Get the acpi_handle. */
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
index 185a57d13723..1eaadff2e198 100644
--- a/drivers/acpi/video.c
+++ b/drivers/acpi/video.c
@@ -155,6 +155,7 @@ struct acpi_video_bus {
155 u8 dos_setting; 155 u8 dos_setting;
156 struct acpi_video_enumerated_device *attached_array; 156 struct acpi_video_enumerated_device *attached_array;
157 u8 attached_count; 157 u8 attached_count;
158 u8 child_count;
158 struct acpi_video_bus_cap cap; 159 struct acpi_video_bus_cap cap;
159 struct acpi_video_bus_flags flags; 160 struct acpi_video_bus_flags flags;
160 struct list_head video_device_list; 161 struct list_head video_device_list;
@@ -1159,8 +1160,12 @@ static bool acpi_video_device_in_dod(struct acpi_video_device *device)
1159 struct acpi_video_bus *video = device->video; 1160 struct acpi_video_bus *video = device->video;
1160 int i; 1161 int i;
1161 1162
1162 /* If we have a broken _DOD, no need to test */ 1163 /*
1163 if (!video->attached_count) 1164 * If we have a broken _DOD or we have more than 8 output devices
1165 * under the graphics controller node that we can't proper deal with
1166 * in the operation region code currently, no need to test.
1167 */
1168 if (!video->attached_count || video->child_count > 8)
1164 return true; 1169 return true;
1165 1170
1166 for (i = 0; i < video->attached_count; i++) { 1171 for (i = 0; i < video->attached_count; i++) {
@@ -1413,6 +1418,7 @@ acpi_video_bus_get_devices(struct acpi_video_bus *video,
1413 dev_err(&dev->dev, "Can't attach device\n"); 1418 dev_err(&dev->dev, "Can't attach device\n");
1414 break; 1419 break;
1415 } 1420 }
1421 video->child_count++;
1416 } 1422 }
1417 return status; 1423 return status;
1418} 1424}