linux/drivers/macintosh/therm_pm72.c
<<
>>
Prefs
   1/*
   2 * Device driver for the thermostats & fan controller of  the
   3 * Apple G5 "PowerMac7,2" desktop machines.
   4 *
   5 * (c) Copyright IBM Corp. 2003-2004
   6 *
   7 * Maintained by: Benjamin Herrenschmidt
   8 *                <benh@kernel.crashing.org>
   9 * 
  10 *
  11 * The algorithm used is the PID control algorithm, used the same
  12 * way the published Darwin code does, using the same values that
  13 * are present in the Darwin 7.0 snapshot property lists.
  14 *
  15 * As far as the CPUs control loops are concerned, I use the
  16 * calibration & PID constants provided by the EEPROM,
  17 * I do _not_ embed any value from the property lists, as the ones
  18 * provided by Darwin 7.0 seem to always have an older version that
  19 * what I've seen on the actual computers.
  20 * It would be interesting to verify that though. Darwin has a
  21 * version code of 1.0.0d11 for all control loops it seems, while
  22 * so far, the machines EEPROMs contain a dataset versioned 1.0.0f
  23 *
  24 * Darwin doesn't provide source to all parts, some missing
  25 * bits like the AppleFCU driver or the actual scale of some
  26 * of the values returned by sensors had to be "guessed" some
  27 * way... or based on what Open Firmware does.
  28 *
  29 * I didn't yet figure out how to get the slots power consumption
  30 * out of the FCU, so that part has not been implemented yet and
  31 * the slots fan is set to a fixed 50% PWM, hoping this value is
  32 * safe enough ...
  33 *
  34 * Note: I have observed strange oscillations of the CPU control
  35 * loop on a dual G5 here. When idle, the CPU exhaust fan tend to
  36 * oscillates slowly (over several minutes) between the minimum
  37 * of 300RPMs and approx. 1000 RPMs. I don't know what is causing
  38 * this, it could be some incorrect constant or an error in the
  39 * way I ported the algorithm, or it could be just normal. I
  40 * don't have full understanding on the way Apple tweaked the PID
  41 * algorithm for the CPU control, it is definitely not a standard
  42 * implementation...
  43 *
  44 * TODO:  - Check MPU structure version/signature
  45 *        - Add things like /sbin/overtemp for non-critical
  46 *          overtemp conditions so userland can take some policy
  47 *          decisions, like slowing down CPUs
  48 *        - Deal with fan and i2c failures in a better way
  49 *        - Maybe do a generic PID based on params used for
  50 *          U3 and Drives ? Definitely need to factor code a bit
  51 *          better... also make sensor detection more robust using
  52 *          the device-tree to probe for them
  53 *        - Figure out how to get the slots consumption and set the
  54 *          slots fan accordingly
  55 *
  56 * History:
  57 *
  58 *  Nov. 13, 2003 : 0.5
  59 *      - First release
  60 *
  61 *  Nov. 14, 2003 : 0.6
  62 *      - Read fan speed from FCU, low level fan routines now deal
  63 *        with errors & check fan status, though higher level don't
  64 *        do much.
  65 *      - Move a bunch of definitions to .h file
  66 *
  67 *  Nov. 18, 2003 : 0.7
  68 *      - Fix build on ppc64 kernel
  69 *      - Move back statics definitions to .c file
  70 *      - Avoid calling schedule_timeout with a negative number
  71 *
  72 *  Dec. 18, 2003 : 0.8
  73 *      - Fix typo when reading back fan speed on 2 CPU machines
  74 *
  75 *  Mar. 11, 2004 : 0.9
  76 *      - Rework code accessing the ADC chips, make it more robust and
  77 *        closer to the chip spec. Also make sure it is configured properly,
  78 *        I've seen yet unexplained cases where on startup, I would have stale
  79 *        values in the configuration register
  80 *      - Switch back to use of target fan speed for PID, thus lowering
  81 *        pressure on i2c
  82 *
  83 *  Oct. 20, 2004 : 1.1
  84 *      - Add device-tree lookup for fan IDs, should detect liquid cooling
  85 *        pumps when present
  86 *      - Enable driver for PowerMac7,3 machines
  87 *      - Split the U3/Backside cooling on U3 & U3H versions as Darwin does
  88 *      - Add new CPU cooling algorithm for machines with liquid cooling
  89 *      - Workaround for some PowerMac7,3 with empty "fan" node in the devtree
  90 *      - Fix a signed/unsigned compare issue in some PID loops
  91 *
  92 *  Mar. 10, 2005 : 1.2
  93 *      - Add basic support for Xserve G5
  94 *      - Retrieve pumps min/max from EEPROM image in device-tree (broken)
  95 *      - Use min/max macros here or there
  96 *      - Latest darwin updated U3H min fan speed to 20% PWM
  97 *
  98 *  July. 06, 2006 : 1.3
  99 *      - Fix setting of RPM fans on Xserve G5 (they were going too fast)
 100 *      - Add missing slots fan control loop for Xserve G5
 101 *      - Lower fixed slots fan speed from 50% to 40% on desktop G5s. We
 102 *        still can't properly implement the control loop for these, so let's
 103 *        reduce the noise a little bit, it appears that 40% still gives us
 104 *        a pretty good air flow
 105 *      - Add code to "tickle" the FCU regulary so it doesn't think that
 106 *        we are gone while in fact, the machine just didn't need any fan
 107 *        speed change lately
 108 *
 109 */
 110
 111#include <linux/types.h>
 112#include <linux/module.h>
 113#include <linux/errno.h>
 114#include <linux/kernel.h>
 115#include <linux/delay.h>
 116#include <linux/sched.h>
 117#include <linux/init.h>
 118#include <linux/spinlock.h>
 119#include <linux/wait.h>
 120#include <linux/reboot.h>
 121#include <linux/kmod.h>
 122#include <linux/i2c.h>
 123#include <linux/kthread.h>
 124#include <linux/mutex.h>
 125#include <linux/of_device.h>
 126#include <linux/of_platform.h>
 127#include <asm/prom.h>
 128#include <asm/machdep.h>
 129#include <asm/io.h>
 130#include <asm/sections.h>
 131#include <asm/macio.h>
 132
 133#include "therm_pm72.h"
 134
 135#define VERSION "1.3"
 136
 137#undef DEBUG
 138
 139#ifdef DEBUG
 140#define DBG(args...)    printk(args)
 141#else
 142#define DBG(args...)    do { } while(0)
 143#endif
 144
 145
 146/*
 147 * Driver statics
 148 */
 149
 150static struct platform_device *         of_dev;
 151static struct i2c_adapter *             u3_0;
 152static struct i2c_adapter *             u3_1;
 153static struct i2c_adapter *             k2;
 154static struct i2c_client *              fcu;
 155static struct cpu_pid_state             processor_state[2];
 156static struct basckside_pid_params      backside_params;
 157static struct backside_pid_state        backside_state;
 158static struct drives_pid_state          drives_state;
 159static struct dimm_pid_state            dimms_state;
 160static struct slots_pid_state           slots_state;
 161static int                              state;
 162static int                              cpu_count;
 163static int                              cpu_pid_type;
 164static struct task_struct               *ctrl_task;
 165static struct completion                ctrl_complete;
 166static int                              critical_state;
 167static int                              rackmac;
 168static s32                              dimm_output_clamp;
 169static int                              fcu_rpm_shift;
 170static int                              fcu_tickle_ticks;
 171static DEFINE_MUTEX(driver_lock);
 172
 173/*
 174 * We have 3 types of CPU PID control. One is "split" old style control
 175 * for intake & exhaust fans, the other is "combined" control for both
 176 * CPUs that also deals with the pumps when present. To be "compatible"
 177 * with OS X at this point, we only use "COMBINED" on the machines that
 178 * are identified as having the pumps (though that identification is at
 179 * least dodgy). Ultimately, we could probably switch completely to this
 180 * algorithm provided we hack it to deal with the UP case
 181 */
 182#define CPU_PID_TYPE_SPLIT      0
 183#define CPU_PID_TYPE_COMBINED   1
 184#define CPU_PID_TYPE_RACKMAC    2
 185
 186/*
 187 * This table describes all fans in the FCU. The "id" and "type" values
 188 * are defaults valid for all earlier machines. Newer machines will
 189 * eventually override the table content based on the device-tree
 190 */
 191struct fcu_fan_table
 192{
 193        char*   loc;    /* location code */
 194        int     type;   /* 0 = rpm, 1 = pwm, 2 = pump */
 195        int     id;     /* id or -1 */
 196};
 197
 198#define FCU_FAN_RPM             0
 199#define FCU_FAN_PWM             1
 200
 201#define FCU_FAN_ABSENT_ID       -1
 202
 203#define FCU_FAN_COUNT           ARRAY_SIZE(fcu_fans)
 204
 205struct fcu_fan_table    fcu_fans[] = {
 206        [BACKSIDE_FAN_PWM_INDEX] = {
 207                .loc    = "BACKSIDE,SYS CTRLR FAN",
 208                .type   = FCU_FAN_PWM,
 209                .id     = BACKSIDE_FAN_PWM_DEFAULT_ID,
 210        },
 211        [DRIVES_FAN_RPM_INDEX] = {
 212                .loc    = "DRIVE BAY",
 213                .type   = FCU_FAN_RPM,
 214                .id     = DRIVES_FAN_RPM_DEFAULT_ID,
 215        },
 216        [SLOTS_FAN_PWM_INDEX] = {
 217                .loc    = "SLOT,PCI FAN",
 218                .type   = FCU_FAN_PWM,
 219                .id     = SLOTS_FAN_PWM_DEFAULT_ID,
 220        },
 221        [CPUA_INTAKE_FAN_RPM_INDEX] = {
 222                .loc    = "CPU A INTAKE",
 223                .type   = FCU_FAN_RPM,
 224                .id     = CPUA_INTAKE_FAN_RPM_DEFAULT_ID,
 225        },
 226        [CPUA_EXHAUST_FAN_RPM_INDEX] = {
 227                .loc    = "CPU A EXHAUST",
 228                .type   = FCU_FAN_RPM,
 229                .id     = CPUA_EXHAUST_FAN_RPM_DEFAULT_ID,
 230        },
 231        [CPUB_INTAKE_FAN_RPM_INDEX] = {
 232                .loc    = "CPU B INTAKE",
 233                .type   = FCU_FAN_RPM,
 234                .id     = CPUB_INTAKE_FAN_RPM_DEFAULT_ID,
 235        },
 236        [CPUB_EXHAUST_FAN_RPM_INDEX] = {
 237                .loc    = "CPU B EXHAUST",
 238                .type   = FCU_FAN_RPM,
 239                .id     = CPUB_EXHAUST_FAN_RPM_DEFAULT_ID,
 240        },
 241        /* pumps aren't present by default, have to be looked up in the
 242         * device-tree
 243         */
 244        [CPUA_PUMP_RPM_INDEX] = {
 245                .loc    = "CPU A PUMP",
 246                .type   = FCU_FAN_RPM,          
 247                .id     = FCU_FAN_ABSENT_ID,
 248        },
 249        [CPUB_PUMP_RPM_INDEX] = {
 250                .loc    = "CPU B PUMP",
 251                .type   = FCU_FAN_RPM,
 252                .id     = FCU_FAN_ABSENT_ID,
 253        },
 254        /* Xserve fans */
 255        [CPU_A1_FAN_RPM_INDEX] = {
 256                .loc    = "CPU A 1",
 257                .type   = FCU_FAN_RPM,
 258                .id     = FCU_FAN_ABSENT_ID,
 259        },
 260        [CPU_A2_FAN_RPM_INDEX] = {
 261                .loc    = "CPU A 2",
 262                .type   = FCU_FAN_RPM,
 263                .id     = FCU_FAN_ABSENT_ID,
 264        },
 265        [CPU_A3_FAN_RPM_INDEX] = {
 266                .loc    = "CPU A 3",
 267                .type   = FCU_FAN_RPM,
 268                .id     = FCU_FAN_ABSENT_ID,
 269        },
 270        [CPU_B1_FAN_RPM_INDEX] = {
 271                .loc    = "CPU B 1",
 272                .type   = FCU_FAN_RPM,
 273                .id     = FCU_FAN_ABSENT_ID,
 274        },
 275        [CPU_B2_FAN_RPM_INDEX] = {
 276                .loc    = "CPU B 2",
 277                .type   = FCU_FAN_RPM,
 278                .id     = FCU_FAN_ABSENT_ID,
 279        },
 280        [CPU_B3_FAN_RPM_INDEX] = {
 281                .loc    = "CPU B 3",
 282                .type   = FCU_FAN_RPM,
 283                .id     = FCU_FAN_ABSENT_ID,
 284        },
 285};
 286
 287static struct i2c_driver therm_pm72_driver;
 288
 289/*
 290 * Utility function to create an i2c_client structure and
 291 * attach it to one of u3 adapters
 292 */
 293static struct i2c_client *attach_i2c_chip(int id, const char *name)
 294{
 295        struct i2c_client *clt;
 296        struct i2c_adapter *adap;
 297        struct i2c_board_info info;
 298
 299        if (id & 0x200)
 300                adap = k2;
 301        else if (id & 0x100)
 302                adap = u3_1;
 303        else
 304                adap = u3_0;
 305        if (adap == NULL)
 306                return NULL;
 307
 308        memset(&info, 0, sizeof(struct i2c_board_info));
 309        info.addr = (id >> 1) & 0x7f;
 310        strlcpy(info.type, "therm_pm72", I2C_NAME_SIZE);
 311        clt = i2c_new_device(adap, &info);
 312        if (!clt) {
 313                printk(KERN_ERR "therm_pm72: Failed to attach to i2c ID 0x%x\n", id);
 314                return NULL;
 315        }
 316
 317        /*
 318         * Let i2c-core delete that device on driver removal.
 319         * This is safe because i2c-core holds the core_lock mutex for us.
 320         */
 321        list_add_tail(&clt->detected, &therm_pm72_driver.clients);
 322        return clt;
 323}
 324
 325/*
 326 * Here are the i2c chip access wrappers
 327 */
 328
 329static void initialize_adc(struct cpu_pid_state *state)
 330{
 331        int rc;
 332        u8 buf[2];
 333
 334        /* Read ADC the configuration register and cache it. We
 335         * also make sure Config2 contains proper values, I've seen
 336         * cases where we got stale grabage in there, thus preventing
 337         * proper reading of conv. values
 338         */
 339
 340        /* Clear Config2 */
 341        buf[0] = 5;
 342        buf[1] = 0;
 343        i2c_master_send(state->monitor, buf, 2);
 344
 345        /* Read & cache Config1 */
 346        buf[0] = 1;
 347        rc = i2c_master_send(state->monitor, buf, 1);
 348        if (rc > 0) {
 349                rc = i2c_master_recv(state->monitor, buf, 1);
 350                if (rc > 0) {
 351                        state->adc_config = buf[0];
 352                        DBG("ADC config reg: %02x\n", state->adc_config);
 353                        /* Disable shutdown mode */
 354                        state->adc_config &= 0xfe;
 355                        buf[0] = 1;
 356                        buf[1] = state->adc_config;
 357                        rc = i2c_master_send(state->monitor, buf, 2);
 358                }
 359        }
 360        if (rc <= 0)
 361                printk(KERN_ERR "therm_pm72: Error reading ADC config"
 362                       " register !\n");
 363}
 364
 365static int read_smon_adc(struct cpu_pid_state *state, int chan)
 366{
 367        int rc, data, tries = 0;
 368        u8 buf[2];
 369
 370        for (;;) {
 371                /* Set channel */
 372                buf[0] = 1;
 373                buf[1] = (state->adc_config & 0x1f) | (chan << 5);
 374                rc = i2c_master_send(state->monitor, buf, 2);
 375                if (rc <= 0)
 376                        goto error;
 377                /* Wait for conversion */
 378                msleep(1);
 379                /* Switch to data register */
 380                buf[0] = 4;
 381                rc = i2c_master_send(state->monitor, buf, 1);
 382                if (rc <= 0)
 383                        goto error;
 384                /* Read result */
 385                rc = i2c_master_recv(state->monitor, buf, 2);
 386                if (rc < 0)
 387                        goto error;
 388                data = ((u16)buf[0]) << 8 | (u16)buf[1];
 389                return data >> 6;
 390        error:
 391                DBG("Error reading ADC, retrying...\n");
 392                if (++tries > 10) {
 393                        printk(KERN_ERR "therm_pm72: Error reading ADC !\n");
 394                        return -1;
 395                }
 396                msleep(10);
 397        }
 398}
 399
 400static int read_lm87_reg(struct i2c_client * chip, int reg)
 401{
 402        int rc, tries = 0;
 403        u8 buf;
 404
 405        for (;;) {
 406                /* Set address */
 407                buf = (u8)reg;
 408                rc = i2c_master_send(chip, &buf, 1);
 409                if (rc <= 0)
 410                        goto error;
 411                rc = i2c_master_recv(chip, &buf, 1);
 412                if (rc <= 0)
 413                        goto error;
 414                return (int)buf;
 415        error:
 416                DBG("Error reading LM87, retrying...\n");
 417                if (++tries > 10) {
 418                        printk(KERN_ERR "therm_pm72: Error reading LM87 !\n");
 419                        return -1;
 420                }
 421                msleep(10);
 422        }
 423}
 424
 425static int fan_read_reg(int reg, unsigned char *buf, int nb)
 426{
 427        int tries, nr, nw;
 428
 429        buf[0] = reg;
 430        tries = 0;
 431        for (;;) {
 432                nw = i2c_master_send(fcu, buf, 1);
 433                if (nw > 0 || (nw < 0 && nw != -EIO) || tries >= 100)
 434                        break;
 435                msleep(10);
 436                ++tries;
 437        }
 438        if (nw <= 0) {
 439                printk(KERN_ERR "Failure writing address to FCU: %d", nw);
 440                return -EIO;
 441        }
 442        tries = 0;
 443        for (;;) {
 444                nr = i2c_master_recv(fcu, buf, nb);
 445                if (nr > 0 || (nr < 0 && nr != -ENODEV) || tries >= 100)
 446                        break;
 447                msleep(10);
 448                ++tries;
 449        }
 450        if (nr <= 0)
 451                printk(KERN_ERR "Failure reading data from FCU: %d", nw);
 452        return nr;
 453}
 454
 455static int fan_write_reg(int reg, const unsigned char *ptr, int nb)
 456{
 457        int tries, nw;
 458        unsigned char buf[16];
 459
 460        buf[0] = reg;
 461        memcpy(buf+1, ptr, nb);
 462        ++nb;
 463        tries = 0;
 464        for (;;) {
 465                nw = i2c_master_send(fcu, buf, nb);
 466                if (nw > 0 || (nw < 0 && nw != -EIO) || tries >= 100)
 467                        break;
 468                msleep(10);
 469                ++tries;
 470        }
 471        if (nw < 0)
 472                printk(KERN_ERR "Failure writing to FCU: %d", nw);
 473        return nw;
 474}
 475
 476static int start_fcu(void)
 477{
 478        unsigned char buf = 0xff;
 479        int rc;
 480
 481        rc = fan_write_reg(0xe, &buf, 1);
 482        if (rc < 0)
 483                return -EIO;
 484        rc = fan_write_reg(0x2e, &buf, 1);
 485        if (rc < 0)
 486                return -EIO;
 487        rc = fan_read_reg(0, &buf, 1);
 488        if (rc < 0)
 489                return -EIO;
 490        fcu_rpm_shift = (buf == 1) ? 2 : 3;
 491        printk(KERN_DEBUG "FCU Initialized, RPM fan shift is %d\n",
 492               fcu_rpm_shift);
 493
 494        return 0;
 495}
 496
 497static int set_rpm_fan(int fan_index, int rpm)
 498{
 499        unsigned char buf[2];
 500        int rc, id, min, max;
 501
 502        if (fcu_fans[fan_index].type != FCU_FAN_RPM)
 503                return -EINVAL;
 504        id = fcu_fans[fan_index].id; 
 505        if (id == FCU_FAN_ABSENT_ID)
 506                return -EINVAL;
 507
 508        min = 2400 >> fcu_rpm_shift;
 509        max = 56000 >> fcu_rpm_shift;
 510
 511        if (rpm < min)
 512                rpm = min;
 513        else if (rpm > max)
 514                rpm = max;
 515        buf[0] = rpm >> (8 - fcu_rpm_shift);
 516        buf[1] = rpm << fcu_rpm_shift;
 517        rc = fan_write_reg(0x10 + (id * 2), buf, 2);
 518        if (rc < 0)
 519                return -EIO;
 520        return 0;
 521}
 522
 523static int get_rpm_fan(int fan_index, int programmed)
 524{
 525        unsigned char failure;
 526        unsigned char active;
 527        unsigned char buf[2];
 528        int rc, id, reg_base;
 529
 530        if (fcu_fans[fan_index].type != FCU_FAN_RPM)
 531                return -EINVAL;
 532        id = fcu_fans[fan_index].id; 
 533        if (id == FCU_FAN_ABSENT_ID)
 534                return -EINVAL;
 535
 536        rc = fan_read_reg(0xb, &failure, 1);
 537        if (rc != 1)
 538                return -EIO;
 539        if ((failure & (1 << id)) != 0)
 540                return -EFAULT;
 541        rc = fan_read_reg(0xd, &active, 1);
 542        if (rc != 1)
 543                return -EIO;
 544        if ((active & (1 << id)) == 0)
 545                return -ENXIO;
 546
 547        /* Programmed value or real current speed */
 548        reg_base = programmed ? 0x10 : 0x11;
 549        rc = fan_read_reg(reg_base + (id * 2), buf, 2);
 550        if (rc != 2)
 551                return -EIO;
 552
 553        return (buf[0] << (8 - fcu_rpm_shift)) | buf[1] >> fcu_rpm_shift;
 554}
 555
 556static int set_pwm_fan(int fan_index, int pwm)
 557{
 558        unsigned char buf[2];
 559        int rc, id;
 560
 561        if (fcu_fans[fan_index].type != FCU_FAN_PWM)
 562                return -EINVAL;
 563        id = fcu_fans[fan_index].id; 
 564        if (id == FCU_FAN_ABSENT_ID)
 565                return -EINVAL;
 566
 567        if (pwm < 10)
 568                pwm = 10;
 569        else if (pwm > 100)
 570                pwm = 100;
 571        pwm = (pwm * 2559) / 1000;
 572        buf[0] = pwm;
 573        rc = fan_write_reg(0x30 + (id * 2), buf, 1);
 574        if (rc < 0)
 575                return rc;
 576        return 0;
 577}
 578
 579static int get_pwm_fan(int fan_index)
 580{
 581        unsigned char failure;
 582        unsigned char active;
 583        unsigned char buf[2];
 584        int rc, id;
 585
 586        if (fcu_fans[fan_index].type != FCU_FAN_PWM)
 587                return -EINVAL;
 588        id = fcu_fans[fan_index].id; 
 589        if (id == FCU_FAN_ABSENT_ID)
 590                return -EINVAL;
 591
 592        rc = fan_read_reg(0x2b, &failure, 1);
 593        if (rc != 1)
 594                return -EIO;
 595        if ((failure & (1 << id)) != 0)
 596                return -EFAULT;
 597        rc = fan_read_reg(0x2d, &active, 1);
 598        if (rc != 1)
 599                return -EIO;
 600        if ((active & (1 << id)) == 0)
 601                return -ENXIO;
 602
 603        /* Programmed value or real current speed */
 604        rc = fan_read_reg(0x30 + (id * 2), buf, 1);
 605        if (rc != 1)
 606                return -EIO;
 607
 608        return (buf[0] * 1000) / 2559;
 609}
 610
 611static void tickle_fcu(void)
 612{
 613        int pwm;
 614
 615        pwm = get_pwm_fan(SLOTS_FAN_PWM_INDEX);
 616
 617        DBG("FCU Tickle, slots fan is: %d\n", pwm);
 618        if (pwm < 0)
 619                pwm = 100;
 620
 621        if (!rackmac) {
 622                pwm = SLOTS_FAN_DEFAULT_PWM;
 623        } else if (pwm < SLOTS_PID_OUTPUT_MIN)
 624                pwm = SLOTS_PID_OUTPUT_MIN;
 625
 626        /* That is hopefully enough to make the FCU happy */
 627        set_pwm_fan(SLOTS_FAN_PWM_INDEX, pwm);
 628}
 629
 630
 631/*
 632 * Utility routine to read the CPU calibration EEPROM data
 633 * from the device-tree
 634 */
 635static int read_eeprom(int cpu, struct mpu_data *out)
 636{
 637        struct device_node *np;
 638        char nodename[64];
 639        const u8 *data;
 640        int len;
 641
 642        /* prom.c routine for finding a node by path is a bit brain dead
 643         * and requires exact @xxx unit numbers. This is a bit ugly but
 644         * will work for these machines
 645         */
 646        sprintf(nodename, "/u3@0,f8000000/i2c@f8001000/cpuid@a%d", cpu ? 2 : 0);
 647        np = of_find_node_by_path(nodename);
 648        if (np == NULL) {
 649                printk(KERN_ERR "therm_pm72: Failed to retrieve cpuid node from device-tree\n");
 650                return -ENODEV;
 651        }
 652        data = of_get_property(np, "cpuid", &len);
 653        if (data == NULL) {
 654                printk(KERN_ERR "therm_pm72: Failed to retrieve cpuid property from device-tree\n");
 655                of_node_put(np);
 656                return -ENODEV;
 657        }
 658        memcpy(out, data, sizeof(struct mpu_data));
 659        of_node_put(np);
 660        
 661        return 0;
 662}
 663
 664static void fetch_cpu_pumps_minmax(void)
 665{
 666        struct cpu_pid_state *state0 = &processor_state[0];
 667        struct cpu_pid_state *state1 = &processor_state[1];
 668        u16 pump_min = 0, pump_max = 0xffff;
 669        u16 tmp[4];
 670
 671        /* Try to fetch pumps min/max infos from eeprom */
 672
 673        memcpy(&tmp, &state0->mpu.processor_part_num, 8);
 674        if (tmp[0] != 0xffff && tmp[1] != 0xffff) {
 675                pump_min = max(pump_min, tmp[0]);
 676                pump_max = min(pump_max, tmp[1]);
 677        }
 678        if (tmp[2] != 0xffff && tmp[3] != 0xffff) {
 679                pump_min = max(pump_min, tmp[2]);
 680                pump_max = min(pump_max, tmp[3]);
 681        }
 682
 683        /* Double check the values, this _IS_ needed as the EEPROM on
 684         * some dual 2.5Ghz G5s seem, at least, to have both min & max
 685         * same to the same value ... (grrrr)
 686         */
 687        if (pump_min == pump_max || pump_min == 0 || pump_max == 0xffff) {
 688                pump_min = CPU_PUMP_OUTPUT_MIN;
 689                pump_max = CPU_PUMP_OUTPUT_MAX;
 690        }
 691
 692        state0->pump_min = state1->pump_min = pump_min;
 693        state0->pump_max = state1->pump_max = pump_max;
 694}
 695
 696/* 
 697 * Now, unfortunately, sysfs doesn't give us a nice void * we could
 698 * pass around to the attribute functions, so we don't really have
 699 * choice but implement a bunch of them...
 700 *
 701 * That sucks a bit, we take the lock because FIX32TOPRINT evaluates
 702 * the input twice... I accept patches :)
 703 */
 704#define BUILD_SHOW_FUNC_FIX(name, data)                         \
 705static ssize_t show_##name(struct device *dev, struct device_attribute *attr, char *buf)        \
 706{                                                               \
 707        ssize_t r;                                              \
 708        mutex_lock(&driver_lock);                                       \
 709        r = sprintf(buf, "%d.%03d", FIX32TOPRINT(data));        \
 710        mutex_unlock(&driver_lock);                                     \
 711        return r;                                               \
 712}
 713#define BUILD_SHOW_FUNC_INT(name, data)                         \
 714static ssize_t show_##name(struct device *dev, struct device_attribute *attr, char *buf)        \
 715{                                                               \
 716        return sprintf(buf, "%d", data);                        \
 717}
 718
 719BUILD_SHOW_FUNC_FIX(cpu0_temperature, processor_state[0].last_temp)
 720BUILD_SHOW_FUNC_FIX(cpu0_voltage, processor_state[0].voltage)
 721BUILD_SHOW_FUNC_FIX(cpu0_current, processor_state[0].current_a)
 722BUILD_SHOW_FUNC_INT(cpu0_exhaust_fan_rpm, processor_state[0].rpm)
 723BUILD_SHOW_FUNC_INT(cpu0_intake_fan_rpm, processor_state[0].intake_rpm)
 724
 725BUILD_SHOW_FUNC_FIX(cpu1_temperature, processor_state[1].last_temp)
 726BUILD_SHOW_FUNC_FIX(cpu1_voltage, processor_state[1].voltage)
 727BUILD_SHOW_FUNC_FIX(cpu1_current, processor_state[1].current_a)
 728BUILD_SHOW_FUNC_INT(cpu1_exhaust_fan_rpm, processor_state[1].rpm)
 729BUILD_SHOW_FUNC_INT(cpu1_intake_fan_rpm, processor_state[1].intake_rpm)
 730
 731BUILD_SHOW_FUNC_FIX(backside_temperature, backside_state.last_temp)
 732BUILD_SHOW_FUNC_INT(backside_fan_pwm, backside_state.pwm)
 733
 734BUILD_SHOW_FUNC_FIX(drives_temperature, drives_state.last_temp)
 735BUILD_SHOW_FUNC_INT(drives_fan_rpm, drives_state.rpm)
 736
 737BUILD_SHOW_FUNC_FIX(slots_temperature, slots_state.last_temp)
 738BUILD_SHOW_FUNC_INT(slots_fan_pwm, slots_state.pwm)
 739
 740BUILD_SHOW_FUNC_FIX(dimms_temperature, dimms_state.last_temp)
 741
 742static DEVICE_ATTR(cpu0_temperature,S_IRUGO,show_cpu0_temperature,NULL);
 743static DEVICE_ATTR(cpu0_voltage,S_IRUGO,show_cpu0_voltage,NULL);
 744static DEVICE_ATTR(cpu0_current,S_IRUGO,show_cpu0_current,NULL);
 745static DEVICE_ATTR(cpu0_exhaust_fan_rpm,S_IRUGO,show_cpu0_exhaust_fan_rpm,NULL);
 746static DEVICE_ATTR(cpu0_intake_fan_rpm,S_IRUGO,show_cpu0_intake_fan_rpm,NULL);
 747
 748static DEVICE_ATTR(cpu1_temperature,S_IRUGO,show_cpu1_temperature,NULL);
 749static DEVICE_ATTR(cpu1_voltage,S_IRUGO,show_cpu1_voltage,NULL);
 750static DEVICE_ATTR(cpu1_current,S_IRUGO,show_cpu1_current,NULL);
 751static DEVICE_ATTR(cpu1_exhaust_fan_rpm,S_IRUGO,show_cpu1_exhaust_fan_rpm,NULL);
 752static DEVICE_ATTR(cpu1_intake_fan_rpm,S_IRUGO,show_cpu1_intake_fan_rpm,NULL);
 753
 754static DEVICE_ATTR(backside_temperature,S_IRUGO,show_backside_temperature,NULL);
 755static DEVICE_ATTR(backside_fan_pwm,S_IRUGO,show_backside_fan_pwm,NULL);
 756
 757static DEVICE_ATTR(drives_temperature,S_IRUGO,show_drives_temperature,NULL);
 758static DEVICE_ATTR(drives_fan_rpm,S_IRUGO,show_drives_fan_rpm,NULL);
 759
 760static DEVICE_ATTR(slots_temperature,S_IRUGO,show_slots_temperature,NULL);
 761static DEVICE_ATTR(slots_fan_pwm,S_IRUGO,show_slots_fan_pwm,NULL);
 762
 763static DEVICE_ATTR(dimms_temperature,S_IRUGO,show_dimms_temperature,NULL);
 764
 765/*
 766 * CPUs fans control loop
 767 */
 768
 769static int do_read_one_cpu_values(struct cpu_pid_state *state, s32 *temp, s32 *power)
 770{
 771        s32 ltemp, volts, amps;
 772        int index, rc = 0;
 773
 774        /* Default (in case of error) */
 775        *temp = state->cur_temp;
 776        *power = state->cur_power;
 777
 778        if (cpu_pid_type == CPU_PID_TYPE_RACKMAC)
 779                index = (state->index == 0) ?
 780                        CPU_A1_FAN_RPM_INDEX : CPU_B1_FAN_RPM_INDEX;
 781        else
 782                index = (state->index == 0) ?
 783                        CPUA_EXHAUST_FAN_RPM_INDEX : CPUB_EXHAUST_FAN_RPM_INDEX;
 784
 785        /* Read current fan status */
 786        rc = get_rpm_fan(index, !RPM_PID_USE_ACTUAL_SPEED);
 787        if (rc < 0) {
 788                /* XXX What do we do now ? Nothing for now, keep old value, but
 789                 * return error upstream
 790                 */
 791                DBG("  cpu %d, fan reading error !\n", state->index);
 792        } else {
 793                state->rpm = rc;
 794                DBG("  cpu %d, exhaust RPM: %d\n", state->index, state->rpm);
 795        }
 796
 797        /* Get some sensor readings and scale it */
 798        ltemp = read_smon_adc(state, 1);
 799        if (ltemp == -1) {
 800                /* XXX What do we do now ? */
 801                state->overtemp++;
 802                if (rc == 0)
 803                        rc = -EIO;
 804                DBG("  cpu %d, temp reading error !\n", state->index);
 805        } else {
 806                /* Fixup temperature according to diode calibration
 807                 */
 808                DBG("  cpu %d, temp raw: %04x, m_diode: %04x, b_diode: %04x\n",
 809                    state->index,
 810                    ltemp, state->mpu.mdiode, state->mpu.bdiode);
 811                *temp = ((s32)ltemp * (s32)state->mpu.mdiode + ((s32)state->mpu.bdiode << 12)) >> 2;
 812                state->last_temp = *temp;
 813                DBG("  temp: %d.%03d\n", FIX32TOPRINT((*temp)));
 814        }
 815
 816        /*
 817         * Read voltage & current and calculate power
 818         */
 819        volts = read_smon_adc(state, 3);
 820        amps = read_smon_adc(state, 4);
 821
 822        /* Scale voltage and current raw sensor values according to fixed scales
 823         * obtained in Darwin and calculate power from I and V
 824         */
 825        volts *= ADC_CPU_VOLTAGE_SCALE;
 826        amps *= ADC_CPU_CURRENT_SCALE;
 827        *power = (((u64)volts) * ((u64)amps)) >> 16;
 828        state->voltage = volts;
 829        state->current_a = amps;
 830        state->last_power = *power;
 831
 832        DBG("  cpu %d, current: %d.%03d, voltage: %d.%03d, power: %d.%03d W\n",
 833            state->index, FIX32TOPRINT(state->current_a),
 834            FIX32TOPRINT(state->voltage), FIX32TOPRINT(*power));
 835
 836        return 0;
 837}
 838
 839static void do_cpu_pid(struct cpu_pid_state *state, s32 temp, s32 power)
 840{
 841        s32 power_target, integral, derivative, proportional, adj_in_target, sval;
 842        s64 integ_p, deriv_p, prop_p, sum; 
 843        int i;
 844
 845        /* Calculate power target value (could be done once for all)
 846         * and convert to a 16.16 fp number
 847         */
 848        power_target = ((u32)(state->mpu.pmaxh - state->mpu.padjmax)) << 16;
 849        DBG("  power target: %d.%03d, error: %d.%03d\n",
 850            FIX32TOPRINT(power_target), FIX32TOPRINT(power_target - power));
 851
 852        /* Store temperature and power in history array */
 853        state->cur_temp = (state->cur_temp + 1) % CPU_TEMP_HISTORY_SIZE;
 854        state->temp_history[state->cur_temp] = temp;
 855        state->cur_power = (state->cur_power + 1) % state->count_power;
 856        state->power_history[state->cur_power] = power;
 857        state->error_history[state->cur_power] = power_target - power;
 858        
 859        /* If first loop, fill the history table */
 860        if (state->first) {
 861                for (i = 0; i < (state->count_power - 1); i++) {
 862                        state->cur_power = (state->cur_power + 1) % state->count_power;
 863                        state->power_history[state->cur_power] = power;
 864                        state->error_history[state->cur_power] = power_target - power;
 865                }
 866                for (i = 0; i < (CPU_TEMP_HISTORY_SIZE - 1); i++) {
 867                        state->cur_temp = (state->cur_temp + 1) % CPU_TEMP_HISTORY_SIZE;
 868                        state->temp_history[state->cur_temp] = temp;                    
 869                }
 870                state->first = 0;
 871        }
 872
 873        /* Calculate the integral term normally based on the "power" values */
 874        sum = 0;
 875        integral = 0;
 876        for (i = 0; i < state->count_power; i++)
 877                integral += state->error_history[i];
 878        integral *= CPU_PID_INTERVAL;
 879        DBG("  integral: %08x\n", integral);
 880
 881        /* Calculate the adjusted input (sense value).
 882         *   G_r is 12.20
 883         *   integ is 16.16
 884         *   so the result is 28.36
 885         *
 886         * input target is mpu.ttarget, input max is mpu.tmax
 887         */
 888        integ_p = ((s64)state->mpu.pid_gr) * (s64)integral;
 889        DBG("   integ_p: %d\n", (int)(integ_p >> 36));
 890        sval = (state->mpu.tmax << 16) - ((integ_p >> 20) & 0xffffffff);
 891        adj_in_target = (state->mpu.ttarget << 16);
 892        if (adj_in_target > sval)
 893                adj_in_target = sval;
 894        DBG("   adj_in_target: %d.%03d, ttarget: %d\n", FIX32TOPRINT(adj_in_target),
 895            state->mpu.ttarget);
 896
 897        /* Calculate the derivative term */
 898        derivative = state->temp_history[state->cur_temp] -
 899                state->temp_history[(state->cur_temp + CPU_TEMP_HISTORY_SIZE - 1)
 900                                    % CPU_TEMP_HISTORY_SIZE];
 901        derivative /= CPU_PID_INTERVAL;
 902        deriv_p = ((s64)state->mpu.pid_gd) * (s64)derivative;
 903        DBG("   deriv_p: %d\n", (int)(deriv_p >> 36));
 904        sum += deriv_p;
 905
 906        /* Calculate the proportional term */
 907        proportional = temp - adj_in_target;
 908        prop_p = ((s64)state->mpu.pid_gp) * (s64)proportional;
 909        DBG("   prop_p: %d\n", (int)(prop_p >> 36));
 910        sum += prop_p;
 911
 912        /* Scale sum */
 913        sum >>= 36;
 914
 915        DBG("   sum: %d\n", (int)sum);
 916        state->rpm += (s32)sum;
 917}
 918
 919static void do_monitor_cpu_combined(void)
 920{
 921        struct cpu_pid_state *state0 = &processor_state[0];
 922        struct cpu_pid_state *state1 = &processor_state[1];
 923        s32 temp0, power0, temp1, power1;
 924        s32 temp_combi, power_combi;
 925        int rc, intake, pump;
 926
 927        rc = do_read_one_cpu_values(state0, &temp0, &power0);
 928        if (rc < 0) {
 929                /* XXX What do we do now ? */
 930        }
 931        state1->overtemp = 0;
 932        rc = do_read_one_cpu_values(state1, &temp1, &power1);
 933        if (rc < 0) {
 934                /* XXX What do we do now ? */
 935        }
 936        if (state1->overtemp)
 937                state0->overtemp++;
 938
 939        temp_combi = max(temp0, temp1);
 940        power_combi = max(power0, power1);
 941
 942        /* Check tmax, increment overtemp if we are there. At tmax+8, we go
 943         * full blown immediately and try to trigger a shutdown
 944         */
 945        if (temp_combi >= ((state0->mpu.tmax + 8) << 16)) {
 946                printk(KERN_WARNING "Warning ! Temperature way above maximum (%d) !\n",
 947                       temp_combi >> 16);
 948                state0->overtemp += CPU_MAX_OVERTEMP / 4;
 949        } else if (temp_combi > (state0->mpu.tmax << 16)) {
 950                state0->overtemp++;
 951                printk(KERN_WARNING "Temperature %d above max %d. overtemp %d\n",
 952                       temp_combi >> 16, state0->mpu.tmax, state0->overtemp);
 953        } else {
 954                if (state0->overtemp)
 955                        printk(KERN_WARNING "Temperature back down to %d\n",
 956                               temp_combi >> 16);
 957                state0->overtemp = 0;
 958        }
 959        if (state0->overtemp >= CPU_MAX_OVERTEMP)
 960                critical_state = 1;
 961        if (state0->overtemp > 0) {
 962                state0->rpm = state0->mpu.rmaxn_exhaust_fan;
 963                state0->intake_rpm = intake = state0->mpu.rmaxn_intake_fan;
 964                pump = state0->pump_max;
 965                goto do_set_fans;
 966        }
 967
 968        /* Do the PID */
 969        do_cpu_pid(state0, temp_combi, power_combi);
 970
 971        /* Range check */
 972        state0->rpm = max(state0->rpm, (int)state0->mpu.rminn_exhaust_fan);
 973        state0->rpm = min(state0->rpm, (int)state0->mpu.rmaxn_exhaust_fan);
 974
 975        /* Calculate intake fan speed */
 976        intake = (state0->rpm * CPU_INTAKE_SCALE) >> 16;
 977        intake = max(intake, (int)state0->mpu.rminn_intake_fan);
 978        intake = min(intake, (int)state0->mpu.rmaxn_intake_fan);
 979        state0->intake_rpm = intake;
 980
 981        /* Calculate pump speed */
 982        pump = (state0->rpm * state0->pump_max) /
 983                state0->mpu.rmaxn_exhaust_fan;
 984        pump = min(pump, state0->pump_max);
 985        pump = max(pump, state0->pump_min);
 986        
 987 do_set_fans:
 988        /* We copy values from state 0 to state 1 for /sysfs */
 989        state1->rpm = state0->rpm;
 990        state1->intake_rpm = state0->intake_rpm;
 991
 992        DBG("** CPU %d RPM: %d Ex, %d, Pump: %d, In, overtemp: %d\n",
 993            state1->index, (int)state1->rpm, intake, pump, state1->overtemp);
 994
 995        /* We should check for errors, shouldn't we ? But then, what
 996         * do we do once the error occurs ? For FCU notified fan
 997         * failures (-EFAULT) we probably want to notify userland
 998         * some way...
 999         */
1000        set_rpm_fan(CPUA_INTAKE_FAN_RPM_INDEX, intake);
1001        set_rpm_fan(CPUA_EXHAUST_FAN_RPM_INDEX, state0->rpm);
1002        set_rpm_fan(CPUB_INTAKE_FAN_RPM_INDEX, intake);
1003        set_rpm_fan(CPUB_EXHAUST_FAN_RPM_INDEX, state0->rpm);
1004
1005        if (fcu_fans[CPUA_PUMP_RPM_INDEX].id != FCU_FAN_ABSENT_ID)
1006                set_rpm_fan(CPUA_PUMP_RPM_INDEX, pump);
1007        if (fcu_fans[CPUB_PUMP_RPM_INDEX].id != FCU_FAN_ABSENT_ID)
1008                set_rpm_fan(CPUB_PUMP_RPM_INDEX, pump);
1009}
1010
1011static void do_monitor_cpu_split(struct cpu_pid_state *state)
1012{
1013        s32 temp, power;
101drivers/macinint rc, intakefan" class4)
 9b>
 909         9244ad curr" id5" id hru"L988"> 988        /* We co09"X, ))<909"6"> 926
 927        rc = (struct do_"line" name="L1013">1013PUMP_RPM_INDEX" class="sref">CPUB_PUMP_RPM_IND1_FAN_ABSENd="L917" class="line" naENd="909"ower0);
 928      09"X,  < 0) {
 929                do_monitor_cpu"Lss=>"Lss < 0) {
<>);
"Lske_rpm;
 *proc hsta>"Ls1"> 941
 942        /* Check tmax, incre"Ls012" id="Lstate" class="sref">proc"Lsta>"Lse go
 943         * full "Ls, "Lsdown
, 
101ss="line" name="L945"> 945(struct temp_combi >= ((state0->mpu."Ls< 16)) {
 946                printk(e="L992"> 9ta href="+code=KERN_WARNING"  class="strin"+code=mpu" class="sref">mpu., "Lsot;,
KERN_WARNING "Warning ! Te"Ls_FAN_ABSENef="+code=power0" class=ENef=>"Ls_ID)
(struct  993            101ss="l56                               , ] -
 948                state0->overtemp += /* XXX What do we"Lmme>"Lmm < 0) {
<> href="drivers/macintosh/ther"line" name="L1013">101ss="l id="L890" class="line" name="L890"> 890        sval = (state->ef="+code=mpu" class="sref">mpu."Lmtemp++;
 948                state0->"Lm * > 0) {
 946                pe="L992"> 9ta href="+co href="+code=KERN_WARNING" class="sref">KERN_WARNING "Temperature &#"Lm012" id="Lef="+code=power1" class="Lef=>"Lm_max) /
(struct  993            101ss="l56 m_fan( 890        sval = (sm_fan( 890        pump, state1-&g"Lm,  href=="+code=mpu" class="sref">mpu., /* XXX What do weremme>"Lmmp_max;
 890        pump, mpu.,
 946                pe="L992"> 9ta href="+co href="+code=KERN_WARNING" class="sref">KERN_WARNING , "Lmot;,
{
 993            101ss="l56 ef="+code=state1" class="sref">state1-&g"Lm_FAN_ABSENcode=overtemp" class="srENcod>"Lmt;> 16);
 948                state0-><"LmX, "LmMP / 4;
state0-><"L4009" id="Lhref="+code=temp1" class"Lhre>"Lhr */
 948                state0->overtemp >= "Lhtemp++;
 960                 *"Lh2 */
 948                 928      094012" id="Lmp if we are there. At t"Lmp >"Lh_max) /
 989         890        sval = (state0->mpu., "Lhke_fan;
 963                state0-> 890        sval = (state0->mpu., >"Lhmp_max;
 965                goto tmax +in cl>"Lht_fans;
, "Lha>        }
temp_combEN" c>"Lh7"> 967
 968, CPU_MAa EMP>"LhD */
1013        ef="+code=state1" class="sref">state1-&g"L5009" id="Ltmax" class="sref">tmax<"Ltma>"Ltm>        }
"Lt0"> 970
 971"Lt *"Ltk */
 989        state0-> 989     890        sval = (state0->mpu."Ltt_fan);
 989        state0-> 989     890        sval = (state0->mpu.,  953< h"li>"Ltpm);
"Lt4"> 974
 971"Ltclass="linerature back down to inera>"Ltd */
 989     = (state0->rpm * , temp_comba " c>"Ltgt;> 16;
 977        intake =  890        sval = (state0->mpu.);
 978        intake =  890        sval = (state0->mpu., 
 963                state0->mpu.CP"LVER>"LVEm);
crit="sta>"LV0"> 97rs/macintosh/therm_pm72.c#L965" id="L965" class="line" nL987" class="line" name="L987"> 987  *ove hert>"LV1"> 991
 992        DBG("** CPU %d RPM: %d Ex, %"LV012" id="Lst_fan" class="sref">rma"Lst_>"LVot;,
 993            < =  890        index, (int)state1-> 890        pump, state1-&g"L6, rm hake>"LVpm);
"LV4"> 994
 995        /* We should chec"LVclass="lin=do_set_fans" class="srein=do>"LVwhat
 996         * do we "LVX, 
 997         * failure"LV_FAN_ABSENid="L967" class="line" nENid=>"LVland
 998<"LVX, /* Da pan>"LVy...
"Lpo */
 993            ==="L928" class="line" name="L928"> 928      0971010" id="id="L970" class="line" n="id=>"Lptemp++;
1000        set_rpm_fan( 928      097 */* Ra han >"Lp> > 0) {
1001        set_rpm_fan( 890        index, NDEX class="line" name="L928"> 928      097012" id="Lt_fan" class="sref">rmin"Lt_f>"Lprtemp);
, rmax ht_f>"Lpke_fan;
1002        set_rpm_fan(CPUB_INTAKE_FAN_RPM_INDEX, "Lpmp_max;
1003        set_rpm_fan( 890        index, NDEX class="line" name="L928"> 928      097class="linnt">/* Calculate intake innt">"Lpt_fans;
, CPU_INTAKE_SCALa s=">"Lp fanrmiENke_>"Lptemp++;
, rmaa ke_>"Lpy...
1011static void do_monitor_cpu_split(struct cpu_pid_stat8009" id="Lref="+code=intake" class"Lref>"Lref="+"drivers/macintosh/therm_pm72.c#L953" id="L"L81010" id="id="L980" class="line" n="id=>"Lr_3/1000">1013        3        pum002p" chrefde=mpu" class="sref">mpu. */* Calculate p h"co>"Lr2 */
mpu."Lr3emp++;
, rma hst_>"Lrst_fan;
 9244ad curr" id5" id hru"L988"> 988        /* We co098a>, );
 927        rc = (struct do_"line" name="L1013">1013PUMP_RPM_     /* We co098class="lin+code=pump_min" class="sin+co>"Lrt_fans;
 928      098X, "Lrt;> 16);
 929                 = 0;
, "Lr9emp++;
"Lt;"> 974
 942        /* Check tmax, incre"L91010" id="de=intake_rpm" class="sr="de=>"Lt1fan
 943         * full "L9 *"Lt2...
"Lt3_fans;
101ss="line" name="L945"> 945(struct temp_combi >= ((state0->mpu., ;
 946                printk(e="L992"> 9ta href="+code=KERN_WARNING"  class="strin"+code=mpu" class="sref">mpu., "Ltertemp)
KERN_WARNING "Warning ! Te"L9class="lins, shouldn't we ? Buins, >"Ltot;,
(struct  993            101ss="l56 ef="+code=state1" class="sref">state1-&g"L9X, "Ltt;> 16);
 890        pump, state0->overtemp +=  = 0;
101ss="l id="L890" class="line" name="L890"> 890        sval = (state->ef="+code=mpu" class="sref">mpu.,          *a ass>"Lttemp] -
 948                state0->"199"> 999  1     1*/
 946                pe="L992"> 9ta href="+co href="+code=KERN_WARNING" class="sref">KERN_WARNING "Temperature &#"1="09/40/3d12e2bd1a363b7b67e81b414cd11b77e510temp++;
(struct  993            101ss="l56 m_fan( 890        sval = (sm_fan( 890        pump, "Temperature &#"1=209/40/3d12d="L991" class="line" n 1sref"1rpm);
, in10_max) /
 890        pump, mpu.->1a href="+code=rpm" class=1sref"10ke_fan;
 946                pe="L992"> 9ta href="+co href="+code=KERN_WARNING" class="sref">KERN_WARNING )
 993            101ss="l56 ef="+code=state1" class>"Temperature &#"1=6004" id=1L, shouldn't we ? Bui1_ABSE1T_ID)
 948                state0-><"1EX, 1ump);
FCU_FA1_ABSE10ower0);
 948                state0->overtemp >= , 10temp] -
 960                
 948                 928      01L1010" id=1L1010" class="line" name=1L101011temp++;
 989         890         963                 890        sval = (state0-> 960                11> > 0) {
 965                goto {
, 11pm);
i114"> 994
 968 9b>

1013        ef="+code=state1" class="sref">state1-&g"1"X, ))<9011a>        }
 967
 988        /* We co01"X, 
pum002p" chref#L927" id="L927" climm_output_="ds=/therm_pm72.c#L9imm_output_="ds=e" name="L965"> 965                goto do_monitor_cpu"1ss=>"1ss < 0) {
pum002p" chref#L927" id="L927" cne" name="L977"> 977        pum002p" chrefke =  890        sval = (state0->mpu."1ske_rpm;
 *proc 1sta>"121"> 991
s#L9BG" clas/a> 9imm#L9BG" clARNING" class="sref">KERN_WARNING proc"1sta>"12ot;,
sval = (state0->mpu., "12pm);

 989        state0-> 989    pum002p" chrefode=mpu" class="sref">mpu."12d */
 989        state0-> 989     890        sval = (state0->mpu., "12gt;> 16;
 890         963                 890        rpm = st"12_FAN_ABSE1ef="+code=power0" class=E1ef=>"12temp++;
,  987 /* XXX What do we"1mme>"13s < 0) {
 992      ref">DBG("** CPU %d RPM: %d Ex, %"131010" id=1 class="line" name="L930=1 cl>"1mtemp++;
 993            < =  890        index, (int) 890        pump, "Temperature &#"1m *"Temperature &#"1m012" id="1ef="+code=power1" class="1ef=>"1m_max) /
 995        /* We should chec"1m, 
 996         * do we "13a>, /* XXX What do wer1mme>"1mmp_ma/span>
 997         * failure"13class="li1 class="line" name="L935i1 cl>"13what
 998<"1mX, "13 fan
 988        /* We co01m_FAN_ABSE1code=overtemp" class="srE1cod>"13ower0);
 993            ==="L928" class="line" name="L928"> 928      01mX, "13temp] -
        , (int) 890        index, NDEX class="line" name="L928"> 928      014009" id="1href="+code=temp1" class"1hre>"14/
        , (int) 890        index, NDEX class="line" name="L928"> 928      0141010" id=1ef="+code=power1" class==1ef=>"1htemp++;
        , (int) 890        index, NDEX class="line" name="L928"> 928      014 *"14pm);
"1h_max) /
        , (int) 890        index, NDEX class="line" name="L928"> 928      014, "1hke_fan;
        , (int) 890        index, NDEX class="line" name="L928"> 928      014a>, >"1hmp_max;
        , (int) 890        index, NDEX class="line" name="L928"> 928      014class="li1 class="sref">tmax +i1 cl>"1ht_fans;
, "14 fantemp_combE1" c>"14temp++;
, CPU_MAa1EMP>"14y...
 988        /* We co015009" id="1tmax" class="sref">tmax<"1tma>"1tm>   /span>
 988        /* We co0151010" id=1code=overtemp" class="sr=1cod>"151fan
 988        /* We co01t *"1tk */
1011static void do_monitor_cpu_split(struct  993           ass="sref">overtemp >= "1tt_fan"drivers/macintosh/therm_pm72.c#L953" id="L"1t,  953< 1"li>"15wer;
 993  " ipm = st"15a>, "1t4"> 9> = st"15class="li1erature back down to i1era>"1td */
 993            =="drivers/macintin="L993"> 993           a> = st"15X, temp_comba1" c>"1tgt;> 16;
 960                );
 989      ass="line" name=_split" type=do_monitor_cpu_split" type     ===ss="line" name="L1_PID_TYPE_RACKMAC href="+code=set_r_PID_TYPE_RACKMAC    a ? 4000 : 1000L960"> 960                , 
 948                state0-><"16009" id="1VERTEMP" class="sref">CP"1VER>"16s < 0) {
(struct  960                crit=1sta>"16ke_rpm;
 *ove 1ert>"16#L101="+code=state1" class>"Temperature &#"1V012" id="1st_fan" class="sref">rma"1st_>"163_fans;
 993            ==="L="+code=state1" class>"Temperature &#"1V, rm 1ake>"16ke_fan;
         attach_i2c_chi9" class="line" name=SUPPLY_MONITOR_ID48         SUPPLY_MONITOR_IDa>, (inode=printk" class="sref">pe="0h/therm_ class="strinNDEX class="line" name="L928"> 928      016a>, "1V4"> 994
 993            ===1L="+code=state1" class>"Temperature &#"1Vclass="li1=do_set_fans" class="srei1=do>"16_ID)
         attach_i2c_chi9" class="line" name=SUPPLY_MONITORB_ID48         SUPPLY_MONITORB_IDa>, (inode=printk" class="sref">pe="1h/therm_ class="strinNDEX class="line" name="L928"> 928      016X, ;
overtemp >= "16t;> 16);
pum00il    a> = st"1VX, /* Da1pan>"169emp++;
"1po */
 989 993             890        sval<)ass="sref">overtemp >= "1ptemp++;
pum00il    a> = st"17 */* Ra 1an >"17#L101="+code=state1" class>"Temperature &#"17012" id="1t_fan" class="sref">rmin"1t_f>"17t_fan);
 890        sval = (st"17, rmax 1t_f>"1pke_fan;
, "1pmp_max;
 946                printk(too many ref=" hisrm_y slotsan class="strinNDEX class="line" name="L928"> 928      017class="li1nt">/* Calculate intake i1nt">"17_ID)
 928      017X, CPU_INTAKE_SCALa1s=">"17mp);
rmiE1ke_>"17e_fan);
 9Usk 9ref=" hisrm_y enclaesan class="strinrpm_fan( 993             928      017X, rmaa1ke_>"179emp++;
"18o */
 993            ==="L928" class="line" name="L928"> 928      0181010" id=1id="L980" class="line" n=1id=>"18temp++;
 993  " ipm          f_lev"L899" class="line" namelev48         lev"L89  928      018 */* Calculate p 1"co>"18> > 0) {
 993  " ipm          f_lev"L899" class="line" namelev48         lev"L89          lev_att_pm720_voltagcef="NDEX class="line" name="L928"> 928      018012" id="1code=pump_max" class="sr"1cod>"18_max) /
 993  " ipm          f_lev"L899" class="line" namelev48         lev"L89          lev_att_pm720_curr" ief="NDEX class="line" name="L928"> 928      018, rma 1st_>"18ke_fan;
 993  " ipm          f_lev"L899" class="line" namelev48         lev"L89  928      018a>, ;
 993  " ipm          f_lev"L899" class="line" namelev48         lev"L89            lev_att_pm720_gt; 928      018class="li1+code=pump_min" class="si1+co>"1rt_fans;
, "1rt;> 16);
 993  " ipm          f_lev"L899" class="line" namelev48         lev"L89  928      018_FAN_ABSE1=do_set_fans" class="sreE1=do>"18t;> 16);
 993  " ipm          f_lev"L899" class="line" namelev48         lev"L89          lev_att_pm721_voltagcef="NDEX class="line" name="L928"> 928      018X, "18temp] -
 993  " ipm          f_lev"L899" class="line" namelev48         lev"L89          lev_att_pm721_curr" ief="NDEX class="line" name="L928"> 928      019009" id="1t;"19/
 993  " ipm          f_lev"L899" class="line" namelev48         lev"L89  928      0191010" id=1de=intake_rpm" class="sr=1de=>"19temp++;
 993  " ipm          f_lev"L899" class="line" namelev48         lev"L89            lev_att_pm721_gt; 928      019 *"19pm);
 928      019012" id="1#37;d, In, overtemp: "1#37>"1t3_fans;
 993  " ipmovertemp >= , ;
 946                pFailhd="licmpu., "1tertemp)
pfilhso95" e="L992"> an class="strinrpm_fan( 993           NDEX class="line" name="L928"> 928      019class="li1s, shouldn't we ? Bui1s, >"1tot; 928      019X, "1tt;> 16);
state0-><"19_FAN_ABSE1 we probably want to notE1 we>"1tmprs/macintosh/th/thelass="sref">pum00il    L987" class="line" name="L987"> 987 ,          *a1ass>"19s */
state0-><"299"> 999  2     2*/
state0-><"291"> 999e=intake_rpm" class="sr=2b77e520temp++;
state0-><"292"> 999d="L991" class="line" n 2sref"2rpm 928      02a>, in203emp++;
->2a href="+code=rpm" class=2sref"20down
 988        /* We co02L1004" id=2L1004" class="line" name=2L100420mp_ma/span>
 988        /* We co02=6004" id=2L, shouldn't we ? Bui2_ABSE20what
 988        /* We co02EX, 2ump
1011static void do_monitor_cpu_split(struct cpu_pid_sta2U_FAN_ABSE2T_ID" class="sref">FCU_FA2_ABSE20ower0"drivers/macintosh/therm_pm72.c#L953" id="L"2EX, 20temp] -
overtemp >= 
state0-><"2L1010" id=2L1010" class="line" name=2L101021ke_rpm;
21> > 0) {
 993            ==="L928" class="line" name="L928"> 928      021012" id="21012" class="line" name="21012"21_max) /
          f_lev"L899" class="line" namelev48         lev"L89  928      02p, 21ke_fan;
          f_lev"L899" class="line" namelev48         lev"L89          lev_att_pm720_voltagcef="NDEX class="line" name="L928"> 928      02/a>, i21mp_max;
          f_lev"L899" class="line" namelev48         lev"L89          lev_att_pm720_curr" ief="NDEX class="line" name="L928"> 928      02 class="li2e" name="L4N286"> 9b>
)
          f_lev"L899" class="line" namelev48         lev"L89  928      02"X, ))<9021t;> 16);
          f_lev"L899" class="line" namelev48         lev"L89            lev_att_pm720_gt; 928      021_FAN_ABSE2d="L917" class="line" naE2d="90217"> 967
, ] -
          f_lev"L899" class="line" namelev48         lev"L89  928      022009" id="2ss="sref">do_monitor_cpu"2ss=>"22/
          f_lev"L899" class="line" namelev48         lev"L89          lev_att_pm721_voltagcef="NDEX class="line" name="L928"> 928      0221010" id=2d="L920" class="line" na=2d=">"22temp++;
          f_lev"L899" class="line" namelev48         lev"L89          lev_att_pm721_curr" ief="NDEX class="line" name="L928"> 928      02s *proc 2sta>"22> > 0) {
          f_lev"L899" class="line" namelev48         lev"L89  928      02s012" id="2state" class="sref">proc"2sta>"22ot;,
          f_lev"L899" class="line" namelev48         lev"L89            lev_att_pm721_gt; 928      022, "22ke_fan;
 928      02sa>,  9> = st"22class="li2"22d */
state0-><"2sX, "22 fan"22temp++;
, 
 988        /* We co023009" id="2mment">/* XXX What do we"2mme>"23m>   /span>
 988        /* We co0231010" id=2 class="line" name="L930=2 cl>"231fan
 988        /* We co02m *
1011static void < hresideref="+code=do_monitor_cpu hresideref="+code="sref">do_monitor_cpu_split(struct cpu_pid_sta2m012" id="2ef="+code=power1" class="2ef=>"23t_fan"drivers/macintosh/therm_pm72.c#L953" id="L"2m, 
1013        pumrm_egrae>1013        

1013        pum002p" chref+code=state0" class="sref">state0-><"23a>, /* XXX What do wer2mme>"23  */
        state0-><"23class="li2 class="line" name="L935i2 cl>"23d */
state0-><"23X, "23a>        }
);
"Temperature &#"2mX, "23temp] -
state0-><"24009" id="2href="+code=temp1" class"2hre>"24s < 0) {
 = (pumrm_ervaehref+code=state0" class="sref">state0-><"241010" id=2ef="+code=power1" class==2ef=>"24ke_rpm;
 *"24pm);
 = ( 928      024012" id="2mp if we are there. At t"2mp >"243emp++;
, "2hke_fan;
 988        /* We co024a>, >"24  */
 PW      928      024class="li2 class="sref">tmax +i2 cl>"2ht_fans;
 928      02hX, "24t;> 16);
 946                pE id="992"> 9 928      024_FAN_ABSE2" class="sref">temp_combE2" c>"24t;> 16);
 988        /* We co024X, CPU_MAa2EMP>"24temp] -
        /* We co025009" id="2tmax" class="sref">tmax<"2tma>"25/
state0-><"251010" id=2code=overtemp" class="sr=2cod>"251m);
 = (((struct  928      02t *"25#L101="+code=state1" class>"Temperature &#"2t012" id="2+code=overtemp" class="s"2+co>"25_max) /
 988        /* We co02t,  953< 2"li>"254 */
101 =="drivers/macinti2c_smbus_pumr2c_smbus_ 928      02ta>, "25  */
101DEX class="line" name="L928"> 928      02tclass="li2erature back down to i2era>"2td */
DBG((((101)g">"** CPU %d RPM: %d Ex, %"25X, temp_comba2" c>"25t;> 16);
 = (pumrmput_target>101)NDEX class="line" name="L928"> 928      02t_FAN_ABSE2de=overtemp" class="srefE2de=>"25temp++;
, 
 988        /* We co026009" id="2VERTEMP" class="sref">CP"2VER>"26s < 0) {
101 ==ref="drivers/macth/therm_pm72.c#L899" id="L899" class="line" namecur_samplherm_pm72.c#L899cur_samplh>101 + 1)/a>(101DEX class="line" name="L928"> 928      0261010" id=2state" class="sref">crit=2sta>"261m);
 = (101] =="drivers/macintass="line" name="L1013">101DEX class="line" name="L928"> 928      02V *ove 2ert>"26pm);
 = (101] =="drivers/macintass="line" name="L1013">101 -="drivers/macint hresiderearam#L965" id="L965" hresiderearam#wer0/a> = (pumrmput_target>101DEX class="line" name="L928"> 928      02V012" id="2st_fan" class="sref">rma"2st_>"263_fans;
 928      02V, rm 2ake>"26ke_fan;
 988        /* We co026a>, "2V4"> 994
 928      02Vclass="li2=do_set_fans" class="srei2=do>"26_ID)
 928      02VX, (struct 101 ==ref="drivers/macth/therm_pm72.c#L899" id="L899" class="line" namecur_samplherm_pm72.c#L899cur_samplh>101 + 1)/a>( 928      02V_FAN_ABSE2id="L967" class="line" nE2id=>"26t;> 16);
101DEX class="line" name="L928"> 928      026X, /* Da2pan>"26temp] -
101] =="drivers/macintass="line" name="L1013">101DEX class="line" name="L928"> 928      027009" id="2power_combi" class="sref"2pow>"27/
101] =EX class="line" name="L928"> 928      0271010" id=2id="L970" class="line" n=2id=>"2ptemp++;
);
 = (101 -="drivers/macint hresiderearam#L965" id="L965" hresiderearam#wer0/a> = (pumrmput_target>101DEX class="line" name="L928"> 928      027 */* Ra 2an >"27> > 0) {
rmin"2t_f>"27_max) /
state0-><"27, rmax 2t_f>"27ke_fan;
 928      027a>, "274"> 9> = st"27class="li2nt">/* Calculate intake i2nt">"27_ID)
 988        /* We co027X, CPU_INTAKE_SCALa2s=">"27gt;> 16;
state0-><"27_FAN_ABSE2ke_fan" class="sref">rmiE2ke_>"27e_fan);
pumrm_egrae>101 =="+code=state0" class="sref">state0-><"27X, rmaa2ke_>"27temp] -
<95" ref="drivers/macm"line" name="L1r>101ef="+="drivers/macinti"line" name="L1r>101<&l"+=a href="driversBACKSIDEstate0-><"28009" id="2ref="+code=intake" class"2ref>"28/
pumrm_egrae>101 +code=state0" clase=min" name="L890"> 890        state0-><"281010" id=2id="L980" class="line" n=2id=>"281m);
 = (pumrm_egrae>101 *=="drivers/macint hresiderearam#L965" id="L965" hresiderearam#wer0/a> = (pumrm_ervaehref+code=state0" class="sref">state0-><"28 */* Calculate p 2"co>"28pm);
 = ((pumrm_egrae>101NDEX class="line" name="L928"> 928      028012" id="2code=pump_max" class="sr"2cod>"28t_fan);
 = (pumrm_egrae>101DEX class="line" name="L928"> 928      028, rma 2st_>"284 */
( 928      028a>, 
           su3href +code=state0" clasme_eg_="line" name="L1rm_eg_=>101DEX class="line" name="L928"> 928      028class="li2+code=pump_min" class="si2+co>"28ot; 928      028X, "2rt;> 16);
 988        /* We co028_FAN_ABSE2=do_set_fans" class="sreE2=do>"28e_fan);
 890        101] -        /* We co028X, "28temp] -
 890        101 + 9drivers/macintBACKSIDE/* We co029009" id="2t;"29/
(101]+code=state0" class="sref">state0-><"291010" id=2de=intake_rpm" class="sr=2de=>"291m);
 = ( = (pumrm_ervaehref+code=state0" class="sref">state0-><"29 *"29pm);
 = ( = (

101+code=state0" class="sref">state0-><"29012" id="2#37;d, In, overtemp: "2#37>"29t_fan);
( 928      029, 
 928      029a>, "294"> 9> = st"29class="li2s, shouldn't we ? Bui2s, >"29_ID)
 988        /* We co029X, "29gt;> 16;
 = (101]NDEX class="line" name="L928"> 928      029_FAN_ABSE2 we probably want to notE2 we>"29e_fan);
( 928      029X,          *a2ass>"29s */
 928      0399"> 999  3     3*/ 928      0391"> 999e=intake_rpm" class="sr=3b77e530temp++;
 988        /* We co0392"> 999d="L991" class="line" n 3sref"30pm);
 = ( 928      0393"> 99937;d, In, overtemp: "3f">in303emp++;
->3a href="+code=rpm" class=3sref"304 */
( = ( 928      03L1004" id=3L1004" class="line" name=3L1004304"> 994
 = ( 928      03L6004" id=3L, shouldn't we ? Bui3_ABSE30_ID)
 = ( 928      03L7004" id=3Lerror occurs ? For FCU a3ref">30gt;> 16;
        /* We co03U_FAN_ABSE3T_ID" class="sref">FCU_FA3_ABSE30t;> 16);
           su3hrefDEX class="line" name="L928"> 928      03L9FAN_ABSE3Tss="comment">         *a3ref">309emp++;

 988        /* We co03L1010" id=3L1010" class="line" name=3L1010311m);
 = (pum002p" chref ==ref="drivers/macdimm_output_="dmp"line" name="L1dimm_output_="dmp>101 * 100) / 1400"+code=state0" class="sref">state0-><"31209/40/3d3ref="+code=state" class="3ref">31pm);
 = (pum002p" chref ==a> = ( 993  maL.c#L99> = (pum002p" chrefrpm_fan( = (pumoutput_" chrefNDEX class="line" name="L928"> 928      031012" id="31012" class="line" name="31012"313emp++;
, 314 */
 993  maL.c#L99> = (pum002p" chrefNDEX class="line" name="L928"> 928      0311004" id=3f="+code=intake" class="s3ef">i31  */
(struct pum" chref99> = ( = ( 993  output_"aLhrefNDEX class="line" name="L928"> 928      0316004" id=3e" name="L4N286"> 9b>
 928      03"X, ))<9031gt;> 16;
( = ( 928      031_FAN_ABSE3d="L917" class="line" naE3d="9031e_fan);
 PW     (struct  928      03"X,  928      032009" id="3ss="sref">do_monitor_cpu"3ss=>"32/ 928      0321010" id=3d="L920" class="line" na=3d=">"321fan
 988        /* We co03s *proc 3sta>"32> >/span>
 988        /* We co03s012" id="3state" class="sref">proc"3sta>"32ot;
 988        /* We co032, "32ke_fa/a>
1011static void < hresideref="+code=do_monitor_cpu hresideref="+code="sref">do_monitor_cpu_split(struct cpu_pid_sta3sa>,  928" class="line" name="L928"> 928      032class="li3"32d */
<>1011static void            levice_node="sref">do_monitor_cpu3           u3hrefDEX class="line" name="L928"> 928      03sX, "32gt;> 16;
           u3hef="+co1;ha href="drivers/macintoshconserva
 988        /* We co032_FAN_ABSE3ef="+code=power0" class=E3ef=>"328t;> 16;
 993  " ipm 928      03sX, ++;
/* XXX What do we"3mme>"33/
 988        /* We co0331010" id=3 class="line" name="L930=3 cl>"331fan
 988        /* We co033 * >/span>
 988        /* We co033012" id="3ef="+code=power1" class="3ef=>"33ot;
 988        /* We co03m, 
           of_find_node_byreath.c#L992" id="L992" class="line" /u3@0,f8000000 class="strinNDEX class="line" name="L928"> 928      033a>, /* XXX What do wer3mme>"334"> 994
 928      033class="li3 class="line" name="L935i3 cl>"33_ID)
do_monitor_cpe" n=overtempruct            u3href,+code=printk" class="sref">plevice-rev class="strinrpm_fan( 928      033X, "33t;> 16);
cpu_pid_sta3m_FAN_ABSE3code=overtemp" class="srE3cod>"33t;> 16);
do_monitor_cpe" n=overtempruct cpu_pid_sta3mX, "33temp] -
           u3hef="+co"+code=state0" class="sref">state0-><"34009" id="3href="+code=temp1" class"3hre>"34/
           u3hrefaDEX class="line" name="L928"> 928      0341010" id=3ef="+code=power1" class==3ef=>"341m);
 928      034 *"34#L101="+code=state1" class>"Temperature &#"34012" id="3mp if we are there. At t"3mp >"343_fans;
 928      034, "34ke_fan;
 = ( 928      034a>, >"34  */
 = (pumrmput_target>101+code=state0" clasBACKSIDE 928      034class="li3 class="sref">tmax +i3 cl>"34_ID)
 = (pumoutput_" chref+code=state0" clasBACKSIDE 928      034X, "34t;> 16);
 = (pumrm_ervaehref+code=state0" clasBACKSIDE 928      034_FAN_ABSE3" class="sref">temp_combE3" c>"34t;> 16);
 = ( 928      034X, CPU_MAa3EMP>"34temp] -
 = ( 928      035009" id="3tmax" class="sref">tmax<"3tma>"35/
 = ( 993  output_"aLhref+code=state0" clasBACKSIDE 928      0351010" id=3code=overtemp" class="sr=3cod>"35temp++;
 = (state0-><"3t *"35pm);
 928      03t012" id="3+code=overtemp" class="s"3+co>"35_max) /
 = ( 928      035,  953< 3"li>"35ke_fan;
 = (pumrmput_target>101+code=state0" clasBACKSIDE 928      035a>, "35  */
 = (pumoutput_" chref+code=state0" clasBACKSIDE 928      03tclass="li3erature back down to i3era>"35_ID)
 = (pumrm_ervaehref+code=state0" clasBACKSIDE 928      035X, temp_comba3" c>"35t;> 16);
 = ( 928      03t_FAN_ABSE3de=overtemp" class="srefE3de=>"35t;> 16);
 = ( 928      035X, ] -
 = ( 993  output_"aLhref+code=state0" clasBACKSIDE 928      036009" id="3VERTEMP" class="sref">CP"3VER>"36/
 = ( 928      0361010" id=3state" class="sref">crit=3sta>"361m);
 *ove 3ert>"36> > 0) {
 = ( 928      03V012" id="3st_fan" class="sref">rma"3st_>"36_max) /
 = (pumrmput_target>101+code=state0" clasBACKSIDE 928      03V, rm 3ake>"36ke_fan;
 = (pumoutput_" chref+code=state0" clasBACKSIDE 928      036a>, "36  */
 = (pumrm_ervaehref+code=state0" clasBACKSIDE 928      03Vclass="li3=do_set_fans" class="srei3=do>"36_ID)
 = ( 928      03VX,  = ( 928      03V_FAN_ABSE3id="L967" class="line" nE3id=>"36t;> 16);
 = ( 993  output_"aLhref+code=state0" clasBACKSIDE 928      036X, /* Da3pan>"36temp] -
 = ( 928      037009" id="3power_combi" class="sref"3pow>"37/
 928      0371010" id=3id="L970" class="line" n=3id=>"37ke_rpm;
 */* Ra 3an >"37pm);
 = ( 928      037012" id="3t_fan" class="sref">rmin"3t_f>"37_max) /
 = ( 928      037, rmax 3t_f>"374 */
state0-><"37a>, "374"> 9> = st"37class="li3nt">/* Calculate intake i3nt">"37d */
p hresider013" class="strinNDEX class="line" name="L928"> 928      037X, CPU_INTAKE_SCALa3s=">"37gt;> 16;
 928      037_FAN_ABSE3ke_fan" class="sref">rmiE3ke_>"37t;> 16);
 928      037X, rmaa3ke_>"379emp++;
"38/
 993  " ipm = ( 993  of_lev"L899" class="line" namelev993"> 993  lev"L89, href=a> = ( 993  lev_attr_ hresider013"ref="+c    aDEX class="line" name="L928"> 928      0381010" id=3id="L980" class="line" n=3id=>"381m);
 = ( 993  " ipm = ( 993  of_lev"L899" class="line" namelev993"> 993  lev"L89, href=a> = ( 928      038 */* Calculate p 3"co>"38pm);
 993  " ipm 928      038012" id="3code=pump_max" class="sr"3cod>"38_max) /
 946                pFailhd to creid= attribud= filh(s) class="strinEX class="line" name="L928"> 928      038, rma 3st_>"38ke_fan;
 928      038a>,  9> = st"38class="li3+code=pump_min" class="si3+co>"38d */
state0-><"38X, "3rt;>aEX class="line" name="L928"> 928      038_FAN_ABSE3=do_set_fans" class="sreE3=do>"38temp++;
, "38temp 988        /* We co039009" id="3t;"39/
 988        /* We co0391010" id=3de=intake_rpm" class="sr=3de=>"391fan
 988        /* We co039 *"39pm
1011static void < hresideref="+code=do_monitor_cpu hresideref="+code="sref">do_monitor_cpu_split(struct cpu_pid_sta39012" id="3#37;d, In, overtemp: "3#37>"39t_fan"drivers/macintosh/therm_pm72.c#L953" id="L"39, 
 928      039a>, "39  */
state0-><"39class="li3s, shouldn't we ? Bui3s, >"39ot; 928      039X, "39gt;> 16;
 993  of_lev"L899" class="line" namelev993"> 993  lev"L89, href=a> = ( 993  lev_attr_ hresider013"ref="+c    aDEX class="line" name="L928"> 928      039_FAN_ABSE3 we probably want to notE3 we>"39e_fan);
 993  of_lev"L899" class="line" namelev993"> 993  lev"L89, href=a> = ( 928      039X,          *a3ass>"399emp++;
 999  4     40s < 0) {
 928      0491"> 999e=intake_rpm" class="sr=4b77e540temp 928      0492"> 999d="L991" class="line" n 4sref"40pmEX class="line" name="L928"> 928      0493"> 99937;d, In, overtemp: "4f">in40ot;
 988        /* We co040->4a href="+code=rpm" class=4sref"404 */
 988        /* We co04L1004" id=4L1004" class="line" name=4L1004404"> 9/span>
 988        /* We co04L6004" id=4L, shouldn't we ? Bui4_ABSE40_ID
1011static void <  do_monitor_cpu_split(struct cpu_pid_sta4L7004" id=4Lerror occurs ? For FCU a4ref">40gt;&g"drivers/macintosh/therm_pm72.c#L953" id="L"4U_FAN_ABSE4T_ID" class="sref">FCU_FA4_ABSE40e_fan);
101rpm_fan(pumrm_egrae>101rpm_fan(

101+code=state0" class="sref">state0-><"4L9FAN_ABSE4Tss="comment">         *a4ref">40s */
           su3hrefD>EX class="line" name="L928"> 928      041009" id="41009" class="line" name="41009"41/
           rc>101+code=state0" class="sref">state0-><"4L1010" id=4L1010" class="line" name=4L101041ke_rpm;
41pm);
cpu_pid_sta41012" id="41012" class="line" name="41012"41_max) /
state0-><"4p, 414 */
state0-><"4L1004" id=4f="+code=intake" class="s4ef">i414"> 9> = st"416004" id=4e" name="L4N286"> 9b>

 928      04"X, ))<9041gt;&gEX class="line" name="L928"> 928      04"_FAN_ABSE4d="L917" class="line" naE4d="9041e_fan);
 988        /* We co04"X, 
 RP      928      042009" id="4ss="sref">do_monitor_cpu"4ss=>"420m);
 928      0421010" id=4d="L920" class="line" na=4d=">"42temp++;
 946                pE id=/a>( 928      042209/40/3d4state" class="sref">proc 4sta>"42> > 0) {
 988        /* We co04s012" id="4state" class="sref">proc"4sta>"42_max) /
<}        /* We co042, "42ke_fan;
           rpref="+code=state0" clasrs           rc>101+code=state0" class="sref">state0-><"4sa>, 
((struct            rpref="aDEX class="line" name="L928"> 928      0426004" id=4"42ot; 928      04sX, "42t;> 16);
 988        /* We co042_FAN_ABSE4ef="+code=power0" class=E4ef=>"42e_fan);
101+code=state0" clasle16_to_cpu"line" name="L1le16_to_cpu946" class="line" nar2c_smbus_read_word_data"line" name="L1r2c_smbus_read_word_data946" class="line" na/maciit(struct         /* We co042X, ] -
 928      043009" id="4mment">/* XXX What do we"4mme>"43s < 0) {
t_ass="line" name="L1/a>t_ass=>101+code=state0" clasass="line" name="L1013">101DEX class="line" name="L928"> 928      0431010" id=4 class="line" name="L930=4 cl>"431m);
 = (((((101),        /* We co043 * > 0) {
 928      043012" id="4ef="+code=power1" class="4ef=>"433emp++;
, 
 988        /* We co043a>, /* XXX What do wer4mme>"43  */
101 ==ref="drivers/macth/therm_pm72.c#L899" id="L899" class="line" namecur_samplherm_pm72.c#L899cur_samplh>101 + 1)"a>(101DEX class="line" name="L928"> 928      0436004" id=4 class="line" name="L935i4 cl>"43d */
101] code=state0" clasass="line" name="L1013">101DEX class="line" name="L928"> 928      043X, "43gt;> 16;
101] code=state0" clasass="line" name="L1013">101 -=p_combi" class=DRIVES 928      043_FAN_ABSE4code=overtemp" class="srE4cod>"43t;> 16);
 928      043X, "43temp] -
 988        /* We co044009" id="4href="+code=temp1" class"4hre>"440m);
 928      0441010" id=4ef="+code=power1" class==4ef=>"44temp++;
 928      044 *"44> > 0) {
101 ==ref="drivers/macth/therm_pm72.c#L899" id="L899" class="line" namecur_samplherm_pm72.c#L899cur_samplh>101 + 1)"a>( 928      044012" id="4mp if we are there. At t"4mp >"44_max) /

 928      044, "44ke_fan;
101] code=state0" clasass="line" name="L1013">101DEX class="line" name="L928"> 928      044a>, >"44  */
101] cEX class="line" name="L928"> 928      0446004" id=4 class="sref">tmax +i4 cl>"44_ID)
101 -=p_combi" class=DRIVES 928      044X, "44t;> 16);
 928      044_FAN_ABSE4" class="sref">temp_combE4" c>"44t;> 16);
state0-><"44X, CPU_MAa4EMP>"44temp] -
 928      045009" id="4tmax" class="sref">tmax<"4tma>"45/ 928      0451010" id=4code=overtemp" class="sr=4cod>"45temp++;
 988        /* We co04t *"45pm);
 = (state0-><"4t012" id="4+code=overtemp" class="s"4+co>"45_max) /
 = (pumrm_egrae>101 =="+code=state0" class="sref">state0-><"4t,  953< 4"li>"45ke_fan;
<9orf class="line" nar"line" name="L1r>101+co"+="drivers/macinti"line" name="L1r>101<&l"+=drivers/macintoDRIVESstate0-><"4ta>, "45  */
pumrm_egrae>101 +code=state0" clasth/therm_pm72.c#L899" id="L899" class="line" name" id=_hisrm_yerm_pm72.c#L899" id=_hisrm_y"L89[ef="drivers/maci"line" name="L1r>101]+code=state0" class="sref">state0-><"4t6004" id=4erature back down to i4era>"45d */
pumrm_egrae>101 *==p_combi" class=DRIVESstate0-><"45X, temp_comba4" c>"45gt;> 16;
(pumrm_egrae>101)DEX class="line" name="L928"> 928      04t_FAN_ABSE4de=overtemp" class="srefE4de=>"45e_fan);
 = ( = (pumrm_egrae>101DEX class="line" name="L928"> 928      04tX, 
( 928      046009" id="4VERTEMP" class="sref">CP"4VER>"46s < 0) {
 928      0461010" id=4state" class="sref">crit=4sta>"46ke_rpm;
 *ove 4ert>"46> > 0) {
 988        /* We co04V012" id="4st_fan" class="sref">rma"4st_>"46_max) /
 = (101] -        /* We co04V, rm 4ake>"46ke_fan;
101 + class="line" naDRIVES/* We co04Va>, "46  */
(101]+code=state0" class="sref">state0-><"4Vclass="li4=do_set_fans" class="srei4=do>"46d */
state0-><"4VX,  = ( = (state0-><"4V_FAN_ABSE4id="L967" class="line" nE4id=>"46e_fan);
( 928      046X, /* Da4pan>"46s */
 928      047009" id="4power_combi" class="sref"4pow>"47/ 928      0471010" id=4id="L970" class="line" n=4id=>"47temp++;
 988        /* We co047 */* Ra 4an >"47pm);
 = ( = (101])DEX class="line" name="L928"> 928      047012" id="4t_fan" class="sref">rmin"4t_f>"47_max) /
 = (( 928      047, rmax 4t_f>"474 */
 928      047a>, "474"> 9> = st"47class="li4nt">/* Calculate intake i4nt">"47d */
 988        /* We co047X, CPU_INTAKE_SCALa4s=">"47gt;> 16;
 928      047_FAN_ABSE4ke_fan" class="sref">rmiE4ke_>"47temp++;
, rmaa4ke_>"47s */
( 928      048009" id="4ref="+code=intake" class"4ref>"48/
(struct            rpref="++==ref="drivers/mactde=overtempruct  928      0481010" id=4id="L980" class="line" n=4id=>"48ke_rpm;
 */* Calculate p 4"co>"48pm);
 = (           rpref="+code=state0" clas"aL993"> 993  "aLhrefref="drivers/macth/therm_pm72.c#L899" id="L899" class="line" namerph           rpref="g"drivers/macintoDRIVES 928      048012" id="4code=pump_max" class="sr"4cod>"48_max) /
 = (           rpref="+code=state0" clas" class="sref">pum" chrefref="drivers/macth/therm_pm72.c#L899" id="L899" class="line" namerph           rpref="g"drivers/macintoDRIVES 928      048, rma 4st_>"48ke_faEX class="line" name="L928"> 928      048a>, 
(           rpref="aDEX class="line" name="L928"> 928      048class="li4+code=pump_min" class="si4+co>"48d */
 RP                rpref="aDEX class="line" name="L928"> 928      048X, "4rt;>aEX class="line" name="L928"> 928      048_FAN_ABSE4=do_set_fans" class="sreE4=do>"48temp++;
, "48temp 988        /* We co049009" id="4t;"49/
 988        /* We co0491010" id=4de=intake_rpm" class="sr=4de=>"491fan
 988        /* We co049 *"49pm
1011static void <  do_monitor_cpu_split(struct cpu_pid_sta49012" id="4#37;d, In, overtemp: "4#37>"49t_fan"drivers/macintosh/therm_pm72.c#L953" id="L"49, 
 993  " ipm 928      049a>, "494"> 9> = st"49class="li4s, shouldn't we ? Bui4s, >"49d */
 928      049X, "49gt;> 16;
 928      049_FAN_ABSE4 we probably want to notE4 we>"49e_fan);
           rpref="+co100"+code=state0" class="sref">state0-><"49X,          *a4ass>"499emp++;
 999  5     50s < 0) {
101g"a2" id="L992" class="line"    928      0591"> 999e=intake_rpm" class="sr=5b77e550temp++;
 928      0592"> 999d="L991" class="line" n 5sref"50> > 0) {
 928      0593"> 99937;d, In, overtemp: "5f">in503emp++;
->5a href="+code=rpm" class=5sref"504 */
 993  " ipm = ( 993  of_lev"L899" class="line" namelev993"> 993  lev"L89, href=a> = ( 993  lev_attr_   928      05L1004" id=5L1004" class="line" name=5L100450  */
 993  " ipm = ( 993  of_lev"L899" class="line" namelev993"> 993  lev"L89, href=a> = ( 928      05L6004" id=5L, shouldn't we ? Bui5_ABSE506emp++;
 993  " ipm 928      05L7004" id=5Lerror occurs ? For FCU a5ref">50t;> 16);
 946                pFailhd to creid= attribud= filh(s) class="strinEX class="line" name="L928"> 928      05U_FAN_ABSE5T_ID" class="sref">FCU_FA5_ABSE50t;> 16);
 928      05L9FAN_ABSE5Tss="comment">         *a5ref">509emp++;

state0-><"5L1010" id=5L1010" class="line" name=5L101051temp 928      051209/40/3d5ref="+code=state" class="5ref">51pm 928      0513"> 999
 988        /* We co05p, 514 */
 988        /* We co05L1004" id=5f="+code=intake" class="s5ef">i514"> 9/span>
 988        /* We co0516004" id=5e" name="L4N286"> 9b>

1011static void <  do_monitor_cpu_split(struct cpu_pid_sta5"X, ))<9051gt;&g"drivers/macintosh/therm_pm72.c#L953" id="L"5"_FAN_ABSE5d="L917" class="line" naE5d="9051e_fan);
 928      05"X, ] -
state0-><"52009" id="5ss="sref">do_monitor_cpu"5ss=>"52/ 928      0521010" id=5d="L920" class="line" na=5d=">"521m);
 = ( 993  of_lev"L899" class="line" namelev993"> 993  lev"L89, href=a> = ( 993  lev_attr_   928      052209/40/3d5state" class="sref">proc 5sta>"52pm);
 = ( 993  of_lev"L899" class="line" namelev993"> 993  lev"L89, href=a> = ( 928      05s012" id="5state" class="sref">proc"5sta>"523emp++;
, "524 */
 928      05sa>,  928      0526004" id=5"52ot; 928      05sX, "52t;>/span>
 988        /* We co052_FAN_ABSE5ef="+code=power0" class=E5ef=>"52e_fan/span>
 988        /* We co052X,  988        /* We co053009" id="5mment">/* XXX What do we"5mme>"53s </a>
1011static void < immref="+code=do_monitor_cpu immref="+code="sref">do_monitor_cpu_split(struct cpu_pid_sta531010" id=5 class="line" name="L930=5 cl>"531m *);
 = (101rpm_fan(pumrm_egrae>101rpm_fan(

101rpm_fan(pum002p" c    DEX class="line" name="L928"> 928      053012" id="5ef="+code=power1" class="5ef=>"53_max) /
 = (           su3hrefDEX class="line" name="L928"> 928      053, 
 928      053a>, /* XXX What do wer5mme>"534"> 9> = st"536004" id=5 class="line" name="L935i5 cl>"536emp++;
cpu_pid_sta53X, "53t;> 16);
state0-><"53_FAN_ABSE5code=overtemp" class="srE5cod>"53e_fan);
 928      053X, "539emp++;
"54s < 0) {
 928      0541010" id=5ef="+code=power1" class==5ef=>"54ke_rpm;
 *"54pm);
 = (((struct  928      054012" id="5mp if we are there. At t"5mp >"543emp++;
, "544 */
101+code=state0" clasread_lm87_reg           read_lm87_reg946" class="line" na/maciit(struct  928      054a>, >"54  */
101+&l"+="aEX class="line" name="L928"> 928      0546004" id=5 class="sref">tmax +i5 cl>"54_ID)
state0-><"54X, "54gt;> 16;
101+&l"+&l"+= 16DEX class="line" name="L928"> 928      054_FAN_ABSE5" class="sref">temp_combE5" c>"54e_fan);
t_ass="line" name="L1/a>t_ass=>101+code=state0" clasass="line" name="L1013">101DEX class="line" name="L928"> 928      054X, CPU_MAa5EMP>"54s */
((((101),        /* We co055009" id="5tmax" class="sref">tmax<"5tma>"550ID)
101)aDEX class="line" name="L928"> 928      0551010" id=5code=overtemp" class="sr=5cod>"55ke_rpm;
 *"55> > 0) {
 988        /* We co05t012" id="5+code=overtemp" class="s"5+co>"55_max) /
 = (101 ==ref="drivers/macth/therm_pm72.c#L899" id="L899" class="line" namecur_samplherm_pm72.c#L899cur_samplh>101 + 1)"a>( 928      05t,  953< 5"li>"554 */
101] code=state0" clasass="line" name="L1013">101DEX class="line" name="L928"> 928      05ta>, "55  */
101] code=state0" clasass="line" name="L1013">101 -=p_combi" class=DIMM101DEX class="line" name="L928"> 928      05t6004" id=5erature back down to i5era>"55ot; 928      055X, temp_comba5" c>"55t;> 16);
 988        /* We co05t_FAN_ABSE5de=overtemp" class="srefE5de=>"55e_fan);
 928      05tX, ] -
 928      056009" id="5VERTEMP" class="sref">CP"5VER>"560ID)
)
101 ==ref="drivers/macth/therm_pm72.c#L899" id="L899" class="line" namecur_samplherm_pm72.c#L899cur_samplh>101 + 1)"a>( 928      0561010" id=5state" class="sref">crit=5sta>"56temp++;
101DEX class="line" name="L928"> 928      05V *ove 5ert>"56> > 0) {
101] code=state0" clasass="line" name="L1013">101DEX class="line" name="L928"> 928      05V012" id="5st_fan" class="sref">rma"5st_>"56_max) /
101] cEX class="line" name="L928"> 928      05V, rm 5ake>"56ke_fan;
101 -=p_combi" class=DIMM101DEX class="line" name="L928"> 928      05Va>, "56  */
 928      05Vclass="li5=do_set_fans" class="srei5=do>"56_ID)
state0-><"5VX,  928      05V_FAN_ABSE5id="L967" class="line" nE5id=>"56temp++;
, /* Da5pan>"56s */
 988        /* We co057009" id="5power_combi" class="sref"5pow>"57s < 0) {
state0-><"571010" id=5id="L970" class="line" n=5id=>"571m);
 = (pumrm_egrae>101 =="+code=state0" class="sref">state0-><"57 */* Ra 5an >"57pm);
state0-><"57012" id="5t_fan" class="sref">rmin"5t_f>"57_max) /
pumrm_egrae>101 +code=state0" clasth/therm_pm72.c#L899" id="L899" class="line" name" id=_hisrm_yerm_pm72.c#L899" id=_hisrm_y"L89[ef="drivers/maci"line" name="L1r>101]+code=state0" class="sref">state0-><"57, rmax 5t_f>"574 */
pumrm_egrae>101 *==p_combi" class=DIMM 928      057a>, "57  */
(pumrm_egrae>101)DEX class="line" name="L928"> 928      057class="li5nt">/* Calculate intake i5nt">"57d */
 = ( = (pumrm_egrae>101DEX class="line" name="L928"> 928      057X, CPU_INTAKE_SCALa5s=">"57gt;> 16;
( 928      057_FAN_ABSE5ke_fan" class="sref">rmiE5ke_>"57e_fan);
 928      057X, rmaa5ke_>"579emp++;
"58/
 988        /* We co0581010" id=5id="L980" class="line" n=5id=>"581m);
 = (101] -        /* We co058 */* Calculate p 5"co>"58> > 0) {
101 + class="line" naDIMM/* We co058012" id="5code=pump_max" class="sr"5cod>"58_max) /

<<<<(state0-><"58, rma 5st_>"584 */
 928      058a>, 
 = ( = (state0-><"58class="li5+code=pump_min" class="si5+co>"58d */
( 928      058X, "58gt;> 16;
 928      058_FAN_ABSE5=do_set_fans" class="sreE5=do>"58temp++;
, "58s */
 988        /* We co059009" id="5t;"59s < 0) {
 = (101])DEX class="line" name="L928"> 928     l"5t1010" id=5de=intake_rpm" class="sr=5de=>"591m);
 = (( 928      059 *"59pm);
 = ( 928      059012" id="5#37;d, In, overtemp: "5#37>"593emp++;
, 
 988        /* We co059a>, "59  */
           su3href " cl" cl= 36DEX class="line" name="L928"> 928      059class="li5s, shouldn't we ? Bui5s, >"59ot; 928      059X, "59gt;> 16;
( 928      059_FAN_ABSE5 we probably want to notE5 we>"59e_fan);
 928      059X,          *a5ass>"59s */
 993  "aLhrefref="drivers/macth/therm_pm72.c#L899" id="L899" class="line" nameoutpu011" id="L1011" outpu0ef="g"drivers/macintoDIMM 928      0699"> 999  6     60s < 0) {
pum" chrefref="drivers/macth/therm_pm72.c#L899" id="L899" class="line" nameoutpu011" id="L1011" outpu0ef="g"drivers/macintoDIMM 928      0691"> 999e=intake_rpm" class="sr=6b77e5601m);
 = ( 928      0692"> 999d="L991" class="line" n 6sref"60pm 928      0693"> 99937;d, In, overtemp: "6f">in60_max) /
 = (( 928      060->6a href="+code=rpm" class=6sref"60ke_faEX class="line" name="L928"> 928      06L1004" id=6L1004" class="line" name=6L100460  */
 988        /* We co06L6004" id=6L, shouldn't we ? Bui6_ABSE60d */
pum002p" c     ==ref="drivers/maclimmroutpu0_ntas="line" name="L1limmroutpu0_ntas=>101 *o100) / 1400"+code=state0" class="sref">state0-><"6L7004" id=6Lerror occurs ? For FCU a6ref">60gt;> 16;
pum002p" c     ==ass="line" name"aL993"> 993  "aLhrefref="drivers/mac002p" class="sref">pum002p" c    g"drivers/macintobackside_param#L965" id="L965"backside_param#    .p_combi" class=outpu0p" class="sref">pumoutpu0p" cef="aDEX class="line" name="L928"> 928      0608004" id=6Lwe probably want to notE6_ABSE60e_fan);
           pw3>101<&l"+=drivers/macinto002p" class="sref">pum002p" c    a928" class="line" name="L928"> 928      06L9FAN_ABSE6Tss="comment">         *a6ref">60temp] -
(struct            pw3>101<==ass="line" name002p" class="sref">pum002p" c    DEX class="line" name="L928"> 928      061009" id="61009" class="line" name="61009"610ID)
)
a href="drivers/macintosh/therm_pm72.c#L992" id="L992" class="line"  e=tem applyass ntas= to backside frefnow(pum002p" c    aDEX class="line" name="L928"> 928      0611"> 999++;
 PW     pum002p" c    aDEX class="line" name="L928"> 928      0612"> 99961pm);
 928      0613"> 999 928      061->6ref="+code=power" class="6ref">61ke_faEX class="line" name="L928"> 928      06L1004" id=6f="+code=intake" class="s6ef">i614"> 9/span>
 988        /* We co0616004" id=6e" name="L4N286"> 9b>

 988        /* We co06"X, ))<9061t;>/span>
 988        /* We co06"_FAN_ABSE6d="L917" class="line" naE6d="9061e_fan/a>
1011static void < immref="+code=do_monitor_cpu immref="+code="sref">do_monitor_cpu_split(struct cpu_pid_sta6"X,  928      062009" id="6ss="sref">do_monitor_cpu"6ss=>"62s < 0) {
 928      0621010" id=6d="L920" class="line" na=6d=">"621m);
 = ( 928      062209/40/3d6state" class="sref">proc 6sta>"62pm);
 = (state0-><"6s012" id="6state" class="sref">proc"6sta>"623emp++;
, "624 */
 928      06sa>, 
 928      0626004" id=6"62_ID)
 928      06sX, "62t;>EX class="line" name="L928"> 928      06s_FAN_ABSE6ef="+code=power0" class=E6ef=>"62e_fan);
 993  of_lev"L899" class="line" namelev993"> 993  lev"L89, href=a> = ( 993  lev_attr_ imm#"013"ref="+c    aaEX class="line" name="L928"> 928      062X, ] -
 946                pFailhd to creid= attribud= filh class="strinEX class="line" name="L928"> 928      063009" id="6mment">/* XXX What do we"6mme>"630ID)
)
 928      0631010" id=6 class="line" name="L930=6 cl>"63ke_rpm;
 *);
state0-><"63012" id="6ef="+code=power1" class="6ef=>"63ot; 928      063,  928      063a>, /* XXX What do wer6mme>"634"> 9/span>
 988        /* We co0636004" id=6 class="line" name="L935i6 cl>"63_ID
 988        /* We co063X, "63t;>/span>
 988        /* We co063_FAN_ABSE6code=overtemp" class="srE6cod>"63e_fan/a>
1011static void < immref="+code=do_monitor_cpu immref="+code="sref">do_monitor_cpu_split(struct cpu_pid_sta63X, "63temp<28" class="line" name="L928"> 928      064009" id="6href="+code=temp1" class"6hre>"64s < 0) {
 928      0641010" id=6ef="+code=power1" class==6ef=>"64temp++;
state0-><"64 *"64pm 928      064012" id="6mp if we are there. At t"6mp >"64_max) /
 = ( 993  of_lev"L899" class="line" namelev993"> 993  lev"L89, href=a> = ( 993  lev_attr_ imm#"013"ref="+c    a+code=state0" class="sref">state0-><"64, "64ke_faEX class="line" name="L928"> 928      064a>, >"64  */
 928      0646004" id=6 class="sref">tmax +i6 cl>"64_ID 928      064X, "64t;>EX class="line" name="L928"> 928      064_FAN_ABSE6" class="sref">temp_combE6" c>"64e_fan/span>
 988        /* We co064X, CPU_MAa6EMP>"64temp 988        /* We co065009" id="6tmax" class="sref">tmax<"6tma>"650ID
 988        /* We co0651010" id=6code=overtemp" class="sr=6cod>"65ke_rp/a>
 993  lo_"therm__slotshrefr>1011static void do_monitor_cpu_split(struct cpu_pid_sta6t *"65> >28" class="line" name="L928"> 928      06t012" id="6+code=overtemp" class="s"6+co>"65_max) /
 = (101rpm_fan(pumrm_egrae>101rpm_fan(

101DEX class="line" name="L928"> 928      06t,  953< 6"li>"654 */
           su3hrefDEX class="line" name="L928"> 928      06ta>, "65  */
 928      06t6004" id=6erature back down to i6era>"65ot; 928      065X, temp_comba6" c>"65t;> 16);
cpu_pid_sta6t_FAN_ABSE6de=overtemp" class="srefE6de=>"65t;> 16);
state0-><"6tX, 
 928      066009" id="6VERTEMP" class="sref">CP"6VER>"66/ 928      0661010" id=6state" class="sref">crit=6sta>"661m);
 = ( 928      06V *ove 6ert>"66pm 928      06V012" id="6st_fan" class="sref">rma"6st_>"66_max) /
 988        /* We co06V, rm 6ake>"664 */
 PW     state0-><"6Va>, "66  */
 928      06Vclass="li6=do_set_fans" class="srei6=do>"66_ID)
 946                pE id= a>(state0-><"6VX,  988        /* We co06V_FAN_ABSE6id="L967" class="line" nE6id=>"66t;> 16);
<} else        /* We co06VX, /* Da6pan>"66temp] -
           pw3>101<==ass="line" namerc"line" name="L1rchrefDEX class="line" name="L928"> 928      067009" id="6power_combi" class="sref"6pow>"67s < 0) {
((struct            pw3>101a+code=state0" class="sref">state0-><"671010" id=6id="L970" class="line" n=6id=>"67ke_rpm;
 */* Ra 6an >"67> > 0) {
 988        /* We co067012" id="6t_fan" class="sref">rmin"6t_f>"67_max) /
 = (101+code=state0" clasle16_to_cpu"line" name="L1le16_to_cpu946" class="line" nar2c_smbus_read_word_data"line" name="L1r2c_smbus_read_word_data946" class="line" na/maciit(struct         /* We co067, rmax 6t_f>"67ke_fan;
state0-><"67a>, "67  */
t_ass="line" name="L1/a>t_ass=>101+code=state0" clasass="line" name="L1013">101DEX class="line" name="L928"> 928      067class="li6nt">/* Calculate intake i6nt">"67d */
((((101),        /*      067X, CPU_INTAKE_SCALa6s=">"67t;> 16);
 928      067_FAN_ABSE6ke_fan" class="sref">rmiE6ke_>"67temp++;
, rmaa6ke_>"67s */
 988        /* We co068009" id="6ref="+code=intake" class"6ref>"68s < 0) {
101 ==ref="drivers/macth/therm_pm72.c#L899" id="L899" class="line" namecur_samplherm_pm72.c#L899cur_samplh>101 + 1)"a>( 928      0681010" id=6id="L980" class="line" n=6id=>"681m);
 = (101] code=state0" clasass="line" name="L1013">101DEX class="line" name="L928"> 928      068 */* Calculate p 6"co>"68pm);
 = (101] code=state0" clasass="line" name="L1013">101 -=p_combi" class=SLOTS 928      068012" id="6code=pump_max" class="sr"6cod>"683emp++;
, rma 6st_>"684 */
 988        /* We co068a>, 
 928      068class="li6+code=pump_min" class="si6+co>"68_ID)
 928      068X, "68t;> 16);
(struct 101 ==ref="drivers/macth/therm_pm72.c#L899" id="L899" class="line" namecur_samplherm_pm72.c#L899cur_samplh>101 + 1)"a>( 928      068_FAN_ABSE6=do_set_fans" class="sreE6=do>"68t;> 16);
101DEX class="line" name="L928"> 928      068X, "68temp] -
101] code=state0" clasass="line" name="L1013">101DEX class="line" name="L928"> 928      069009" id="6t;"690ID)
)
 = (101] cEX class="line" name="L928"> 928      0691010" id=6de=intake_rpm" class="sr=6de=>"69temp++;
101 -=p_combi" class=SLOTS 928      069 *"69> > 0) {
 928      069012" id="6#37;d, In, overtemp: "6#37>"69_max) /
state0-><"69, 
 928      069a>, "69  */ 928      069class="li6s, shouldn't we ? Bui6s, >"69d */
 988        /* We co069X, "69gt;> 16;
state0-><"69_FAN_ABSE6 we probably want to notE6 we>"69e_fan);
pumrm_egrae>101 =="+code=state0" class="sref">state0-><"69X,          *a6ass>"69s */
<9orf class="line" nar"line" name="L1r>101+co"+="drivers/macinti"line" name="L1r>101<&l"+=drivers/macintoSLOTSstate0-><"799"> 999  7     700ID)
)
a href="driversef_egraelass="sref">pumrm_egrae>101 +code=state0" clasth/therm_pm72.c#L899" id="L899" class="line" name" id=_hisrm_yerm_pm72.c#L899" id=_hisrm_y"L89[ef="drivers/maci"line" name="L1r>101]+code=state0" class="sref">state0-><"791"> 999e=intake_rpm" class="sr=7b77e5701m);
 = (pumrm_egrae>101 *==p_combi" class=SLOTS 928      0792"> 999d="L991" class="line" n 7sref"70pm);
 = ((pumrm_egrae>101)DEX class="line" name="L928"> 928      0793"> 99937;d, In, overtemp: "7f">in70_max) /
 = ( = ( = (pumrm_egrae>101DEX class="line" name="L928"> 928      070->7a href="+code=rpm" class=7sref"704 */
( 928      07L1004" id=7L1004" class="line" name=7L100470  */
           su3href +code=state0" clasre_eg_="line" name="L1rm_eg_=>101DEX class="line" name="L928"> 928      07L6004" id=7L, shouldn't we ? Bui7_ABSE70ot; 928      07L7004" id=7Lerror occurs ? For FCU a7ref">70t;> 16);
 988        /* We co0708004" id=7Lwe probably want to notE7_ABSE70e_fan);
101] -        /* We co0709004" id=7Lss="comment">         *a7ref">70temp] -
101 + class="line" naSLOTS/* We co071009" id="71009" class="line" name="71009"710ID)
)




















a>(state0-><"711"> 999);
 = ( 928      0712"> 99971pm);
 = ( = ( = ( 928      0713"> 999) /
 = (( 928      071->7ref="+code=power" class="7ref">714 */
 928      07L1004" id=7f="+code=intake" class="s7ef">i71  */ 928      0716004" id=7e" name="L4N286"> 9b>

 988        /* We co07"X, ))<9071gt;> 16;
 = (101])DEX class="line" name="L928"> 928     la7>8004" id=7d="L917" class="line" naE7d="9071e_fan);
( 928      07"X, 
 928      072009" id="7ss="sref">do_monitor_cpu"7ss=>"72/ 928      0721010" id=7d="L920" class="line" na=7d=">"721m);
 988        /* We co072209/40/3d7state" class="sref">proc 7sta>"72pm);
 = ( 928      07s012" id="7state" class="sref">proc"7sta>"723emp++;
, "724 */
( 928      07sa>, 
           pw3>101<==ref="drivers/mactde=overtempruct  928      0726004" id=7"72ot; 928      07sX, "72gt;> 16;
           pw3>101<==ass="line" name"aL993"> 993  "aLhrefref="drivers/macth/therm_pm72.c#L899" id="L899" class="line" namepw3           pw3>101g"drivers/macintoSLOTS 928      07s8004" id=7ef="+code=power0" class=E7ef=>"72e_fan);
           pw3>101<==ass="line" name" class="sref">pum" chrefref="drivers/macth/therm_pm72.c#L899" id="L899" class="line" namepw3           pw3>101g"drivers/macintoSLOTS 928      07sX, ++;
/* XXX What do we"7mme>"73s < 0) {
(           pw3>101a+code=state0" class="sref">state0-><"731010" id=7 class="line" name="L930=7 cl>"731m);
 = ( PW     (struct            pw3>101a+code=state0" class="sref">state0-><"73 * 928      073012" id="7ef="+code=power1" class="7ef=>"733emp++;
, 
 988        /* We co073a>, /* XXX What do wer7mme>"734"> 9/span>
 988        /* We co0736004" id=7 class="line" name="L935i7 cl>"73_ID
 988        /* We co073X, "73t;>/a>
do_monitor_cpu_split(struct cpu_pid_sta73_FAN_ABSE7code=overtemp" class="srE7cod>"73e_fan28" class="line" name="L928"> 928      073X, "73s */
 928      074009" id="7href="+code=temp1" class"7hre>"74/ 928      0741010" id=7ef="+code=power1" class==7ef=>"741m);
 = ( 928      074 *"74pm);
 = ( 928      074012" id="7mp if we are there. At t"7mp >"74_max) /
 = (           pw3>101<==5"+code=state0" class="sref">state0-><"74, "74ke_faEX class="line" name="L928"> 928      074a>, >"74  */
 928      0746004" id=7 class="sref">tmax +i7 cl>"74d */
 928      074X, "74t;> 16);
 928      074_FAN_ABSE7" class="sref">temp_combE7" c>"74temp++;
, CPU_MAa7EMP>"74s */
 = ( 993  of_lev"L899" class="line" namelev993"> 993  lev"L89, href=a> = ( 993  lev_attr_slots"013"ref="+c>101a+code=state0" class="sref">state0-><"75009" id="7tmax" class="sref">tmax<"7tma>"75s < 0) {
 = ( 993  of_lev"L899" class="line" namelev993"> 993  lev"L89, href=a> = (           lev_attr_slots"002ppw3>101a+code=state0" class="sref">state0-><"751010" id=7code=overtemp" class="sr=7cod>"751 */
 928      07t *"75> > 0) {
 946                pFailhd to creid= attribud= filh(s) class="strinEX class="line" name="L928"> 928      07t012" id="7+code=overtemp" class="s"7+co>"75_max) /
 928      07t,  953< 7"li>"75ke_faEX class="line" name="L928"> 928      07ta>, "75  */
state0-><"7t6004" id=7erature back down to i7era>"75_ID 928      075X, temp_comba7" c>"75t;>EX class="line" name="L928"> 928      07t_FAN_ABSE7de=overtemp" class="srefE7de=>"75e_fan/span>
 988        /* We co07tX,  988        /* We co076009" id="7VERTEMP" class="sref">CP"7VER>"760ID
 988        /* We co0761010" id=7state" class="sref">crit=7sta>"76ke_rp/a>
1011static void do_monitor_cpu_split(struct cpu_pid_sta7V *ove 7ert>"76> >28" class="line" name="L928"> 928      07V012" id="7st_fan" class="sref">rma"7st_>"76_max) /
 928      07V, rm 7ake>"76ke_fan;
state0-><"7Va>, "76  */ 928      07Vclass="li7=do_set_fans" class="srei7=do>"76d */
 993  of_lev"L899" class="line" namelev993"> 993  lev"L89, href=a> = ( 993  lev_attr_slots"013"ref="+c>101a+code=state0" class="sref">state0-><"7VX,  993  of_lev"L899" class="line" namelev993"> 993  lev"L89, href=a> = (           lev_attr_slots"002ppw3>101a+code=state0" class="sref">state0-><"7V_FAN_ABSE7id="L967" class="line" nE7id=>"76temp++;
, /* Da7pan>"76s */
 928      077009" id="7power_combi" class="sref"7pow>"77s <aEX class="line" name="L928"> 928      0771010" id=7id="L970" class="line" n=7id=>"77ke_rpm;
 */* Ra 7an >"77pm 928      077012" id="7t_fan" class="sref">rmin"7t_f>"77_max
 928      077, rmax 7t_f>"77ke_fa28" class="line" name="L928"> 928      077a>, "77  */
do_monitor_cpargv993"> 993  argv */<[] co{="drivers/macintcri
 928      077class="li7nt">/* Calculate intake i7nt">"77d */

do_monitor_cpenv="line" name="L1env= */<[] co{="2" id="L992" class="line" HOME=/ class="stringEX class="line" name="L928"> 928      077X, CPU_INTAKE_SCALa7s=">"77t;> 16);
 928      077_FAN_ABSE7ke_fan" class="sref">rmiE7ke_>"77t;> 16);
 928      077X, rmaa7ke_>"77temp] -
 928      078009" id="7ref="+code=intake" class"7ref>"78/ 928      0781010" id=7id="L980" class="line" n=7id=>"781m);
 928      078 */* Calculate p 7"co>"78> > 0) {
);

 993  argv */state0-><"78012" id="7code=pump_max" class="sr"7cod>"78ot; 928      078, rma 7st_>"78ke_faEX class="line" name="L928"> 928      078a>,  928      078class="li7+code=pump_min" class="si7+co>"78_ID
 988        /* We co078X, "78t;>/span>
 988        /* We co078_FAN_ABSE7=do_set_fans" class="sreE7=do>"78e_fan/span>
 988        /* We co078X, "78temp
do_monitor_cpL993"> 993  x    aEX class="line" name="L928"> 928      079009" id="7t;"790ID 928      0791010" id=7de=intake_rpm" class="sr=7de=>"791m);
 = (raspan class="strina+code=state0" class="sref">state0-><"79 *"79pm 928      079012" id="7#37;d, In, overtemp: "7#37>"79_max) /
 = ( = (101a+code=state0" class="sref">state0-><"79,  928      079a>, "79  */
 928      079class="li7s, shouldn't we ? Bui7s, >"79_ID)
pkfand: failhd to " irt FCUan class="strina+code=state0" class="sref">state0-><"79X, "79t;> 16);
 = (101a+code=state0" class="sref">state0-><"79_FAN_ABSE7 we probably want to notE7 we>"79t;> 16);
 928      079X,          *a7ass>"79s */
 928      0899"> 999  8     80/ 928      0891"> 999e=intake_rpm" class="sr=8b77e5801m);
 988        /* We co0892"> 999d="L991" class="line" n 8sref"80pm);
 = ( 928      0893"> 99937;d, In, overtemp: "8f">in80_max) /
 PW      DEFAULT PW  href="+code=seSLOTS DEFAULT PW >101a+code=state0" class="sref">state0-><"80->8a href="+code=rpm" class=8sref"80ke_faEX class="line" name="L928"> 928      08L1004" id=8L1004" class="line" name=8L100480  */
 988        /* We co08L6004" id=8L, shouldn't we ? Bui8_ABSE80d */
 = ( 928     la8L7004" id=8Lerror occurs ? For FCU a8ref">80t;> 16);
 = ( 928      0808004" id=8Lwe probably want to notE8_ABSE80t;> 16);
 = ( 928     la8L9004" id=8Lss="comment">         *a8ref">809emp++;
 928      0811"> 999;
 99981pm);
 = ( = (101a+code=state0" class="sref">state0-><"813"> 999++;
->8ref="+code=power" class="8ref">814 */
101a928" class="line" name="L928"> 928      08L1004" id=8f="+code=intake" class="s8ef">i815;> 16);
 928      0816004" id=8e" name="L4N286"> 9b>
 928      08"X, ))<9081t;> 16);
 928      0818004" id=8d="L917" class="line" naE8d="9081temp++;
, ] -
 = (101a+code=state0" class="sref">state0-><"82009" id="8ss="sref">do_monitor_cpu"8ss=>"82/ 928      0821010" id=8d="L920" class="line" na=8d=">"82temp++;
 988        /* We co082209/40/3d8state" class="sref">proc 8sta>"82> > 0) {
 928      08s012" id="8state" class="sref">proc"8sta>"82_max) /
 928      082, "82ke_fan;
 928      0821004" id=8=power_combi" class="srer8=po>"825;> 16);
 928      0826004" id=8"82ot; 928      08sX, "82t;> 16);
 988        /* We co0828004" id=8ef="+code=power0" class=E8ef=>"82t;> 16);
 928      08sX, ] -
 = (state0-><"83009" id="8mment">/* XXX What do we"8mme>"83/ 928      0831010" id=8 class="line" name="L930=8 cl>"83temp++;
 988        /* We co083 * > 0) {
 928      083012" id="8ef="+code=power1" class="8ef=>"83_max) /
 928      083, ;
 928      083a>, /* XXX What do wer8mme>"835;> 16);
 = ( 928     la836004" id=8 class="line" name="L935i8 cl>"83_ID)
 928      083X, "83t;> 16);
 = ( 928     la83_FAN_ABSE8code=overtemp" class="srE8cod>"83t;> 16);
 988        /* We co083X, "83temp] -
 928      084009" id="8href="+code=temp1" class"8hre>"840ID)
)
 = ( = ( 928     la841010" id=8ef="+code=power1" class==8ef=>"84temp++;
 928      084 *"84> > 0) {
);
 = ( = ( 928     la84012" id="8mp if we are there. At t"8mp >"84_max) /
 988        /* We co084, "84ke_fan;
 928      084a>, >"845;> 16);
 988        /* We co0846004" id=8 class="sref">tmax +i8 cl>"84_ID)
 = (state0-><"84X, "84t;> 16);
 928      084_FAN_ABSE8" class="sref">temp_combE8" c>"84t;> 16);
 = (state0-><"84X, CPU_MAa8EMP>"84temp] -
state0-><"85009" id="8tmax" class="sref">tmax<"8tma>"850ID)
)
 = ( = (state0-><"851010" id=8code=overtemp" class="sr=8cod>"85temp++;
 = (101a+code=state0" class="sref">state0-><"8t *"85pm 928      08t012" id="8+code=overtemp" class="s"8+co>"85_max) /
 928      08t,  953< 8"li>"85ke_fan;
 946                pT13"ref="+cstate0-><"8ta>, "855;> 16);
 946                pAtass=tss= to "hut down...an class="strina+code=state0" class="sref">state0-><"8t6004" id=8erature back down to i8era>"85_ID)
 928      08tX, temp_comba8" c>"85t;> 16);
 946                pCan't call/a>( 928      08t_FAN_ABSE8de=overtemp" class="srefE8de=>"85t;> 16);
state0-><"8tX, ] -
 928      086009" id="8VERTEMP" class="sref">CP"8VER>"860ID)
)
 928      0861010" id=8state" class="sref">crit=8sta>"86temp++;
 928      086 *ove 8ert>"86> > 0) {
 928      08V012" id="8st_fan" class="sref">rma"8st_>"86_max) /
 928      086, rm 8ake>"86ke_fan;
101a928" class="line" name="L928"> 928      08Va>, "865;> 16);
 946                pShutdown timed out, power offfnow !an class="strin)DEX class="line" name="L928"> 928      0866004" id=8=do_set_fans" class="srei8=do>"86_ID)
 928      086X,  928      086_FAN_ABSE8id="L967" class="line" nE8id=>"86temp++;
, /* Da8pan>"86temp] -
 988        /* We co087009" id="8power_combi" class="sref"8pow>"870ID)
)
drivers/macintoelapseh/therm_pm72.c#Lelapseh    +code=state0" clasjiffie#L965" id="L965"jiffie#     -"drivers/macinto" irterm_pm72.c#L899" irt    DEX class="line" name="L928"> 928      0871010" id=8id="L970" class="line" n=8id=>"87temp++;
 928      087 */* Ra 8an >"87> > 0) {
);
 928      087012" id="8t_fan" class="sref">rmin"8t_f>"87_max) /
 928      087, rmax 8t_f>"87ke_faEX class="line" name="L928"> 928      087a>, "87  */ 928      0876004" id=8nt">/* Calculate intake i8nt">"87d */
state0-><"87X, CPU_INTAKE_SCALa8s=">"87t;>EX class="line" name="L928"> 928      087_FAN_ABSE8ke_fan" class="sref">rmiE8ke_>"87e_fan);
state0-><"87X, rmaa8ke_>"87s */
state0-><"88009" id="8ref="+code=intake" class"8ref>"88s <aEX class="line" name="L928"> 928      0881010" id=8id="L980" class="line" n=8id=>"88ke_rpm;
 */* Calculate p 8"co>"88> >/span>
 988        /* We co088012" id="8code=pump_max" class="sr"8cod>"88ot; 988        /* We co088, rma 8st_>"88ke_fa/span>
 988        /* We co088a>, 
 928      088class="li8+code=pump_min" class="si8+co>"88_ID 928      088X, "88gt;> 16;
 928     la88_FAN_ABSE8=do_set_fans" class="sreE8=do>"88e_fan);
 928     la88X, "88s */
101a+code=state0" class="sref">state0-><"89009" id="8t;"89s < 0) {
 = (state0-><"891010" id=8de=intake_rpm" class="sr=8de=>"891m);
 = (state0-><"89 *"89pm);
 = (101a+code=state0" class="sref">state0-><"89012" id="8#37;d, In, overtemp: "8#37>"89ot; 928      089,  928      089a>, "894"> 9/span>
 988        /* We co089class="li8s, shouldn't we ? Bui8s, >"89_ID
 988        /* We co089X, "89t;>/span>
 988        /* We co089_FAN_ABSE8 we probably want to notE8 we>"89e_fan/span>
 988        /* We co089X,          *a8ass>"89temp
 928      0999"> 999  9     900ID 928      0991"> 999e=intake_rpm" class="sr=9b77e5901m);
1011static void f">do_monitor_cpn="line" name="L1np    DEX class="line" name="L928"> 928      0992"> 999d="L991" class="line" n 9sref"90pm 928      0993"> 99937;d, In, overtemp: "9f">in90_max) /
/* We co090->9a href="+code=rpm" class=9sref"90ke_fa/span>
/* We co0905/a>->9ad="L994" class="line" nr9L1004904"> 9/span>
 988        /* We co09L6004" id=9L, shouldn't we ? Bui9_ABSE90d */
state0-><"9L7004" id=9Lerror occurs ? For FCU a9ref">90t;> 16);
<9orf class="line" nan="line" name="L1np    +code=state0" clasNULLal" class="srefNULL    D 928      0998004" id=9Lwe probably want to notE9_ABSE90t;> 16);
 928      09L9004" id=9Lss="comment">         *a9ref">909emp++;
(state0-><"911"> 999;
 99991pm);
 988        /* We co0913"> 999 988        /* We co091->9ref="+code=power" class="9ref">91ke_fa/span>
 988        /* We co0915/a>->9f="+code=intake" class="s9ef">i914"> 9/span>
 988        /* We co0916004" id=9e" name="L4N286"> 9b>

 928      09"X, ))<9091t;> 16);
state0-><"918004" id=9d="L917" class="line" naE9d="9091t;> 16);
state0-><"919004" id=9id="L918" class="line" na9id=9091temp] -
state0-><"92009" id="9ss="sref">do_monitor_cpu"9ss=>"920ID)
 ABSENT_ID=do_monitor_cpuFCU_/a> ABSENT_IDe_rpm;
"92temp++;
 ABSENT_ID=do_monitor_cpuFCU_/a> ABSENT_IDe_rpa928" class="line" name="L928"> 928      092209/40/3d9state" class="sref">proc 9sta>"92> > 0) {
pLiquid coolass pumps detected,fusass new algorithmf!an class="strin)DEX class="line" name="L928"> 928      09s012" id="9state" class="sref">proc"9sta>"92_max) /
 928      09s->9ref="+code=power1" class 9ref>"92ke_fan;
<}"elsecode=state0" class="sref">state0-><"921004" id=9=power_combi" class="srer9=po>"925;> 16);
 928      09s6004" id=9"92ot; 928      09sX, "92t;> 16);
 988        /* We co0928004" id=9ef="+code=power0" class=E9ef=>"92e_fan/span>
 988        /* We co09sX,  988        /* We co093009" id="9mment">/* XXX What do we"9mme>"930ID)
 = (state0-><"931010" id=9 class="line" name="L930=9 cl>"93temp++;
 928      093 *);
 = ( 928      093012" id="9ef="+code=power1" class="9ef=>"93_max) /
 993  9etch_cpurpumps_minmaL.c#L9)DEX class="line" name="L928"> 928      093,  928      093a>, /* XXX What do wer9mme>"935;> 16);
 = ( = (state0-><"936004" id=9 class="line" name="L935i9 cl>"93_ID)
 928      093X, "93t;> 16);
 = (101aacode=state0" class="sref">state0-><"938004" id=9code=overtemp" class="srE9cod>"93t;> 16);
 928      093X, "93temp] -
 = (state0-><"94009" id="9href="+code=temp1" class"9hre>"940ID)
)
goto a> = ( 928      0941010" id=9ef="+code=power1" class==9ef=>"94temp++;
 = (state0-><"94 *"94> > 0) {
 928      094012" id="9mp if we are there. At t"9mp >"94_max) /
 = ( = (state0-><"94, "94ke_fan;
 928      094a>, >"94  */ 928      0946004" id=9 class="sref">tmax +i9 cl>"94d */
 928      094X, "94t;>EX class="line" name="L928"> 928      094_FAN_ABSE9" class="sref">temp_combE9" c>"94t;> 16);
state0-><"94X, CPU_MAa9EMP>"94temp] -
state0-><"95009" id="9tmax" class="sref">tmax<"9tma>"950ID = ( 928      0951010" id=9code=overtemp" class="sr=9cod>"951m);
 = ( 928      09t *"95pm 928      09t012" id="9+code=overtemp" class="s"9+co>"95_max) /
 = ( 928      09t,  953< 9"li>"95ke_faEX class="line" name="L928"> 928      09ta>, "955;> 16);
 928      09t6004" id=9erature back down to i9era>"95_ID 928      09tX, temp_comba9" c>"95t;>EX class="line" name="L928"> 928      09t_FAN_ABSE9de=overtemp" class="srefE9de=>"95e_fan/span>
 988        /* We co09tX,  988        /* We co096009" id="9VERTEMP" class="sref">CP"9VER>"960ID 988        /* We co0961010" id=9state" class="sref">crit=9sta>"96temp
 988        /* We co096 *ove 9ert>"96> >/a>
 928      09V012" id="9st_fan" class="sref">rma"9st_>"96_max<28" class="line" name="L928"> 928      096, rm 9ake>"96ke_fan;
 = ( 928      09Va>, "96  */ 928      0966004" id=9=do_set_fans" class="srei9=do>"96d */
 928      096X,  928      096_FAN_ABSE9id="L967" class="line" nE9id=>"96temp++;
, /* Da9pan>"96temp 988        /* We co097009" id="9power_combi" class="sref"9pow>"970ID 988        /* We co0971010" id=9id="L970" class="line" n=9id=>"97temp
 988        /* We co097 */* Ra 9an >"97> >/a>
 928      097012" id="9t_fan" class="sref">rmin"9t_f>"97_max<28" class="line" name="L928"> 928      097, rmax 9t_f>"97ke_fan;
 = ( 928      097a>, "975;> 16);
 = ( 928      0976004" id=9nt">/* Calculate intake i9nt">"97_ID 928      097X, CPU_INTAKE_SCALa9s=">"97t;>EX class="line" name="L928"> 928      097_FAN_ABSE9ke_fan" class="sref">rmiE9ke_>"97e_fan/span>
 988        /* We co097X, rmaa9ke_>"97temp 988        /* We co098009" id="9ref="+code=intake" class"9ref>"980ID 988        /* We co0981010" id=9id="L980" class="line" n=9id=>"98ke_rp/a>
 928      098 */* Calculate p 9"co>"98> >28" class="line" name="L928"> 928      098012" id="9code=pump_max" class="sr"9cod>"98_max) /
 = ( CTRLER_ID=do_monitor_cpuFa> CTRLER_ID    g"d2" id="L992" class="line" fcu class="strin)DEX class="line" name="L928"> 928      098, rma 9st_>"98ke_fan;
 = ( 928      098a>,  928      098class="li9+code=pump_min" class="si9+co>"98ot; 928      098X, "98gt;> 16;
 928      098_FAN_ABSE9=do_set_fans" class="sreE9=do>"98temp++;
, "98s */
state0-><"99009" id="9t;"99s <aEX class="line" name="L928"> 928      0991010" id=9de=intake_rpm" class="sr=9de=>"99ke_rpm;
 *"99> >/span>
 988        /* We co099012" id="9#37;d, In, overtemp: "9#37>"99ot; 988        /* We co099, 
 988        /* We co099a>, "99  */
 928      099class="li9s, shouldn't we ? Bui9s, >"99_ID 928      099X, "99gt;> 16;
 928      099_FAN_ABSE9 we probably want to notE9 we>"99e_fanaEX class="line" name="L928"> 928      099X,          *a9ass>"999emp++;
 999<2099">"comment">         *2099">2099 >/span>
 988    99909/40/3dc2e2bd1a363b7b67e81b414cd18b77e533_3/2099">a>++;
 999<209e=intake_rpm" class="sr209e=>209temp
 988        /* We co2092"> 999<209d="L991" class="line" n209d=>209> >/span>
 988        /* We co2093"> 999<20937;d, In, overtemp: 񎖩>209ot; 988        /* We co2094"> 999<209code=overtemp" class="s209co>209ke_fa/span>
 988        /* We co2095"> 999<209d="L994" class="line" n209d=>209  */
/* W_attachal" class="srefment">/* W_attach.c#L9>1011static void do_monitor_cpadapterrm_pm72.c#L1002adapter.c#LaEX class="line" name="L928"> 928      2096"> 999<209, shouldn't we ? Bu209, >209_ID 928      2097"> 999<209error occurs ? For FCU 209er>209gt;> 16;
 = (101a+code=state0" class="sref">state0-><2098"> 999<209we probably want to not209we>209temp++;
 999<209ss="comment">         *209ss>209s */
 988        /* We co2019"> 999<201009" class="line" name=20100>2010e_fan;
 = ( = ( 928      2011"> 999<20L1010" class="line" name20L10>201temp++;
 = ( 928      2012"> 999<20ref="+code=state" class=20ref>201pm);
 = ( 928      2013"> 999<201012" class="line" name=20101>201_max) /
 = (101a+code=state0" class="sref">state0-><2014"> 999<20ref="+code=power" class=20ref>201ke_fan;
state0-><2015"> 999<20f="+code=intake" class="20f=">2015;> 16);
 928      2016"> 999<20e" name="L4N286"> 9b>
201ot; 928      2017"> 999<20>))<>201t;> 16);
  of# 92s/ *88"> 988        /* We co2018"> 999<20d="L917" class="line" na20d=">2018m);
 = (10cs="line" name="L1>10cs=946" class="line" naadapterrm_pm72.c#L1002adapter.c#L-" clclass="line" naine"rm_pm72.c#L1002ine"    g"d2" id="L992" class="line" u3 0 class="strina)928" class="line" name="L928"> 928      2019"> 999<20id="L918" class="line" n20id=>201temp] -
state0-><2029"> 999<20ss="sref">do_monitor_cpu20ss=>20ssemp] -
 928      20s1"> 999<20d="L920" class="line" na20d=">20stemp++;
||h!a> = ( 928      20s2"> 999<20state" class="sref">proc20sta>20s> > 0) {
);
state0-><20s3"> 999<20state" class="sref">proc20sta>20s_max) /
 928      20s4"> 999<20ref="+code=power1" class20ref>20ske_fan;
<}"elseha hrd> = (10cs="line" name="L1>10cs=946" class="line" naadapterrm_pm72.c#L1002adapter.c#L-" clclass="line" naine"rm_pm72.c#L1002ine"    g"d2" id="L992" class="line" u3 1 class="strina)928" class="line" name="L928"> 928      2025"> 999<20=power_combi" class="sre20=po>20s5;> 16);
state0-><2026"> 999<2020s_ID)
 928      20s7"> 999<20id="L926" class="line" n20id=>20st;> 16);
state0-><20s8"> 999<20ef="+code=power0" class=20ef=>20st;> 16);
 928      20s9"> 999<20ef="+code=rc" class="sre20ef=>20s9e_fan;
<}"elseha hrd> = (10cs="line" name="L1>10cs=946" class="line" naadapterrm_pm72.c#L1002adapter.c#L-" clclass="line" naine"rm_pm72.c#L1002ine"    g"d2" id="L992" class="line" me=-io 0 class="strina)928" class="line" name="L928"> 928      2039"> 999<20mment">/* XXX What do we20mme>20mmID)
coa href="driversadapterrm_pm72.c#L1002adapter.c#L+code=state0" class="sref">state0-><2031"> 999<20 class="line" name="L93020 cl>20mtemp++;
 928      2032"> 999<20de=overtemp" class="sref20de=>20m> > 0) {
 928      2033"> 999<20ef="+code=power1" class=20ef=>20m_max) /
state0-><2034"> 999<20ef="+code=rc" class="sre20ef=>20mke_fan;
coa href="driversNULLal" class="srefNULL    D8" class="line" name="L928"> 928      2035"> 999<20mment">/* XXX What do we20mme>20m5;> 16);
 928      2036"> 999<20 class="line" name="L93520 cl>20md */
 988        /* We co2037"> 999<20"+code=overtemp" class="20"+c>20mt;> 16);
 = (||h!a> = ( 928      2038"> 999<20code=overtemp" class="sr20cod>20mt;> 16);
 928      2039"> 999<20id="L938" class="line" n20id=>20mtemp] -
 = ( 928      2049"> 999<20href="+code=temp1" class20hre>20hremp] -
 928      2041"> 999<20ef="+code=power1" class=20ef=>20h1;> 16);
 928      2042"> 999<20id="L941" class="line" n20id=>20hpm);
 = ( = (101a+code=state0" class="sref">state0-><2043"> 999<20mp if we are there. At t20mp >20h3t; 928      2044"> 999<20iately and try to trigge20iat>20hke_fan;
state0-><2045"> 999<20/a>>20h5_fanaEX class="line" name="L928"> 928      20h6"> 999<20 class="sref">tmax +20 cl>20hot; 928      2047"> 999<20ay above maximum (%d20ay >20h7 */
/* W_probeal" class="srefment">/* W_probe.c#L9>1011static void do_monitor_cpclieefL965" id="L965"clieef.c#L,EX class="line" name="L928"> 928      2048"> 999<20" class="sref">temp_comb20" c>20ht;> 16);
1011static void do_monitor_cpih/therm_pm72.c#Lid    acode=state0" class="sref">state0-><2049"> 999<20EMP" class="sref">CPU_MA20EMP>20h9ID 928      2059"> 999<20tmax" class="sref">tmax<20tma>20tm */
/* W_attach() *88"> 988        /* We co2051"> 999<20code=overtemp" class="sr20cod>20t1e_fan;
state0-><2052"> 999<20max %d. overtemp ŀmax>20t2_fanaEX class="line" name="L928"> 928      2053"> 999<20+code=overtemp" class="s20+co>20t3t; 928      2054"> 999<20"line" name="L953"> 953<20"li>20tke_fa/span>
 988        /* We co20t5"> 999<20"+code=overtemp" class="20"+c>20t4"> 9/span>
/* We co20t6"> 999<20erature back down to ŀera>20t_ID
/* We co20t7"> 999<20" class="sref">temp_comb20" c>20tt;>/span>
 988        /* We co2058"> 999<20de=overtemp" class="sref20de=>20t8 */
/* W_removeal" class="srefment">/* W_remove.c#L9>1011static void do_monitor_cpclieefL965" id="L965"clieef.c#Lacode=state0" class="sref">state0-><2059"> 999<20 class="line" name="L95820 cl>20t9ID 928      2069"> 999<20VERTEMP" class="sref">CP20VER>20VEe_fan;
<>1011static void do_monitor_cpadapterrm_pm72.c#L1002adapter.c#L+c=d> = (state0-><2061"> 999<20state" class="sref">crit20sta>20Vke_rpm;
 999<20ertemp" class="sref">ove20ert>20Vpm);
 = ( = (101a+code=state0" class="sref">state0-><2063"> 999<20st_fan" class="sref">rma20st_>20V3t; 928      2064"> 999<20ake_fan" class="sref">rm20ake>20Vke_fan;
 = ( 928      2065"> 999<20"+code=pump_max" class="20"+c>20V5;> 16);
 = (state0-><2066"> 999<20=do_set_fans" class="sre20=do>20Vot; 928      2067"> 999<20 class="line" name="L96620 cl>20Vt;> 16);
 988        /* We co2068"> 999<20id="L967" class="line" n20id=>20Ve_fan);
 928      2069"> 999<20pan class="comment">/* D20pan>20Vs */
 = (101a+code=state0" class="sref">state0-><2079"> 999<20power_combi" class="sref20pow>20po */
state0-><2071"> 999<20id="L970" class="line" n20id=>20p1m);
 = ( = (101a+code=state0" class="sref">state0-><2072"> 999<20an class="comment">/* Ra20an >20ppm 928      20p3"> 999<20t_fan" class="sref">rmin20t_f>20p_max) /
 = (10cs="line" name="L1>10cs=946" class="line" naadapterrm_pm72.c#L1002adapter.c#L-" clclass="line" naine"rm_pm72.c#L1002ine"    g"d2" id="L992" class="line" u3 0 class="strina)928" class="line" name="L928"> 928      2074"> 999<20t_fan" class="sref">rmax20t_f>20pke_fan;
 928      2075"> 999<20id="L974" class="line" n20id=>20p5;> 16);
 928      20p6"> 999<20nt">/* Calculate intake 20nt">20p_ID)
 928      2077"> 999<20s="sref">CPU_INTAKE_SCAL20s=">20pt;> 16);
 928      2078"> 999<20ke_fan" class="sref">rmi20ke_>20pe_fan);
 928      2079"> 999<20ke_fan" class="sref">rma20ke_>20ptemp] -
10cs="line" name="L1>10cs=946" class="line" naadapterrm_pm72.c#L1002adapter.c#L-" clclass="line" naine"rm_pm72.c#L1002ine"    g"d2" id="L992" class="line" u3 1 class="strina)928" class="line" name="L928"> 928      2089"> 999<20ref="+code=intake" class20ref>20ree_fan;
 928      2081"> 999<20id="L980" class="line" n20id=>20rtemp++;
 928      2082"> 999<20"comment">/* Calculate p20"co>20r> > 0) {
 928      2083"> 999<20code=pump_max" class="sr20cod>20r3;> 16);
 928      2084"> 999<20st_fan" class="sref">rma20st_>20rke_fan;
 = ( 928      20r5"> 999<20+code=pump_max" class="s20+co>20r5;> 16);
 = ( 928      2086"> 999<20+code=pump_min" class="s20+co>20rot; 928      2087"> 999<20" class="line" name="L9820" c>20rgt;> 16;
 = (101a+code=state0" class="sref">state0-><2088"> 999<20=do_set_fans" class="sre20=do>20rtemp++;
 999<20rom state 0 to state 1 f20rom>20rs */
state0-><2099"> 999<20t;20t;_fanaEX class="line" name="L928"> 928      2091"> 999<20de=intake_rpm" class="sr20de=>20tke_rpm;
 999<20id="L991" class="line" n20id=>20t> >/span>
 988        /* We co20t3"> 999<20#37;d, In, overtemp: ŀ#37>20tot; 988        /* We co20t4"> 999<20+code=overtemp" class="s20+co>20tke_fa/span>
 988        /* We co2095"> 999<20id="L994" class="line" n20id=>20t  */ 928      20t6"> 999<20s, shouldn't we ? Bu20s, >20t6 */
1011static void /* W_ih/therm_pm72.c#Lment">/* W_ih.c#L[]+c=28" class="line" name="L928"> 928      2097"> 999<20 error occurs ? For FCU 20 er>20tt;> 16);
 988        /* We co2098"> 999<20 we probably want to not20 we>20te_fan/span>
 988        /* We co2099"> 999<20ass="comment">         *20ass>20ttemp/* We co2199"> 999<2199">"comment">         *2199">2199 >/span>
/* We co2191"> 999<219e=intake_rpm" class="sr219e=>219temp
 988        /* We co2192"> 999<219d="L991" class="line" n219d=>210> > 0) {
<{"d2" id="L992" class="line" ment">/* W class="strin, 0 },EX class="line" name="L928"> 928      2193"> 999<21937;d, In, overtemp: 񎦑>2103 > 0) {
<{"aEX class="line" name="L928"> 928      2194"> 999<219code=overtemp" class="s219co>219ke_fa}+code=state0" class="sref">state0-><2195"> 999<219d="L994" class="line" n219d=>210  */ 928      2196"> 999<219, shouldn't we ? Bu219, >2106 */
1011static void /* W_line" /therm_pm72.c#Lment">/* W_line" "L89+c=28" class="line" name="L928"> 928      2197"> 999<219error occurs ? For FCU 219er>219gt;> 16;
<.ass="line" nameline" /therm_pm72.c#Lline" "L89+c=28" class="line" name="L928"> 928      2198"> 999<219we probably want to not219we>210t;> 16);
/* W class="strin,8" class="line" name="L928"> 928      2199"> 999<219ss="comment">         *219ss>219s */
<},EX class="line" name="L928"> 928      2119"> 999<211009" class="line" name=21100>2110e_fan;
<.ass="line" nameattach_adapterrm_pm72.c#L1002attach_adapter"L89+c=d> = (/* W_attachal" class="srefment">/* W_attach.c#L,EX class="line" name="L928"> 928      2111"> 999<21L1010" class="line" name21L10>211temp++;
<.ass="line" nameprobeal" class="srefprobe.c#L
/* W_probeal" class="srefment">/* W_probe.c#L,EX class="line" name="L928"> 928      2112"> 999<21ref="+code=state" class=21ref>211pm);
 = (/* W_removeal" class="srefment">/* W_remove.c#L,EX class="line" name="L928"> 928      2113"> 999<211012" class="line" name=21101>211_max) /
<.ass="line" namef="tableal" class="sreff="tablemax) /
c=d> = (/* W_ih/therm_pm72.c#Lment">/* W_ih.c#L,EX class="line" name="L928"> 928      2114"> 999<21ref="+code=power" class=21ref>211ke_fa}+code=state0" class="sref">state0-><2115"> 999<21f="+code=intake" class="21f=">211  */ 928      2116"> 999<21e" name="L4N286"> 9b>
2116 */
do_monitor_cplocal" class="srefloc    g"aef="drivers/macintfanal" class="sreffan    aEX class="line" name="L928"> 928      2117"> 999<21>))<>211t;>28" class="line" name="L928"> 928      2118"> 999<21d="L917" class="line" na21d=">2118m);
state0-><2119"> 999<21id="L918" class="line" n21id=>211temp] -
do_monitor_cpcL965" id="L965"c    g"f">do_monitor_cpeal" class="srefe.c#LD8" class="line" name="L928"> 928      2129"> 999<21ss="sref">do_monitor_cpu21ss=>21ssemp<8" class="line" name="L928"> 928      2121"> 999<21d="L920" class="line" na21d=">2121m);
 = (state0-><21s2"> 999<21state" class="sref">proc21sta>212pm 928      21s3"> 999<21state" class="sref">proc21sta>212_max) /
 = ( = (state0-><21s4"> 999<21ref="+code=power1" class21ref>21ske_fan;
<9orf(;;)928" class="line" name="L928"> 928      2125"> 999<21=power_combi" class="sre21=po>21s5;> 16);
 928      2126"> 999<2121s_ID)
 928      21s7"> 999<21id="L926" class="line" n21id=>21st;> 16);
do_monitor_cpeal" class="srefe.c#L+c="+code=state0" class="sref">state0-><21s8"> 999<21ef="+code=power0" class=21ef=>21st;> 16);
 928      21s9"> 999<21ef="+code=rc" class="sre21ef=>212temp] -
state0-><2139"> 999<21mment">/* XXX What do we21mme>21mmID)
 928      2131"> 999<21 class="line" name="L93021 cl>21mtemp++;
state0-><2132"> 999<21de=overtemp" class="sref21de=>21m> > 0) {
 = (state0-><2133"> 999<21ef="+code=power1" class=21ef=>2133;> 16);
 928      2134"> 999<21ef="+code=rc" class="sre21ef=>213ke_fan;
state0-><2135"> 999<21mment">/* XXX What do we21mme>2135_fanaEX class="line" name="L928"> 928      2136"> 999<21 class="line" name="L93521 cl>213ot; 928      2137"> 999<21"+code=overtemp" class="21"+c>2137 */
1011static void do_monitor_cpfcu_nodeerm_pm72.c#L899fcu_node    aEX class="line" name="L928"> 928      2138"> 999<21code=overtemp" class="sr21cod>21mt;>28" class="line" name="L928"> 928      2139"> 999<21id="L938" class="line" n21id=>21mtemp] -
<>1011static void do_monitor_cpn="line" name="L1np.c#L+coa href="driversNULLal" class="srefNULL    D8" class="line" name="L928"> 928      2149"> 999<21href="+code=temp1" class21hre>21hremp] -
 928      2141"> 999<21ef="+code=power1" class=21ef=>214ke_rpm;
 999<21id="L941" class="line" n21id=>21hpm);
/* We co2143"> 999<21mp if we are there. At t21mp >214ot; 988        /* We co2144"> 999<21iately and try to trigge21iat>214ke_fa/span>
 988        /* We co2145"> 999<21/a>>2144"> 9/span>
 988        /* We co2146"> 999<21 class="sref">tmax +21 cl>214_ID
 988        /* We co2147"> 999<21ay above maximum (%d21ay >214t;>EX class="line" name="L928"> 928      2148"> 999<21" class="sref">temp_comb21" c>214e_fan);
 928      2149"> 999<21EMP" class="sref">CPU_MA21EMP>2149emp++;
 999<21tmax" class="sref">tmax<21tma>21tm */
 = ( 928      2151"> 999<21code=overtemp" class="sr21cod>215temp++;
state0-><2152"> 999<21max %d. overtemp Łmax>215> > 0) {
do_monitor_cplocal" class="srefloc    +code=state0" class="sref">state0-><2153"> 999<21+code=overtemp" class="s21+co>215_max) /
do_monitor_cpude=overtemp#L946"u32e_fanf">do_monitor_cpres=therm_pm72.c#Lres    +code=state0" class="sref">state0-><2154"> 999<21"line" name="L953"> 953<21"li>21tke_facode=state0" class="sref">state0-><2155"> 999<21"+code=overtemp" class="21"+c>2155;> 16);
 928      21t6"> 999<21erature back down to Łera>215ot; 928      21t7"> 999<21" class="sref">temp_comb21" c>215t;> 16);
 988        /* We co2158"> 999<21de=overtemp" class="sref21de=>215t;> 16);
10cs="line" name="L1>10cs=946" class="line" nan="line" name="L1np.c#L-" clclass="line" namypeal" class="srefmype.c#Lg"d2" id="L992" class="line" fan-rpm-control class="strin) ||        /* We co2159"> 999<21 class="line" name="L95821 cl>215temp] -
 = (/* We co2169"> 999<21VERTEMP" class="sref">CP21VER>216mID)
 = ( RPMal" class="srefFCU_Fa> RPM    +code=state0" class="sref">state0-><2161"> 999<21state" class="sref">crit21sta>216temp++;
10cs="line" name="L1>10cs=946" class="line" nan="line" name="L1np.c#L-" clclass="line" namypeal" class="srefmype.c#Lg"d2" id="L992" class="line" fan-pwm-control class="strin) ||        /* We co21V2"> 999<21ertemp" class="sref">ove21ert>216> > 0) {
 = (/* We co2163"> 999<21st_fan" class="sref">rma21st_>216_max) /
 = ( PWMal" class="srefFCU_Fa> PWM    +code=state0" class="sref">state0-><2164"> 999<21ake_fan" class="sref">rm21ake>216ke_fan;
 988        /* We co2165"> 999<21"+code=pump_max" class="21"+c>21V5;> 16);
/* We co2166"> 999<21=do_set_fans" class="sre21=do>216_ID)
state0-><2167"> 999<21 class="line" name="L96621 cl>216t;>EX class="line" name="L928"> 928      2168"> 999<21id="L967" class="line" n21id=>216t;> 16);
 988        /* We co2169"> 999<21pan class="comment">/* D21pan>216temp] -
state0-><2179"> 999<21power_combi" class="sref21pow>217ee_fan;
state0-><2171"> 999<21id="L970" class="line" n21id=>217temp++;
 928      2172"> 999<21an class="comment">/* Ra21an >217> > 0) {
);
state0-><21p3"> 999<21t_fan" class="sref">rmin21t_f>217_max) /
do_monitor_cpres=therm_pm72.c#Lres    )+code=state0" class="sref">state0-><2174"> 999<21t_fan" class="sref">rmax21t_f>217ke_facode=state0" class="sref">state0-><2175"> 999<21id="L974" class="line" n21id=>21p5;> 16);
 COUNTal" class="srefFCU_Fa> COUNT    +="drivers/macintial" class="sreff    ++)928" class="line" name="L928"> 928      21p6"> 999<21nt">/* Calculate intake 21nt">21p_ID)
state0-><2177"> 999<21s="sref">CPU_INTAKE_SCAL21s=">217t;>EX class="line" name="L928"> 928      2178"> 999<21ke_fan" class="sref">rmi21ke_>217t;> 16);
 = (/* We co2179"> 999<21ke_fan" class="sref">rma21ke_>217temp] -
state0-><2189"> 999<21ref="+code=intake" class21ref>21ree_fan;
 = (state0-><2181"> 999<21id="L980" class="line" n21id=>21rtemp++;
 = ( = (state0-><2182"> 999<21"comment">/* Calculate p21"co>21r> > 0) {
 = ( 928      2183"> 999<21code=pump_max" class="sr21cod>218_max) /
/* W: F idmype"mismatch  class="strin8" class="line" name="L928"> 928      2184"> 999<21st_fan" class="sref">rma21st_>218ke_fan;
state0-><2185"> 999<21+code=pump_max" class="s21+co>21r5;> 16);
state0-><2186"> 999<21+code=pump_min" class="s21+co>218_ID)
 928      2187"> 999<21" class="line" name="L9821" c>218t;> 16);
 = ( RPMal" class="srefFCU_Fa> RPM    )        /* We co2188"> 999<21=do_set_fans" class="sre21=do>218t;> 16);
do_monitor_cpres=therm_pm72.c#Lres    ) - 0x10) / 2+code=state0" class="sref">state0-><2189"> 999<21rom state 0 to state 1 f21rom>218temp] -
state0-><2199"> 999<21t;219ee_fan;
do_monitor_cpres=therm_pm72.c#Lres    ) - 0x30) / 2+code=state0" class="sref">state0-><2191"> 999<21de=intake_rpm" class="sr21de=>219temp++;
 = ( 928      2192"> 999<21id="L991" class="line" n21id=>219> > 0) {
/* W: Can't parse  class="strin8" class="line" name="L928"> 928      21t3"> 999<21#37;d, In, overtemp: Ł#37>219_max) /
state0-><21t4"> 999<21+code=overtemp" class="s21+co>219ke_fan;
state0-><2195"> 999<21id="L994" class="line" n21id=>2195;> 16);
 928      21t6"> 999<21s, shouldn't we ? Bu21s, >219_ID)
 = ( 928      2197"> 999<21 error occurs ? For FCU 21 er>219t;> 16);
 = ( = (state0-><2198"> 999<21 we probably want to not21 we>219t;> 16);
 928      21t9"> 999<21ass="comment">         *21ass>219s */
<}EX class="line" name="L928"> 928      2299"> 999<2299">"comment">         *2299">220semp<8" class="line" name="L928"> 928      2291"> 999<229e=intake_rpm" class="sr229e=>2201m);
 988        /* We co2292"> 999<229d="L991" class="line" n229d=>220pm);
 = ( 928      2293"> 999<22937;d, In, overtemp: 񎵹>2203 > 0) {
<9orf("drivers/macintial" class="sreff    +c="+="drivers/macintial" class="sreff     <+="drivers/macintFCU_Fa> COUNTal" class="srefFCU_Fa> COUNT    +="drivers/macintial" class="sreff    ++)928" class="line" name="L928"> 928      2294"> 999<229code=overtemp" class="s229co>220ke_fan;
 = (/* We co2295"> 999<229d="L994" class="line" n229d=>2205;> 16);
state0-><2296"> 999<229, shouldn't we ? Bu229, >220_ID)
 928      2297"> 999<229error occurs ? For FCU 229er>220t;> 16);
 RPMal" class="srefFCU_Fa> RPM     ?/d2" id="L992" class="line" RPM class="strin :/d2" id="L992" class="line" PWM class="strin,EX class="line" name="L928"> 928      2298"> 999<229we probably want to not229we>220t;> 16);
 928      2299"> 999<229ss="comment">         *229ss>220s */
<}EX class="line" name="L928"> 928      2219"> 999<221009" class="line" name=22100>221;_fanaEX class="line" name="L928"> 928      2211"> 999<22L1010" class="line" name22L10>221ke_rpm;
 999<22ref="+code=state" class=22ref>221pm
static void         /* We co2213"> 999<221012" class="line" name=22101>221_max<28" class="line" name="L928"> 928      2214"> 999<22ref="+code=power" class=22ref>221ke_fan;
static void <+code=do_monitor_cpuscode"L89+c=d> = ( 928      2215"> 999<22f="+code=intake" class="22f=">2215e_fan;
static void  = ( 928      2216"> 999<22e" name="L4N286"> 9b>
221ot; 928      2217"> 999<22>))<>221gt;> 16;
 = ( 928      2218"> 999<22d="L917" class="line" na22d=">221temp++;
 999<22id="L918" class="line" n22id=>221temp] -
 988        /* We co2229"> 999<22ss="sref">do_monitor_cpu22ss=>222o */
 = ( 928      2221"> 999<22d="L920" class="line" na22d=">222ke_rpm;
 999<22state" class="sref">proc22sta>222pm);
 988        /* We co2223"> 999<22state" class="sref">proc22sta>222_max) /
 = (/* W_line" /therm_pm72.c#Lment">/* W_line"     )DEX class="line" name="L928"> 928      2224"> 999<22ref="+code=power1" class22ref>22ske_faaEX class="line" name="L928"> 928      2225"> 999<22=power_combi" class="sre22=po>222  */ 928      2226"> 999<222226 */
static void         /* We co22s7"> 999<22id="L926" class="line" n22id=>222t;>28" class="line" name="L928"> 928      22s8"> 999<22ef="+code=power0" class=22ef=>222e_fan);
 = (/* W_line" /therm_pm72.c#Lment">/* W_line"     )DEX class="line" name="L928"> 928      2229"> 999<22ef="+code=rc" class="sre22ef=>2229emp++;
 999<22mment">/* XXX What do we22mme>22mmID)
state0-><2231"> 999<22 class="line" name="L93022 cl>22mtemp 928      2232"> 999<22de=overtemp" class="sref22de=>223pm 928      2233"> 999<22ef="+code=power1" class=22ef=>2233;>/a>
1011static void  928      2234"> 999<22ef="+code=rc" class="sre22ef=>223ke_fa28" class="line" name="L928"> 928      2235"> 999<22mment">/* XXX What do we22mme>2235e_fan;
<28" class="line" name="L928"> 928      2236"> 999<22 class="line" name="L93522 cl>223_ID)
 928      2237"> 999<22"+code=overtemp" class="22"+c>223t;> 16);
 928      2238"> 999<22code=overtemp" class="sr22cod>223e_fan);
<{a,EX class="line" name="L928"> 928      2239"> 999<22id="L938" class="line" n22id=>22mtemp<}+code=state0" class="sref">state0-><2249"> 999<22href="+code=temp1" class22hre>22hremp = ( 928      2241"> 999<22ef="+code=power1" class=22ef=>224ke_rpm;
 999<22id="L941" class="line" n22id=>224pm
1011static void ;
 999<22mp if we are there. At t22mp >224_max<28" class="line" name="L928"> 928      2244"> 999<22iately and try to trigge22iat>2244ID)
 928      2245"> 999<22/a>>2245;> 16);
 928      2246"> 999<22 class="sref">tmax +22 cl>224_ID)
 = ( 928      2247"> 999<22ay above maximum (%d22ay >224t;> 16);
 = ( 928      2248"> 999<22" class="sref">temp_comb22" c>224e_fan);
 928      2249"> 999<22EMP" class="sref">CPU_MA22EMP>2249ID)
 = ( 928      2259"> 999<22tmax" class="sref">tmax<22tma>22tm */
<.ass="line" nameremoveal" class="srefremove.c#L 928      2251"> 999<22code=overtemp" class="sr22cod>225temp<}+code=state0" class="sref">state0-><2252"> 999<22max %d. overtemp łmax>225pm 928      2253"> 999<22+code=overtemp" class="s22+co>225ot; 988        /* We co2254"> 999<22"line" name="L953"> 953<22"li>225ke_fa/span>
 988        /* We co2255"> 999<22"+code=overtemp" class="22"+c>2254"> 9/span>
 988        /* We co22t6"> 999<22erature back down to łera>2256 */
/* W_inital" class="srefment">/* W_init946" void)        /* We co22t7"> 999<22" class="sref">temp_comb22" c>225t;>28" class="line" name="L928"> 928      2258"> 999<22de=overtemp" class="sref22de=>225e_fan);

 928      2259"> 999<22 class="line" name="L95822 cl>2259emp++;
 999<22VERTEMP" class="sref">CP22VER>226mID)
 = (

 999<22state" class="sref">crit22sta>226temp++;
 = (

 999<22ertemp" class="sref">ove22ert>226> > 0) {
 = (/* We co2263"> 999<22st_fan" class="sref">rma22st_>226_max) /
 = ( 928      2264"> 999<22ake_fan" class="sref">rm22ake>226ke_facode=state0" class="sref">state0-><2265"> 999<22"+code=pump_max" class="22"+c>22V5;> 16);
 = ( 928      2266"> 999<22=do_set_fans" class="sre22=do>226_ID 928      2267"> 999<22 class="line" name="L96622 cl>226t;>EX class="line" name="L928"> 928      2268"> 999<22id="L967" class="line" n22id=>226t;>/a>
/* W_exital" class="srefment">/* W_exit946" void)        /* We co2269"> 999<22pan class="comment">/* D22pan>226temp<28" class="line" name="L928"> 928      2279"> 999<22power_combi" class="sref22pow>227o */
 = ( 928      2271"> 999<22id="L970" class="line" n22id=>227temp 928      2272"> 999<22an class="comment">/* Ra22an >227pm 928      22p3"> 999<22t_fan" class="sref">rmin22t_f>227_max = ( = (/* W_inital" class="srefment">/* W_init946")DEX class="line" name="L928"> 928      2274"> 999<22t_fan" class="sref">rmax22t_f>227ke_faa> = ( = (/* W_exital" class="srefment">/* W_exit946")DEX class="line" name="L928"> 928      2275"> 999<22id="L974" class="line" n22id=>227  */ 928      22p6"> 999<22nt">/* Calculate intake 22nt">22p_ID 928      2277"> 999<22s="sref">CPU_INTAKE_SCAL22s=">227t;>ass="line" nameMODULE_DESCRIPTIONrm_pm72.c#L946"MODULE_DESCRIPTION946" a2" id="L992" class="line" Dine"  9orfApple's PowerMac G5ht99rmal/control class="strin)DEX class="line" name="L928"> 928      2278"> 999<22ke_fan" class="sref">rmi22ke_>227t;>ass="line" nameMODULE_LICENSEal" class="srefMODULE_LICENSE946" a2" id="L992" class="line" GPL class="strin)DEX class="line" name="L928"> 928      2279"> 999<22ke_fan" class="sref">rma22ke_>2279emp++;
 999<22ref="+code=intake" class22ref>22ree_fa


T996original/LXR software byfL99fa>++; LXR f="dunity g"this experidrival/f="dioe"byfa>++; lxr@intux.no .
lxr.intux.no kindly hosted by a>++; Redpill Lntpro AS g"provid" of Lntux consult" g and opera