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