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