linux/drivers/hwmon/adt7470.c
<<
>>
Prefs
   1/*
   2 * A hwmon driver for the Analog Devices ADT7470
   3 * Copyright (C) 2007 IBM
   4 *
   5 * Author: Darrick J. Wong <darrick.wong@oracle.com>
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License as published by
   9 * the Free Software Foundation; either version 2 of the License, or
  10 * (at your option) any later version.
  11 *
  12 * This program is distributed in the hope that it will be useful,
  13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 * GNU General Public License for more details.
  16 *
  17 * You should have received a copy of the GNU General Public License
  18 * along with this program; if not, write to the Free Software
  19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  20 */
  21
  22#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  23
  24#include <linux/module.h>
  25#include <linux/jiffies.h>
  26#include <linux/i2c.h>
  27#include <linux/hwmon.h>
  28#include <linux/hwmon-sysfs.h>
  29#include <linux/err.h>
  30#include <linux/mutex.h>
  31#include <linux/delay.h>
  32#include <linux/log2.h>
  33#include <linux/kthread.h>
  34#include <linux/slab.h>
  35#include <linux/util_macros.h>
  36
  37/* Addresses to scan */
  38static const unsigned short normal_i2c[] = { 0x2C, 0x2E, 0x2F, I2C_CLIENT_END };
  39
  40/* ADT7470 registers */
  41#define ADT7470_REG_BASE_ADDR                   0x20
  42#define ADT7470_REG_TEMP_BASE_ADDR              0x20
  43#define ADT7470_REG_TEMP_MAX_ADDR               0x29
  44#define ADT7470_REG_FAN_BASE_ADDR               0x2A
  45#define ADT7470_REG_FAN_MAX_ADDR                0x31
  46#define ADT7470_REG_PWM_BASE_ADDR               0x32
  47#define ADT7470_REG_PWM_MAX_ADDR                0x35
  48#define ADT7470_REG_PWM_MAX_BASE_ADDR           0x38
  49#define ADT7470_REG_PWM_MAX_MAX_ADDR            0x3B
  50#define ADT7470_REG_CFG                         0x40
  51#define         ADT7470_FSPD_MASK               0x04
  52#define ADT7470_REG_ALARM1                      0x41
  53#define         ADT7470_R1T_ALARM               0x01
  54#define         ADT7470_R2T_ALARM               0x02
  55#define         ADT7470_R3T_ALARM               0x04
  56#define         ADT7470_R4T_ALARM               0x08
  57#define         ADT7470_R5T_ALARM               0x10
  58#define         ADT7470_R6T_ALARM               0x20
  59#define         ADT7470_R7T_ALARM               0x40
  60#define         ADT7470_OOL_ALARM               0x80
  61#define ADT7470_REG_ALARM2                      0x42
  62#define         ADT7470_R8T_ALARM               0x01
  63#define         ADT7470_R9T_ALARM               0x02
  64#define         ADT7470_R10T_ALARM              0x04
  65#define         ADT7470_FAN1_ALARM              0x10
  66#define         ADT7470_FAN2_ALARM              0x20
  67#define         ADT7470_FAN3_ALARM              0x40
  68#define         ADT7470_FAN4_ALARM              0x80
  69#define ADT7470_REG_TEMP_LIMITS_BASE_ADDR       0x44
  70#define ADT7470_REG_TEMP_LIMITS_MAX_ADDR        0x57
  71#define ADT7470_REG_FAN_MIN_BASE_ADDR           0x58
  72#define ADT7470_REG_FAN_MIN_MAX_ADDR            0x5F
  73#define ADT7470_REG_FAN_MAX_BASE_ADDR           0x60
  74#define ADT7470_REG_FAN_MAX_MAX_ADDR            0x67
  75#define ADT7470_REG_PWM_CFG_BASE_ADDR           0x68
  76#define ADT7470_REG_PWM12_CFG                   0x68
  77#define         ADT7470_PWM2_AUTO_MASK          0x40
  78#define         ADT7470_PWM1_AUTO_MASK          0x80
  79#define         ADT7470_PWM_AUTO_MASK           0xC0
  80#define ADT7470_REG_PWM34_CFG                   0x69
  81#define         ADT7470_PWM3_AUTO_MASK          0x40
  82#define         ADT7470_PWM4_AUTO_MASK          0x80
  83#define ADT7470_REG_PWM_MIN_BASE_ADDR           0x6A
  84#define ADT7470_REG_PWM_MIN_MAX_ADDR            0x6D
  85#define ADT7470_REG_PWM_TEMP_MIN_BASE_ADDR      0x6E
  86#define ADT7470_REG_PWM_TEMP_MIN_MAX_ADDR       0x71
  87#define ADT7470_REG_CFG_2                       0x74
  88#define ADT7470_REG_ACOUSTICS12                 0x75
  89#define ADT7470_REG_ACOUSTICS34                 0x76
  90#define ADT7470_REG_DEVICE                      0x3D
  91#define ADT7470_REG_VENDOR                      0x3E
  92#define ADT7470_REG_REVISION                    0x3F
  93#define ADT7470_REG_ALARM1_MASK                 0x72
  94#define ADT7470_REG_ALARM2_MASK                 0x73
  95#define ADT7470_REG_PWM_AUTO_TEMP_BASE_ADDR     0x7C
  96#define ADT7470_REG_PWM_AUTO_TEMP_MAX_ADDR      0x7D
  97#define ADT7470_REG_MAX_ADDR                    0x81
  98
  99#define ADT7470_TEMP_COUNT      10
 100#define ADT7470_TEMP_REG(x)     (ADT7470_REG_TEMP_BASE_ADDR + (x))
 101#define ADT7470_TEMP_MIN_REG(x) (ADT7470_REG_TEMP_LIMITS_BASE_ADDR + ((x) * 2))
 102#define ADT7470_TEMP_MAX_REG(x) (ADT7470_REG_TEMP_LIMITS_BASE_ADDR + \
 103                                ((x) * 2) + 1)
 104
 105#define ADT7470_FAN_COUNT       4
 106#define ADT7470_REG_FAN(x)      (ADT7470_REG_FAN_BASE_ADDR + ((x) * 2))
 107#define ADT7470_REG_FAN_MIN(x)  (ADT7470_REG_FAN_MIN_BASE_ADDR + ((x) * 2))
 108#define ADT7470_REG_FAN_MAX(x)  (ADT7470_REG_FAN_MAX_BASE_ADDR + ((x) * 2))
 109
 110#define ADT7470_PWM_COUNT       4
 111#define ADT7470_REG_PWM(x)      (ADT7470_REG_PWM_BASE_ADDR + (x))
 112#define ADT7470_REG_PWM_MAX(x)  (ADT7470_REG_PWM_MAX_BASE_ADDR + (x))
 113#define ADT7470_REG_PWM_MIN(x)  (ADT7470_REG_PWM_MIN_BASE_ADDR + (x))
 114#define ADT7470_REG_PWM_TMIN(x) (ADT7470_REG_PWM_TEMP_MIN_BASE_ADDR + (x))
 115#define ADT7470_REG_PWM_CFG(x)  (ADT7470_REG_PWM_CFG_BASE_ADDR + ((x) / 2))
 116#define ADT7470_REG_PWM_AUTO_TEMP(x)    (ADT7470_REG_PWM_AUTO_TEMP_BASE_ADDR + \
 117                                        ((x) / 2))
 118
 119#define ALARM2(x)               ((x) << 8)
 120
 121#define ADT7470_VENDOR          0x41
 122#define ADT7470_DEVICE          0x70
 123/* datasheet only mentions a revision 2 */
 124#define ADT7470_REVISION        0x02
 125
 126/* "all temps" according to hwmon sysfs interface spec */
 127#define ADT7470_PWM_ALL_TEMPS   0x3FF
 128
 129/* How often do we reread sensors values? (In jiffies) */
 130#define SENSOR_REFRESH_INTERVAL (5 * HZ)
 131
 132/* How often do we reread sensor limit values? (In jiffies) */
 133#define LIMIT_REFRESH_INTERVAL  (60 * HZ)
 134
 135/* Wait at least 200ms per sensor for 10 sensors */
 136#define TEMP_COLLECTION_TIME    2000
 137
 138/* auto update thing won't fire more than every 2s */
 139#define AUTO_UPDATE_INTERVAL    2000
 140
 141/* datasheet says to divide this number by the fan reading to get fan rpm */
 142#define FAN_PERIOD_TO_RPM(x)    ((90000 * 60) / (x))
 143#define FAN_RPM_TO_PERIOD       FAN_PERIOD_TO_RPM
 144#define FAN_PERIOD_INVALID      65535
 145#define FAN_DATA_VALID(x)       ((x) && (x) != FAN_PERIOD_INVALID)
 146
 147/* Config registers 1 and 2 include fields for selecting the PWM frequency */
 148#define ADT7470_CFG_LF          0x40
 149#define ADT7470_FREQ_MASK       0x70
 150#define ADT7470_FREQ_SHIFT      4
 151
 152struct adt7470_data {
 153        struct i2c_client       *client;
 154        struct mutex            lock;
 155        char                    sensors_valid;
 156        char                    limits_valid;
 157        unsigned long           sensors_last_updated;   /* In jiffies */
 158        unsigned long           limits_last_updated;    /* In jiffies */
 159
 160        int                     num_temp_sensors;       /* -1 = probe */
 161        int                     temperatures_probed;
 162
 163        s8                      temp[ADT7470_TEMP_COUNT];
 164        s8                      temp_min[ADT7470_TEMP_COUNT];
 165        s8                      temp_max[ADT7470_TEMP_COUNT];
 166        u16                     fan[ADT7470_FAN_COUNT];
 167        u16                     fan_min[ADT7470_FAN_COUNT];
 168        u16                     fan_max[ADT7470_FAN_COUNT];
 169        u16                     alarm;
 170        u16                     alarms_mask;
 171        u8                      force_pwm_max;
 172        u8                      pwm[ADT7470_PWM_COUNT];
 173        u8                      pwm_max[ADT7470_PWM_COUNT];
 174        u8                      pwm_automatic[ADT7470_PWM_COUNT];
 175        u8                      pwm_min[ADT7470_PWM_COUNT];
 176        s8                      pwm_tmin[ADT7470_PWM_COUNT];
 177        u8                      pwm_auto_temp[ADT7470_PWM_COUNT];
 178
 179        struct task_struct      *auto_update;
 180        unsigned int            auto_update_interval;
 181};
 182
 183/*
 184 * 16-bit registers on the ADT7470 are low-byte first.  The data sheet says
 185 * that the low byte must be read before the high byte.
 186 */
 187static inline int adt7470_read_word_data(struct i2c_client *client, u8 reg)
 188{
 189        u16 foo;
 190        foo = i2c_smbus_read_byte_data(client, reg);
 191        foo |= ((u16)i2c_smbus_read_byte_data(client, reg + 1) << 8);
 192        return foo;
 193}
 194
 195static inline int adt7470_write_word_data(struct i2c_client *client, u8 reg,
 196                                          u16 value)
 197{
 198        return i2c_smbus_write_byte_data(client, reg, value & 0xFF)
 199               || i2c_smbus_write_byte_data(client, reg + 1, value >> 8);
 200}
 201
 202/* Probe for temperature sensors.  Assumes lock is held */
 203static int adt7470_read_temperatures(struct i2c_client *client,
 204                                     struct adt7470_data *data)
 205{
 206        unsigned long res;
 207        int i;
 208        u8 cfg, pwm[4], pwm_cfg[2];
 209
 210        /* save pwm[1-4] config register */
 211        pwm_cfg[0] = i2c_smbus_read_byte_data(client, ADT7470_REG_PWM_CFG(0));
 212        pwm_cfg[1] = i2c_smbus_read_byte_data(client, ADT7470_REG_PWM_CFG(2));
 213
 214        /* set manual pwm to whatever it is set to now */
 215        for (i = 0; i < ADT7470_FAN_COUNT; i++)
 216                pwm[i] = i2c_smbus_read_byte_data(client, ADT7470_REG_PWM(i));
 217
 218        /* put pwm in manual mode */
 219        i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(0),
 220                pwm_cfg[0] & ~(ADT7470_PWM_AUTO_MASK));
 221        i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(2),
 222                pwm_cfg[1] & ~(ADT7470_PWM_AUTO_MASK));
 223
 224        /* write pwm control to whatever it was */
 225        for (i = 0; i < ADT7470_FAN_COUNT; i++)
 226                i2c_smbus_write_byte_data(client, ADT7470_REG_PWM(i), pwm[i]);
 227
 228        /* start reading temperature sensors */
 229        cfg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
 230        cfg |= 0x80;
 231        i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, cfg);
 232
 233        /* Delay is 200ms * number of temp sensors. */
 234        res = msleep_interruptible((data->num_temp_sensors >= 0 ?
 235                                    data->num_temp_sensors * 200 :
 236                                    TEMP_COLLECTION_TIME));
 237
 238        /* done reading temperature sensors */
 239        cfg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
 240        cfg &= ~0x80;
 241        i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, cfg);
 242
 243        /* restore pwm[1-4] config registers */
 244        i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(0), pwm_cfg[0]);
 245        i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(2), pwm_cfg[1]);
 246
 247        if (res) {
 248                pr_err("ha ha, interrupted\n");
 249                return -EAGAIN;
 250        }
 251
 252        /* Only count fans if we have to */
 253        if (data->num_temp_sensors >= 0)
 254                return 0;
 255
 256        for (i = 0; i < ADT7470_TEMP_COUNT; i++) {
 257                data->temp[i] = i2c_smbus_read_byte_data(client,
 258                                                ADT7470_TEMP_REG(i));
 259                if (data->temp[i])
 260                        data->num_temp_sensors = i + 1;
 261        }
 262        data->temperatures_probed = 1;
 263        return 0;
 264}
 265
 266static int adt7470_update_thread(void *p)
 267{
 268        struct i2c_client *client = p;
 269        struct adt7470_data *data = i2c_get_clientdata(client);
 270
 271        while (!kthread_should_stop()) {
 272                mutex_lock(&data->lock);
 273                adt7470_read_temperatures(client, data);
 274                mutex_unlock(&data->lock);
 275
 276                set_current_state(TASK_INTERRUPTIBLE);
 277                if (kthread_should_stop())
 278                        break;
 279
 280                schedule_timeout(msecs_to_jiffies(data->auto_update_interval));
 281        }
 282
 283        return 0;
 284}
 285
 286static struct adt7470_data *adt7470_update_device(struct device *dev)
 287{
 288        struct adt7470_data *data = dev_get_drvdata(dev);
 289        struct i2c_client *client = data->client;
 290        unsigned long local_jiffies = jiffies;
 291        u8 cfg;
 292        int i;
 293        int need_sensors = 1;
 294        int need_limits = 1;
 295
 296        /*
 297         * Figure out if we need to update the shadow registers.
 298         * Lockless means that we may occasionally report out of
 299         * date data.
 300         */
 301        if (time_before(local_jiffies, data->sensors_last_updated +
 302                        SENSOR_REFRESH_INTERVAL) &&
 303            data->sensors_valid)
 304                need_sensors = 0;
 305
 306        if (time_before(local_jiffies, data->limits_last_updated +
 307                        LIMIT_REFRESH_INTERVAL) &&
 308            data->limits_valid)
 309                need_limits = 0;
 310
 311        if (!need_sensors && !need_limits)
 312                return data;
 313
 314        mutex_lock(&data->lock);
 315        if (!need_sensors)
 316                goto no_sensor_update;
 317
 318        if (!data->temperatures_probed)
 319                adt7470_read_temperatures(client, data);
 320        else
 321                for (i = 0; i < ADT7470_TEMP_COUNT; i++)
 322                        data->temp[i] = i2c_smbus_read_byte_data(client,
 323                                                ADT7470_TEMP_REG(i));
 324
 325        for (i = 0; i < ADT7470_FAN_COUNT; i++)
 326                data->fan[i] = adt7470_read_word_data(client,
 327                                                ADT7470_REG_FAN(i));
 328
 329        for (i = 0; i < ADT7470_PWM_COUNT; i++) {
 330                int reg;
 331                int reg_mask;
 332
 333                data->pwm[i] = i2c_smbus_read_byte_data(client,
 334                                                ADT7470_REG_PWM(i));
 335
 336                if (i % 2)
 337                        reg_mask = ADT7470_PWM2_AUTO_MASK;
 338                else
 339                        reg_mask = ADT7470_PWM1_AUTO_MASK;
 340
 341                reg = ADT7470_REG_PWM_CFG(i);
 342                if (i2c_smbus_read_byte_data(client, reg) & reg_mask)
 343                        data->pwm_automatic[i] = 1;
 344                else
 345                        data->pwm_automatic[i] = 0;
 346
 347                reg = ADT7470_REG_PWM_AUTO_TEMP(i);
 348                cfg = i2c_smbus_read_byte_data(client, reg);
 349                if (!(i % 2))
 350                        data->pwm_auto_temp[i] = cfg >> 4;
 351                else
 352                        data->pwm_auto_temp[i] = cfg & 0xF;
 353        }
 354
 355        if (i2c_smbus_read_byte_data(client, ADT7470_REG_CFG) &
 356            ADT7470_FSPD_MASK)
 357                data->force_pwm_max = 1;
 358        else
 359                data->force_pwm_max = 0;
 360
 361        data->alarm = i2c_smbus_read_byte_data(client, ADT7470_REG_ALARM1);
 362        if (data->alarm & ADT7470_OOL_ALARM)
 363                data->alarm |= ALARM2(i2c_smbus_read_byte_data(client,
 364                                                        ADT7470_REG_ALARM2));
 365        data->alarms_mask = adt7470_read_word_data(client,
 366                                                   ADT7470_REG_ALARM1_MASK);
 367
 368        data->sensors_last_updated = local_jiffies;
 369        data->sensors_valid = 1;
 370
 371no_sensor_update:
 372        if (!need_limits)
 373                goto out;
 374
 375        for (i = 0; i < ADT7470_TEMP_COUNT; i++) {
 376                data->temp_min[i] = i2c_smbus_read_byte_data(client,
 377                                                ADT7470_TEMP_MIN_REG(i));
 378                data->temp_max[i] = i2c_smbus_read_byte_data(client,
 379                                                ADT7470_TEMP_MAX_REG(i));
 380        }
 381
 382        for (i = 0; i < ADT7470_FAN_COUNT; i++) {
 383                data->fan_min[i] = adt7470_read_word_data(client,
 384                                                ADT7470_REG_FAN_MIN(i));
 385                data->fan_max[i] = adt7470_read_word_data(client,
 386                                                ADT7470_REG_FAN_MAX(i));
 387        }
 388
 389        for (i = 0; i < ADT7470_PWM_COUNT; i++) {
 390                data->pwm_max[i] = i2c_smbus_read_byte_data(client,
 391                                                ADT7470_REG_PWM_MAX(i));
 392                data->pwm_min[i] = i2c_smbus_read_byte_data(client,
 393                                                ADT7470_REG_PWM_MIN(i));
 394                data->pwm_tmin[i] = i2c_smbus_read_byte_data(client,
 395                                                ADT7470_REG_PWM_TMIN(i));
 396        }
 397
 398        data->limits_last_updated = local_jiffies;
 399        data->limits_valid = 1;
 400
 401out:
 402        mutex_unlock(&data->lock);
 403        return data;
 404}
 405
 406static ssize_t show_auto_update_interval(struct device *dev,
 407                                         struct device_attribute *devattr,
 408                                         char *buf)
 409{
 410        struct adt7470_data *data = adt7470_update_device(dev);
 411        return sprintf(buf, "%d\n", data->auto_update_interval);
 412}
 413
 414static ssize_t set_auto_update_interval(struct device *dev,
 415                                        struct device_attribute *devattr,
 416                                        const char *buf,
 417                                        size_t count)
 418{
 419        struct adt7470_data *data = dev_get_drvdata(dev);
 420        long temp;
 421
 422        if (kstrtol(buf, 10, &temp))
 423                return -EINVAL;
 424
 425        temp = clamp_val(temp, 0, 60000);
 426
 427        mutex_lock(&data->lock);
 428        data->auto_update_interval = temp;
 429        mutex_unlock(&data->lock);
 430
 431        return count;
 432}
 433
 434static ssize_t show_num_temp_sensors(struct device *dev,
 435                                     struct device_attribute *devattr,
 436                                     char *buf)
 437{
 438        struct adt7470_data *data = adt7470_update_device(dev);
 439        return sprintf(buf, "%d\n", data->num_temp_sensors);
 440}
 441
 442static ssize_t set_num_temp_sensors(struct device *dev,
 443                                    struct device_attribute *devattr,
 444                                    const char *buf,
 445                                    size_t count)
 446{
 447        struct adt7470_data *data = dev_get_drvdata(dev);
 448        long temp;
 449
 450        if (kstrtol(buf, 10, &temp))
 451                return -EINVAL;
 452
 453        temp = clamp_val(temp, -1, 10);
 454
 455        mutex_lock(&data->lock);
 456        data->num_temp_sensors = temp;
 457        if (temp < 0)
 458                data->temperatures_probed = 0;
 459        mutex_unlock(&data->lock);
 460
 461        return count;
 462}
 463
 464static ssize_t show_temp_min(struct device *dev,
 465                             struct device_attribute *devattr,
 466                             char *buf)
 467{
 468        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 469        struct adt7470_data *data = adt7470_update_device(dev);
 470        return sprintf(buf, "%d\n", 1000 * data->temp_min[attr->index]);
 471}
 472
 473static ssize_t set_temp_min(struct device *dev,
 474                            struct device_attribute *devattr,
 475                            const char *buf,
 476                            size_t count)
 477{
 478        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 479        struct adt7470_data *data = dev_get_drvdata(dev);
 480        struct i2c_client *client = data->client;
 481        long temp;
 482
 483        if (kstrtol(buf, 10, &temp))
 484                return -EINVAL;
 485
 486        temp = DIV_ROUND_CLOSEST(temp, 1000);
 487        temp = clamp_val(temp, -128, 127);
 488
 489        mutex_lock(&data->lock);
 490        data->temp_min[attr->index] = temp;
 491        i2c_smbus_write_byte_data(client, ADT7470_TEMP_MIN_REG(attr->index),
 492                                  temp);
 493        mutex_unlock(&data->lock);
 494
 495        return count;
 496}
 497
 498static ssize_t show_temp_max(struct device *dev,
 499                             struct device_attribute *devattr,
 500                             char *buf)
 501{
 502        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 503        struct adt7470_data *data = adt7470_update_device(dev);
 504        return sprintf(buf, "%d\n", 1000 * data->temp_max[attr->index]);
 505}
 506
 507static ssize_t set_temp_max(struct device *dev,
 508                            struct device_attribute *devattr,
 509                            const char *buf,
 510                            size_t count)
 511{
 512        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 513        struct adt7470_data *data = dev_get_drvdata(dev);
 514        struct i2c_client *client = data->client;
 515        long temp;
 516
 517        if (kstrtol(buf, 10, &temp))
 518                return -EINVAL;
 519
 520        temp = DIV_ROUND_CLOSEST(temp, 1000);
 521        temp = clamp_val(temp, -128, 127);
 522
 523        mutex_lock(&data->lock);
 524        data->temp_max[attr->index] = temp;
 525        i2c_smbus_write_byte_data(client, ADT7470_TEMP_MAX_REG(attr->index),
 526                                  temp);
 527        mutex_unlock(&data->lock);
 528
 529        return count;
 530}
 531
 532static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
 533                         char *buf)
 534{
 535        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 536        struct adt7470_data *data = adt7470_update_device(dev);
 537        return sprintf(buf, "%d\n", 1000 * data->temp[attr->index]);
 538}
 539
 540static ssize_t show_alarm_mask(struct device *dev,
 541                           struct device_attribute *devattr,
 542                           char *buf)
 543{
 544        struct adt7470_data *data = adt7470_update_device(dev);
 545
 546        return sprintf(buf, "%x\n", data->alarms_mask);
 547}
 548
 549static ssize_t set_alarm_mask(struct device *dev,
 550                              struct device_attribute *devattr,
 551                              const char *buf,
 552                              size_t count)
 553{
 554        struct adt7470_data *data = dev_get_drvdata(dev);
 555        long mask;
 556
 557        if (kstrtoul(buf, 0, &mask))
 558                return -EINVAL;
 559
 560        if (mask & ~0xffff)
 561                return -EINVAL;
 562
 563        mutex_lock(&data->lock);
 564        data->alarms_mask = mask;
 565        adt7470_write_word_data(data->client, ADT7470_REG_ALARM1_MASK, mask);
 566        mutex_unlock(&data->lock);
 567
 568        return count;
 569}
 570
 571static ssize_t show_fan_max(struct device *dev,
 572                            struct device_attribute *devattr,
 573                            char *buf)
 574{
 575        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 576        struct adt7470_data *data = adt7470_update_device(dev);
 577
 578        if (FAN_DATA_VALID(data->fan_max[attr->index]))
 579                return sprintf(buf, "%d\n",
 580                               FAN_PERIOD_TO_RPM(data->fan_max[attr->index]));
 581        else
 582                return sprintf(buf, "0\n");
 583}
 584
 585static ssize_t set_fan_max(struct device *dev,
 586                           struct device_attribute *devattr,
 587                           const char *buf, size_t count)
 588{
 589        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 590        struct adt7470_data *data = dev_get_drvdata(dev);
 591        struct i2c_client *client = data->client;
 592        long temp;
 593
 594        if (kstrtol(buf, 10, &temp) || !temp)
 595                return -EINVAL;
 596
 597        temp = FAN_RPM_TO_PERIOD(temp);
 598        temp = clamp_val(temp, 1, 65534);
 599
 600        mutex_lock(&data->lock);
 601        data->fan_max[attr->index] = temp;
 602        adt7470_write_word_data(client, ADT7470_REG_FAN_MAX(attr->index), temp);
 603        mutex_unlock(&data->lock);
 604
 605        return count;
 606}
 607
 608static ssize_t show_fan_min(struct device *dev,
 609                            struct device_attribute *devattr,
 610                            char *buf)
 611{
 612        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 613        struct adt7470_data *data = adt7470_update_device(dev);
 614
 615        if (FAN_DATA_VALID(data->fan_min[attr->index]))
 616                return sprintf(buf, "%d\n",
 617                               FAN_PERIOD_TO_RPM(data->fan_min[attr->index]));
 618        else
 619                return sprintf(buf, "0\n");
 620}
 621
 622static ssize_t set_fan_min(struct device *dev,
 623                           struct device_attribute *devattr,
 624                           const char *buf, size_t count)
 625{
 626        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 627        struct adt7470_data *data = dev_get_drvdata(dev);
 628        struct i2c_client *client = data->client;
 629        long temp;
 630
 631        if (kstrtol(buf, 10, &temp) || !temp)
 632                return -EINVAL;
 633
 634        temp = FAN_RPM_TO_PERIOD(temp);
 635        temp = clamp_val(temp, 1, 65534);
 636
 637        mutex_lock(&data->lock);
 638        data->fan_min[attr->index] = temp;
 639        adt7470_write_word_data(client, ADT7470_REG_FAN_MIN(attr->index), temp);
 640        mutex_unlock(&data->lock);
 641
 642        return count;
 643}
 644
 645static ssize_t show_fan(struct device *dev, struct device_attribute *devattr,
 646                        char *buf)
 647{
 648        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 649        struct adt7470_data *data = adt7470_update_device(dev);
 650
 651        if (FAN_DATA_VALID(data->fan[attr->index]))
 652                return sprintf(buf, "%d\n",
 653                               FAN_PERIOD_TO_RPM(data->fan[attr->index]));
 654        else
 655                return sprintf(buf, "0\n");
 656}
 657
 658static ssize_t show_force_pwm_max(struct device *dev,
 659                                  struct device_attribute *devattr,
 660                                  char *buf)
 661{
 662        struct adt7470_data *data = adt7470_update_device(dev);
 663        return sprintf(buf, "%d\n", data->force_pwm_max);
 664}
 665
 666static ssize_t set_force_pwm_max(struct device *dev,
 667                                 struct device_attribute *devattr,
 668                                 const char *buf,
 669                                 size_t count)
 670{
 671        struct adt7470_data *data = dev_get_drvdata(dev);
 672        struct i2c_client *client = data->client;
 673        long temp;
 674        u8 reg;
 675
 676        if (kstrtol(buf, 10, &temp))
 677                return -EINVAL;
 678
 679        mutex_lock(&data->lock);
 680        data->force_pwm_max = temp;
 681        reg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
 682        if (temp)
 683                reg |= ADT7470_FSPD_MASK;
 684        else
 685                reg &= ~ADT7470_FSPD_MASK;
 686        i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, reg);
 687        mutex_unlock(&data->lock);
 688
 689        return count;
 690}
 691
 692static ssize_t show_pwm(struct device *dev, struct device_attribute *devattr,
 693                        char *buf)
 694{
 695        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 696        struct adt7470_data *data = adt7470_update_device(dev);
 697        return sprintf(buf, "%d\n", data->pwm[attr->index]);
 698}
 699
 700static ssize_t set_pwm(struct device *dev, struct device_attribute *devattr,
 701                        const char *buf, size_t count)
 702{
 703        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 704        struct adt7470_data *data = dev_get_drvdata(dev);
 705        struct i2c_client *client = data->client;
 706        long temp;
 707
 708        if (kstrtol(buf, 10, &temp))
 709                return -EINVAL;
 710
 711        temp = clamp_val(temp, 0, 255);
 712
 713        mutex_lock(&data->lock);
 714        data->pwm[attr->index] = temp;
 715        i2c_smbus_write_byte_data(client, ADT7470_REG_PWM(attr->index), temp);
 716        mutex_unlock(&data->lock);
 717
 718        return count;
 719}
 720
 721/* These are the valid PWM frequencies to the nearest Hz */
 722static const int adt7470_freq_map[] = {
 723        11, 15, 22, 29, 35, 44, 59, 88, 1400, 22500
 724};
 725
 726static ssize_t show_pwm_freq(struct device *dev,
 727                             struct device_attribute *devattr, char *buf)
 728{
 729        struct adt7470_data *data = adt7470_update_device(dev);
 730        unsigned char cfg_reg_1;
 731        unsigned char cfg_reg_2;
 732        int index;
 733
 734        mutex_lock(&data->lock);
 735        cfg_reg_1 = i2c_smbus_read_byte_data(data->client, ADT7470_REG_CFG);
 736        cfg_reg_2 = i2c_smbus_read_byte_data(data->client, ADT7470_REG_CFG_2);
 737        mutex_unlock(&data->lock);
 738
 739        index = (cfg_reg_2 & ADT7470_FREQ_MASK) >> ADT7470_FREQ_SHIFT;
 740        if (!(cfg_reg_1 & ADT7470_CFG_LF))
 741                index += 8;
 742        if (index >= ARRAY_SIZE(adt7470_freq_map))
 743                index = ARRAY_SIZE(adt7470_freq_map) - 1;
 744
 745        return scnprintf(buf, PAGE_SIZE, "%d\n", adt7470_freq_map[index]);
 746}
 747
 748static ssize_t set_pwm_freq(struct device *dev,
 749                            struct device_attribute *devattr,
 750                            const char *buf, size_t count)
 751{
 752        struct adt7470_data *data = dev_get_drvdata(dev);
 753        struct i2c_client *client = data->client;
 754        long freq;
 755        int index;
 756        int low_freq = ADT7470_CFG_LF;
 757        unsigned char val;
 758
 759        if (kstrtol(buf, 10, &freq))
 760                return -EINVAL;
 761
 762        /* Round the user value given to the closest available frequency */
 763        index = find_closest(freq, adt7470_freq_map,
 764                             ARRAY_SIZE(adt7470_freq_map));
 765
 766        if (index >= 8) {
 767                index -= 8;
 768                low_freq = 0;
 769        }
 770
 771        mutex_lock(&data->lock);
 772        /* Configuration Register 1 */
 773        val = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
 774        i2c_smbus_write_byte_data(client, ADT7470_REG_CFG,
 775                                  (val & ~ADT7470_CFG_LF) | low_freq);
 776        /* Configuration Register 2 */
 777        val = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG_2);
 778        i2c_smbus_write_byte_data(client, ADT7470_REG_CFG_2,
 779                (val & ~ADT7470_FREQ_MASK) | (index << ADT7470_FREQ_SHIFT));
 780        mutex_unlock(&data->lock);
 781
 782        return count;
 783}
 784
 785static ssize_t show_pwm_max(struct device *dev,
 786                            struct device_attribute *devattr,
 787                            char *buf)
 788{
 789        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 790        struct adt7470_data *data = adt7470_update_device(dev);
 791        return sprintf(buf, "%d\n", data->pwm_max[attr->index]);
 792}
 793
 794static ssize_t set_pwm_max(struct device *dev,
 795                           struct device_attribute *devattr,
 796                           const char *buf,
 797                           size_t count)
 798{
 799        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 800        struct adt7470_data *data = dev_get_drvdata(dev);
 801        struct i2c_client *client = data->client;
 802        long temp;
 803
 804        if (kstrtol(buf, 10, &temp))
 805                return -EINVAL;
 806
 807        temp = clamp_val(temp, 0, 255);
 808
 809        mutex_lock(&data->lock);
 810        data->pwm_max[attr->index] = temp;
 811        i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_MAX(attr->index),
 812                                  temp);
 813        mutex_unlock(&data->lock);
 814
 815        return count;
 816}
 817
 818static ssize_t show_pwm_min(struct device *dev,
 819                            struct device_attribute *devattr,
 820                            char *buf)
 821{
 822        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 823        struct adt7470_data *data = adt7470_update_device(dev);
 824        return sprintf(buf, "%d\n", data->pwm_min[attr->index]);
 825}
 826
 827static ssize_t set_pwm_min(struct device *dev,
 828                           struct device_attribute *devattr,
 829                           const char *buf,
 830                           size_t count)
 831{
 832        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 833        struct adt7470_data *data = dev_get_drvdata(dev);
 834        struct i2c_client *client = data->client;
 835        long temp;
 836
 837        if (kstrtol(buf, 10, &temp))
 838                return -EINVAL;
 839
 840        temp = clamp_val(temp, 0, 255);
 841
 842        mutex_lock(&data->lock);
 843        data->pwm_min[attr->index] = temp;
 844        i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_MIN(attr->index),
 845                                  temp);
 846        mutex_unlock(&data->lock);
 847
 848        return count;
 849}
 850
 851static ssize_t show_pwm_tmax(struct device *dev,
 852                             struct device_attribute *devattr,
 853                             char *buf)
 854{
 855        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 856        struct adt7470_data *data = adt7470_update_device(dev);
 857        /* the datasheet says that tmax = tmin + 20C */
 858        return sprintf(buf, "%d\n", 1000 * (20 + data->pwm_tmin[attr->index]));
 859}
 860
 861static ssize_t show_pwm_tmin(struct device *dev,
 862                             struct device_attribute *devattr,
 863                             char *buf)
 864{
 865        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 866        struct adt7470_data *data = adt7470_update_device(dev);
 867        return sprintf(buf, "%d\n", 1000 * data->pwm_tmin[attr->index]);
 868}
 869
 870static ssize_t set_pwm_tmin(struct device *dev,
 871                            struct device_attribute *devattr,
 872                            const char *buf,
 873                            size_t count)
 874{
 875        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 876        struct adt7470_data *data = dev_get_drvdata(dev);
 877        struct i2c_client *client = data->client;
 878        long temp;
 879
 880        if (kstrtol(buf, 10, &temp))
 881                return -EINVAL;
 882
 883        temp = DIV_ROUND_CLOSEST(temp, 1000);
 884        temp = clamp_val(temp, -128, 127);
 885
 886        mutex_lock(&data->lock);
 887        data->pwm_tmin[attr->index] = temp;
 888        i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_TMIN(attr->index),
 889                                  temp);
 890        mutex_unlock(&data->lock);
 891
 892        return count;
 893}
 894
 895static ssize_t show_pwm_auto(struct device *dev,
 896                             struct device_attribute *devattr,
 897                             char *buf)
 898{
 899        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 900        struct adt7470_data *data = adt7470_update_device(dev);
 901        return sprintf(buf, "%d\n", 1 + data->pwm_automatic[attr->index]);
 902}
 903
 904static ssize_t set_pwm_auto(struct device *dev,
 905                            struct device_attribute *devattr,
 906                            const char *buf,
 907                            size_t count)
 908{
 909        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 910        struct adt7470_data *data = dev_get_drvdata(dev);
 911        struct i2c_client *client = data->client;
 912        int pwm_auto_reg = ADT7470_REG_PWM_CFG(attr->index);
 913        int pwm_auto_reg_mask;
 914        long temp;
 915        u8 reg;
 916
 917        if (kstrtol(buf, 10, &temp))
 918                return -EINVAL;
 919
 920        if (attr->index % 2)
 921                pwm_auto_reg_mask = ADT7470_PWM2_AUTO_MASK;
 922        else
 923                pwm_auto_reg_mask = ADT7470_PWM1_AUTO_MASK;
 924
 925        if (temp != 2 && temp != 1)
 926                return -EINVAL;
 927        temp--;
 928
 929        mutex_lock(&data->lock);
 930        data->pwm_automatic[attr->index] = temp;
 931        reg = i2c_smbus_read_byte_data(client, pwm_auto_reg);
 932        if (temp)
 933                reg |= pwm_auto_reg_mask;
 934        else
 935                reg &= ~pwm_auto_reg_mask;
 936        i2c_smbus_write_byte_data(client, pwm_auto_reg, reg);
 937        mutex_unlock(&data->lock);
 938
 939        return count;
 940}
 941
 942static ssize_t show_pwm_auto_temp(struct device *dev,
 943                                  struct device_attribute *devattr,
 944                                  char *buf)
 945{
 946        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 947        struct adt7470_data *data = adt7470_update_device(dev);
 948        u8 ctrl = data->pwm_auto_temp[attr->index];
 949
 950        if (ctrl)
 951                return sprintf(buf, "%d\n", 1 << (ctrl - 1));
 952        else
 953                return sprintf(buf, "%d\n", ADT7470_PWM_ALL_TEMPS);
 954}
 955
 956static int cvt_auto_temp(int input)
 957{
 958        if (input == ADT7470_PWM_ALL_TEMPS)
 959                return 0;
 960        if (input < 1 || !is_power_of_2(input))
 961                return -EINVAL;
 962        return ilog2(input) + 1;
 963}
 964
 965static ssize_t set_pwm_auto_temp(struct device *dev,
 966                                 struct device_attribute *devattr,
 967                                 const char *buf,
 968                                 size_t count)
 969{
 970        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 971        struct adt7470_data *data = dev_get_drvdata(dev);
 972        struct i2c_client *client = data->client;
 973        int pwm_auto_reg = ADT7470_REG_PWM_AUTO_TEMP(attr->index);
 974        long temp;
 975        u8 reg;
 976
 977        if (kstrtol(buf, 10, &temp))
 978                return -EINVAL;
 979
 980        temp = cvt_auto_temp(temp);
 981        if (temp < 0)
 982                return temp;
 983
 984        mutex_lock(&data->lock);
 985        data->pwm_automatic[attr->index] = temp;
 986        reg = i2c_smbus_read_byte_data(client, pwm_auto_reg);
 987
 988        if (!(attr->index % 2)) {
 989                reg &= 0xF;
 990                reg |= (temp << 4) & 0xF0;
 991        } else {
 992                reg &= 0xF0;
 993                reg |= temp & 0xF;
 994        }
 995
 996        i2c_smbus_write_byte_data(client, pwm_auto_reg, reg);
 997        mutex_unlock(&data->lock);
 998
 999        return count;
1000}
1001
1002static ssize_t show_alarm(struct device *dev,
1003                          struct device_attribute *devattr,
1004                          char *buf)
1005{
1006        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1007        struct adt7470_data *data = adt7470_update_device(dev);
1008
1009        if (data->alarm & attr->index)
1010                return sprintf(buf, "1\n");
1011        else
1012                return sprintf(buf, "0\n");
1013}
1014
1015static DEVICE_ATTR(alarm_mask, S_IWUSR | S_IRUGO, show_alarm_mask,
1016                   set_alarm_mask);
1017static DEVICE_ATTR(num_temp_sensors, S_IWUSR | S_IRUGO, show_num_temp_sensors,
1018                   set_num_temp_sensors);
1019static DEVICE_ATTR(auto_update_interval, S_IWUSR | S_IRUGO,
1020                   show_auto_update_interval, set_auto_update_interval);
1021
1022static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max,
1023                    set_temp_max, 0);
1024static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp_max,
1025                    set_temp_max, 1);
1026static SENSOR_DEVICE_ATTR(temp3_max, S_IWUSR | S_IRUGO, show_temp_max,
1027                    set_temp_max, 2);
1028static SENSOR_DEVICE_ATTR(temp4_max, S_IWUSR | S_IRUGO, show_temp_max,
1029                    set_temp_max, 3);
1030static SENSOR_DEVICE_ATTR(temp5_max, S_IWUSR | S_IRUGO, show_temp_max,
1031                    set_temp_max, 4);
1032static SENSOR_DEVICE_ATTR(temp6_max, S_IWUSR | S_IRUGO, show_temp_max,
1033                    set_temp_max, 5);
1034static SENSOR_DEVICE_ATTR(temp7_max, S_IWUSR | S_IRUGO, show_temp_max,
1035                    set_temp_max, 6);
1036static SENSOR_DEVICE_ATTR(temp8_max, S_IWUSR | S_IRUGO, show_temp_max,
1037                    set_temp_max, 7);
1038static SENSOR_DEVICE_ATTR(temp9_max, S_IWUSR | S_IRUGO, show_temp_max,
1039                    set_temp_max, 8);
1040static SENSOR_DEVICE_ATTR(temp10_max, S_IWUSR | S_IRUGO, show_temp_max,
1041                    set_temp_max, 9);
1042
1043static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp_min,
1044                    set_temp_min, 0);
1045static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp_min,
1046                    set_temp_min, 1);
1047static SENSOR_DEVICE_ATTR(temp3_min, S_IWUSR | S_IRUGO, show_temp_min,
1048                    set_temp_min, 2);
1049static SENSOR_DEVICE_ATTR(temp4_min, S_IWUSR | S_IRUGO, show_temp_min,
1050                    set_temp_min, 3);
1051static SENSOR_DEVICE_ATTR(temp5_min, S_IWUSR | S_IRUGO, show_temp_min,
1052                    set_temp_min, 4);
1053static SENSOR_DEVICE_ATTR(temp6_min, S_IWUSR | S_IRUGO, show_temp_min,
1054                    set_temp_min, 5);
1055static SENSOR_DEVICE_ATTR(temp7_min, S_IWUSR | S_IRUGO, show_temp_min,
1056                    set_temp_min, 6);
1057static SENSOR_DEVICE_ATTR(temp8_min, S_IWUSR | S_IRUGO, show_temp_min,
1058                    set_temp_min, 7);
1059static SENSOR_DEVICE_ATTR(temp9_min, S_IWUSR | S_IRUGO, show_temp_min,
1060                    set_temp_min, 8);
1061static SENSOR_DEVICE_ATTR(temp10_min, S_IWUSR | S_IRUGO, show_temp_min,
1062                    set_temp_min, 9);
1063
1064static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);
1065static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1);
1066static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2);
1067static SENSOR_DEVICE_ATTR(temp4_input, S_IRUGO, show_temp, NULL, 3);
1068static SENSOR_DEVICE_ATTR(temp5_input, S_IRUGO, show_temp, NULL, 4);
1069static SENSOR_DEVICE_ATTR(temp6_input, S_IRUGO, show_temp, NULL, 5);
1070static SENSOR_DEVICE_ATTR(temp7_input, S_IRUGO, show_temp, NULL, 6);
1071static SENSOR_DEVICE_ATTR(temp8_input, S_IRUGO, show_temp, NULL, 7);
1072static SENSOR_DEVICE_ATTR(temp9_input, S_IRUGO, show_temp, NULL, 8);
1073static SENSOR_DEVICE_ATTR(temp10_input, S_IRUGO, show_temp, NULL, 9);
1074
1075static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL,
1076                          ADT7470_R1T_ALARM);
1077static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL,
1078                          ADT7470_R2T_ALARM);
1079static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL,
1080                          ADT7470_R3T_ALARM);
1081static SENSOR_DEVICE_ATTR(temp4_alarm, S_IRUGO, show_alarm, NULL,
1082                          ADT7470_R4T_ALARM);
1083static SENSOR_DEVICE_ATTR(temp5_alarm, S_IRUGO, show_alarm, NULL,
1084                          ADT7470_R5T_ALARM);
1085static SENSOR_DEVICE_ATTR(temp6_alarm, S_IRUGO, show_alarm, NULL,
1086                          ADT7470_R6T_ALARM);
1087static SENSOR_DEVICE_ATTR(temp7_alarm, S_IRUGO, show_alarm, NULL,
1088                          ADT7470_R7T_ALARM);
1089static SENSOR_DEVICE_ATTR(temp8_alarm, S_IRUGO, show_alarm, NULL,
1090                          ALARM2(ADT7470_R8T_ALARM));
1091static SENSOR_DEVICE_ATTR(temp9_alarm, S_IRUGO, show_alarm, NULL,
1092                          ALARM2(ADT7470_R9T_ALARM));
1093static SENSOR_DEVICE_ATTR(temp10_alarm, S_IRUGO, show_alarm, NULL,
1094                          ALARM2(ADT7470_R10T_ALARM));
1095
1096static SENSOR_DEVICE_ATTR(fan1_max, S_IWUSR | S_IRUGO, show_fan_max,
1097                    set_fan_max, 0);
1098static SENSOR_DEVICE_ATTR(fan2_max, S_IWUSR | S_IRUGO, show_fan_max,
1099                    set_fan_max, 1);
1100static SENSOR_DEVICE_ATTR(fan3_max, S_IWUSR | S_IRUGO, show_fan_max,
1101                    set_fan_max, 2);
1102static SENSOR_DEVICE_ATTR(fan4_max, S_IWUSR | S_IRUGO, show_fan_max,
1103                    set_fan_max, 3);
1104
1105static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
1106                    set_fan_min, 0);
1107static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
1108                    set_fan_min, 1);
1109static SENSOR_DEVICE_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
1110                    set_fan_min, 2);
1111static SENSOR_DEVICE_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
1112                    set_fan_min, 3);
1113
1114static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0);
1115static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1);
1116static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2);
1117static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3);
1118
1119static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL,
1120                          ALARM2(ADT7470_FAN1_ALARM));
1121static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL,
1122                          ALARM2(ADT7470_FAN2_ALARM));
1123static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL,
1124                          ALARM2(ADT7470_FAN3_ALARM));
1125static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL,
1126                          ALARM2(ADT7470_FAN4_ALARM));
1127
1128static SENSOR_DEVICE_ATTR(force_pwm_max, S_IWUSR | S_IRUGO,
1129                    show_force_pwm_max, set_force_pwm_max, 0);
1130
1131static SENSOR_DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 0);
1132static SENSOR_DEVICE_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 1);
1133static SENSOR_DEVICE_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 2);
1134static SENSOR_DEVICE_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 3);
1135
1136static DEVICE_ATTR(pwm1_freq, S_IWUSR | S_IRUGO, show_pwm_freq, set_pwm_freq);
1137
1138static SENSOR_DEVICE_ATTR(pwm1_auto_point1_pwm, S_IWUSR | S_IRUGO,
1139                    show_pwm_min, set_pwm_min, 0);
1140static SENSOR_DEVICE_ATTR(pwm2_auto_point1_pwm, S_IWUSR | S_IRUGO,
1141                    show_pwm_min, set_pwm_min, 1);
1142static SENSOR_DEVICE_ATTR(pwm3_auto_point1_pwm, S_IWUSR | S_IRUGO,
1143                    show_pwm_min, set_pwm_min, 2);
1144static SENSOR_DEVICE_ATTR(pwm4_auto_point1_pwm, S_IWUSR | S_IRUGO,
1145                    show_pwm_min, set_pwm_min, 3);
1146
1147static SENSOR_DEVICE_ATTR(pwm1_auto_point2_pwm, S_IWUSR | S_IRUGO,
1148                    show_pwm_max, set_pwm_max, 0);
1149static SENSOR_DEVICE_ATTR(pwm2_auto_point2_pwm, S_IWUSR | S_IRUGO,
1150                    show_pwm_max, set_pwm_max, 1);
1151static SENSOR_DEVICE_ATTR(pwm3_auto_point2_pwm, S_IWUSR | S_IRUGO,
1152                    show_pwm_max, set_pwm_max, 2);
1153static SENSOR_DEVICE_ATTR(pwm4_auto_point2_pwm, S_IWUSR | S_IRUGO,
1154                    show_pwm_max, set_pwm_max, 3);
1155
1156static SENSOR_DEVICE_ATTR(pwm1_auto_point1_temp, S_IWUSR | S_IRUGO,
1157                    show_pwm_tmin, set_pwm_tmin, 0);
1158static SENSOR_DEVICE_ATTR(pwm2_auto_point1_temp, S_IWUSR | S_IRUGO,
1159                    show_pwm_tmin, set_pwm_tmin, 1);
1160static SENSOR_DEVICE_ATTR(pwm3_auto_point1_temp, S_IWUSR | S_IRUGO,
1161                    show_pwm_tmin, set_pwm_tmin, 2);
1162static SENSOR_DEVICE_ATTR(pwm4_auto_point1_temp, S_IWUSR | S_IRUGO,
1163                    show_pwm_tmin, set_pwm_tmin, 3);
1164
1165static SENSOR_DEVICE_ATTR(pwm1_auto_point2_temp, S_IRUGO, show_pwm_tmax,
1166                    NULL, 0);
1167static SENSOR_DEVICE_ATTR(pwm2_auto_point2_temp, S_IRUGO, show_pwm_tmax,
1168                    NULL, 1);
1169static SENSOR_DEVICE_ATTR(pwm3_auto_point2_temp, S_IRUGO, show_pwm_tmax,
1170                    NULL, 2);
1171static SENSOR_DEVICE_ATTR(pwm4_auto_point2_temp, S_IRUGO, show_pwm_tmax,
1172                    NULL, 3);
1173
1174static SENSOR_DEVICE_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1175                    set_pwm_auto, 0);
1176static SENSOR_DEVICE_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1177                    set_pwm_auto, 1);
1178static SENSOR_DEVICE_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1179                    set_pwm_auto, 2);
1180static SENSOR_DEVICE_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1181                    set_pwm_auto, 3);
1182
1183static SENSOR_DEVICE_ATTR(pwm1_auto_channels_temp, S_IWUSR | S_IRUGO,
1184                    show_pwm_auto_temp, set_pwm_auto_temp, 0);
1185static SENSOR_DEVICE_ATTR(pwm2_auto_channels_temp, S_IWUSR | S_IRUGO,
1186                    show_pwm_auto_temp, set_pwm_auto_temp, 1);
1187static SENSOR_DEVICE_ATTR(pwm3_auto_channels_temp, S_IWUSR | S_IRUGO,
1188                    show_pwm_auto_temp, set_pwm_auto_temp, 2);
1189static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO,
1190                    show_pwm_auto_temp, set_pwm_auto_temp, 3);
1191
1192static struct attribute *adt7470_attrs[] = {
1193        &dev_attr_alarm_mask.attr,
1194        &dev_attr_num_temp_sensors.attr,
1195        &dev_attr_auto_update_interval.attr,
1196        &sensor_dev_attr_temp1_max.dev_attr.attr,
1197        &sensor_dev_attr_temp2_max.dev_attr.attr,
1198        &sensor_dev_attr_temp3_max.dev_attr.attr,
1199        &sensor_dev_attr_temp4_max.dev_attr.attr,
1200        &sensor_dev_attr_temp5_max.dev_attr.attr,
1201        &sensor_dev_attr_temp6_max.dev_attr.attr,
1202        &sensor_dev_attr_temp7_max.dev_attr.attr,
1203        &sensor_dev_attr_temp8_max.dev_attr.attr,
1204        &sensor_dev_attr_temp9_max.dev_attr.attr,
1205        &sensor_dev_attr_temp10_max.dev_attr.attr,
1206        &sensor_dev_attr_temp1_min.dev_attr.attr,
1207        &sensor_dev_attr_temp2_min.dev_attr.attr,
1208        &sensor_dev_attr_temp3_min.dev_attr.attr,
1209        &sensor_dev_attr_temp4_min.dev_attr.attr,
1210        &sensor_dev_attr_temp5_min.dev_attr.attr,
1211        &sensor_dev_attr_temp6_min.dev_attr.attr,
1212        &sensor_dev_attr_temp7_min.dev_attr.attr,
1213        &sensor_dev_attr_temp8_min.dev_attr.attr,
1214        &sensor_dev_attr_temp9_min.dev_attr.attr,
1215        &sensor_dev_attr_temp10_min.dev_attr.attr,
1216        &sensor_dev_attr_temp1_input.dev_attr.attr,
1217        &sensor_dev_attr_temp2_input.dev_attr.attr,
1218        &sensor_dev_attr_temp3_input.dev_attr.attr,
1219        &sensor_dev_attr_temp4_input.dev_attr.attr,
1220        &sensor_dev_attr_temp5_input.dev_attr.attr,
1221        &sensor_dev_attr_temp6_input.dev_attr.attr,
1222        &sensor_dev_attr_temp7_input.dev_attr.attr,
1223        &sensor_dev_attr_temp8_input.dev_attr.attr,
1224        &sensor_dev_attr_temp9_input.dev_attr.attr,
1225        &sensor_dev_attr_temp10_input.dev_attr.attr,
1226        &sensor_dev_attr_temp1_alarm.dev_attr.attr,
1227        &sensor_dev_attr_temp2_alarm.dev_attr.attr,
1228        &sensor_dev_attr_temp3_alarm.dev_attr.attr,
1229        &sensor_dev_attr_temp4_alarm.dev_attr.attr,
1230        &sensor_dev_attr_temp5_alarm.dev_attr.attr,
1231        &sensor_dev_attr_temp6_alarm.dev_attr.attr,
1232        &sensor_dev_attr_temp7_alarm.dev_attr.attr,
1233        &sensor_dev_attr_temp8_alarm.dev_attr.attr,
1234        &sensor_dev_attr_temp9_alarm.dev_attr.attr,
1235        &sensor_dev_attr_temp10_alarm.dev_attr.attr,
1236        &sensor_dev_attr_fan1_max.dev_attr.attr,
1237        &sensor_dev_attr_fan2_max.dev_attr.attr,
1238        &sensor_dev_attr_fan3_max.dev_attr.attr,
1239        &sensor_dev_attr_fan4_max.dev_attr.attr,
1240        &sensor_dev_attr_fan1_min.dev_attr.attr,
1241        &sensor_dev_attr_fan2_min.dev_attr.attr,
1242        &sensor_dev_attr_fan3_min.dev_attr.attr,
1243        &sensor_dev_attr_fan4_min.dev_attr.attr,
1244        &sensor_dev_attr_fan1_input.dev_attr.attr,
1245        &sensor_dev_attr_fan2_input.dev_attr.attr,
1246        &sensor_dev_attr_fan3_input.dev_attr.attr,
1247        &sensor_dev_attr_fan4_input.dev_attr.attr,
1248        &sensor_dev_attr_fan1_alarm.dev_attr.attr,
1249        &sensor_dev_attr_fan2_alarm.dev_attr.attr,
1250        &sensor_dev_attr_fan3_alarm.dev_attr.attr,
1251        &sensor_dev_attr_fan4_alarm.dev_attr.attr,
1252        &sensor_dev_attr_force_pwm_max.dev_attr.attr,
1253        &sensor_dev_attr_pwm1.dev_attr.attr,
1254        &dev_attr_pwm1_freq.attr,
1255        &sensor_dev_attr_pwm2.dev_attr.attr,
1256        &sensor_dev_attr_pwm3.dev_attr.attr,
1257        &sensor_dev_attr_pwm4.dev_attr.attr,
1258        &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
1259        &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
1260        &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
1261        &sensor_dev_attr_pwm4_auto_point1_pwm.dev_attr.attr,
1262        &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
1263        &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
1264        &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
1265        &sensor_dev_attr_pwm4_auto_point2_pwm.dev_attr.attr,
1266        &sensor_dev_attr_pwm1_auto_point1_temp.dev_attr.attr,
1267        &sensor_dev_attr_pwm2_auto_point1_temp.dev_attr.attr,
1268        &sensor_dev_attr_pwm3_auto_point1_temp.dev_attr.attr,
1269        &sensor_dev_attr_pwm4_auto_point1_temp.dev_attr.attr,
1270        &sensor_dev_attr_pwm1_auto_point2_temp.dev_attr.attr,
1271        &sensor_dev_attr_pwm2_auto_point2_temp.dev_attr.attr,
1272        &sensor_dev_attr_pwm3_auto_point2_temp.dev_attr.attr,
1273        &sensor_dev_attr_pwm4_auto_point2_temp.dev_attr.attr,
1274        &sensor_dev_attr_pwm1_enable.dev_attr.attr,
1275        &sensor_dev_attr_pwm2_enable.dev_attr.attr,
1276        &sensor_dev_attr_pwm3_enable.dev_attr.attr,
1277        &sensor_dev_attr_pwm4_enable.dev_attr.attr,
1278        &sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
1279        &sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
1280        &sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
1281        &sensor_dev_attr_pwm4_auto_channels_temp.dev_attr.attr,
1282        NULL
1283};
1284
1285ATTRIBUTE_GROUPS(adt7470);
1286
1287/* Return 0 if detection is successful, -ENODEV otherwise */
1288static int adt7470_detect(struct i2c_client *client,
1289                          struct i2c_board_info *info)
1290{
1291        struct i2c_adapter *adapter = client->adapter;
1292        int vendor, device, revision;
1293
1294        if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1295                return -ENODEV;
1296
1297        vendor = i2c_smbus_read_byte_data(client, ADT7470_REG_VENDOR);
1298        if (vendor != ADT7470_VENDOR)
1299                return -ENODEV;
1300
1301        device = i2c_smbus_read_byte_data(client, ADT7470_REG_DEVICE);
1302        if (device != ADT7470_DEVICE)
1303                return -ENODEV;
1304
1305        revision = i2c_smbus_read_byte_data(client, ADT7470_REG_REVISION);
1306        if (revision != ADT7470_REVISION)
1307                return -ENODEV;
1308
1309        strlcpy(info->type, "adt7470", I2C_NAME_SIZE);
1310
1311        return 0;
1312}
1313
1314static void adt7470_init_client(struct i2c_client *client)
1315{
1316        int reg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
1317
1318        if (reg < 0) {
1319                dev_err(&client->dev, "cannot read configuration register\n");
1320        } else {
1321                /* start monitoring (and do a self-test) */
1322                i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, reg | 3);
1323        }
1324}
1325
1326static int adt7470_probe(struct i2c_client *client,
1327                         const struct i2c_device_id *id)
1328{
1329        struct device *dev = &client->dev;
1330        struct adt7470_data *data;
1331        struct device *hwmon_dev;
1332
1333        data = devm_kzalloc(dev, sizeof(struct adt7470_data), GFP_KERNEL);
1334        if (!data)
1335                return -ENOMEM;
1336
1337        data->num_temp_sensors = -1;
1338        data->auto_update_interval = AUTO_UPDATE_INTERVAL;
1339
1340        i2c_set_clientdata(client, data);
1341        data->client = client;
1342        mutex_init(&data->lock);
1343
1344        dev_info(&client->dev, "%s chip found\n", client->name);
1345
1346        /* Initialize the ADT7470 chip */
1347        adt7470_init_client(client);
1348
1349        /* Register sysfs hooks */
1350        hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
1351                                                           data,
1352                                                           adt7470_groups);
1353
1354        if (IS_ERR(hwmon_dev))
1355                return PTR_ERR(hwmon_dev);
1356
1357        data->auto_update = kthread_run(adt7470_update_thread, client, "%s",
1358                                        dev_name(hwmon_dev));
1359        if (IS_ERR(data->auto_update)) {
1360                return PTR_ERR(data->auto_update);
1361        }
1362
1363        return 0;
1364}
1365
1366static int adt7470_remove(struct i2c_client *client)
1367{
1368        struct adt7470_data *data = i2c_get_clientdata(client);
1369
1370        kthread_stop(data->auto_update);
1371        return 0;
1372}
1373
1374static const struct i2c_device_id adt7470_id[] = {
1375        { "adt7470", 0 },
1376        { }
1377};
1378MODULE_DEVICE_TABLE(i2c, adt7470_id);
1379
1380static struct i2c_driver adt7470_driver = {
1381        .class          = I2C_CLASS_HWMON,
1382        .driver = {
1383                .name   = "adt7470",
1384        },
1385        .probe          = adt7470_probe,
1386        .remove         = adt7470_remove,
1387        .id_table       = adt7470_id,
1388        .detect         = adt7470_detect,
1389        .address_list   = normal_i2c,
1390};
1391
1392module_i2c_driver(adt7470_driver);
1393
1394MODULE_AUTHOR("Darrick J. Wong <darrick.wong@oracle.com>");
1395MODULE_DESCRIPTION("ADT7470 driver");
1396MODULE_LICENSE("GPL");
1397