linux/drivers/hwmon/lm85.c
<<
>>
Prefs
   1/*
   2    lm85.c - Part of lm_sensors, Linux kernel modules for hardware
   3             monitoring
   4    Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl>
   5    Copyright (c) 2002, 2003  Philip Pokorny <ppokorny@penguincomputing.com>
   6    Copyright (c) 2003        Margit Schubert-While <margitsw@t-online.de>
   7    Copyright (c) 2004        Justin Thiessen <jthiessen@penguincomputing.com>
   8    Copyright (C) 2007, 2008  Jean Delvare <khali@linux-fr.org>
   9
  10    Chip details at           <http://www.national.com/ds/LM/LM85.pdf>
  11
  12    This program is free software; you can redistribute it and/or modify
  13    it under the terms of the GNU General Public License as published by
  14    the Free Software Foundation; either version 2 of the License, or
  15    (at your option) any later version.
  16
  17    This program is distributed in the hope that it will be useful,
  18    but WITHOUT ANY WARRANTY; without even the implied warranty of
  19    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20    GNU General Public License for more details.
  21
  22    You should have received a copy of the GNU General Public License
  23    along with this program; if not, write to the Free Software
  24    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  25*/
  26
  27#include <linux/module.h>
  28#include <linux/init.h>
  29#include <linux/slab.h>
  30#include <linux/jiffies.h>
  31#include <linux/i2c.h>
  32#include <linux/hwmon.h>
  33#include <linux/hwmon-vid.h>
  34#include <linux/hwmon-sysfs.h>
  35#include <linux/err.h>
  36#include <linux/mutex.h>
  37
  38/* Addresses to scan */
  39static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
  40
  41/* Insmod parameters */
  42I2C_CLIENT_INSMOD_7(lm85b, lm85c, adm1027, adt7463, adt7468, emc6d100,
  43                    emc6d102);
  44
  45/* The LM85 registers */
  46
  47#define LM85_REG_IN(nr)                 (0x20 + (nr))
  48#define LM85_REG_IN_MIN(nr)             (0x44 + (nr) * 2)
  49#define LM85_REG_IN_MAX(nr)             (0x45 + (nr) * 2)
  50
  51#define LM85_REG_TEMP(nr)               (0x25 + (nr))
  52#define LM85_REG_TEMP_MIN(nr)           (0x4e + (nr) * 2)
  53#define LM85_REG_TEMP_MAX(nr)           (0x4f + (nr) * 2)
  54
  55/* Fan speeds are LSB, MSB (2 bytes) */
  56#define LM85_REG_FAN(nr)                (0x28 + (nr) * 2)
  57#define LM85_REG_FAN_MIN(nr)            (0x54 + (nr) * 2)
  58
  59#define LM85_REG_PWM(nr)                (0x30 + (nr))
  60
  61#define LM85_REG_COMPANY                0x3e
  62#define LM85_REG_VERSTEP                0x3f
  63
  64#define ADT7468_REG_CFG5                0x7c
  65#define         ADT7468_OFF64           0x01
  66#define IS_ADT7468_OFF64(data)          \
  67        ((data)->type == adt7468 && !((data)->cfg5 & ADT7468_OFF64))
  68
  69/* These are the recognized values for the above regs */
  70#define LM85_COMPANY_NATIONAL           0x01
  71#define LM85_COMPANY_ANALOG_DEV         0x41
  72#define LM85_COMPANY_SMSC               0x5c
  73#define LM85_VERSTEP_VMASK              0xf0
  74#define LM85_VERSTEP_GENERIC            0x60
  75#define LM85_VERSTEP_GENERIC2           0x70
  76#define LM85_VERSTEP_LM85C              0x60
  77#define LM85_VERSTEP_LM85B              0x62
  78#define LM85_VERSTEP_LM96000_1          0x68
  79#define LM85_VERSTEP_LM96000_2          0x69
  80#define LM85_VERSTEP_ADM1027            0x60
  81#define LM85_VERSTEP_ADT7463            0x62
  82#define LM85_VERSTEP_ADT7463C           0x6A
  83#define LM85_VERSTEP_ADT7468_1          0x71
  84#define LM85_VERSTEP_ADT7468_2          0x72
  85#define LM85_VERSTEP_EMC6D100_A0        0x60
  86#define LM85_VERSTEP_EMC6D100_A1        0x61
  87#define LM85_VERSTEP_EMC6D102           0x65
  88
  89#define LM85_REG_CONFIG                 0x40
  90
  91#define LM85_REG_ALARM1                 0x41
  92#define LM85_REG_ALARM2                 0x42
  93
  94#define LM85_REG_VID                    0x43
  95
  96/* Automated FAN control */
  97#define LM85_REG_AFAN_CONFIG(nr)        (0x5c + (nr))
  98#define LM85_REG_AFAN_RANGE(nr)         (0x5f + (nr))
  99#define LM85_REG_AFAN_SPIKE1            0x62
 100#define LM85_REG_AFAN_MINPWM(nr)        (0x64 + (nr))
 101#define LM85_REG_AFAN_LIMIT(nr)         (0x67 + (nr))
 102#define LM85_REG_AFAN_CRITICAL(nr)      (0x6a + (nr))
 103#define LM85_REG_AFAN_HYST1             0x6d
 104#define LM85_REG_AFAN_HYST2             0x6e
 105
 106#define ADM1027_REG_EXTEND_ADC1         0x76
 107#define ADM1027_REG_EXTEND_ADC2         0x77
 108
 109#define EMC6D100_REG_ALARM3             0x7d
 110/* IN5, IN6 and IN7 */
 111#define EMC6D100_REG_IN(nr)             (0x70 + ((nr) - 5))
 112#define EMC6D100_REG_IN_MIN(nr)         (0x73 + ((nr) - 5) * 2)
 113#define EMC6D100_REG_IN_MAX(nr)         (0x74 + ((nr) - 5) * 2)
 114#define EMC6D102_REG_EXTEND_ADC1        0x85
 115#define EMC6D102_REG_EXTEND_ADC2        0x86
 116#define EMC6D102_REG_EXTEND_ADC3        0x87
 117#define EMC6D102_REG_EXTEND_ADC4        0x88
 118
 119
 120/* Conversions. Rounding and limit checking is only done on the TO_REG
 121   variants. Note that you should be a bit careful with which arguments
 122   these macros are called: arguments may be evaluated more than once.
 123 */
 124
 125/* IN are scaled acording to built-in resistors */
 126static const int lm85_scaling[] = {  /* .001 Volts */
 127        2500, 2250, 3300, 5000, 12000,
 128        3300, 1500, 1800 /*EMC6D100*/
 129};
 130#define SCALE(val, from, to)    (((val) * (to) + ((from) / 2)) / (from))
 131
 132#define INS_TO_REG(n, val)      \
 133                SENSORS_LIMIT(SCALE(val, lm85_scaling[n], 192), 0, 255)
 134
 135#define INSEXT_FROM_REG(n, val, ext)    \
 136                SCALE(((val) << 4) + (ext), 192 << 4, lm85_scaling[n])
 137
 138#define INS_FROM_REG(n, val)    SCALE((val), 192, lm85_scaling[n])
 139
 140/* FAN speed is measured using 90kHz clock */
 141static inline u16 FAN_TO_REG(unsigned long val)
 142{
 143        if (!val)
 144                return 0xffff;
 145        return SENSORS_LIMIT(5400000 / val, 1, 0xfffe);
 146}
 147#define FAN_FROM_REG(val)       ((val) == 0 ? -1 : (val) == 0xffff ? 0 : \
 148                                 5400000 / (val))
 149
 150/* Temperature is reported in .001 degC increments */
 151#define TEMP_TO_REG(val)        \
 152                SENSORS_LIMIT(SCALE(val, 1000, 1), -127, 127)
 153#define TEMPEXT_FROM_REG(val, ext)      \
 154                SCALE(((val) << 4) + (ext), 16, 1000)
 155#define TEMP_FROM_REG(val)      ((val) * 1000)
 156
 157#define PWM_TO_REG(val)                 SENSORS_LIMIT(val, 0, 255)
 158#define PWM_FROM_REG(val)               (val)
 159
 160
 161/* ZONEs have the following parameters:
 162 *    Limit (low) temp,           1. degC
 163 *    Hysteresis (below limit),   1. degC (0-15)
 164 *    Range of speed control,     .1 degC (2-80)
 165 *    Critical (high) temp,       1. degC
 166 *
 167 * FAN PWMs have the following parameters:
 168 *    Reference Zone,                 1, 2, 3, etc.
 169 *    Spinup time,                    .05 sec
 170 *    PWM value at limit/low temp,    1 count
 171 *    PWM Frequency,                  1. Hz
 172 *    PWM is Min or OFF below limit,  flag
 173 *    Invert PWM output,              flag
 174 *
 175 * Some chips filter the temp, others the fan.
 176 *    Filter constant (or disabled)   .1 seconds
 177 */
 178
 179/* These are the zone temperature range encodings in .001 degree C */
 180static const int lm85_range_map[] = {
 181        2000, 2500, 3300, 4000, 5000, 6600, 8000, 10000,
 182        13300, 16000, 20000, 26600, 32000, 40000, 53300, 80000
 183};
 184
 185static int RANGE_TO_REG(int range)
 186{
 187        int i;
 188
 189        /* Find the closest match */
 190        for (i = 0; i < 15; ++i) {
 191                if (range <= (lm85_range_map[i] + lm85_range_map[i + 1]) / 2)
 192                        break;
 193        }
 194
 195        return i;
 196}
 197#define RANGE_FROM_REG(val)     lm85_range_map[(val) & 0x0f]
 198
 199/* These are the PWM frequency encodings */
 200static const int lm85_freq_map[8] = { /* 1 Hz */
 201        10, 15, 23, 30, 38, 47, 61, 94
 202};
 203static const int adm1027_freq_map[8] = { /* 1 Hz */
 204        11, 15, 22, 29, 35, 44, 59, 88
 205};
 206
 207static int FREQ_TO_REG(const int *map, int freq)
 208{
 209        int i;
 210
 211        /* Find the closest match */
 212        for (i = 0; i < 7; ++i)
 213                if (freq <= (map[i] + map[i + 1]) / 2)
 214                        break;
 215        return i;
 216}
 217
 218static int FREQ_FROM_REG(const int *map, u8 reg)
 219{
 220        return map[reg & 0x07];
 221}
 222
 223/* Since we can't use strings, I'm abusing these numbers
 224 *   to stand in for the following meanings:
 225 *      1 -- PWM responds to Zone 1
 226 *      2 -- PWM responds to Zone 2
 227 *      3 -- PWM responds to Zone 3
 228 *     23 -- PWM responds to the higher temp of Zone 2 or 3
 229 *    123 -- PWM responds to highest of Zone 1, 2, or 3
 230 *      0 -- PWM is always at 0% (ie, off)
 231 *     -1 -- PWM is always at 100%
 232 *     -2 -- PWM responds to manual control
 233 */
 234
 235static const int lm85_zone_map[] = { 1, 2, 3, -1, 0, 23, 123, -2 };
 236#define ZONE_FROM_REG(val)      lm85_zone_map[(val) >> 5]
 237
 238static int ZONE_TO_REG(int zone)
 239{
 240        int i;
 241
 242        for (i = 0; i <= 7; ++i)
 243                if (zone == lm85_zone_map[i])
 244                        break;
 245        if (i > 7)   /* Not found. */
 246                i = 3;  /* Always 100% */
 247        return i << 5;
 248}
 249
 250#define HYST_TO_REG(val)        SENSORS_LIMIT(((val) + 500) / 1000, 0, 15)
 251#define HYST_FROM_REG(val)      ((val) * 1000)
 252
 253/* Chip sampling rates
 254 *
 255 * Some sensors are not updated more frequently than once per second
 256 *    so it doesn't make sense to read them more often than that.
 257 *    We cache the results and return the saved data if the driver
 258 *    is called again before a second has elapsed.
 259 *
 260 * Also, there is significant configuration data for this chip
 261 *    given the automatic PWM fan control that is possible.  There
 262 *    are about 47 bytes of config data to only 22 bytes of actual
 263 *    readings.  So, we keep the config data up to date in the cache
 264 *    when it is written and only sample it once every 1 *minute*
 265 */
 266#define LM85_DATA_INTERVAL  (HZ + HZ / 2)
 267#define LM85_CONFIG_INTERVAL  (1 * 60 * HZ)
 268
 269/* LM85 can automatically adjust fan speeds based on temperature
 270 * This structure encapsulates an entire Zone config.  There are
 271 * three zones (one for each temperature input) on the lm85
 272 */
 273struct lm85_zone {
 274        s8 limit;       /* Low temp limit */
 275        u8 hyst;        /* Low limit hysteresis. (0-15) */
 276        u8 range;       /* Temp range, encoded */
 277        s8 critical;    /* "All fans ON" temp limit */
 278        u8 off_desired; /* Actual "off" temperature specified.  Preserved
 279                         * to prevent "drift" as other autofan control
 280                         * values change.
 281                         */
 282        u8 max_desired; /* Actual "max" temperature specified.  Preserved
 283                         * to prevent "drift" as other autofan control
 284                         * values change.
 285                         */
 286};
 287
 288struct lm85_autofan {
 289        u8 config;      /* Register value */
 290        u8 min_pwm;     /* Minimum PWM value, encoded */
 291        u8 min_off;     /* Min PWM or OFF below "limit", flag */
 292};
 293
 294/* For each registered chip, we need to keep some data in memory.
 295   The structure is dynamically allocated. */
 296struct lm85_data {
 297        struct device *hwmon_dev;
 298        const int *freq_map;
 299        enum chips type;
 300
 301        struct mutex update_lock;
 302        int valid;              /* !=0 if following fields are valid */
 303        unsigned long last_reading;     /* In jiffies */
 304        unsigned long last_config;      /* In jiffies */
 305
 306        u8 in[8];               /* Register value */
 307        u8 in_max[8];           /* Register value */
 308        u8 in_min[8];           /* Register value */
 309        s8 temp[3];             /* Register value */
 310        s8 temp_min[3];         /* Register value */
 311        s8 temp_max[3];         /* Register value */
 312        u16 fan[4];             /* Register value */
 313        u16 fan_min[4];         /* Register value */
 314        u8 pwm[3];              /* Register value */
 315        u8 pwm_freq[3];         /* Register encoding */
 316        u8 temp_ext[3];         /* Decoded values */
 317        u8 in_ext[8];           /* Decoded values */
 318        u8 vid;                 /* Register value */
 319        u8 vrm;                 /* VRM version */
 320        u32 alarms;             /* Register encoding, combined */
 321        u8 cfg5;                /* Config Register 5 on ADT7468 */
 322        struct lm85_autofan autofan[3];
 323        struct lm85_zone zone[3];
 324};
 325
 326static int lm85_detect(struct i2c_client *client, int kind,
 327                       struct i2c_board_info *info);
 328static int lm85_probe(struct i2c_client *client,
 329                      const struct i2c_device_id *id);
 330static int lm85_remove(struct i2c_client *client);
 331
 332static int lm85_read_value(struct i2c_client *client, u8 reg);
 333static void lm85_write_value(struct i2c_client *client, u8 reg, int value);
 334static struct lm85_data *lm85_update_device(struct device *dev);
 335
 336
 337static const struct i2c_device_id lm85_id[] = {
 338        { "adm1027", adm1027 },
 339        { "adt7463", adt7463 },
 340        { "adt7468", adt7468 },
 341        { "lm85", any_chip },
 342        { "lm85b", lm85b },
 343        { "lm85c", lm85c },
 344        { "emc6d100", emc6d100 },
 345        { "emc6d101", emc6d100 },
 346        { "emc6d102", emc6d102 },
 347        { }
 348};
 349MODULE_DEVICE_TABLE(i2c, lm85_id);
 350
 351static struct i2c_driver lm85_driver = {
 352        .class          = I2C_CLASS_HWMON,
 353        .driver = {
 354                .name   = "lm85",
 355        },
 356        .probe          = lm85_probe,
 357        .remove         = lm85_remove,
 358        .id_table       = lm85_id,
 359        .detect         = lm85_detect,
 360        .address_data   = &addr_data,
 361};
 362
 363
 364/* 4 Fans */
 365static ssize_t show_fan(struct device *dev, struct device_attribute *attr,
 366                char *buf)
 367{
 368        int nr = to_sensor_dev_attr(attr)->index;
 369        struct lm85_data *data = lm85_update_device(dev);
 370        return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr]));
 371}
 372
 373static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr,
 374                char *buf)
 375{
 376        int nr = to_sensor_dev_attr(attr)->index;
 377        struct lm85_data *data = lm85_update_device(dev);
 378        return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr]));
 379}
 380
 381static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
 382                const char *buf, size_t count)
 383{
 384        int nr = to_sensor_dev_attr(attr)->index;
 385        struct i2c_client *client = to_i2c_client(dev);
 386        struct lm85_data *data = i2c_get_clientdata(client);
 387        unsigned long val = simple_strtoul(buf, NULL, 10);
 388
 389        mutex_lock(&data->update_lock);
 390        data->fan_min[nr] = FAN_TO_REG(val);
 391        lm85_write_value(client, LM85_REG_FAN_MIN(nr), data->fan_min[nr]);
 392        mutex_unlock(&data->update_lock);
 393        return count;
 394}
 395
 396#define show_fan_offset(offset)                                         \
 397static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO,                 \
 398                show_fan, NULL, offset - 1);                            \
 399static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR,         \
 400                show_fan_min, set_fan_min, offset - 1)
 401
 402show_fan_offset(1);
 403show_fan_offset(2);
 404show_fan_offset(3);
 405show_fan_offset(4);
 406
 407/* vid, vrm, alarms */
 408
 409static ssize_t show_vid_reg(struct device *dev, struct device_attribute *attr,
 410                char *buf)
 411{
 412        struct lm85_data *data = lm85_update_device(dev);
 413        int vid;
 414
 415        if ((data->type == adt7463 || data->type == adt7468) &&
 416            (data->vid & 0x80)) {
 417                /* 6-pin VID (VRM 10) */
 418                vid = vid_from_reg(data->vid & 0x3f, data->vrm);
 419        } else {
 420                /* 5-pin VID (VRM 9) */
 421                vid = vid_from_reg(data->vid & 0x1f, data->vrm);
 422        }
 423
 424        return sprintf(buf, "%d\n", vid);
 425}
 426
 427static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
 428
 429static ssize_t show_vrm_reg(struct device *dev, struct device_attribute *attr,
 430                char *buf)
 431{
 432        struct lm85_data *data = dev_get_drvdata(dev);
 433        return sprintf(buf, "%ld\n", (long) data->vrm);
 434}
 435
 436static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr,
 437                const char *buf, size_t count)
 438{
 439        struct lm85_data *data = dev_get_drvdata(dev);
 440        data->vrm = simple_strtoul(buf, NULL, 10);
 441        return count;
 442}
 443
 444static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
 445
 446static ssize_t show_alarms_reg(struct device *dev, struct device_attribute
 447                *attr, char *buf)
 448{
 449        struct lm85_data *data = lm85_update_device(dev);
 450        return sprintf(buf, "%u\n", data->alarms);
 451}
 452
 453static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL);
 454
 455static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
 456                char *buf)
 457{
 458        int nr = to_sensor_dev_attr(attr)->index;
 459        struct lm85_data *data = lm85_update_device(dev);
 460        return sprintf(buf, "%u\n", (data->alarms >> nr) & 1);
 461}
 462
 463static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0);
 464static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1);
 465static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2);
 466static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3);
 467static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8);
 468static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 18);
 469static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 16);
 470static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 17);
 471static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4);
 472static SENSOR_DEVICE_ATTR(temp1_fault, S_IRUGO, show_alarm, NULL, 14);
 473static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5);
 474static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 6);
 475static SENSOR_DEVICE_ATTR(temp3_fault, S_IRUGO, show_alarm, NULL, 15);
 476static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 10);
 477static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 11);
 478static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 12);
 479static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 13);
 480
 481/* pwm */
 482
 483static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,
 484                char *buf)
 485{
 486        int nr = to_sensor_dev_attr(attr)->index;
 487        struct lm85_data *data = lm85_update_device(dev);
 488        return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm[nr]));
 489}
 490
 491static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
 492                const char *buf, size_t count)
 493{
 494        int nr = to_sensor_dev_attr(attr)->index;
 495        struct i2c_client *client = to_i2c_client(dev);
 496        struct lm85_data *data = i2c_get_clientdata(client);
 497        long val = simple_strtol(buf, NULL, 10);
 498
 499        mutex_lock(&data->update_lock);
 500        data->pwm[nr] = PWM_TO_REG(val);
 501        lm85_write_value(client, LM85_REG_PWM(nr), data->pwm[nr]);
 502        mutex_unlock(&data->update_lock);
 503        return count;
 504}
 505
 506static ssize_t show_pwm_enable(struct device *dev, struct device_attribute
 507                *attr, char *buf)
 508{
 509        int nr = to_sensor_dev_attr(attr)->index;
 510        struct lm85_data *data = lm85_update_device(dev);
 511        int pwm_zone, enable;
 512
 513        pwm_zone = ZONE_FROM_REG(data->autofan[nr].config);
 514        switch (pwm_zone) {
 515        case -1:        /* PWM is always at 100% */
 516                enable = 0;
 517                break;
 518        case 0:         /* PWM is always at 0% */
 519        case -2:        /* PWM responds to manual control */
 520                enable = 1;
 521                break;
 522        default:        /* PWM in automatic mode */
 523                enable = 2;
 524        }
 525        return sprintf(buf, "%d\n", enable);
 526}
 527
 528static ssize_t set_pwm_enable(struct device *dev, struct device_attribute
 529                *attr, const char *buf, size_t count)
 530{
 531        int nr = to_sensor_dev_attr(attr)->index;
 532        struct i2c_client *client = to_i2c_client(dev);
 533        struct lm85_data *data = i2c_get_clientdata(client);
 534        long val = simple_strtol(buf, NULL, 10);
 535        u8 config;
 536
 537        switch (val) {
 538        case 0:
 539                config = 3;
 540                break;
 541        case 1:
 542                config = 7;
 543                break;
 544        case 2:
 545                /* Here we have to choose arbitrarily one of the 5 possible
 546                   configurations; I go for the safest */
 547                config = 6;
 548                break;
 549        default:
 550                return -EINVAL;
 551        }
 552
 553        mutex_lock(&data->update_lock);
 554        data->autofan[nr].config = lm85_read_value(client,
 555                LM85_REG_AFAN_CONFIG(nr));
 556        data->autofan[nr].config = (data->autofan[nr].config & ~0xe0)
 557                | (config << 5);
 558        lm85_write_value(client, LM85_REG_AFAN_CONFIG(nr),
 559                data->autofan[nr].config);
 560        mutex_unlock(&data->update_lock);
 561        return count;
 562}
 563
 564static ssize_t show_pwm_freq(struct device *dev,
 565                struct device_attribute *attr, char *buf)
 566{
 567        int nr = to_sensor_dev_attr(attr)->index;
 568        struct lm85_data *data = lm85_update_device(dev);
 569        return sprintf(buf, "%d\n", FREQ_FROM_REG(data->freq_map,
 570                                                  data->pwm_freq[nr]));
 571}
 572
 573static ssize_t set_pwm_freq(struct device *dev,
 574                struct device_attribute *attr, const char *buf, size_t count)
 575{
 576        int nr = to_sensor_dev_attr(attr)->index;
 577        struct i2c_client *client = to_i2c_client(dev);
 578        struct lm85_data *data = i2c_get_clientdata(client);
 579        long val = simple_strtol(buf, NULL, 10);
 580
 581        mutex_lock(&data->update_lock);
 582        data->pwm_freq[nr] = FREQ_TO_REG(data->freq_map, val);
 583        lm85_write_value(client, LM85_REG_AFAN_RANGE(nr),
 584                (data->zone[nr].range << 4)
 585                | data->pwm_freq[nr]);
 586        mutex_unlock(&data->update_lock);
 587        return count;
 588}
 589
 590#define show_pwm_reg(offset)                                            \
 591static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR,               \
 592                show_pwm, set_pwm, offset - 1);                         \
 593static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR,      \
 594                show_pwm_enable, set_pwm_enable, offset - 1);           \
 595static SENSOR_DEVICE_ATTR(pwm##offset##_freq, S_IRUGO | S_IWUSR,        \
 596                show_pwm_freq, set_pwm_freq, offset - 1)
 597
 598show_pwm_reg(1);
 599show_pwm_reg(2);
 600show_pwm_reg(3);
 601
 602/* Voltages */
 603
 604static ssize_t show_in(struct device *dev, struct device_attribute *attr,
 605                char *buf)
 606{
 607        int nr = to_sensor_dev_attr(attr)->index;
 608        struct lm85_data *data = lm85_update_device(dev);
 609        return sprintf(buf, "%d\n", INSEXT_FROM_REG(nr, data->in[nr],
 610                                                    data->in_ext[nr]));
 611}
 612
 613static ssize_t show_in_min(struct device *dev, struct device_attribute *attr,
 614                char *buf)
 615{
 616        int nr = to_sensor_dev_attr(attr)->index;
 617        struct lm85_data *data = lm85_update_device(dev);
 618        return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in_min[nr]));
 619}
 620
 621static ssize_t set_in_min(struct device *dev, struct device_attribute *attr,
 622                const char *buf, size_t count)
 623{
 624        int nr = to_sensor_dev_attr(attr)->index;
 625        struct i2c_client *client = to_i2c_client(dev);
 626        struct lm85_data *data = i2c_get_clientdata(client);
 627        long val = simple_strtol(buf, NULL, 10);
 628
 629        mutex_lock(&data->update_lock);
 630        data->in_min[nr] = INS_TO_REG(nr, val);
 631        lm85_write_value(client, LM85_REG_IN_MIN(nr), data->in_min[nr]);
 632        mutex_unlock(&data->update_lock);
 633        return count;
 634}
 635
 636static ssize_t show_in_max(struct device *dev, struct device_attribute *attr,
 637                char *buf)
 638{
 639        int nr = to_sensor_dev_attr(attr)->index;
 640        struct lm85_data *data = lm85_update_device(dev);
 641        return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in_max[nr]));
 642}
 643
 644static ssize_t set_in_max(struct device *dev, struct device_attribute *attr,
 645                const char *buf, size_t count)
 646{
 647        int nr = to_sensor_dev_attr(attr)->index;
 648        struct i2c_client *client = to_i2c_client(dev);
 649        struct lm85_data *data = i2c_get_clientdata(client);
 650        long val = simple_strtol(buf, NULL, 10);
 651
 652        mutex_lock(&data->update_lock);
 653        data->in_max[nr] = INS_TO_REG(nr, val);
 654        lm85_write_value(client, LM85_REG_IN_MAX(nr), data->in_max[nr]);
 655        mutex_unlock(&data->update_lock);
 656        return count;
 657}
 658
 659#define show_in_reg(offset)                                             \
 660static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO,                  \
 661                show_in, NULL, offset);                                 \
 662static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR,          \
 663                show_in_min, set_in_min, offset);                       \
 664static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR,          \
 665                show_in_max, set_in_max, offset)
 666
 667show_in_reg(0);
 668show_in_reg(1);
 669show_in_reg(2);
 670show_in_reg(3);
 671show_in_reg(4);
 672show_in_reg(5);
 673show_in_reg(6);
 674show_in_reg(7);
 675
 676/* Temps */
 677
 678static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
 679                char *buf)
 680{
 681        int nr = to_sensor_dev_attr(attr)->index;
 682        struct lm85_data *data = lm85_update_device(dev);
 683        return sprintf(buf, "%d\n", TEMPEXT_FROM_REG(data->temp[nr],
 684                                                     data->temp_ext[nr]));
 685}
 686
 687static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr,
 688                char *buf)
 689{
 690        int nr = to_sensor_dev_attr(attr)->index;
 691        struct lm85_data *data = lm85_update_device(dev);
 692        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr]));
 693}
 694
 695static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
 696                const char *buf, size_t count)
 697{
 698        int nr = to_sensor_dev_attr(attr)->index;
 699        struct i2c_client *client = to_i2c_client(dev);
 700        struct lm85_data *data = i2c_get_clientdata(client);
 701        long val = simple_strtol(buf, NULL, 10);
 702
 703        if (IS_ADT7468_OFF64(data))
 704                val += 64;
 705
 706        mutex_lock(&data->update_lock);
 707        data->temp_min[nr] = TEMP_TO_REG(val);
 708        lm85_write_value(client, LM85_REG_TEMP_MIN(nr), data->temp_min[nr]);
 709        mutex_unlock(&data->update_lock);
 710        return count;
 711}
 712
 713static ssize_t show_temp_max(struct device *dev, struct device_attribute *attr,
 714                char *buf)
 715{
 716        int nr = to_sensor_dev_attr(attr)->index;
 717        struct lm85_data *data = lm85_update_device(dev);
 718        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr]));
 719}
 720
 721static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
 722                const char *buf, size_t count)
 723{
 724        int nr = to_sensor_dev_attr(attr)->index;
 725        struct i2c_client *client = to_i2c_client(dev);
 726        struct lm85_data *data = i2c_get_clientdata(client);
 727        long val = simple_strtol(buf, NULL, 10);
 728
 729        if (IS_ADT7468_OFF64(data))
 730                val += 64;
 731
 732        mutex_lock(&data->update_lock);
 733        data->temp_max[nr] = TEMP_TO_REG(val);
 734        lm85_write_value(client, LM85_REG_TEMP_MAX(nr), data->temp_max[nr]);
 735        mutex_unlock(&data->update_lock);
 736        return count;
 737}
 738
 739#define show_temp_reg(offset)                                           \
 740static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO,                \
 741                show_temp, NULL, offset - 1);                           \
 742static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR,        \
 743                show_temp_min, set_temp_min, offset - 1);               \
 744static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR,        \
 745                show_temp_max, set_temp_max, offset - 1);
 746
 747show_temp_reg(1);
 748show_temp_reg(2);
 749show_temp_reg(3);
 750
 751
 752/* Automatic PWM control */
 753
 754static ssize_t show_pwm_auto_channels(struct device *dev,
 755                struct device_attribute *attr, char *buf)
 756{
 757        int nr = to_sensor_dev_attr(attr)->index;
 758        struct lm85_data *data = lm85_update_device(dev);
 759        return sprintf(buf, "%d\n", ZONE_FROM_REG(data->autofan[nr].config));
 760}
 761
 762static ssize_t set_pwm_auto_channels(struct device *dev,
 763                struct device_attribute *attr, const char *buf, size_t count)
 764{
 765        int nr = to_sensor_dev_attr(attr)->index;
 766        struct i2c_client *client = to_i2c_client(dev);
 767        struct lm85_data *data = i2c_get_clientdata(client);
 768        long val = simple_strtol(buf, NULL, 10);
 769
 770        mutex_lock(&data->update_lock);
 771        data->autofan[nr].config = (data->autofan[nr].config & (~0xe0))
 772                | ZONE_TO_REG(val);
 773        lm85_write_value(client, LM85_REG_AFAN_CONFIG(nr),
 774                data->autofan[nr].config);
 775        mutex_unlock(&data->update_lock);
 776        return count;
 777}
 778
 779static ssize_t show_pwm_auto_pwm_min(struct device *dev,
 780                struct device_attribute *attr, char *buf)
 781{
 782        int nr = to_sensor_dev_attr(attr)->index;
 783        struct lm85_data *data = lm85_update_device(dev);
 784        return sprintf(buf, "%d\n", PWM_FROM_REG(data->autofan[nr].min_pwm));
 785}
 786
 787static ssize_t set_pwm_auto_pwm_min(struct device *dev,
 788                struct device_attribute *attr, const char *buf, size_t count)
 789{
 790        int nr = to_sensor_dev_attr(attr)->index;
 791        struct i2c_client *client = to_i2c_client(dev);
 792        struct lm85_data *data = i2c_get_clientdata(client);
 793        long val = simple_strtol(buf, NULL, 10);
 794
 795        mutex_lock(&data->update_lock);
 796        data->autofan[nr].min_pwm = PWM_TO_REG(val);
 797        lm85_write_value(client, LM85_REG_AFAN_MINPWM(nr),
 798                data->autofan[nr].min_pwm);
 799        mutex_unlock(&data->update_lock);
 800        return count;
 801}
 802
 803static ssize_t show_pwm_auto_pwm_minctl(struct device *dev,
 804                struct device_attribute *attr, char *buf)
 805{
 806        int nr = to_sensor_dev_attr(attr)->index;
 807        struct lm85_data *data = lm85_update_device(dev);
 808        return sprintf(buf, "%d\n", data->autofan[nr].min_off);
 809}
 810
 811static ssize_t set_pwm_auto_pwm_minctl(struct device *dev,
 812                struct device_attribute *attr, const char *buf, size_t count)
 813{
 814        int nr = to_sensor_dev_attr(attr)->index;
 815        struct i2c_client *client = to_i2c_client(dev);
 816        struct lm85_data *data = i2c_get_clientdata(client);
 817        long val = simple_strtol(buf, NULL, 10);
 818        u8 tmp;
 819
 820        mutex_lock(&data->update_lock);
 821        data->autofan[nr].min_off = val;
 822        tmp = lm85_read_value(client, LM85_REG_AFAN_SPIKE1);
 823        tmp &= ~(0x20 << nr);
 824        if (data->autofan[nr].min_off)
 825                tmp |= 0x20 << nr;
 826        lm85_write_value(client, LM85_REG_AFAN_SPIKE1, tmp);
 827        mutex_unlock(&data->update_lock);
 828        return count;
 829}
 830
 831#define pwm_auto(offset)                                                \
 832static SENSOR_DEVICE_ATTR(pwm##offset##_auto_channels,                  \
 833                S_IRUGO | S_IWUSR, show_pwm_auto_channels,              \
 834                set_pwm_auto_channels, offset - 1);                     \
 835static SENSOR_DEVICE_ATTR(pwm##offset##_auto_pwm_min,                   \
 836                S_IRUGO | S_IWUSR, show_pwm_auto_pwm_min,               \
 837                set_pwm_auto_pwm_min, offset - 1);                      \
 838static SENSOR_DEVICE_ATTR(pwm##offset##_auto_pwm_minctl,                \
 839                S_IRUGO | S_IWUSR, show_pwm_auto_pwm_minctl,            \
 840                set_pwm_auto_pwm_minctl, offset - 1)
 841
 842pwm_auto(1);
 843pwm_auto(2);
 844pwm_auto(3);
 845
 846/* Temperature settings for automatic PWM control */
 847
 848static ssize_t show_temp_auto_temp_off(struct device *dev,
 849                struct device_attribute *attr, char *buf)
 850{
 851        int nr = to_sensor_dev_attr(attr)->index;
 852        struct lm85_data *data = lm85_update_device(dev);
 853        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].limit) -
 854                HYST_FROM_REG(data->zone[nr].hyst));
 855}
 856
 857static ssize_t set_temp_auto_temp_off(struct device *dev,
 858                struct device_attribute *attr, const char *buf, size_t count)
 859{
 860        int nr = to_sensor_dev_attr(attr)->index;
 861        struct i2c_client *client = to_i2c_client(dev);
 862        struct lm85_data *data = i2c_get_clientdata(client);
 863        int min;
 864        long val = simple_strtol(buf, NULL, 10);
 865
 866        mutex_lock(&data->update_lock);
 867        min = TEMP_FROM_REG(data->zone[nr].limit);
 868        data->zone[nr].off_desired = TEMP_TO_REG(val);
 869        data->zone[nr].hyst = HYST_TO_REG(min - val);
 870        if (nr == 0 || nr == 1) {
 871                lm85_write_value(client, LM85_REG_AFAN_HYST1,
 872                        (data->zone[0].hyst << 4)
 873                        | data->zone[1].hyst);
 874        } else {
 875                lm85_write_value(client, LM85_REG_AFAN_HYST2,
 876                        (data->zone[2].hyst << 4));
 877        }
 878        mutex_unlock(&data->update_lock);
 879        return count;
 880}
 881
 882static ssize_t show_temp_auto_temp_min(struct device *dev,
 883                struct device_attribute *attr, char *buf)
 884{
 885        int nr = to_sensor_dev_attr(attr)->index;
 886        struct lm85_data *data = lm85_update_device(dev);
 887        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].limit));
 888}
 889
 890static ssize_t set_temp_auto_temp_min(struct device *dev,
 891                struct device_attribute *attr, const char *buf, size_t count)
 892{
 893        int nr = to_sensor_dev_attr(attr)->index;
 894        struct i2c_client *client = to_i2c_client(dev);
 895        struct lm85_data *data = i2c_get_clientdata(client);
 896        long val = simple_strtol(buf, NULL, 10);
 897
 898        mutex_lock(&data->update_lock);
 899        data->zone[nr].limit = TEMP_TO_REG(val);
 900        lm85_write_value(client, LM85_REG_AFAN_LIMIT(nr),
 901                data->zone[nr].limit);
 902
 903/* Update temp_auto_max and temp_auto_range */
 904        data->zone[nr].range = RANGE_TO_REG(
 905                TEMP_FROM_REG(data->zone[nr].max_desired) -
 906                TEMP_FROM_REG(data->zone[nr].limit));
 907        lm85_write_value(client, LM85_REG_AFAN_RANGE(nr),
 908                ((data->zone[nr].range & 0x0f) << 4)
 909                | (data->pwm_freq[nr] & 0x07));
 910
 911/* Update temp_auto_hyst and temp_auto_off */
 912        data->zone[nr].hyst = HYST_TO_REG(TEMP_FROM_REG(
 913                data->zone[nr].limit) - TEMP_FROM_REG(
 914                data->zone[nr].off_desired));
 915        if (nr == 0 || nr == 1) {
 916                lm85_write_value(client, LM85_REG_AFAN_HYST1,
 917                        (data->zone[0].hyst << 4)
 918                        | data->zone[1].hyst);
 919        } else {
 920                lm85_write_value(client, LM85_REG_AFAN_HYST2,
 921                        (data->zone[2].hyst << 4));
 922        }
 923        mutex_unlock(&data->update_lock);
 924        return count;
 925}
 926
 927static ssize_t show_temp_auto_temp_max(struct device *dev,
 928                struct device_attribute *attr, char *buf)
 929{
 930        int nr = to_sensor_dev_attr(attr)->index;
 931        struct lm85_data *data = lm85_update_device(dev);
 932        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].limit) +
 933                RANGE_FROM_REG(data->zone[nr].range));
 934}
 935
 936static ssize_t set_temp_auto_temp_max(struct device *dev,
 937                struct device_attribute *attr, const char *buf, size_t count)
 938{
 939        int nr = to_sensor_dev_attr(attr)->index;
 940        struct i2c_client *client = to_i2c_client(dev);
 941        struct lm85_data *data = i2c_get_clientdata(client);
 942        int min;
 943        long val = simple_strtol(buf, NULL, 10);
 944
 945        mutex_lock(&data->update_lock);
 946        min = TEMP_FROM_REG(data->zone[nr].limit);
 947        data->zone[nr].max_desired = TEMP_TO_REG(val);
 948        data->zone[nr].range = RANGE_TO_REG(
 949                val - min);
 950        lm85_write_value(client, LM85_REG_AFAN_RANGE(nr),
 951                ((data->zone[nr].range & 0x0f) << 4)
 952                | (data->pwm_freq[nr] & 0x07));
 953        mutex_unlock(&data->update_lock);
 954        return count;
 955}
 956
 957static ssize_t show_temp_auto_temp_crit(struct device *dev,
 958                struct device_attribute *attr, char *buf)
 959{
 960        int nr = to_sensor_dev_attr(attr)->index;
 961        struct lm85_data *data = lm85_update_device(dev);
 962        return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].critical));
 963}
 964
 965static ssize_t set_temp_auto_temp_crit(struct device *dev,
 966                struct device_attribute *attr, const char *buf, size_t count)
 967{
 968        int nr = to_sensor_dev_attr(attr)->index;
 969        struct i2c_client *client = to_i2c_client(dev);
 970        struct lm85_data *data = i2c_get_clientdata(client);
 971        long val = simple_strtol(buf, NULL, 10);
 972
 973        mutex_lock(&data->update_lock);
 974        data->zone[nr].critical = TEMP_TO_REG(val);
 975        lm85_write_value(client, LM85_REG_AFAN_CRITICAL(nr),
 976                data->zone[nr].critical);
 977        mutex_unlock(&data->update_lock);
 978        return count;
 979}
 980
 981#define temp_auto(offset)                                               \
 982static SENSOR_DEVICE_ATTR(temp##offset##_auto_temp_off,                 \
 983                S_IRUGO | S_IWUSR, show_temp_auto_temp_off,             \
 984                set_temp_auto_temp_off, offset - 1);                    \
 985static SENSOR_DEVICE_ATTR(temp##offset##_auto_temp_min,                 \
 986                S_IRUGO | S_IWUSR, show_temp_auto_temp_min,             \
 987                set_temp_auto_temp_min, offset - 1);                    \
 988static SENSOR_DEVICE_ATTR(temp##offset##_auto_temp_max,                 \
 989                S_IRUGO | S_IWUSR, show_temp_auto_temp_max,             \
 990                set_temp_auto_temp_max, offset - 1);                    \
 991static SENSOR_DEVICE_ATTR(temp##offset##_auto_temp_crit,                \
 992                S_IRUGO | S_IWUSR, show_temp_auto_temp_crit,            \
 993                set_temp_auto_temp_crit, offset - 1);
 994
 995temp_auto(1);
 996temp_auto(2);
 997temp_auto(3);
 998
 999static struct attribute *lm85_attributes[] = {
1000        &sensor_dev_attr_fan1_input.dev_attr.attr,
1001        &sensor_dev_attr_fan2_input.dev_attr.attr,
1002        &sensor_dev_attr_fan3_input.dev_attr.attr,
1003        &sensor_dev_attr_fan4_input.dev_attr.attr,
1004        &sensor_dev_attr_fan1_min.dev_attr.attr,
1005        &sensor_dev_attr_fan2_min.dev_attr.attr,
1006        &sensor_dev_attr_fan3_min.dev_attr.attr,
1007        &sensor_dev_attr_fan4_min.dev_attr.attr,
1008        &sensor_dev_attr_fan1_alarm.dev_attr.attr,
1009        &sensor_dev_attr_fan2_alarm.dev_attr.attr,
1010        &sensor_dev_attr_fan3_alarm.dev_attr.attr,
1011        &sensor_dev_attr_fan4_alarm.dev_attr.attr,
1012
1013        &sensor_dev_attr_pwm1.dev_attr.attr,
1014        &sensor_dev_attr_pwm2.dev_attr.attr,
1015        &sensor_dev_attr_pwm3.dev_attr.attr,
1016        &sensor_dev_attr_pwm1_enable.dev_attr.attr,
1017        &sensor_dev_attr_pwm2_enable.dev_attr.attr,
1018        &sensor_dev_attr_pwm3_enable.dev_attr.attr,
1019        &sensor_dev_attr_pwm1_freq.dev_attr.attr,
1020        &sensor_dev_attr_pwm2_freq.dev_attr.attr,
1021        &sensor_dev_attr_pwm3_freq.dev_attr.attr,
1022
1023        &sensor_dev_attr_in0_input.dev_attr.attr,
1024        &sensor_dev_attr_in1_input.dev_attr.attr,
1025        &sensor_dev_attr_in2_input.dev_attr.attr,
1026        &sensor_dev_attr_in3_input.dev_attr.attr,
1027        &sensor_dev_attr_in0_min.dev_attr.attr,
1028        &sensor_dev_attr_in1_min.dev_attr.attr,
1029        &sensor_dev_attr_in2_min.dev_attr.attr,
1030        &sensor_dev_attr_in3_min.dev_attr.attr,
1031        &sensor_dev_attr_in0_max.dev_attr.attr,
1032        &sensor_dev_attr_in1_max.dev_attr.attr,
1033        &sensor_dev_attr_in2_max.dev_attr.attr,
1034        &sensor_dev_attr_in3_max.dev_attr.attr,
1035        &sensor_dev_attr_in0_alarm.dev_attr.attr,
1036        &sensor_dev_attr_in1_alarm.dev_attr.attr,
1037        &sensor_dev_attr_in2_alarm.dev_attr.attr,
1038        &sensor_dev_attr_in3_alarm.dev_attr.attr,
1039
1040        &sensor_dev_attr_temp1_input.dev_attr.attr,
1041        &sensor_dev_attr_temp2_input.dev_attr.attr,
1042        &sensor_dev_attr_temp3_input.dev_attr.attr,
1043        &sensor_dev_attr_temp1_min.dev_attr.attr,
1044        &sensor_dev_attr_temp2_min.dev_attr.attr,
1045        &sensor_dev_attr_temp3_min.dev_attr.attr,
1046        &sensor_dev_attr_temp1_max.dev_attr.attr,
1047        &sensor_dev_attr_temp2_max.dev_attr.attr,
1048        &sensor_dev_attr_temp3_max.dev_attr.attr,
1049        &sensor_dev_attr_temp1_alarm.dev_attr.attr,
1050        &sensor_dev_attr_temp2_alarm.dev_attr.attr,
1051        &sensor_dev_attr_temp3_alarm.dev_attr.attr,
1052        &sensor_dev_attr_temp1_fault.dev_attr.attr,
1053        &sensor_dev_attr_temp3_fault.dev_attr.attr,
1054
1055        &sensor_dev_attr_pwm1_auto_channels.dev_attr.attr,
1056        &sensor_dev_attr_pwm2_auto_channels.dev_attr.attr,
1057        &sensor_dev_attr_pwm3_auto_channels.dev_attr.attr,
1058        &sensor_dev_attr_pwm1_auto_pwm_min.dev_attr.attr,
1059        &sensor_dev_attr_pwm2_auto_pwm_min.dev_attr.attr,
1060        &sensor_dev_attr_pwm3_auto_pwm_min.dev_attr.attr,
1061        &sensor_dev_attr_pwm1_auto_pwm_minctl.dev_attr.attr,
1062        &sensor_dev_attr_pwm2_auto_pwm_minctl.dev_attr.attr,
1063        &sensor_dev_attr_pwm3_auto_pwm_minctl.dev_attr.attr,
1064
1065        &sensor_dev_attr_temp1_auto_temp_off.dev_attr.attr,
1066        &sensor_dev_attr_temp2_auto_temp_off.dev_attr.attr,
1067        &sensor_dev_attr_temp3_auto_temp_off.dev_attr.attr,
1068        &sensor_dev_attr_temp1_auto_temp_min.dev_attr.attr,
1069        &sensor_dev_attr_temp2_auto_temp_min.dev_attr.attr,
1070        &sensor_dev_attr_temp3_auto_temp_min.dev_attr.attr,
1071        &sensor_dev_attr_temp1_auto_temp_max.dev_attr.attr,
1072        &sensor_dev_attr_temp2_auto_temp_max.dev_attr.attr,
1073        &sensor_dev_attr_temp3_auto_temp_max.dev_attr.attr,
1074        &sensor_dev_attr_temp1_auto_temp_crit.dev_attr.attr,
1075        &sensor_dev_attr_temp2_auto_temp_crit.dev_attr.attr,
1076        &sensor_dev_attr_temp3_auto_temp_crit.dev_attr.attr,
1077
1078        &dev_attr_vrm.attr,
1079        &dev_attr_cpu0_vid.attr,
1080        &dev_attr_alarms.attr,
1081        NULL
1082};
1083
1084static const struct attribute_group lm85_group = {
1085        .attrs = lm85_attributes,
1086};
1087
1088static struct attribute *lm85_attributes_in4[] = {
1089        &sensor_dev_attr_in4_input.dev_attr.attr,
1090        &sensor_dev_attr_in4_min.dev_attr.attr,
1091        &sensor_dev_attr_in4_max.dev_attr.attr,
1092        &sensor_dev_attr_in4_alarm.dev_attr.attr,
1093        NULL
1094};
1095
1096static const struct attribute_group lm85_group_in4 = {
1097        .attrs = lm85_attributes_in4,
1098};
1099
1100static struct attribute *lm85_attributes_in567[] = {
1101        &sensor_dev_attr_in5_input.dev_attr.attr,
1102        &sensor_dev_attr_in6_input.dev_attr.attr,
1103        &sensor_dev_attr_in7_input.dev_attr.attr,
1104        &sensor_dev_attr_in5_min.dev_attr.attr,
1105        &sensor_dev_attr_in6_min.dev_attr.attr,
1106        &sensor_dev_attr_in7_min.dev_attr.attr,
1107        &sensor_dev_attr_in5_max.dev_attr.attr,
1108        &sensor_dev_attr_in6_max.dev_attr.attr,
1109        &sensor_dev_attr_in7_max.dev_attr.attr,
1110        &sensor_dev_attr_in5_alarm.dev_attr.attr,
1111        &sensor_dev_attr_in6_alarm.dev_attr.attr,
1112        &sensor_dev_attr_in7_alarm.dev_attr.attr,
1113        NULL
1114};
1115
1116static const struct attribute_group lm85_group_in567 = {
1117        .attrs = lm85_attributes_in567,
1118};
1119
1120static void lm85_init_client(struct i2c_client *client)
1121{
1122        int value;
1123
1124        /* Start monitoring if needed */
1125        value = lm85_read_value(client, LM85_REG_CONFIG);
1126        if (!(value & 0x01)) {
1127                dev_info(&client->dev, "Starting monitoring\n");
1128                lm85_write_value(client, LM85_REG_CONFIG, value | 0x01);
1129        }
1130
1131        /* Warn about unusual configuration bits */
1132        if (value & 0x02)
1133                dev_warn(&client->dev, "Device configuration is locked\n");
1134        if (!(value & 0x04))
1135                dev_warn(&client->dev, "Device is not ready\n");
1136}
1137
1138static int lm85_is_fake(struct i2c_client *client)
1139{
1140        /*
1141         * Differenciate between real LM96000 and Winbond WPCD377I. The latter
1142         * emulate the former except that it has no hardware monitoring function
1143         * so the readings are always 0.
1144         */
1145        int i;
1146        u8 in_temp, fan;
1147
1148        for (i = 0; i < 8; i++) {
1149                in_temp = i2c_smbus_read_byte_data(client, 0x20 + i);
1150                fan = i2c_smbus_read_byte_data(client, 0x28 + i);
1151                if (in_temp != 0x00 || fan != 0xff)
1152                        return 0;
1153        }
1154
1155        return 1;
1156}
1157
1158/* Return 0 if detection is successful, -ENODEV otherwise */
1159static int lm85_detect(struct i2c_client *client, int kind,
1160                       struct i2c_board_info *info)
1161{
1162        struct i2c_adapter *adapter = client->adapter;
1163        int address = client->addr;
1164        const char *type_name;
1165
1166        if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
1167                /* We need to be able to do byte I/O */
1168                return -ENODEV;
1169        }
1170
1171        /* If auto-detecting, determine the chip type */
1172        if (kind < 0) {
1173                int company = lm85_read_value(client, LM85_REG_COMPANY);
1174                int verstep = lm85_read_value(client, LM85_REG_VERSTEP);
1175
1176                dev_dbg(&adapter->dev, "Detecting device at 0x%02x with "
1177                        "COMPANY: 0x%02x and VERSTEP: 0x%02x\n",
1178                        address, company, verstep);
1179
1180                /* All supported chips have the version in common */
1181                if ((verstep & LM85_VERSTEP_VMASK) != LM85_VERSTEP_GENERIC &&
1182                    (verstep & LM85_VERSTEP_VMASK) != LM85_VERSTEP_GENERIC2) {
1183                        dev_dbg(&adapter->dev, "Autodetection failed: "
1184                                "unsupported version\n");
1185                        return -ENODEV;
1186                }
1187                kind = any_chip;
1188
1189                /* Now, refine the detection */
1190                if (company == LM85_COMPANY_NATIONAL) {
1191                        switch (verstep) {
1192                        case LM85_VERSTEP_LM85C:
1193                                kind = lm85c;
1194                                break;
1195                        case LM85_VERSTEP_LM85B:
1196                                kind = lm85b;
1197                                break;
1198                        case LM85_VERSTEP_LM96000_1:
1199                        case LM85_VERSTEP_LM96000_2:
1200                                /* Check for Winbond WPCD377I */
1201                                if (lm85_is_fake(client)) {
1202                                        dev_dbg(&adapter->dev,
1203                                                "Found Winbond WPCD377I, "
1204                                                "ignoring\n");
1205                                        return -ENODEV;
1206                                }
1207                                break;
1208                        }
1209                } else if (company == LM85_COMPANY_ANALOG_DEV) {
1210                        switch (verstep) {
1211                        case LM85_VERSTEP_ADM1027:
1212                                kind = adm1027;
1213                                break;
1214                        case LM85_VERSTEP_ADT7463:
1215                        case LM85_VERSTEP_ADT7463C:
1216                                kind = adt7463;
1217                                break;
1218                        case LM85_VERSTEP_ADT7468_1:
1219                        case LM85_VERSTEP_ADT7468_2:
1220                                kind = adt7468;
1221                                break;
1222                        }
1223                } else if (company == LM85_COMPANY_SMSC) {
1224                        switch (verstep) {
1225                        case LM85_VERSTEP_EMC6D100_A0:
1226                        case LM85_VERSTEP_EMC6D100_A1:
1227                                /* Note: we can't tell a '100 from a '101 */
1228                                kind = emc6d100;
1229                                break;
1230                        case LM85_VERSTEP_EMC6D102:
1231                                kind = emc6d102;
1232                                break;
1233                        }
1234                } else {
1235                        dev_dbg(&adapter->dev, "Autodetection failed: "
1236                                "unknown vendor\n");
1237                        return -ENODEV;
1238                }
1239        }
1240
1241        switch (kind) {
1242        case lm85b:
1243                type_name = "lm85b";
1244                break;
1245        case lm85c:
1246                type_name = "lm85c";
1247                break;
1248        case adm1027:
1249                type_name = "adm1027";
1250                break;
1251        case adt7463:
1252                type_name = "adt7463";
1253                break;
1254        case adt7468:
1255                type_name = "adt7468";
1256                break;
1257        case emc6d100:
1258                type_name = "emc6d100";
1259                break;
1260        case emc6d102:
1261                type_name = "emc6d102";
1262                break;
1263        default:
1264                type_name = "lm85";
1265        }
1266        strlcpy(info->type, type_name, I2C_NAME_SIZE);
1267
1268        return 0;
1269}
1270
1271static int lm85_probe(struct i2c_client *client,
1272                      const struct i2c_device_id *id)
1273{
1274        struct lm85_data *data;
1275        int err;
1276
1277        data = kzalloc(sizeof(struct lm85_data), GFP_KERNEL);
1278        if (!data)
1279                return -ENOMEM;
1280
1281        i2c_set_clientdata(client, data);
1282        data->type = id->driver_data;
1283        mutex_init(&data->update_lock);
1284
1285        /* Fill in the chip specific driver values */
1286        switch (data->type) {
1287        case adm1027:
1288        case adt7463:
1289        case emc6d100:
1290        case emc6d102:
1291                data->freq_map = adm1027_freq_map;
1292                break;
1293        default:
1294                data->freq_map = lm85_freq_map;
1295        }
1296
1297        /* Set the VRM version */
1298        data->vrm = vid_which_vrm();
1299
1300        /* Initialize the LM85 chip */
1301        lm85_init_client(client);
1302
1303        /* Register sysfs hooks */
1304        err = sysfs_create_group(&client->dev.kobj, &lm85_group);
1305        if (err)
1306                goto err_kfree;
1307
1308        /* The ADT7463/68 have an optional VRM 10 mode where pin 21 is used
1309           as a sixth digital VID input rather than an analog input. */
1310        data->vid = lm85_read_value(client, LM85_REG_VID);
1311        if (!((data->type == adt7463 || data->type == adt7468) &&
1312            (data->vid & 0x80)))
1313                if ((err = sysfs_create_group(&client->dev.kobj,
1314                                        &lm85_group_in4)))
1315                        goto err_remove_files;
1316
1317        /* The EMC6D100 has 3 additional voltage inputs */
1318        if (data->type == emc6d100)
1319                if ((err = sysfs_create_group(&client->dev.kobj,
1320                                        &lm85_group_in567)))
1321                        goto err_remove_files;
1322
1323        data->hwmon_dev = hwmon_device_register(&client->dev);
1324        if (IS_ERR(data->hwmon_dev)) {
1325                err = PTR_ERR(data->hwmon_dev);
1326                goto err_remove_files;
1327        }
1328
1329        return 0;
1330
1331        /* Error out and cleanup code */
1332 err_remove_files:
1333        sysfs_remove_group(&client->dev.kobj, &lm85_group);
1334        sysfs_remove_group(&client->dev.kobj, &lm85_group_in4);
1335        if (data->type == emc6d100)
1336                sysfs_remove_group(&client->dev.kobj, &lm85_group_in567);
1337 err_kfree:
1338        kfree(data);
1339        return err;
1340}
1341
1342static int lm85_remove(struct i2c_client *client)
1343{
1344        struct lm85_data *data = i2c_get_clientdata(client);
1345        hwmon_device_unregister(data->hwmon_dev);
1346        sysfs_remove_group(&client->dev.kobj, &lm85_group);
1347        sysfs_remove_group(&client->dev.kobj, &lm85_group_in4);
1348        if (data->type == emc6d100)
1349                sysfs_remove_group(&client->dev.kobj, &lm85_group_in567);
1350        kfree(data);
1351        return 0;
1352}
1353
1354
1355static int lm85_read_value(struct i2c_client *client, u8 reg)
1356{
1357        int res;
1358
1359        /* What size location is it? */
1360        switch (reg) {
1361        case LM85_REG_FAN(0):  /* Read WORD data */
1362        case LM85_REG_FAN(1):
1363        case LM85_REG_FAN(2):
1364        case LM85_REG_FAN(3):
1365        case LM85_REG_FAN_MIN(0):
1366        case LM85_REG_FAN_MIN(1):
1367        case LM85_REG_FAN_MIN(2):
1368        case LM85_REG_FAN_MIN(3):
1369        case LM85_REG_ALARM1:   /* Read both bytes at once */
1370                res = i2c_smbus_read_byte_data(client, reg) & 0xff;
1371                res |= i2c_smbus_read_byte_data(client, reg + 1) << 8;
1372                break;
1373        default:        /* Read BYTE data */
1374                res = i2c_smbus_read_byte_data(client, reg);
1375                break;
1376        }
1377
1378        return res;
1379}
1380
1381static void lm85_write_value(struct i2c_client *client, u8 reg, int value)
1382{
1383        switch (reg) {
1384        case LM85_REG_FAN(0):  /* Write WORD data */
1385        case LM85_REG_FAN(1):
1386        case LM85_REG_FAN(2):
1387        case LM85_REG_FAN(3):
1388        case LM85_REG_FAN_MIN(0):
1389        case LM85_REG_FAN_MIN(1):
1390        case LM85_REG_FAN_MIN(2):
1391        case LM85_REG_FAN_MIN(3):
1392        /* NOTE: ALARM is read only, so not included here */
1393                i2c_smbus_write_byte_data(client, reg, value & 0xff);
1394                i2c_smbus_write_byte_data(client, reg + 1, value >> 8);
1395                break;
1396        default:        /* Write BYTE data */
1397                i2c_smbus_write_byte_data(client, reg, value);
1398                break;
1399        }
1400}
1401
1402static struct lm85_data *lm85_update_device(struct device *dev)
1403{
1404        struct i2c_client *client = to_i2c_client(dev);
1405        struct lm85_data *data = i2c_get_clientdata(client);
1406        int i;
1407
1408        mutex_lock(&data->update_lock);
1409
1410        if (!data->valid ||
1411             time_after(jiffies, data->last_reading + LM85_DATA_INTERVAL)) {
1412                /* Things that change quickly */
1413                dev_dbg(&client->dev, "Reading sensor values\n");
1414
1415                /* Have to read extended bits first to "freeze" the
1416                 * more significant bits that are read later.
1417                 * There are 2 additional resolution bits per channel and we
1418                 * have room for 4, so we shift them to the left.
1419                 */
1420                if (data->type == adm1027 || data->type == adt7463 ||
1421                    data->type == adt7468) {
1422                        int ext1 = lm85_read_value(client,
1423                                                   ADM1027_REG_EXTEND_ADC1);
1424                        int ext2 =  lm85_read_value(client,
1425                                                    ADM1027_REG_EXTEND_ADC2);
1426                        int val = (ext1 << 8) + ext2;
1427
1428                        for (i = 0; i <= 4; i++)
1429                                data->in_ext[i] =
1430                                        ((val >> (i * 2)) & 0x03) << 2;
1431
1432                        for (i = 0; i <= 2; i++)
1433                                data->temp_ext[i] =
1434                                        (val >> ((i + 4) * 2)) & 0x0c;
1435                }
1436
1437                data->vid = lm85_read_value(client, LM85_REG_VID);
1438
1439                for (i = 0; i <= 3; ++i) {
1440                        data->in[i] =
1441                            lm85_read_value(client, LM85_REG_IN(i));
1442                        data->fan[i] =
1443                            lm85_read_value(client, LM85_REG_FAN(i));
1444                }
1445
1446                if (!((data->type == adt7463 || data->type == adt7468) &&
1447                    (data->vid & 0x80))) {
1448                        data->in[4] = lm85_read_value(client,
1449                                      LM85_REG_IN(4));
1450                }
1451
1452                if (data->type == adt7468)
1453                        data->cfg5 = lm85_read_value(client, ADT7468_REG_CFG5);
1454
1455                for (i = 0; i <= 2; ++i) {
1456                        data->temp[i] =
1457                            lm85_read_value(client, LM85_REG_TEMP(i));
1458                        data->pwm[i] =
1459                            lm85_read_value(client, LM85_REG_PWM(i));
1460
1461                        if (IS_ADT7468_OFF64(data))
1462                                data->temp[i] -= 64;
1463                }
1464
1465                data->alarms = lm85_read_value(client, LM85_REG_ALARM1);
1466
1467                if (data->type == emc6d100) {
1468                        /* Three more voltage sensors */
1469                        for (i = 5; i <= 7; ++i) {
1470                                data->in[i] = lm85_read_value(client,
1471                                                        EMC6D100_REG_IN(i));
1472                        }
1473                        /* More alarm bits */
1474                        data->alarms |= lm85_read_value(client,
1475                                                EMC6D100_REG_ALARM3) << 16;
1476                } else if (data->type == emc6d102) {
1477                        /* Have to read LSB bits after the MSB ones because
1478                           the reading of the MSB bits has frozen the
1479                           LSBs (backward from the ADM1027).
1480                         */
1481                        int ext1 = lm85_read_value(client,
1482                                                   EMC6D102_REG_EXTEND_ADC1);
1483                        int ext2 = lm85_read_value(client,
1484                                                   EMC6D102_REG_EXTEND_ADC2);
1485                        int ext3 = lm85_read_value(client,
1486                                                   EMC6D102_REG_EXTEND_ADC3);
1487                        int ext4 = lm85_read_value(client,
1488                                                   EMC6D102_REG_EXTEND_ADC4);
1489                        data->in_ext[0] = ext3 & 0x0f;
1490                        data->in_ext[1] = ext4 & 0x0f;
1491                        data->in_ext[2] = ext4 >> 4;
1492                        data->in_ext[3] = ext3 >> 4;
1493                        data->in_ext[4] = ext2 >> 4;
1494
1495                        data->temp_ext[0] = ext1 & 0x0f;
1496                        data->temp_ext[1] = ext2 & 0x0f;
1497                        data->temp_ext[2] = ext1 >> 4;
1498                }
1499
1500                data->last_reading = jiffies;
1501        }  /* last_reading */
1502
1503        if (!data->valid ||
1504             time_after(jiffies, data->last_config + LM85_CONFIG_INTERVAL)) {
1505                /* Things that don't change often */
1506                dev_dbg(&client->dev, "Reading config values\n");
1507
1508                for (i = 0; i <= 3; ++i) {
1509                        data->in_min[i] =
1510                            lm85_read_value(client, LM85_REG_IN_MIN(i));
1511                        data->in_max[i] =
1512                            lm85_read_value(client, LM85_REG_IN_MAX(i));
1513                        data->fan_min[i] =
1514                            lm85_read_value(client, LM85_REG_FAN_MIN(i));
1515                }
1516
1517                if (!((data->type == adt7463 || data->type == adt7468) &&
1518                    (data->vid & 0x80))) {
1519                        data->in_min[4] = lm85_read_value(client,
1520                                          LM85_REG_IN_MIN(4));
1521                        data->in_max[4] = lm85_read_value(client,
1522                                          LM85_REG_IN_MAX(4));
1523                }
1524
1525                if (data->type == emc6d100) {
1526                        for (i = 5; i <= 7; ++i) {
1527                                data->in_min[i] = lm85_read_value(client,
1528                                                EMC6D100_REG_IN_MIN(i));
1529                                data->in_max[i] = lm85_read_value(client,
1530                                                EMC6D100_REG_IN_MAX(i));
1531                        }
1532                }
1533
1534                for (i = 0; i <= 2; ++i) {
1535                        int val;
1536
1537                        data->temp_min[i] =
1538                            lm85_read_value(client, LM85_REG_TEMP_MIN(i));
1539                        data->temp_max[i] =
1540                            lm85_read_value(client, LM85_REG_TEMP_MAX(i));
1541
1542                        data->autofan[i].config =
1543                            lm85_read_value(client, LM85_REG_AFAN_CONFIG(i));
1544                        val = lm85_read_value(client, LM85_REG_AFAN_RANGE(i));
1545                        data->pwm_freq[i] = val & 0x07;
1546                        data->zone[i].range = val >> 4;
1547                        data->autofan[i].min_pwm =
1548                            lm85_read_value(client, LM85_REG_AFAN_MINPWM(i));
1549                        data->zone[i].limit =
1550                            lm85_read_value(client, LM85_REG_AFAN_LIMIT(i));
1551                        data->zone[i].critical =
1552                            lm85_read_value(client, LM85_REG_AFAN_CRITICAL(i));
1553
1554                        if (IS_ADT7468_OFF64(data)) {
1555                                data->temp_min[i] -= 64;
1556                                data->temp_max[i] -= 64;
1557                                data->zone[i].limit -= 64;
1558                                data->zone[i].critical -= 64;
1559                        }
1560                }
1561
1562                i = lm85_read_value(client, LM85_REG_AFAN_SPIKE1);
1563                data->autofan[0].min_off = (i & 0x20) != 0;
1564                data->autofan[1].min_off = (i & 0x40) != 0;
1565                data->autofan[2].min_off = (i & 0x80) != 0;
1566
1567                i = lm85_read_value(client, LM85_REG_AFAN_HYST1);
1568                data->zone[0].hyst = i >> 4;
1569                data->zone[1].hyst = i & 0x0f;
1570
1571                i = lm85_read_value(client, LM85_REG_AFAN_HYST2);
1572                data->zone[2].hyst = i >> 4;
1573
1574                data->last_config = jiffies;
1575        }  /* last_config */
1576
1577        data->valid = 1;
1578
1579        mutex_unlock(&data->update_lock);
1580
1581        return data;
1582}
1583
1584
1585static int __init sm_lm85_init(void)
1586{
1587        return i2c_add_driver(&lm85_driver);
1588}
1589
1590static void __exit sm_lm85_exit(void)
1591{
1592        i2c_del_driver(&lm85_driver);
1593}
1594
1595MODULE_LICENSE("GPL");
1596MODULE_AUTHOR("Philip Pokorny <ppokorny@penguincomputing.com>, "
1597        "Margit Schubert-While <margitsw@t-online.de>, "
1598        "Justin Thiessen <jthiessen@penguincomputing.com>");
1599MODULE_DESCRIPTION("LM85-B, LM85-C driver");
1600
1601module_init(sm_lm85_init);
1602module_exit(sm_lm85_exit);
1603
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.