aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorLen Brown <len.brown@intel.com>2007-08-12 00:12:54 -0400
committerLen Brown <len.brown@intel.com>2007-08-12 00:12:54 -0400
commitf8707ec9643769957065405b5090e4aa64fd8214 (patch)
tree454f1b6a981884072389cfdf3ce25e9636a2b39c /drivers/acpi
parentf54871456162aff557d57bec51639b1288d4a84b (diff)
ACPI: thermal: create "thermal.act=" to disable or override active trip point
thermal.act=-1 disables all active trip points in all ACPI thermal zones. thermal.act=C, where C > 0, overrides all lowest temperature active trip points in all thermal zones to C degrees Celsius. Raising this trip-point may allow you to keep your system silent up to a higher temperature. However, it will not allow you to raise the lowest temperature trip point above the next higher trip point (if there is one). Lowering this trip point may kick in the fan sooner. Note that overriding this trip-point will disable any BIOS attempts to implement hysteresis around the lowest temperature trip point. This may result in the fan starting and stopping frequently if temperature frequently crosses C. WARNING: raising trip points above the manufacturer's defaults may cause the system to run at higher temperature and shorten its life. Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/thermal.c34
1 files changed, 30 insertions, 4 deletions
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
index 57d05ff44dd1..3521c37bbd33 100644
--- a/drivers/acpi/thermal.c
+++ b/drivers/acpi/thermal.c
@@ -74,6 +74,10 @@ MODULE_AUTHOR("Paul Diefenbaugh");
74MODULE_DESCRIPTION("ACPI Thermal Zone Driver"); 74MODULE_DESCRIPTION("ACPI Thermal Zone Driver");
75MODULE_LICENSE("GPL"); 75MODULE_LICENSE("GPL");
76 76
77static int act;
78module_param(act, int, 0644);
79MODULE_PARM_DESC(act, "Disable or override all lowest active trip points.\n");
80
77static int tzp; 81static int tzp;
78module_param(tzp, int, 0444); 82module_param(tzp, int, 0444);
79MODULE_PARM_DESC(tzp, "Thermal zone polling frequency, in 1/10 seconds.\n"); 83MODULE_PARM_DESC(tzp, "Thermal zone polling frequency, in 1/10 seconds.\n");
@@ -405,11 +409,33 @@ static int acpi_thermal_get_trip_points(struct acpi_thermal *tz)
405 409
406 char name[5] = { '_', 'A', 'C', ('0' + i), '\0' }; 410 char name[5] = { '_', 'A', 'C', ('0' + i), '\0' };
407 411
408 status = 412 if (act == -1)
409 acpi_evaluate_integer(tz->device->handle, name, NULL, 413 break; /* disable all active trip points */
410 &tz->trips.active[i].temperature); 414
411 if (ACPI_FAILURE(status)) 415 status = acpi_evaluate_integer(tz->device->handle,
416 name, NULL, &tz->trips.active[i].temperature);
417
418 if (ACPI_FAILURE(status)) {
419 if (i == 0) /* no active trip points */
420 break;
421 if (act <= 0) /* no override requested */
422 break;
423 if (i == 1) { /* 1 trip point */
424 tz->trips.active[0].temperature =
425 CELSIUS_TO_KELVIN(act);
426 } else { /* multiple trips */
427 /*
428 * Don't allow override higher than
429 * the next higher trip point
430 */
431 tz->trips.active[i - 1].temperature =
432 (tz->trips.active[i - 2].temperature <
433 CELSIUS_TO_KELVIN(act) ?
434 tz->trips.active[i - 2].temperature :
435 CELSIUS_TO_KELVIN(act));
436 }
412 break; 437 break;
438 }
413 439
414 name[2] = 'L'; 440 name[2] = 'L';
415 status = 441 status =