linux/drivers/acpi/thermal.c
<<
>>
Prefs
   1/*
   2 *  acpi_thermal.c - ACPI Thermal Zone Driver ($Revision: 41 $)
   3 *
   4 *  Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
   5 *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
   6 *
   7 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   8 *
   9 *  This program is free software; you can redistribute it and/or modify
  10 *  it under the terms of the GNU General Public License as published by
  11 *  the Free Software Foundation; either version 2 of the License, or (at
  12 *  your option) any later version.
  13 *
  14 *  This program is distributed in the hope that it will be useful, but
  15 *  WITHOUT ANY WARRANTY; without even the implied warranty of
  16 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  17 *  General Public License for more details.
  18 *
  19 *  You should have received a copy of the GNU General Public License along
  20 *  with this program; if not, write to the Free Software Foundation, Inc.,
  21 *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  22 *
  23 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  24 *
  25 *  This driver fully implements the ACPI thermal policy as described in the
  26 *  ACPI 2.0 Specification.
  27 *
  28 *  TBD: 1. Implement passive cooling hysteresis.
  29 *       2. Enhance passive cooling (CPU) states/limit interface to support
  30 *          concepts of 'multiple limiters', upper/lower limits, etc.
  31 *
  32 */
  33
  34#include <linux/kernel.h>
  35#include <linux/module.h>
  36#include <linux/dmi.h>
  37#include <linux/init.h>
  38#include <linux/slab.h>
  39#include <linux/types.h>
  40#include <linux/jiffies.h>
  41#include <linux/kmod.h>
  42#include <linux/reboot.h>
  43#include <linux/device.h>
  44#include <asm/uaccess.h>
  45#include <linux/thermal.h>
  46#include <acpi/acpi_bus.h>
  47#include <acpi/acpi_drivers.h>
  48
  49#define PREFIX "ACPI: "
  50
  51#define ACPI_THERMAL_CLASS              "thermal_zone"
  52#define ACPI_THERMAL_DEVICE_NAME        "Thermal Zone"
  53#define ACPI_THERMAL_FILE_STATE         "state"
  54#define ACPI_THERMAL_FILE_TEMPERATURE   "temperature"
  55#define ACPI_THERMAL_FILE_TRIP_POINTS   "trip_points"
  56#define ACPI_THERMAL_FILE_COOLING_MODE  "cooling_mode"
  57#define ACPI_THERMAL_FILE_POLLING_FREQ  "polling_frequency"
  58#define ACPI_THERMAL_NOTIFY_TEMPERATURE 0x80
  59#define ACPI_THERMAL_NOTIFY_THRESHOLDS  0x81
  60#define ACPI_THERMAL_NOTIFY_DEVICES     0x82
  61#define ACPI_THERMAL_NOTIFY_CRITICAL    0xF0
  62#define ACPI_THERMAL_NOTIFY_HOT         0xF1
  63#define ACPI_THERMAL_MODE_ACTIVE        0x00
  64
  65#define ACPI_THERMAL_MAX_ACTIVE 10
  66#define ACPI_THERMAL_MAX_LIMIT_STR_LEN 65
  67
  68#define _COMPONENT              ACPI_THERMAL_COMPONENT
  69ACPI_MODULE_NAME("thermal");
  70
  71MODULE_AUTHOR("Paul Diefenbaugh");
  72MODULE_DESCRIPTION("ACPI Thermal Zone Driver");
  73MODULE_LICENSE("GPL");
  74
  75static int act;
  76module_param(act, int, 0644);
  77MODULE_PARM_DESC(act, "Disable or override all lowest active trip points.");
  78
  79static int crt;
  80module_param(crt, int, 0644);
  81MODULE_PARM_DESC(crt, "Disable or lower all critical trip points.");
  82
  83static int tzp;
  84module_param(tzp, int, 0444);
  85MODULE_PARM_DESC(tzp, "Thermal zone polling frequency, in 1/10 seconds.");
  86
  87static int nocrt;
  88module_param(nocrt, int, 0);
  89MODULE_PARM_DESC(nocrt, "Set to take no action upon ACPI thermal zone critical trips points.");
  90
  91static int off;
  92module_param(off, int, 0);
  93MODULE_PARM_DESC(off, "Set to disable ACPI thermal support.");
  94
  95static int psv;
  96module_param(psv, int, 0644);
  97MODULE_PARM_DESC(psv, "Disable or override all passive trip points.");
  98
  99static int acpi_thermal_add(struct acpi_device *device);
 100static int acpi_thermal_remove(struct acpi_device *device, int type);
 101static void acpi_thermal_notify(struct acpi_device *device, u32 event);
 102
 103static const struct acpi_device_id  thermal_device_ids[] = {
 104        {ACPI_THERMAL_HID, 0},
 105        {"", 0},
 106};
 107MODULE_DEVICE_TABLE(acpi, thermal_device_ids);
 108
 109#ifdef CONFIG_PM_SLEEP
 110static int acpi_thermal_resume(struct device *dev);
 111#endif
 112static SIMPLE_DEV_PM_OPS(acpi_thermal_pm, NULL, acpi_thermal_resume);
 113
 114static struct acpi_driver acpi_thermal_driver = {
 115        .name = "thermal",
 116        .class = ACPI_THERMAL_CLASS,
 117        .ids = thermal_device_ids,
 118        .ops = {
 119                .add = acpi_thermal_add,
 120                .remove = acpi_thermal_remove,
 121                .notify = acpi_thermal_notify,
 122                },
 123        .drv.pm = &acpi_thermal_pm,
 124};
 125
 126struct acpi_thermal_state {
 127        u8 critical:1;
 128        u8 hot:1;
 129        u8 passive:1;
 130        u8 active:1;
 131        u8 reserved:4;
 132        int active_index;
 133};
 134
 135struct acpi_thermal_state_flags {
 136        u8 valid:1;
 137        u8 enabled:1;
 138        u8 reserved:6;
 139};
 140
 141struct acpi_thermal_critical {
 142        struct acpi_thermal_state_flags flags;
 143        unsigned long temperature;
 144};
 145
 146struct acpi_thermal_hot {
 147        struct acpi_thermal_state_flags flags;
 148        unsigned long temperature;
 149};
 150
 151struct acpi_thermal_passive {
 152        struct acpi_thermal_state_flags flags;
 153        unsigned long temperature;
 154        unsigned long tc1;
 155        unsigned long tc2;
 156        unsigned long tsp;
 157        struct acpi_handle_list devices;
 158};
 159
 160struct acpi_thermal_active {
 161        struct acpi_thermal_state_flags flags;
 162        unsigned long temperature;
 163        struct acpi_handle_list devices;
 164};
 165
 166struct acpi_thermal_trips {
 167        struct acpi_thermal_critical critical;
 168        struct acpi_thermal_hot hot;
 169        struct acpi_thermal_passive passive;
 170        struct acpi_thermal_active active[ACPI_THERMAL_MAX_ACTIVE];
 171};
 172
 173struct acpi_thermal_flags {
 174        u8 cooling_mode:1;      /* _SCP */
 175        u8 devices:1;           /* _TZD */
 176        u8 reserved:6;
 177};
 178
 179struct acpi_thermal {
 180        struct acpi_device * device;
 181        acpi_bus_id name;
 182        unsigned long temperature;
 183        unsigned long last_temperature;
 184        unsigned long polling_frequency;
 185        volatile u8 zombie;
 186        struct acpi_thermal_flags flags;
 187        struct acpi_thermal_state state;
 188        struct acpi_thermal_trips trips;
 189        struct acpi_handle_list devices;
 190        struct thermal_zone_device *thermal_zone;
 191        int tz_enabled;
 192        int kelvin_offset;
 193        struct mutex lock;
 194};
 195
 196/* --------------------------------------------------------------------------
 197                             Thermal Zone Management
 198   -------------------------------------------------------------------------- */
 199
 200static int acpi_thermal_get_temperature(struct acpi_thermal *tz)
 201{
 202        acpi_status status = AE_OK;
 203        unsigned long long tmp;
 204
 205        if (!tz)
 206                return -EINVAL;
 207
 208        tz->last_temperature = tz->temperature;
 209
 210        status = acpi_evaluate_integer(tz->device->handle, "_TMP", NULL, &tmp);
 211        if (ACPI_FAILURE(status))
 212                return -ENODEV;
 213
 214        tz->temperature = tmp;
 215        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Temperature is %lu dK\n",
 216                          tz->temperature));
 217
 218        return 0;
 219}
 220
 221static int acpi_thermal_get_polling_frequency(struct acpi_thermal *tz)
 222{
 223        acpi_status status = AE_OK;
 224        unsigned long long tmp;
 225
 226        if (!tz)
 227                return -EINVAL;
 228
 229        status = acpi_evaluate_integer(tz->device->handle, "_TZP", NULL, &tmp);
 230        if (ACPI_FAILURE(status))
 231                return -ENODEV;
 232
 233        tz->polling_frequency = tmp;
 234        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Polling frequency is %lu dS\n",
 235                          tz->polling_frequency));
 236
 237        return 0;
 238}
 239
 240static int acpi_thermal_set_cooling_mode(struct acpi_thermal *tz, int mode)
 241{
 242        acpi_status status = AE_OK;
 243        union acpi_object arg0 = { ACPI_TYPE_INTEGER };
 244        struct acpi_object_list arg_list = { 1, &arg0 };
 245        acpi_handle handle = NULL;
 246
 247
 248        if (!tz)
 249                return -EINVAL;
 250
 251        status = acpi_get_handle(tz->device->handle, "_SCP", &handle);
 252        if (ACPI_FAILURE(status)) {
 253                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "_SCP not present\n"));
 254                return -ENODEV;
 255        }
 256
 257        arg0.integer.value = mode;
 258
 259        status = acpi_evaluate_object(handle, NULL, &arg_list, NULL);
 260        if (ACPI_FAILURE(status))
 261                return -ENODEV;
 262
 263        return 0;
 264}
 265
 266#define ACPI_TRIPS_CRITICAL     0x01
 267#define ACPI_TRIPS_HOT          0x02
 268#define ACPI_TRIPS_PASSIVE      0x04
 269#define ACPI_TRIPS_ACTIVE       0x08
 270#define ACPI_TRIPS_DEVICES      0x10
 271
 272#define ACPI_TRIPS_REFRESH_THRESHOLDS   (ACPI_TRIPS_PASSIVE | ACPI_TRIPS_ACTIVE)
 273#define ACPI_TRIPS_REFRESH_DEVICES      ACPI_TRIPS_DEVICES
 274
 275#define ACPI_TRIPS_INIT      (ACPI_TRIPS_CRITICAL | ACPI_TRIPS_HOT |    \
 276                              ACPI_TRIPS_PASSIVE | ACPI_TRIPS_ACTIVE |  \
 277                              ACPI_TRIPS_DEVICES)
 278
 279/*
 280 * This exception is thrown out in two cases:
 281 * 1.An invalid trip point becomes invalid or a valid trip point becomes invalid
 282 *   when re-evaluating the AML code.
 283 * 2.TODO: Devices listed in _PSL, _ALx, _TZD may change.
 284 *   We need to re-bind the cooling devices of a thermal zone when this occurs.
 285 */
 286#define ACPI_THERMAL_TRIPS_EXCEPTION(flags, str)        \
 287do {    \
 288        if (flags != ACPI_TRIPS_INIT)   \
 289                ACPI_EXCEPTION((AE_INFO, AE_ERROR,      \
 290                "ACPI thermal trip point %s changed\n"  \
 291                "Please send acpidump to linux-acpi@vger.kernel.org\n", str)); \
 292} while (0)
 293
 294static int acpi_thermal_trips_update(struct acpi_thermal *tz, int flag)
 295{
 296        acpi_status status = AE_OK;
 297        unsigned long long tmp;
 298        struct acpi_handle_list devices;
 299        int valid = 0;
 300        int i;
 301
 302        /* Critical Shutdown */
 303        if (flag & ACPI_TRIPS_CRITICAL) {
 304                status = acpi_evaluate_integer(tz->device->handle,
 305                                "_CRT", NULL, &tmp);
 306                tz->trips.critical.temperature = tmp;
 307                /*
 308                 * Treat freezing temperatures as invalid as well; some
 309                 * BIOSes return really low values and cause reboots at startup.
 310                 * Below zero (Celsius) values clearly aren't right for sure..
 311                 * ... so lets discard those as invalid.
 312                 */
 313                if (ACPI_FAILURE(status)) {
 314                        tz->trips.critical.flags.valid = 0;
 315                        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 316                                          "No critical threshold\n"));
 317                } else if (tmp <= 2732) {
 318                        printk(KERN_WARNING FW_BUG "Invalid critical threshold "
 319                               "(%llu)\n", tmp);
 320                        tz->trips.critical.flags.valid = 0;
 321                } else {
 322                        tz->trips.critical.flags.valid = 1;
 323                        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 324                                          "Found critical threshold [%lu]\n",
 325                                          tz->trips.critical.temperature));
 326                }
 327                if (tz->trips.critical.flags.valid == 1) {
 328                        if (crt == -1) {
 329                                tz->trips.critical.flags.valid = 0;
 330                        } else if (crt > 0) {
 331                                unsigned long crt_k = CELSIUS_TO_KELVIN(crt);
 332                                /*
 333                                 * Allow override critical threshold
 334                                 */
 335                                if (crt_k > tz->trips.critical.temperature)
 336                                        printk(KERN_WARNING PREFIX
 337                                                "Critical threshold %d C\n", crt);
 338                                tz->trips.critical.temperature = crt_k;
 339                        }
 340                }
 341        }
 342
 343        /* Critical Sleep (optional) */
 344        if (flag & ACPI_TRIPS_HOT) {
 345                status = acpi_evaluate_integer(tz->device->handle,
 346                                "_HOT", NULL, &tmp);
 347                if (ACPI_FAILURE(status)) {
 348                        tz->trips.hot.flags.valid = 0;
 349                        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 350                                        "No hot threshold\n"));
 351                } else {
 352                        tz->trips.hot.temperature = tmp;
 353                        tz->trips.hot.flags.valid = 1;
 354                        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 355                                        "Found hot threshold [%lu]\n",
 356                                        tz->trips.critical.temperature));
 357                }
 358        }
 359
 360        /* Passive (optional) */
 361        if (((flag & ACPI_TRIPS_PASSIVE) && tz->trips.passive.flags.valid) ||
 362                (flag == ACPI_TRIPS_INIT)) {
 363                valid = tz->trips.passive.flags.valid;
 364                if (psv == -1) {
 365                        status = AE_SUPPORT;
 366                } else if (psv > 0) {
 367                        tmp = CELSIUS_TO_KELVIN(psv);
 368                        status = AE_OK;
 369                } else {
 370                        status = acpi_evaluate_integer(tz->device->handle,
 371                                "_PSV", NULL, &tmp);
 372                }
 373
 374                if (ACPI_FAILURE(status))
 375                        tz->trips.passive.flags.valid = 0;
 376                else {
 377                        tz->trips.passive.temperature = tmp;
 378                        tz->trips.passive.flags.valid = 1;
 379                        if (flag == ACPI_TRIPS_INIT) {
 380                                status = acpi_evaluate_integer(
 381                                                tz->device->handle, "_TC1",
 382                                                NULL, &tmp);
 383                                if (ACPI_FAILURE(status))
 384                                        tz->trips.passive.flags.valid = 0;
 385                                else
 386                                        tz->trips.passive.tc1 = tmp;
 387                                status = acpi_evaluate_integer(
 388                                                tz->device->handle, "_TC2",
 389                                                NULL, &tmp);
 390                                if (ACPI_FAILURE(status))
 391                                        tz->trips.passive.flags.valid = 0;
 392                                else
 393                                        tz->trips.passive.tc2 = tmp;
 394                                status = acpi_evaluate_integer(
 395                                                tz->device->handle, "_TSP",
 396                                                NULL, &tmp);
 397                                if (ACPI_FAILURE(status))
 398                                        tz->trips.passive.flags.valid = 0;
 399                                else
 400                                        tz->trips.passive.tsp = tmp;
 401                        }
 402                }
 403        }
 404        if ((flag & ACPI_TRIPS_DEVICES) && tz->trips.passive.flags.valid) {
 405                memset(&devices, 0, sizeof(struct acpi_handle_list));
 406                status = acpi_evaluate_reference(tz->device->handle, "_PSL",
 407                                                        NULL, &devices);
 408                if (ACPI_FAILURE(status)) {
 409                        printk(KERN_WARNING PREFIX
 410                                "Invalid passive threshold\n");
 411                        tz->trips.passive.flags.valid = 0;
 412                }
 413                else
 414                        tz->trips.passive.flags.valid = 1;
 415
 416                if (memcmp(&tz->trips.passive.devices, &devices,
 417                                sizeof(struct acpi_handle_list))) {
 418                        memcpy(&tz->trips.passive.devices, &devices,
 419                                sizeof(struct acpi_handle_list));
 420                        ACPI_THERMAL_TRIPS_EXCEPTION(flag, "device");
 421                }
 422        }
 423        if ((flag & ACPI_TRIPS_PASSIVE) || (flag & ACPI_TRIPS_DEVICES)) {
 424                if (valid != tz->trips.passive.flags.valid)
 425                                ACPI_THERMAL_TRIPS_EXCEPTION(flag, "state");
 426        }
 427
 428        /* Active (optional) */
 429        for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE; i++) {
 430                char name[5] = { '_', 'A', 'C', ('0' + i), '\0' };
 431                valid = tz->trips.active[i].flags.valid;
 432
 433                if (act == -1)
 434                        break; /* disable all active trip points */
 435
 436                if ((flag == ACPI_TRIPS_INIT) || ((flag & ACPI_TRIPS_ACTIVE) &&
 437                        tz->trips.active[i].flags.valid)) {
 438                        status = acpi_evaluate_integer(tz->device->handle,
 439                                                        name, NULL, &tmp);
 440                        if (ACPI_FAILURE(status)) {
 441                                tz->trips.active[i].flags.valid = 0;
 442                                if (i == 0)
 443                                        break;
 444                                if (act <= 0)
 445                                        break;
 446                                if (i == 1)
 447                                        tz->trips.active[0].temperature =
 448                                                CELSIUS_TO_KELVIN(act);
 449                                else
 450                                        /*
 451                                         * Don't allow override higher than
 452                                         * the next higher trip point
 453                                         */
 454                                        tz->trips.active[i - 1].temperature =
 455                                                (tz->trips.active[i - 2].temperature <
 456                                                CELSIUS_TO_KELVIN(act) ?
 457                                                tz->trips.active[i - 2].temperature :
 458                                                CELSIUS_TO_KELVIN(act));
 459                                break;
 460                        } else {
 461                                tz->trips.active[i].temperature = tmp;
 462                                tz->trips.active[i].flags.valid = 1;
 463                        }
 464                }
 465
 466                name[2] = 'L';
 467                if ((flag & ACPI_TRIPS_DEVICES) && tz->trips.active[i].flags.valid ) {
 468                        memset(&devices, 0, sizeof(struct acpi_handle_list));
 469                        status = acpi_evaluate_reference(tz->device->handle,
 470                                                name, NULL, &devices);
 471                        if (ACPI_FAILURE(status)) {
 472                                printk(KERN_WARNING PREFIX
 473                                        "Invalid active%d threshold\n", i);
 474                                tz->trips.active[i].flags.valid = 0;
 475                        }
 476                        else
 477                                tz->trips.active[i].flags.valid = 1;
 478
 479                        if (memcmp(&tz->trips.active[i].devices, &devices,
 480                                        sizeof(struct acpi_handle_list))) {
 481                                memcpy(&tz->trips.active[i].devices, &devices,
 482                                        sizeof(struct acpi_handle_list));
 483                                ACPI_THERMAL_TRIPS_EXCEPTION(flag, "device");
 484                        }
 485                }
 486                if ((flag & ACPI_TRIPS_ACTIVE) || (flag & ACPI_TRIPS_DEVICES))
 487                        if (valid != tz->trips.active[i].flags.valid)
 488                                ACPI_THERMAL_TRIPS_EXCEPTION(flag, "state");
 489
 490                if (!tz->trips.active[i].flags.valid)
 491                        break;
 492        }
 493
 494        if (flag & ACPI_TRIPS_DEVICES) {
 495                memset(&devices, 0, sizeof(struct acpi_handle_list));
 496                status = acpi_evaluate_reference(tz->device->handle, "_TZD",
 497                                                NULL, &devices);
 498                if (memcmp(&tz->devices, &devices,
 499                                sizeof(struct acpi_handle_list))) {
 500                        memcpy(&tz->devices, &devices,
 501                                sizeof(struct acpi_handle_list));
 502                        ACPI_THERMAL_TRIPS_EXCEPTION(flag, "device");
 503                }
 504        }
 505
 506        return 0;
 507}
 508
 509static int acpi_thermal_get_trip_points(struct acpi_thermal *tz)
 510{
 511        int i, valid, ret = acpi_thermal_trips_update(tz, ACPI_TRIPS_INIT);
 512
 513        if (ret)
 514                return ret;
 515
 516        valid = tz->trips.critical.flags.valid |
 517                tz->trips.hot.flags.valid |
 518                tz->trips.passive.flags.valid;
 519
 520        for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE; i++)
 521                valid |= tz->trips.active[i].flags.valid;
 522
 523        if (!valid) {
 524                printk(KERN_WARNING FW_BUG "No valid trip found\n");
 525                return -ENODEV;
 526        }
 527        return 0;
 528}
 529
 530static void acpi_thermal_check(void *data)
 531{
 532        struct acpi_thermal *tz = data;
 533
 534        thermal_zone_device_update(tz->thermal_zone);
 535}
 536
 537/* sys I/F for generic thermal sysfs support */
 538#define KELVIN_TO_MILLICELSIUS(t, off) (((t) - (off)) * 100)
 539
 540static int thermal_get_temp(struct thermal_zone_device *thermal,
 541                            unsigned long *temp)
 542{
 543        struct acpi_thermal *tz = thermal->devdata;
 544        int result;
 545
 546        if (!tz)
 547                return -EINVAL;
 548
 549        result = acpi_thermal_get_temperature(tz);
 550        if (result)
 551                return result;
 552
 553        *temp = KELVIN_TO_MILLICELSIUS(tz->temperature, tz->kelvin_offset);
 554        return 0;
 555}
 556
 557static int thermal_get_mode(struct thermal_zone_device *thermal,
 558                                enum thermal_device_mode *mode)
 559{
 560        struct acpi_thermal *tz = thermal->devdata;
 561
 562        if (!tz)
 563                return -EINVAL;
 564
 565        *mode = tz->tz_enabled ? THERMAL_DEVICE_ENABLED :
 566                THERMAL_DEVICE_DISABLED;
 567
 568        return 0;
 569}
 570
 571static int thermal_set_mode(struct thermal_zone_device *thermal,
 572                                enum thermal_device_mode mode)
 573{
 574        struct acpi_thermal *tz = thermal->devdata;
 575        int enable;
 576
 577        if (!tz)
 578                return -EINVAL;
 579
 580        /*
 581         * enable/disable thermal management from ACPI thermal driver
 582         */
 583        if (mode == THERMAL_DEVICE_ENABLED)
 584                enable = 1;
 585        else if (mode == THERMAL_DEVICE_DISABLED)
 586                enable = 0;
 587        else
 588                return -EINVAL;
 589
 590        if (enable != tz->tz_enabled) {
 591                tz->tz_enabled = enable;
 592                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 593                        "%s kernel ACPI thermal control\n",
 594                        tz->tz_enabled ? "Enable" : "Disable"));
 595                acpi_thermal_check(tz);
 596        }
 597        return 0;
 598}
 599
 600static int thermal_get_trip_type(struct thermal_zone_device *thermal,
 601                                 int trip, enum thermal_trip_type *type)
 602{
 603        struct acpi_thermal *tz = thermal->devdata;
 604        int i;
 605
 606        if (!tz || trip < 0)
 607                return -EINVAL;
 608
 609        if (tz->trips.critical.flags.valid) {
 610                if (!trip) {
 611                        *type = THERMAL_TRIP_CRITICAL;
 612                        return 0;
 613                }
 614                trip--;
 615        }
 616
 617        if (tz->trips.hot.flags.valid) {
 618                if (!trip) {
 619                        *type = THERMAL_TRIP_HOT;
 620                        return 0;
 621                }
 622                trip--;
 623        }
 624
 625        if (tz->trips.passive.flags.valid) {
 626                if (!trip) {
 627                        *type = THERMAL_TRIP_PASSIVE;
 628                        return 0;
 629                }
 630                trip--;
 631        }
 632
 633        for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE &&
 634                tz->trips.active[i].flags.valid; i++) {
 635                if (!trip) {
 636                        *type = THERMAL_TRIP_ACTIVE;
 637                        return 0;
 638                }
 639                trip--;
 640        }
 641
 642        return -EINVAL;
 643}
 644
 645static int thermal_get_trip_temp(struct thermal_zone_device *thermal,
 646                                 int trip, unsigned long *temp)
 647{
 648        struct acpi_thermal *tz = thermal->devdata;
 649        int i;
 650
 651        if (!tz || trip < 0)
 652                return -EINVAL;
 653
 654        if (tz->trips.critical.flags.valid) {
 655                if (!trip) {
 656                        *temp = KELVIN_TO_MILLICELSIUS(
 657                                tz->trips.critical.temperature,
 658                                tz->kelvin_offset);
 659                        return 0;
 660                }
 661                trip--;
 662        }
 663
 664        if (tz->trips.hot.flags.valid) {
 665                if (!trip) {
 666                        *temp = KELVIN_TO_MILLICELSIUS(
 667                                tz->trips.hot.temperature,
 668                                tz->kelvin_offset);
 669                        return 0;
 670                }
 671                trip--;
 672        }
 673
 674        if (tz->trips.passive.flags.valid) {
 675                if (!trip) {
 676                        *temp = KELVIN_TO_MILLICELSIUS(
 677                                tz->trips.passive.temperature,
 678                                tz->kelvin_offset);
 679                        return 0;
 680                }
 681                trip--;
 682        }
 683
 684        for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE &&
 685                tz->trips.active[i].flags.valid; i++) {
 686                if (!trip) {
 687                        *temp = KELVIN_TO_MILLICELSIUS(
 688                                tz->trips.active[i].temperature,
 689                                tz->kelvin_offset);
 690                        return 0;
ACPI_DEBUG_PRINT(( 682                 6      &qu69="L624" class="line" name="L624"> 624
 645static i        <6 href="+code=acpi_therma6_chec6" class="sref"
 653
 624
 568       6f="driver6/acpi/thermal.c#L599" id6"L5996 class"sref">thermal_get_trip_temp(strucempe href="+code=thermal_zone_deviceempe hreflass=>thermal_zone_device *thermal,
 646        ="drivers6acpi/thermal.c#L600" id=6L600"69 class="sref">tz-> 687       7nt acpi_thermal *tz = thermal->devdata;
 561
 642       7f="driver7/acpi/thermal.c#L603" id7"L60370>)
trips.critical.temperature,
valid) {
 675       7struct acpi_tttttttttrivers/acpi/thermal./acpi/thermal.c#L689" id="L689" classKELVIN_TO_MILLICELSIUS(
 688       7int 70sref">tz->trips.critical.temperature,
 689       7="drivers7acpi/thermal.c#L606" id=7L606"70->((trips. 690       7if (!tz<70ref">trip) {
EIN}lass="line" name="L588"> 588       7="drivers7acpi/thermal.c#L609" id=7L609"70ss="sref">EINVAL;
 589
 570
 651       7         7      *thermal_set_mode(struct thermal_zone_device *thermal,
 646       7         7      return 0;
thermal_trip_type * 652       7        }7 574       7        <7 href="+code=trip" class7"sref7>trip--;
 *tz = thermal->devdata;
 561
 *type)
THE="line" name="L561"> 561
 ||  650
 568       7        i7 (!triprivede=trips" class=zone_device" clasref="+code=thermal_zone_device" class="sref"ef="drivers/acpi/thermal.c#L646" id="L646" class=ef="+code=thermal_trip_type" class="sref">thelass=trip_type *THE)="line" name="L652"> 652       7 f (type = <
 589
 651       7        }7 *THE">THERMAL_DEVICE_DISABLED 675       7        <7 href="+code=trip" class7"sref7>trip--;
 583       7}
(c support */        ss7"saal.71class="line" name=10a>
 583       7}
flags. 627trips.TH7RMAL_TRIP_PASSIVE;
<7 href7> 602{

         *tz616" I_DEBUG_PRI has already been upef=ed byf">KELVIN_TO_MILLlayer,r
trip--;
         *beforref=is #L6lback*bePI_Dinvok5"> /span>
 631        }
THERMAL_DEVICE_ENABLE7="L633" c7ass="line" name="L633"> 733valid) {
 675                if (tc1vers/acpi/thermac      *"/a>.valid) {
 688       7int  690       7if (!tz<70!        if (.valid) {
 675                if (tc2vers/acpi/thermac< ACPI_THERMAL_MAX7ACTIV73          .valid) {
 688       7int  690       7if (!tz<70L678" class="line" name="L678"> 678                                tz->tz);
a7tive[ 736                  7     7 685  gi/thermal.c#L653" id="L653" class="line7ACTIVE        ss7"saal.71class="line" name=10a>
 685  pi/thermal.c#L653" id="L653" class="line7ip" class7"sref">trip--;
(c support */        ss7"saal.71class="linDROPP/a>=10a>
 742EINVAL<7a>;
flags.643"> 6437/a>}
 645s7atic 74< thermal_get_trip_temp<7a>(st7uct thermal_zone_devicethermalnotify="sref">thelass=trip_tynotify646" class="line" name="L646"> 646       7         7      return 0;
 561
 ||  |ermal.c#L653" id="L653" class="line7="sref">a7pi_thermal *tz = thermal-&7t; || devdata;
 561
 *type)
 || t7ip < 0)
 652      | href="+code=trip" class7"sref7>rs/acpi/thermal.c#L613" id="L613" class="line" nermal.c#L653" id="L653" class="line7 name="L673"> 653
 *type)
 ass="li7ef="+code=trips" class="s7ef">t753hermal.c#L6/ther      | href="+code=trip" class7"sref7>rrmal.c#L621" id="L621" class="line" narmal.c#L653" id="L653" class="line7 nss="sre7"cal. *type)
 ss="sre7"6                   7    *7a href="+code=thermal.c#L589" id="L589" class="line"=ILLICELSI7S(
flags.6e=critica7" class="sref">critical<7a>.);
KELVate_proc_evERMIVE" class="sref">THEf (!tz<70L    7         7      href=7driv    7 f (tz);
KELVate_net/thk_evERMAref="drivers/acpi/tbus_>KELVate_net/thk_evERMIVE" class="sref">THEf (!tz<70L    7         7      href=7driv class="sre7">tz<70Lpnuot; enqlass="lipnuref="+code=tz" class id="L5; enq        7      href=75; enqname href="+code=thermal_zone_device" 7lp" class=7sref">trip--;
type = f (!tz<70L    7         7      href=7driv class="sre7">tz<70Lhre        7      hre" nar    7 f (tz);
. 67476re" class="sref">temperature, (! | href="+code=trip" class7"sref7>rs/acpi/thermal.c#L613" id="L613" class="line" ne"sref">tripf="+code=trip" cnocrMAref="drivers/anocrM" narmal.c#L653" id="L653" class="line7 >t76         THERMAL_DEVICE_D7hot.<7 href="+code=flags" clas7="sre76t  676                   7    *7a href="+code=" id="L625" class="lin4ss="sref">flags.6ILLICELSI7S(
hot.);
cpi/thermal._coCPI_D_href=75;bhref="drivers/acpi/thermal._coCPI_D_href=75;b46" class="line" name="L646"> 646       7         7      return 0;
 646trip--;
 ||  672tz =  6747       if (devdata * *type)
>t77f="+code=devdata" class="sref">devdata;
 604        int i;
 605
7ef">passi7e.devdata 605
7eL666"> 676                   7    *7a href="+code=ass="sref">devdata ||  605
7eLLICELSI7S(
devdata(( ||  605
7e=hot" cl7 class="sref">passive 568       7        i7 (!);
 5j8       7  j     i7 (! 6e" enqlass="line" name604-ABLED" class="sref">THERMAL_DEVICE_D7p" class=7sref">trip--;
 6resulMAref="drivers/aresulM650a>                return - 682 67478re" class="sref">temperature,
valid) {
 675       7struct acpi_tttttttttrivers/acpi/thermal./acpi>.78          6e" enqlass="line" name++             return -passi7"sref">ACPI_THERMAL_MAX_7CTIVE78t ac7ive[ 668                                acpi_tttttttttrivers/acpi/thermal./acpi>.                   7    *7a href="+code=temp" cl name="L651"> 6e" enqlass="line" name++             return -(
active[7a hre78" id="L646" class=ef="+code=thermf (!tz<70L678" class="line" name="L678"> 678                                acpi_tttttttttrivers/acpi/thermal./acpi/thermal.c#L689" id="L689" classKELVIa>);
 6e" enqlass="line" name++             return - 685                tz<70L678" class="line" name="L678"> 678                                ACPI_D7BUG_P7INT(( 6ef="drivers/acpi/thermal.c#L687" id="L687" class="line" name7"> 682&qu69="L#L68"lin name="L651"> 6handUG_PRINT(( ||604        int f (!tz<70L678" class="line" name="L678"> 678                                 67579          6ode=uq        7      ode=uq> ||604        intcpi/tbus_>Kt/href=7        7      ataKt/href=7IVE" class="sref">THhandUG_PRINT(( ||l7ss="sref">type =hre        7      hre" nar i7 (!passi7f"
THode=uq        7      ode=uq> ||)L" class="sref">EINhre        7      hre" na !04        int    7         7      href=7drivi>. 653<7a>
 568  7    6797" id="L647" class="line" namlass=ef="+code=therbi_PRINT(c suppbi_P" narmal.c#L653" id="L653" class="line7 lass"sref7>thermal_get_trip_temp(str79f="+code=temperature" class="sref">temperature,
resulMAref="drivers/aresulM650a> mal.c#L653" id="L653" class="line7 l=active"7>thermal_zone_device7*i].temperature,
return 0;
 687       7nt THE)="line" name="L652"> 652       7 f (thermal-&g8;t80NT((crit8cal. mal.c#L653" id="L653" class="line78N_TO_MILL8CELSIUS(
critical<8a>.>>>>>>>> class="sref">THE)="line" name="L652"> 652       7 f (
8IN}la8s="line" name="L588">                 goto7s/acpi/thermal.failePRINT(c suppfaileP     i7 (!EINVAL;8 589
the8mal_set_mode(struct 8a hvi81rs/acpi/therm
 685                tz->) {
therma8_zone_device *,
 689                                acpi_tttttttttrivers/acpi/thermal./acpi>.-8;
 * 6e" enqlass="line" name++             return -thermal-&g8;       7  j    >                return - *tz<70L678" class="line" name="L678"> 678       s="line" name="L689"> 689                                     ref="drivers/acj8       7  j    mal.c#L687" id="L687" class="line" name8s id=7L608a>rivede=trips" class=zo8e_dev81f="+code=temperature" class=" name="L651"> 6handUG_PRINT(( ||604        int f (!tz<70L678" class="line" name="L678"> 678       s="line" name="L689"> 689                                       7  j    = i7 (!i] name="L651"> 6ode=uq        7      ode=uq> ||604        intcpi/tbus_>Kt/href=7        7      ataKt/href=7IVE" class="sref">THhandUG_PRINT(( ||l7ss="sref">type =hre        7      hre" nar i7 (! 589
THode=uq        7      ode=uq> ||)L" class="sref">EINhre        7      hre" na !04        int    7         7      href=7drivi>. *(((c suppbi_P" narmal.c#L653" id="L653" class="line78ine" name8"L583"> 583       7}8i] name="L651"> 6resulMAref="drivers/aresulM650a>  mperature,
return 0;
                  8     8          THE)="line" name="L652"> 652       7 f ( 583<8a>       7}
i] name="L651"> 6lass7"srNO_LIMIal.c#L621" id="L621" claNO_LIMIae" cl7s/acpi/thermal.lass7"srNO_LIMIal.c#L621" id="L621" claNO_LIMIae" cr i7 (! 687t82="line" name="L588">                  name="L651"> 6resulMAref="drivers/aresulM650a>  mperature,
return 0;
;
<7 href7> 602{
teeeeeeeee class="sref">THE)="line" name="L652"> 652       7 f (i]lass=ef="+code=therresulMAref="drivers/aresulM650armal.c#L653" id="L653" class="line78name="L588sref">trip--;
 687       7nt  631 783ACPI_THERMAL_MAX78CTIV78           685                tz<70Lhref=7q        7      href=7c#L675" id="L675" clasouRMAref="drivers/asouRM     rip) {
a78ive[(( ||604        int f (!tz<70Lhref=7q        7      href=7c#L675" id="L675" clahandUGq        7      handUGq#L67                               786                  78    783 id="L690" class="lin name="L651"> 6ode=uq        7      ode=uq> ||604        intcpi/tbus_>Kt/href=7        7      ataKt/href=7IVE" class="sref">THhandUG_PRINT(( ||l7ss="sref">type =hre        7      hre" nar i7 (!tz->IVE" class="sref">THode=uq        7      ode=uq> ||)Lsref">tripf class="sref">THhre        7      hre" na ref="+code=trip" c    7         7      href=7drivil.c#L687" id="L687" class="line" name8"ASSIVE(c suppbi_P" narmal.c#L653" id="L653" class="line78p" class78sref">trip--;
 6resulMAref="drivers/aresulM650a>  mperature,
return 0;
 687       7nt THE)="line" name="L652"> 652     -1l7s/acpi/thermal.chre        7      chre" naeasref="+code=thermal_zone_device" 8"L642" c78ss="line" name="L642"> 782 6lass7"srNO_LIMIal.c#L621" id="L621" claNO_LIMIae" clasref="+code=thermal_zone_device" 8"L633" c78>;
 6lass7"srNO_LIMIal.c#L621" id="L621" claNO_LIMIae" cr i7 (! 64378a>}
 645s78tic 784          6resulMAref="drivers/aresulM650a>  mperature,
return 0;
i]]]]]]]] class="sref">THE)="line" name="L652"> 652     -1l7s/acpi/thermal.chre        7      chre" nar i7 (! 78>thermal_zone_device(c suppfaileP     i7 (!a78i_thermal *thermal-&78;t78p s/acpi/thermal.failePRINT(c suppfaileP    :r6/acpi/thermal.c#L599" id6"L5996 8 L633" c78 id="L652" class="line"78ame=785      for (<5" id="L=ef="+code=therresulMAref="drivers/aresulM650a i7 (! 653
t85lt; . 786                   8    *8a href        intcpi/treturn 0bi_P/coCPI_D_href=7        7      cpi/treturn 0bi_P/coCPI_D_href=7IVE" lass="line" name="L646"> 646       7         7      return 0;
(
 646critical<8a>.tz = THE)="line" name="L652"> 652       7 f (trip--;
 662 68486re" c=ef="+code=thercpi/thermal._unbi_P/coCPI_D_href=7        7      cpi/thermal._unbi_P/coCPI_D_href=7IVE" lass="line" name="L646"> 646       7         7      return 0;
t86          646tz =  686                   8    *8a href="+code=" id="L=ef="+code=thercpi/thermal._coCPI_D_href=75;bhref="drivers/acpi/thermal._coCPI_D_href=75;b46" cclass="sref">THE)="line" name="L652"> 652       7 f ((c suppfaher" nar i7 (!(
hot.);
 646 646  ss="sref">tz = (c suppbi_P" na604        intcpi/treturn 0bi_P/coCPI_D_href=7        7      cpi/treturn 0bi_P/coCPI_D_href=7IVE"easref="+code=thermal_zone_device" 8p" class=8sref">trip--;
        intcpi/treturn 0unbi_P/coCPI_D_href=7        7      cpi/thermal._unbi_P/coCPI_D_href=7IVE"easref="+code=thermal_zone_device" 8p> 662em *em IVE"easref="+code=thermal_zone_device" 8pL664" cl8ss="line" name="L674"> 6848       if (t87f="+code=devd5" id="L675" clas.<8e. (! *  mperature,
return 0e" class="sref">thelass=trip_type * 686                   8    *8a href="+code=5" id="L675" clae (!  mperature,
return 0e" claem *(
  mperature,
return 0epassive G_PRINT(c supp6" id="L646" >  mperature,
return 0e"drivers/acpi/thermal.c#L646" id="L646" easref="+code=thermal_zone_device" 8p>);
thelass=otify646" >  mperature,
return 0otify="sref">thelass=trip_tynotify646" easref="+code=thermal_zone_device" 8pa href="8rivers/acpi/thermal.c#L681" id87651" } i7 (!trip--;
 682 68488re" css="sref">tz = 88          6e&qu class="line" name="L678">                return -passi8"sref">ACPI_THERMAL_MAX_8CTIVE884         6resulMAref="drivers/aresulM650a i7 (!ac8ive[ || class="line" name="L605"> 605
8"LLICELSI87                   8    *8a href="+code=ine" name="L568"> 568       7        i7 (!(
active[8a hre88" id="L646" class=ef="+code=thermf (!tz<70L678" class="line" name="L678"> 678       ss="line" name="L675"> 675       7struct acpi_tttttttttrivers/acpi/thermal./acpi>. 6e&qu class="line" name="L678"++             return -ACPI_D8BUG_P8952"> 652      668                                acpi_tttttttttrivers/acpi/thermal./acpi>. 682&qu69="L name="L651"> 6e&qu class="line" name="L678"++             return - 68589lt; passi8f"
tz<70L678" class="line" name="L678"> 678                                acpi_tttttttttrivers/acpi/thermal./acpia href="+code=ACPI_THERMAL_MAX_AC78Isref">ac8a>
 6e&qu class="line" name="L678"++             return - 568  8    6897" id            return -thermal_get_trip_temp(str89f="+code=temp
 685                tz->trip            return -thermal_zone_device8*i]=ef="+code=thermf (!tz<70L678" class="line" name="L678"> 678       s="line" name="L689"> 689                                acpi_tttttttttrivers/acpi/thermal./acp rip) {
thermal-&g9;tz<70L678" class="line" name="L678"> 678                                acpi_tttttttttrivers/acpi/thermal./acpia href="+code=ACPI_THERMAL_"L5996 9e1mal" cl9sNT"6class="sref">ACPI_D9ef">t90NT((tz<70L6ermal._;
 mal.c#L653" id="L653" class="line79ref">crit9cal. 646 646"53" tz"(
type =cpi/thermal._;
>>>>>>>>tz<70L678" class="line" name="L678"> 678                                
>>>>>>>>tz<70LpolPI_D_frequenc="sref">thelass=polPI_D_frequenc=IVE"*100r i7 (!9IN}la9s="line" name=thermal.c#L589" id="L589" class="line"9" id=7L609"70ss="sref">EINVAL;9tz<70L6ermal._;
 mal.c#L653" id="L653" class="line79r8id=7L609"thermal_zone_device9hr7f=90"+code=i" class="sref">i]=ef="+code=therm> 646 646"53" tz" 687       7nt type =cpi/thermal._;
the9mal_set_mode(struct 9a hvi91tz<70LpolPI_D_frequenc="sref">thelass=polPI_D_frequenc=IVE"*100r i7 (!therma9_zone_device * 652     thelass=IS_ERR46" ccef="+code=thermf (!tz<70L6ermal._;
 *tz<70LENODEV        7      ENODEV     i7 (!-9;
 *thermal-&g9; 6resulMAref="drivers/aresulM650a>  mperature,
sysfs_create_herk        7      oysfs_create_herk46" css="sref">type = f (!tz<70L    7         7      href=7driv class="sre7">tz<70Lhre        7      hre" na"+code=tz" classkobj8       7  kobj=tz"easref="+code=thermal_zone_device" 9f="dtrip_9ype *type =mf (!tz<70L6ermal._;
tz<70L    7         7      href=7driv"+code=tz" classkobj8       7  kobj=tz"e cspanlass="linme=ng">"hermal._;
 589
 6resulMAref="drivers/aresulM650a>  mperature,
sysfs_create_herk        7      oysfs_create_herk46" css="sref">type = f (!tz<70L6ermal._;
tz<70L    7         7      href=7driv"+code=tz" classkobj8       7  kobj=tz"ei7 (!type =mf (!tz<70L    7         7      href=7driv class="sre7">tz<70Lhre        7      hre" na"+code=tz" classkobj8       7  kobj=tz"e cspanlass="linme=ng">"href=7" 652      583       7}9                  9     92lt;  6ode=uq        7      ode=uq> ||604        intcpi/tattach_acpi/thermal.c#L605cpi/tattach_acpi46" ccef="+code=thermf (!tz<70L    7         7      href=7driv class="sre7">tz<70LhandUG_PRINT(( ||la href="+code=ACPI_THERMAL_MAX_AC79a="dtrip_9ode=vaACPI_DB_INFO92 id="L690" class="line" name===========        intcpi/tbus_pde=ate_acpi/handUGrclass="line" nacpi/tbus_pde=ate_acpi/handUGr> ||la href="+code=ACPI_THERMAL_MAX_AC79ahref="+c97t92="line" name="L588">                 e"=ef="+code=thermf (!tz<70L6ermal._;
;
<7 href7> 602{
THode=uq        7      ode=uq> ||)l.c#L687" id="L687" class="line" name9aass="sre9href7"drivers/acpi/ther19a h9792"+code=i" class="srefs="sre7">tz<70Lpe=ntk        7      pe=ntkIVE" class="sref">THKERN_ERR"sref">thelass=KERN_ERR+codeclass="sref">THPREFIX"sref">thelass=PREFIXt; trip--;
 687       7nt "Error attach=ng href=7 acpi\n" 631tz<70LENODEV        7      ENODEV     i7 (! 793ACPI_THERMAL_MAX79CTIV79          tz<70L6z_enablePRINT(c supp6z_enableP> ||604ABLED" class="sref">THERMAL_DEVICE_D9"sref">a79ive[ 796                  79    793 href="+code=ine" name="L646hre_info        7      hre_info46" css="sref">type = f (!tz<70L    7         7      href=7driv class="sre7">tz<70Lhre        7      hre" nae cspanlass="linme=ng">"registered as hermal._;
tz<70L6ermal._;
tz<70Lttrivers/acpi/thel./acpiBLED" class="sref">THERMAL_DEVICE_D9" id=7L609rivers/acpi/thermal.c#L799" i793f="+code=temp" id="L              return -trip--;
 792        intcpi/treturn 0unregisterthermal._;
;
 64379a>}
,
sysfs_remove_herk        7      oysfs_remove_herk46" css="sref">type = f (!tz<70L    7         7      href=7driv class="sre7">tz<70Lhre        7      hre" na"+code=tz" classkobj8       7  kobj=tz"e cspanlass="linme=ng">"hermal._;
 645s79tic 794         type = f (!tz<70L6ermal._;
tz<70L    7         7      href=7driv"+code=tz" classkobj8       7  kobj=tz"e cspanlass="linme=ng">"href=7"thermal_get_trip_temp<79>(st794ref="+code=te name="L651"> 6m> 646 646tz<70L6ermal._;
 79>thermal_zone_devicetz<70L6ermal._;
 =ine" name="L646NULL        7      NULL     i7 (!tz<70L    7         7      href=7driv class="sre7">tz<70LhandUG_PRINT(( ||l=        intcpi/tbus_pde=ate_acpi/handUGrclass="line" nacpi/tbus_pde=ate_acpi/handUGr> ||) i7 (! *thermal-&79;t79p sspanlass="licomment">/* -------------------------------------------------------------------------- 687       7nt  64379"> 653
 68-------------------------------------------------------------------------- */drspan r6/acpi/thermal.c#L599" id6"L5996 9 ass="li79f="+code=trips" class="s9ef">t95lt; .        intcpi/treturn 0otify="sref">thelass=cpi/treturn 0otify=46" class="line" name="L646cpi/thref=7        7      cpi/thref=7drive7s/acpi/thermal.    7         7      href=7drivl=        intuf="+code=i"      u3lt; <=        inteveRMAref="drivers/aeveRM=tz"rmal.c#L653" id="L653" class="line79nL636"> 796                   9    *9a hrefc#L687" id="L687" class="line" name9ILLICELSI9S(
        intcpi/t"L687"_acpi/thermal.c#L605cpi/tdL687"_acpi46" ccef="+code=ther    7         7      href=7drivi i7 (!critical<9a>.);
 687               return -trip--;
 662 64379ss="line" name="L664"> 694967"drivers/acpswitchss=ef="+code=thereveRMAref="drivers/aeveRM=tz"r.c#L687" id="L687" class="line" name9>t96         .<9 href="+code=flags" clas9="sre96i/the4/thermal.c#L625="+code=valid"6cpi/treturn 0check        7      cpi/treturn 0check46" ccef="+code=thermf (! 696                   9    *96 id="L690" class="linbreak i7 (!(
tz->    :r6/acpi/thermal.c#L599" id6"L5996 9h=critica9ss="sref">hot.        intuot;EoRIPS_REFRESH_THRESHOLD>tz->=tz"i i7 (!);
tz<70Lcpi/treturn 0check        7      cpi/treturn 0check46" ccef="+code=thermf (! 6cpi/tbus_generate_proc_eveRMAref="drivers/acpi/tbus_generate_proc_eveRM46" ccef="+code=ther    7         7      href=7drivl=        inteveRMAref="drivers/aeveRM=tz", 0r i7 (!trip--;
 6cpi/tbus_generate_netherk_eveRMAref="drivers/acpi/tbus_generate_netherk_eveRM46" ccef="+code=ther    7         7      href=7driv class="sre7">tz<70Lpn * ||la href="+code=ACPI_THERMAL_MAX_AC79p> 662type =    7         7      href=7driv class="sre7">tz<70Lhre        7      hre" na)l=        inteveRMAref="drivers/aeveRM=tz", 0r i7 (! 64379ss="line" name="L674"> 694977"drivers/acpi/thermabreak i7 (!t97         tz->    :r6/acpi/thermal.c#L599" id6"L5996 9pot.<9e.        intuot;EoRIPS_REFRESH_DEVICE>tz->=tz"i i7 (! 696                   9    *97 id="L690" class="lins="sre7">tz<70Lcpi/treturn 0check        7      cpi/treturn 0check46" ccef="+code=thermf (!(
 6cpi/tbus_generate_proc_eveRMAref="drivers/acpi/tbus_generate_proc_eveRM46" ccef="+code=ther    7         7      href=7drivl=        inteveRMAref="drivers/aeveRM=tz", 0r i7 (!passivetz<70Lpn * ||la href="+code=ACPI_THERMAL_MAXs=7s9p>);
type =    7         7      href=7driv class="sre7">tz<70Lhre        7      hre" na)l=        inteveRMAref="drivers/aeveRM=tz", 0r i7 (!trip--;
 682 694987"drivers/acpi/thermass="sref">i]odcspanlass="linme=ng">"Unsupported eveRM [0x%x]\n"        inteveRMAref="drivers/aeveRM=tz"rr i7 (!98pi/thermal.c#L688" idbreak i7 (!.<9"sref">ACPI_THERMAL_MAX_9CTIVE984        ac9ive[                   9    *987" id            return -(
        intcpi/treturn 06" iinfo        7      cpi/treturn 06" iinfo46" class="line" name="L646cpi/thermal.        7      cpi/thermal.drive7s/acpi/thermal.cf (!active[9a hre98" id=c#L687" id="L687" class="line" name9a>);
 6resulMAref="drivers/aresulM650a>                return -ACPI_D9BUG_P991/thei7 (! 682               return - 69599pi/thermal.c#L688" id" id="L-s="sre7">tz<70LEINVAL        7      EINVAL     i7 (!passi9f"
ac9a>
/* Get me=" poines [_CRT, _PSV, etc.] (required) */drspan r6/acpi/thermal.c#L599" id6"L5996 9"LLICELSI9" name="L568"> 568  9    6997" id="L647" ine" name="L646resulMAref="drivers/aresulM650a>  mperature,
cpi/treturn 06" ime="_poines        7      cpi/treturn 06" ime="_poines46" ccef="+code=thermf (!thermal_get_trip_temp(str99f="+code=templass=ef="+code=therresulMAref="drivers/aresulM650armal.c#L653" id="L653" class="line79"=active"9>thermal_zone_device9*10er/thermal.c#6sspanlass="licomment">/* Get memperature [_TMP] (required) */drspan r6/pre>6/acpi/thermal.c#L599" id6"L5996 10e1mal" cl10eNT"6class="sref">ACPI_D10eNT>10e1" id="L647" ine" name="L646resulMAref="drivers/aresulM650a>  mperature,
cpi/treturn 06" imemperature        7      cpi/treturn 06" imemperature46" ccef="+code=thermf (!10eass="strin6">    =ef="+code=therresulMAref="drivers/aresulM650armal.c#L653" id="L653" class="line710e3mal" cl10es="line" name="L645"> 610es=>10epi/thermal.c#L688" id" id="L=ef="+code=therresulMAref="drivers/aresulM650a i7 (!10et 

>10ei/thermal.c#6sspanlass="licomment">/* Set mhelaoCPI_D m cl [_SCP] to  689 568  10e n>10e7" id="L647" ine" name="L646resulMAref="drivers/aresulM650a>  mperature,
cpi/treturn 0s        intuot;Eo="+code=ODEss="sref">tz->10ef="+code=templass           returresulMAref="drivers/aresulM650armal.c#L653" id="L653" class="line710e8mal" cl10ethermal_zone_device10eth>10e"+code=i" class="srefs="sre7">tz<70Lmf (!tz<70Lf="+code=acpi_thermal7 clas7="sref">acpi_ttttcoCPI_D_m cl*THERMAL_DEVICE_D10e9mal" cl10ed="L689" classss="line"10ed=>10e     r6/acpi/thermal.c#L599" id6"L5996 101rmal" cl10mal_set_mode(struct 10mal>10ma/thermal.c#6sspanlass="licomment">/* Get default polPI_D frequenc= [_TZP] (optional) */drspan r6/acpi/thermal.c#L599" id6"L5996 1011mal" cl10_zone_device *10m52"> 652      *&qu69="L name="L651"> 6ef (!tz<70LpolPI_D_frequenc="sref">thelass=polPI_D_frequenc=IVE">  mperature,
rd *THERMAL_DEVICE_D1013mal" cl10;
 *thermal-&g10ss=>10mi/the4/thermal.c#L625="+code=valid"6cpi/treturn 06" ipolPI_D_frequenc="sref">thelass=cpi/treturn 06" ipolPI_D_frequenc=46" ccef="+code=thermf (! *10m5    r6/acpi/thermal.c#L599" id6"L5996 1016mal" cl1010m7" id="L647" " id="L              return -rivede=trips" class=zo10a>r>10mf="+c2" id="L682" class="line" name="L6810m8mal" cl10"ef="drivers/acpi/therma10"ef>10m"+codi7 (! 589
 >10m     sspanlass="licomment">/*drspan r6/acpi/thermal.c#L599" id6"L5996 102rmal" cl10f="+cotrip_type *10f=    sspanlass="licomment"> * Thelex 68 offs10f     sspanlass="licomment"> * handUGs memperature valuGs with a sI_Dle deci"L5 place. As a consequence,drspan r6/acpi/thermal.c#L599" id6"L5996 1022mal" cl10"L583"> 583       7}10"L5>10fl.c# sspanlass="licomment"> * some implementations use an offs                  10"L5>10f3.c# sspanlass="licomment"> * 273.2. Try to find out which 
       7}
 >10f4.c# sspanlass="licomment"> * accurate and visually appeaPI_D number.drspan r6/acpi/thermal.c#L599" id6"L5996 1025mal" cl10ode=vaACPI_DB_INFO10f5.c# sspanlass="licomment"> *drspan r6/acpi/thermal.c#L599" id6"L5996 1026mal" cl107 * Thelheuris=thebelow should workp
;
<7 href7> 602{
;
>10f7    sspanlass="licomment"> * 675  me=" poine with a valuG beI_D a multiple of 0.5 degree Ctheius.drspan r6/acpi/thermal.c#L599" id6"L5996 1028mal" cl10href7"drivers/acpi/ther110hre>10f8    sspanlass="licomment"> */drspan r6/acpi/thermal.c#L599" id6"L5996 1029mal" cl10sref">trip--;
10f9" clode=thevoid4        intcpi/treturn 0guGss_offsthelass=cpi/treturn 06uGss_offs10   id=c#L687" id="L687" class="line" name10 1mal" cl10ss="line" name="L633"> 710ss=>10 52"> 652      668               ss="line" name="L675"> 675       7struct acpi_tttttttttrivers/acpi/thermal./acpLsref">trip            return -10 ass="strin6">&qu6  668               ss="line" name="L675"> 675       7struct ACPI_THERMAL_MAX710"sr>10 pi/thermal.c#L688" idthelass=kelvin_offs  273ABLED" class="sref">THERMAL_DEVICE_D1034mal" cl10ive[                  710610 i/thermal.c#666666666 name="L651"> 6edrivers/acpi/thermal.c#L668" id="L668" clakelvin_offsthelass=kelvin_offs  2732BLED" class="sref">THERMAL_DEVICE_D1036mal" cl10
10 e" clasref="+code=thermal_zone_device" 10 8mal" cl10sref">trip--;
10 f="+code=therma4        intcpi/treturn 0adtrivers/acpi/thecpi/treturn 0adt46" class="line" name="L646cpi/thref=7        7      cpi/thref=7drive7s/acpi/thermal.    7         7      href=7drivrmal.c#L653" id="L653" class="line71039mal" cl10        }
 710ss=>10ssid="L690" cline" name="L651"> 6resulMAref="drivers/aresulM650a>                return -;
 652 lass="line" name="L646cpi/thermal.        7      cpi/thermal.drive7s/acpi/thermal.cf (!        intNULL        7      NULL     i7 (!}
 645s710" n>10slt; thermal_get_trip_temp<710>th>10sref="+code=telass           retur    7         7      href=7drivrmal.c#L653" id="L653" class="line71045mal" cl10>thermal_zone_deviceth>10si/thermal.c#666666666" id="L-s="sre7">tz<70LEINVAL        7      EINVAL     i7 (! *10sf="+code=temps/acpi/thermal.cf (!        intkzalloc"sref">thelass=kzalloc46" clizeofclass="line" name="L646cpi/thermal.        7      cpi/thermal.driv)l=        intGFP_KERNEL        7      GFP_KERNEL=tz"i i7 (!thermal-&710ss=>10s" id="L646" class           return -10s id="L690" class="lin" id="L-s="sre7">tz<70LENOMEM        7      ENOMEM     i7 (!10f=" id            return -10f1" id="L647" ine" name="L646mf (!tz<70L    7         7      href=7driv604        int    7         7      href=7driv i7 (! 653
 >10f7"drivers/acpmperature,
strcp="sref">thelass=strcp=46" ccef="+code=thermf (!tz<70L="dr        7      ="dr46" l=        int    7         7      href=7driv class="sre7">tz<70Lpn *10f         thelass=strcp=46" ccef="+code=thercpi/thref=7_="dr        7      cpi/thref=7_="dr46" ccef="+code=ther    7         7      href=7drivrl=        intuot;Eo="+codeDEVICE_NAMef">tz->. 6odrcp="sref">thelass=strcp=46" ccef="+code=thercpi/thref=7_ref">        7      cpi/thref=7_     46" ccef="+code=ther    7         7      href=7drivrl=        intuot;Eo="+codeCLAS>tz->=tz"i i7 (!                   10610f href="+code=ine" name="L646hre 7         7      href=7driv class="sre7">tz<70LhL687"_acpi/thermal.c#L605dL687"_acpi46" >  mperature,
rd (!(
type = f (!tz<70Llock        7      lock=tz"i i7 (!critical<10" c>10fe" clasref="+code=thermal_zone_device" 1058mal" cl10ef="drivers/acpi/thermal10ef=>10f"+codi7 (!10f  return 0;
< name="L651"> 6resulMAref="drivers/aresulM650a>  mperature,
cpi/treturn 06" iinfo        7      cpi/treturn 06" iinfo46" ccef="+code=thermf (!trip--;
10sr2"> 652     thelass=free_memor==tz" i7 (! 610ss=>10slt; 10s         thelass=cpi/treturn 06uGss_offs10st                    10610s href="+code=ine" name="L646resulMAref="drivers/aresulM650a>  mperature,
cpi/treturn 0registerthermal._;
(
hot.10sf="+code=temperature"goto mperature,
free_memor="sref">thelass=free_memor==tz" i7 (!10s  return 0;
< name="L651"> 6pe=ntk        7      pe=ntkIVE" class="sref">THKERN_INFOl.c#L621" id="LKERN_INFO retuclass="sref">THPREFIX"sref">thelass=PREFIXt; "%s [%s] (%ld C)\n"trip--;
10sr="+code=temperaturecef="+code=thercpi/thref=7_="dr        7      cpi/thref=7_="dr46" ccef="+code=ther    7         7      href=7drivrl=        intcpi/thref=7_bttrivers/acpi/thecpi/thref=7_btt46" ccef="+code=ther    7         7      href=7drivrla href="+code=ACPI_THERMAL_MAX_AC71071mal" cl10        }
THKELVIN_TO_CELSIU>tz->46" ccef="+code=thermf (!tz<70Lmemperature        7      memperature46" rr i7 (! 610ss=>10s7"drivers/acpgoto mperature,
entrivers/acpi/theent=tz" i7 (!10slt; .thelass=free_memor==tz":r6/acpi/thermal.c#L599" id6"L5996 10s5mal" cl106                   10610s href="+code=ine" name="L646kfree"sref">thelass=kfree46" ccef="+code=thermf (!(
passive10sf="+code=temp" id="L=ef="+code=therresulMAref="drivers/aresulM650a i7 (!10s     r6/acpi/thermal.c#L599" id6"L5996 108rmal" cl10sref">trip--;
10sr="+code=therma4        intcpi/treturn 0remove        7      cpi/thermal._remove46" class="line" name="L646cpi/thref=7        7      cpi/thref=7drive7s/acpi/thermal.    7         7      href=7driv,erma4        inttype        7      mype650armal.c#L653" id="L653" class="line71081mal" cl10        }
 610ss=>10s7"drivers/acpsass="line" name="L646cpi/thermal.        7      cpi/thermal.drive7s/acpi/thermal.cf (!        intNULL        7      NULL     i7 (!ACPI_THERMAL_MAX_10"sr>10sref="+code=telass           retur    7         7      href=7driv ||            returcpi/thL687"_acpi/thermal.c#L605cpi/thL687"_acpi46" ccef="+code=ther    7         7      href=7drivrrmal.c#L653" id="L653" class="line71085mal" cl10ive[tz<70LEINVAL        7      EINVAL     i7 (!                   10710s7" id            return -(
        intcpi/thL687"_acpi/thermal.c#L605cpi/thL687"_acpi46" ccef="+code=ther    7         7      href=7drivr i7 (!active[10cla>10s"+codi7 (! 6cpi/thermal._unregisterthermal._;
thelass=mutex_desaso=46" css="sref">type = f (!tz<70Llock        7      lock=tz"i i7 (!ACPI_D10INT>10 1" id="L647" ine" name="L646kfree"sref">thelass=kfree46" ccef="+code=thermf (!10 7"drivers/acp" id="L              return - 610ss=>10 3s/ac2" id="L682" class="line" name="L681094mal" cl10f"
10 t 

>10 i/the#ifdef ine" name="L646CONFIG_PM_SLEEP (! 568  10" n>10 6="+code=therma4        intcpi/treturn 0resudr        7      cpi/treturn 0resudr46" class="line" name="L646    7         7      href=7driv 7s/acpi/thermal.           7      hre650armal.c#L653" id="L653" class="line71097mal" cl10>thermal_get_trip_tempth>10 7Tthermal_zone_device10>th>10 " id="L646" csass="line" name="L646cpi/thermal.        7      cpi/thermal.drive7s/acpi/thermal.cf (!10  id="L690" cline" name="L651"> 6i (!        intj8       7  j46" l=        intpowertode=         7      powertode= 46" l=        intresulMAref="drivers/aresulM650a i7 (!110=" id            return -ACPI_D11eNT>11052"> 652                retur           7      hre650armal.c#L653" id="L653" class="line711e2mal" cl11e                6      11e  >1107"drivers/acpi/therma" id="L-s="sre7">tz<70LEINVAL        7      EINVAL     i7 (! 611es=>110lt; 110ref="+code=te name="L651"> 6mf (!        intcpi/thL687"_acpi/thermal.c#L605cpi/thL687"_acpi46" ccef="+code=therto_cpi/thref=7        7      to_cpi/thref=746" ccef="+code=ther           7      hre650ari i7 (!

>11ei/thermal.c#6lass           return - 568  11e n>110#L637" id="L637" cla+" id="L-s="sre7">tz<70LEINVAL        7      EINVAL     i7 (!110e" clasref="+code=thermal_zone_device" 11e8mal" cl11ethermal_zone_device11eth>11e"+code=i" cla
    " name="L651"> 6i (! 6a href="+code=AXss="sref">tz-> 6i (!110 id="L690" class="linlass css="sref">type = f (!tz<70L6s="line" name="L668"> 668                689 6i (!(struct 11mal>111rs/acpi/thermal.c#L6888888888break i7 (! *111NT((tz<70L6s="line" name="L668"> 668                689 6i (!acpi_tttttttttrivers/acpi/thermal./acprmal.c#L653" id="L653" class="line71112mal" cl11p_type *&qu69="L88888888break i7 (! * 668                689 6i (!acpi_ttttenablePRINT(c suppenableP> ||604ABLED" class="sref">THERMAL_DEVICE_D1114mal" cl11ss="sref">thermal-&g11ss=>11mi/the4/thermal.c#L625
    " name="L651"> 6j8       7  j46" >< " name="L651"> 6fdrivers/acpi/thermal.c#L668" id="L668" cla6s="line" name="L668"> 668                689 6i (!acpi_ttttcouRMAref="drivers/acouRM     " name="L651"> 6j8       7  j46" ++r.c#L687" id="L687" class="line" name1115mal" cl11ype *111i/thermal.c#666666666L688" id  mperature,
cpi/tbus_upacpa_power/thermal.c#L605cpi/tbus_upacpa_power46" c#L687" id="L687" class="line" name1116mal" cl11111#L637" id="L637" cla+rmal.c#666666666L688" id 668                689 6i (!acpi_tttthandUGs        7      handUGs8 6j8       7  j46" ]la href="+code=ACPI_THERMAL_MAX_AC711m7mal" cl11a>rivede=trips" class=zo11a>r>111f="+code=temperature"""""""""""""""""""""""""ss="sref">type =powertode=         7      powertode= 46" i i7 (!111rs/acpi/thermal.c#L6+L690" cllass=ef="+code=therresulMAref="drivers/aresulM650a || s=ef="+code=therpowertode=         7      powertode= 46"  !  mperature,
a hreSTATE_D0        7      a hreSTATE_D0650ari.c#L687" id="L687" class="line" name1119mal" cl11"> 589
 >111 id="L690" class="lin66666666L688" id 668                689 6i (!acpi_ttttenablePRINT(c suppenableP> ||604              return -112rs/acpi/thermal.c#L688888888888888888break i7 (!112NT(( 583       7}11"L5>112ass="strin6">&qu69="L2" id="L682" class="line" name="L681123mal" cl11"L57a>                  11"L5>112pi/thermal.c#L688" id                689,
rd (! 668                689 6i (!acpi_ttttenablePRINT(c suppenableP> || i7 (!       7}
 >1124        1125    r6/acpi/thermal.c#L599" id6"L5996 1126mal" cl117;
<7 href7> 602{
;
>112e" clasref="+code=thermal_zone_device" 1128mal" cl11href7"drivers/acpi/ther111hre>112rs/acpi/therm" id="L=ef="+code=therAE_OK        7      aE_OK> || i7 (!trip--;
11f9" cl2" id="L682" class="line" name="L68113rmal" cl11        }
 711ss=>1131/thei7 (!11 ass="ode=therma4        intreturn 0acMAref="drivers/areturn 0acM46" cconstcsass="line" name="L646dmi_system_ttrivers/acpi/thedmi_system_ttdriv 7s/acpi/thermal. rivers/acpi/thed=tz"i.c#L687" id="L687" class="line" name1133mal" cl11"sref">ACPI_THERMAL_MAX711"sr>113lt; [ ||6004 i.c#L687" id="L687" class="line" name1135mal" cl116                  711611 i/thermal.c#666666666 name="L651"> 6pe=ntk        7      pe=ntkIVE" class="sref">THKERN_NOTICef">tz->"a hr: %s detected: ""disablI_D all  689113f="+code=temperature"=ef="+code=thercp8/thermal.c#L605cp8> ||60 -ABLED" class="sref">THERMAL_DEVICE_D11 8mal" cl11sref">trip--;
1138         711ss=>11ssid="2" id="L682" class="line" name="L6811s1mal" cl11>;
 ode=therma4        intreturn 0nocrMAref="drivers/areturn 0nocrM46" cconstcsass="line" name="L646dmi_system_ttrivers/acpi/thedmi_system_ttdriv 7s/acpi/thermal. rivers/acpi/thed=tz"i.c#L687" id="L687" class="line" name11s2mal" cl11a>}
 645s711" n>114         THKERN_NOTICef">tz->"a hr: %s detected: "thermal_get_trip_temp<711>th>114i/the4/thermal.c#L625cspanlass="linme=ng">"disablI_D all 675  mline"  me=" poine  689ons.\n"        int rivers/acpi/thed=tz"#L668" id="L668" claideRMAref="drivers/aideRM=tz"i i7 (!thermal_zone_deviceth>11si/thermal.c#6" id="L668" clanocrMAref="drivers/anocrM46" 604ABLED" class="sref">THERMAL_DEVICE_D11s6mal" cl11href="drivers/acpi/ther711hre>1147" id="L647" " id="L              return - *114f="+c2" id="L682" class="line" name="L681148mal" cl11ss="sref">thermal-&711ss=>114f="+code=therma4        intreturn 0rd *114     r6/acpi/thermal.c#L599" id6"L5996 115rmal" cl11f="+code=trip" class="s711f=">115r2"> 652     115NT((THKERN_NOTICef">tz->"a hr: %s detected: " 653
 >115ass="strin6">&qu69="L88888888cspanlass="linme=ng">"enablI_D mline"  ;
        int rivers/acpi/thed=tz"#L668" id="L668" claideRMAref="drivers/aideRM=tz"i i7 (!115pi/thermal.c#L688" id/* 300 dS60 30 Seconds */drspan r6/acpi/thermal.c#L599" id6"L5996 1154mal" cl11cal.                   11611f href="+code=" id="L              return -(
critical<11" c>115e" clode=therma4        intreturn 0ps         7      return 0ps 46" cconstcsass="line" name="L646dmi_system_ttrivers/acpi/thedmi_system_ttdriv 7s/acpi/thermal. rivers/acpi/thed=tz"i.c#L687" id="L687" class="line" name1158mal" cl11ef="drivers/acpi/thermal11ef=>11f"+codi7 (!11f  return 0;
<    trip--;
116rs/acpi/thermal.c#L68=ef="+code=therpe=ntk        7      pe=ntkIVE" class="sref">THKERN_NOTICef">tz->"a hr: %s detected: ""disablI_D all ps="9 611ss=>116ass="strin6">&qu69="L name="L651"> 6ps         7      ps 46" 60 -ABLED" class="sref">THERMAL_DEVICE_D1163mal" cl11f="+code=trips" class="s11f=">11s         1164href="+code=" id="L              return -                   116116 href2" id="L682" class="line" name="L681166mal" cl11S(
hot.116e" clode=thesass="line" name="L646dmi_system_ttrivers/acpi/thedmi_system_ttdriv         intreturn 0dmi_table        7      return 0dmi_table8        int__iniMacpi/thermal.c#L605__iniMacpi46" 60 c#L687" id="L687" class="line" name1168mal" cl11ef="drivers/acpi/thermal11ef=>1168        /*drspan r6/acpi/thermal.c#L599" id6"L5996 1169mal" cl11rivers/acpi/thermal.c#L611riv>116     sspanlass="licomment">>&qu69="L* Award BIOS onl"lis AOpen makGs mline"  control almost worthless.drspan r6/acpi/thermal.c#L599" id6"L5996 117rmal" cl11sref">trip--;
117=    sspanlass="licomment"> &qu69="L* http://bugzilla.kernel.org/show_bug.cgi?l" 88slt;span r6/acpi/thermal.c#L599" id6"L5996 1171mal" cl11        }
 &qu69="L*/drspan r6/acpi/thermal.c#L599" id6"L5996 11s2mal" cl11ss="line" name="L674"> 611ss=>11s7"drivers/acpc#L687" id="L687" class="line" name1173mal" cl11f="+code=trips" class="s11f=">117pi/thermal.c#L"sref">acpi_ttttcallback        7      callback650a>  mperature,
return 0acMAref="drivers/areturn 0acM46" la href="+code=ACPI_THERMAL_MAX_AC71174mal" cl11e.acpi_ttttideRMAref="drivers/aideRM=tz">  mspanlass="linme=ng">"aOpen i915GMm-HFS"                   11611s href="+code=L"sref">acpi_ttttmatchGs        7      matchGs46" 60 c#L687" id="L687" class="line" name1176mal" cl11S(
acpi_ttttDMI_MATCH        7      DMI_MATCHIVE" class="sref">THDMI_BOARD_VENDOR        7      DMI_BOARD_VENDOR46" l mspanlass="linme=ng">"aOpen"passive117f="+code=temperature"=ef="+code=therDMI_MATCH        7      DMI_MATCHIVE" class="sref">THDMI_BOARD_NAMef">tz->"i915GMm-HFS"117  return 0;
<}la href="+code=ACPI_THERMAL_MAX_AC7118rmal" cl11sref">trip--;
1180"drivers/acpc#L687" id="L687" class="line" name1181mal" cl11        }
acpi_ttttcallback        7      callback650a>  mperature,
return 0ps         7      return 0ps 46" la href="+code=ACPI_THERMAL_MAX_AC71182mal" cl11ss="line" name="L684"> 611ss=>11s7"drivers/acpL"sref">acpi_ttttideRMAref="drivers/aideRM=tz">  mspanlass="linme=ng">"aOpen i915GMm-HFS"acpi_ttttmatchGs        7      matchGs46" 60 c#L687" id="L687" class="line" name1184mal" cl11"sref">ACPI_THERMAL_MAX_11"sr>118i/the4/thermal.c#L625cref">acpi_ttttDMI_MATCH        7      DMI_MATCHIVE" class="sref">THDMI_BOARD_VENDOR        7      DMI_BOARD_VENDOR46" l mspanlass="linme=ng">"aOpen"[THDMI_BOARD_NAMef">tz->"i915GMm-HFS"                   117118#L637" id="L637" cla+}la href="+code=ACPI_THERMAL_MAX_AC71187mal" cl11S(
active[11cla>1188"drivers/acpc#L687" id="L687" class="line" name1189mal" cl11ef="drivers/acpi/thermal11ef=>11s  return 0;
acpi_ttttcallback        7      callback650a>  mperature,
return 0rd *acpi_ttttideRMAref="drivers/aideRM=tz">  mspanlass="linme=ng">"aOpen i915GMm-HFS"ACPI_D11INT>1191i/thermal.c#L"sref">acpi_ttttmatchGs        7      matchGs46" 60 c#L687" id="L687" class="line" name1192mal" cl11                 6      11   >119ass="strin6">&qu69="L name="L651"> 6DMI_MATCH        7      DMI_MATCHIVE" class="sref">THDMI_BOARD_VENDOR        7      DMI_BOARD_VENDOR46" l mspanlass="linme=ng">"aOpen" 611ss=>119pi/thermal.c#L688" idTHDMI_BOARD_NAMef">tz->"i915GMm-HFS"119i/the4/thermal.c#L625}la href="+code=ACPI_THERMAL_MAX_AC71195mal" cl11a>

>1195="+code=temp}la href="+code=ACPI_THERMAL_MAX_AC71196mal" cl11" name="L568"> 568  11" n>1196"drivers/acpc#L687" id="L687" class="line" name1197mal" cl11>thermal_get_trip_tempth>1197 return 0;
acpi_ttttcallback        7      callback650a>  mperature,
return 0nocrMAref="drivers/areturn 0nocrM46" la href="+code=ACPI_THERMAL_MAX_AC71198mal" cl11>thermal_zone_device11>th>11 " id="L646" cL"sref">acpi_ttttideRMAref="drivers/aideRM=tz">  mspanlass="linme=ng">"Gigaby1>,
free_memor="sref">thelass=free_memor==tz" i7 (!        intcpi/treturn 0remove        7      cpi/thermal._remove46" class="line" name="L646cpi/thref=7        7      cpi/thref=7drive7s/acpi/thermal.    7         7      href=7driv,erma4        inttype =ng"]_MAX_111erm19MAref="drivers/aideRM=tz">  msI_BOARD_VENDOR46" l mspanlass="linme=ng">"aOpen"1107"drive2s/acp20    }
THDMI_BOARD_NAMef">tz-> 568  11" n2  7      E2NVAL     i7 (! >115ass="ste4/thermal.c#L625}la href="+code=ACPI_THERMAL_MAX_AC71195mal" cl11a>

>1195="+code=temp}la href="+code=A7drive7s/acpi/thal" cl11" name="L568"> 568  11" n2 27      E2N_THERMAL_MAX_AC71193mal"211e"
2110ref="+code=te name=0a>  mperature,
return 0nocrMAref2"_acpi46" 2cef="+code=therto_cpi/thr2f=7  203  callback650a>  mperature,
return 0nocrMAref2ther      2    7      hre650ari i7 (2        intreturn 0dmi_ta27      EIN2AL     i7 (!        int__iniMacpi/thermal.c#L605__i2651"> 6a h2ef="+code=AXss="sref">tz<2a>-&g20rivers/acpi/thermal11ef=>11f"+c_evice" 1058mal" cl10_rivers/ac cl11href7"drivers/acpi/ther1vice" 1058mal" cl10rs/acpi/ther1viceACPI_cl10s/acpi/thermal.c#L668" id="L668" cla2"> 6i (!"aOpen"        intNULL        7      NULL     i7 (! 668  2     21therma" id="L-s="sre7">tz<70LEINVAL     2" ]  7stru2t  668       2     21;s detected: "acpi_tt;       2        689 61   >11sNT(("disablI_D all ps="9        intreturn 0dmi_ta2/thermal.c2L6+L690" cllass=ef="+code2therr21d="L682" class="line" name="L68113rmal" 2TE_D0650ar2.c#L687" id="L687" class=2line"2name1119mal" classss="line"11a>        intNULL        7      NUcl11href7"drivers/ac    = f (!tz->        intNULL        7      tttco0s/acpi/thermal.c#L668" id="L668" cla2 cl11"L5832> 583       7}11"L5>122ass=2strin6">&qu69="L2" id=ame="L646mf (!112pi/thermal.c#L688" 2d                689<2/ther220a>

>10 i/the#ifdef ine" name="2z"#L668" i2="L668" cla6s="line" name2"L66822LEEP         intcpi/tre2f="+code=t2"i i7 (!11f"+c_eexce" 1058mal" cl10_rexces/ac cl11href7"drivers/acpi/ther1exce" 1058mal" cl10rs/acpi/ther1exceACPI_cl10s/acpi/thermal.c#L668" id="L668" cla211>;
>112e2 clasref="+code=thermal_z2ne_de2ice" 1d="L687" class="line" name116rmal" c211sref">tr2p--;
11f92 cl2"2id="L682" class="line" name="L68113rmal" 2l11       2}
        i2treturn 0acMAref="drivers2aretu230a>
  msIoduleevice" 1058mal" cl10eoduleevicelass="linme=ng">&quors/acpi/ther1vice" 1058mal" cl10rs/acpi/ther1viceACPIa her6/acpi/thermal.c#L599" id6"L599627      pe=2tkIVE" class="sref">THKER2_NOTI23 i7 (!&quors/acpi/ther1exce" 1058mal" cl10rs/acpi/ther1exceACPIa her6/acpi/thermal.c#L599" id6"L599627="+code=t2lass="line" name1136mal" 2l11
<2 href=


The origin6 1LXR software byt"L5classss="le="L674sourceforge.net/projects/lxa">LXR uicey1195="ermalexperi 6 1rmalion bytlassss="lmailto:lxa@ naux.no">lxa@ naux.no1195.
lxa. naux.no kindly ho(!Redpill Lnapro AS1195="provider of Lnaux1171 7 L namnd oa hrecrM4 ser> =po since 1995.