linux/drivers/hwmon/adt7462.c
<<
>>
Prefs
   1/*
   2 * A hwmon driver for the Analog Devices ADT7462
   3 * Copyright (C) 2008 IBM
   4 *
   5 * Author: Darrick J. Wong <djwong@us.ibm.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#include <linux/module.h>
  23#include <linux/jiffies.h>
  24#include <linux/i2c.h>
  25#include <linux/hwmon.h>
  26#include <linux/hwmon-sysfs.h>
  27#include <linux/err.h>
  28#include <linux/mutex.h>
  29#include <linux/delay.h>
  30#include <linux/log2.h>
  31
  32/* Addresses to scan */
  33static const unsigned short normal_i2c[] = { 0x58, 0x5C, I2C_CLIENT_END };
  34
  35/* Insmod parameters */
  36I2C_CLIENT_INSMOD_1(adt7462);
  37
  38/* ADT7462 registers */
  39#define ADT7462_REG_DEVICE                      0x3D
  40#define ADT7462_REG_VENDOR                      0x3E
  41#define ADT7462_REG_REVISION                    0x3F
  42
  43#define ADT7462_REG_MIN_TEMP_BASE_ADDR          0x44
  44#define ADT7462_REG_MIN_TEMP_MAX_ADDR           0x47
  45#define ADT7462_REG_MAX_TEMP_BASE_ADDR          0x48
  46#define ADT7462_REG_MAX_TEMP_MAX_ADDR           0x4B
  47#define ADT7462_REG_TEMP_BASE_ADDR              0x88
  48#define ADT7462_REG_TEMP_MAX_ADDR               0x8F
  49
  50#define ADT7462_REG_FAN_BASE_ADDR               0x98
  51#define ADT7462_REG_FAN_MAX_ADDR                0x9F
  52#define ADT7462_REG_FAN2_BASE_ADDR              0xA2
  53#define ADT7462_REG_FAN2_MAX_ADDR               0xA9
  54#define ADT7462_REG_FAN_ENABLE                  0x07
  55#define ADT7462_REG_FAN_MIN_BASE_ADDR           0x78
  56#define ADT7462_REG_FAN_MIN_MAX_ADDR            0x7F
  57
  58#define ADT7462_REG_CFG2                        0x02
  59#define         ADT7462_FSPD_MASK               0x20
  60
  61#define ADT7462_REG_PWM_BASE_ADDR               0xAA
  62#define ADT7462_REG_PWM_MAX_ADDR                0xAD
  63#define ADT7462_REG_PWM_MIN_BASE_ADDR           0x28
  64#define ADT7462_REG_PWM_MIN_MAX_ADDR            0x2B
  65#define ADT7462_REG_PWM_MAX                     0x2C
  66#define ADT7462_REG_PWM_TEMP_MIN_BASE_ADDR      0x5C
  67#define ADT7462_REG_PWM_TEMP_MIN_MAX_ADDR       0x5F
  68#define ADT7462_REG_PWM_TEMP_RANGE_BASE_ADDR    0x60
  69#define ADT7462_REG_PWM_TEMP_RANGE_MAX_ADDR     0x63
  70#define         ADT7462_PWM_HYST_MASK           0x0F
  71#define         ADT7462_PWM_RANGE_MASK          0xF0
  72#define         ADT7462_PWM_RANGE_SHIFT         4
  73#define ADT7462_REG_PWM_CFG_BASE_ADDR           0x21
  74#define ADT7462_REG_PWM_CFG_MAX_ADDR            0x24
  75#define         ADT7462_PWM_CHANNEL_MASK        0xE0
  76#define         ADT7462_PWM_CHANNEL_SHIFT       5
  77
  78#define ADT7462_REG_PIN_CFG_BASE_ADDR           0x10
  79#define ADT7462_REG_PIN_CFG_MAX_ADDR            0x13
  80#define         ADT7462_PIN7_INPUT              0x01    /* cfg0 */
  81#define         ADT7462_DIODE3_INPUT            0x20
  82#define         ADT7462_DIODE1_INPUT            0x40
  83#define         ADT7462_VID_INPUT               0x80
  84#define         ADT7462_PIN22_INPUT             0x04    /* cfg1 */
  85#define         ADT7462_PIN21_INPUT             0x08
  86#define         ADT7462_PIN19_INPUT             0x10
  87#define         ADT7462_PIN15_INPUT             0x20
  88#define         ADT7462_PIN13_INPUT             0x40
  89#define         ADT7462_PIN8_INPUT              0x80
  90#define         ADT7462_PIN23_MASK              0x03
  91#define         ADT7462_PIN23_SHIFT             0
  92#define         ADT7462_PIN26_MASK              0x0C    /* cfg2 */
  93#define         ADT7462_PIN26_SHIFT             2
  94#define         ADT7462_PIN25_MASK              0x30
  95#define         ADT7462_PIN25_SHIFT             4
  96#define         ADT7462_PIN24_MASK              0xC0
  97#define         ADT7462_PIN24_SHIFT             6
  98#define         ADT7462_PIN26_VOLT_INPUT        0x08
  99#define         ADT7462_PIN25_VOLT_INPUT        0x20
 100#define         ADT7462_PIN28_SHIFT             6       /* cfg3 */
 101#define         ADT7462_PIN28_VOLT              0x5
 102
 103#define ADT7462_REG_ALARM1                      0xB8
 104#define         ADT7462_LT_ALARM                0x02
 105#define         ADT7462_R1T_ALARM               0x04
 106#define         ADT7462_R2T_ALARM               0x08
 107#define         ADT7462_R3T_ALARM               0x10
 108#define ADT7462_REG_ALARM2                      0xBB
 109#define         ADT7462_V0_ALARM                0x01
 110#define         ADT7462_V1_ALARM                0x02
 111#define         ADT7462_V2_ALARM                0x04
 112#define         ADT7462_V3_ALARM                0x08
 113#define         ADT7462_V4_ALARM                0x10
 114#define         ADT7462_V5_ALARM                0x20
 115#define         ADT7462_V6_ALARM                0x40
 116#define         ADT7462_V7_ALARM                0x80
 117#define ADT7462_REG_ALARM3                      0xBC
 118#define         ADT7462_V8_ALARM                0x08
 119#define         ADT7462_V9_ALARM                0x10
 120#define         ADT7462_V10_ALARM               0x20
 121#define         ADT7462_V11_ALARM               0x40
 122#define         ADT7462_V12_ALARM               0x80
 123#define ADT7462_REG_ALARM4                      0xBD
 124#define         ADT7462_F0_ALARM                0x01
 125#define         ADT7462_F1_ALARM                0x02
 126#define         ADT7462_F2_ALARM                0x04
 127#define         ADT7462_F3_ALARM                0x08
 128#define         ADT7462_F4_ALARM                0x10
 129#define         ADT7462_F5_ALARM                0x20
 130#define         ADT7462_F6_ALARM                0x40
 131#define         ADT7462_F7_ALARM                0x80
 132#define ADT7462_ALARM1                          0x0000
 133#define ADT7462_ALARM2                          0x0100
 134#define ADT7462_ALARM3                          0x0200
 135#define ADT7462_ALARM4                          0x0300
 136#define ADT7462_ALARM_REG_SHIFT                 8
 137#define ADT7462_ALARM_FLAG_MASK                 0x0F
 138
 139#define ADT7462_TEMP_COUNT              4
 140#define ADT7462_TEMP_REG(x)             (ADT7462_REG_TEMP_BASE_ADDR + (x * 2))
 141#define ADT7462_TEMP_MIN_REG(x)         (ADT7462_REG_MIN_TEMP_BASE_ADDR + (x))
 142#define ADT7462_TEMP_MAX_REG(x)         (ADT7462_REG_MAX_TEMP_BASE_ADDR + (x))
 143#define TEMP_FRAC_OFFSET                6
 144
 145#define ADT7462_FAN_COUNT               8
 146#define ADT7462_REG_FAN_MIN(x)          (ADT7462_REG_FAN_MIN_BASE_ADDR + (x))
 147
 148#define ADT7462_PWM_COUNT               4
 149#define ADT7462_REG_PWM(x)              (ADT7462_REG_PWM_BASE_ADDR + (x))
 150#define ADT7462_REG_PWM_MIN(x)          (ADT7462_REG_PWM_MIN_BASE_ADDR + (x))
 151#define ADT7462_REG_PWM_TMIN(x)         \
 152        (ADT7462_REG_PWM_TEMP_MIN_BASE_ADDR + (x))
 153#define ADT7462_REG_PWM_TRANGE(x)       \
 154        (ADT7462_REG_PWM_TEMP_RANGE_BASE_ADDR + (x))
 155
 156#define ADT7462_PIN_CFG_REG_COUNT       4
 157#define ADT7462_REG_PIN_CFG(x)          (ADT7462_REG_PIN_CFG_BASE_ADDR + (x))
 158#define ADT7462_REG_PWM_CFG(x)          (ADT7462_REG_PWM_CFG_BASE_ADDR + (x))
 159
 160#define ADT7462_ALARM_REG_COUNT         4
 161
 162/*
 163 * The chip can measure 13 different voltage sources:
 164 *
 165 * 1. +12V1 (pin 7)
 166 * 2. Vccp1/+2.5V/+1.8V/+1.5V (pin 23)
 167 * 3. +12V3 (pin 22)
 168 * 4. +5V (pin 21)
 169 * 5. +1.25V/+0.9V (pin 19)
 170 * 6. +2.5V/+1.8V (pin 15)
 171 * 7. +3.3v (pin 13)
 172 * 8. +12V2 (pin 8)
 173 * 9. Vbatt/FSB_Vtt (pin 26)
 174 * A. +3.3V/+1.2V1 (pin 25)
 175 * B. Vccp2/+2.5V/+1.8V/+1.5V (pin 24)
 176 * C. +1.5V ICH (only if BOTH pin 28/29 are set to +1.5V)
 177 * D. +1.5V 3GPIO (only if BOTH pin 28/29 are set to +1.5V)
 178 *
 179 * Each of these 13 has a factor to convert raw to voltage.  Even better,
 180 * the pins can be connected to other sensors (tach/gpio/hot/etc), which
 181 * makes the bookkeeping tricky.
 182 *
 183 * Some, but not all, of these voltages have low/high limits.
 184 */
 185#define ADT7462_VOLT_COUNT      12
 186
 187#define ADT7462_VENDOR          0x41
 188#define ADT7462_DEVICE          0x62
 189/* datasheet only mentions a revision 4 */
 190#define ADT7462_REVISION        0x04
 191
 192/* How often do we reread sensors values? (In jiffies) */
 193#define SENSOR_REFRESH_INTERVAL (2 * HZ)
 194
 195/* How often do we reread sensor limit values? (In jiffies) */
 196#define LIMIT_REFRESH_INTERVAL  (60 * HZ)
 197
 198/* datasheet says to divide this number by the fan reading to get fan rpm */
 199#define FAN_PERIOD_TO_RPM(x)    ((90000 * 60) / (x))
 200#define FAN_RPM_TO_PERIOD       FAN_PERIOD_TO_RPM
 201#define FAN_PERIOD_INVALID      65535
 202#define FAN_DATA_VALID(x)       ((x) && (x) != FAN_PERIOD_INVALID)
 203
 204#define MASK_AND_SHIFT(value, prefix)   \
 205        (((value) & prefix##_MASK) >> prefix##_SHIFT)
 206
 207struct adt7462_data {
 208        struct device           *hwmon_dev;
 209        struct attribute_group  attrs;
 210        struct mutex            lock;
 211        char                    sensors_valid;
 212        char                    limits_valid;
 213        unsigned long           sensors_last_updated;   /* In jiffies */
 214        unsigned long           limits_last_updated;    /* In jiffies */
 215
 216        u8                      temp[ADT7462_TEMP_COUNT];
 217                                /* bits 6-7 are quarter pieces of temp */
 218        u8                      temp_frac[ADT7462_TEMP_COUNT];
 219        u8                      temp_min[ADT7462_TEMP_COUNT];
 220        u8                      temp_max[ADT7462_TEMP_COUNT];
 221        u16                     fan[ADT7462_FAN_COUNT];
 222        u8                      fan_enabled;
 223        u8                      fan_min[ADT7462_FAN_COUNT];
 224        u8                      cfg2;
 225        u8                      pwm[ADT7462_PWM_COUNT];
 226        u8                      pin_cfg[ADT7462_PIN_CFG_REG_COUNT];
 227        u8                      voltages[ADT7462_VOLT_COUNT];
 228        u8                      volt_max[ADT7462_VOLT_COUNT];
 229        u8                      volt_min[ADT7462_VOLT_COUNT];
 230        u8                      pwm_min[ADT7462_PWM_COUNT];
 231        u8                      pwm_tmin[ADT7462_PWM_COUNT];
 232        u8                      pwm_trange[ADT7462_PWM_COUNT];
 233        u8                      pwm_max;        /* only one per chip */
 234        u8                      pwm_cfg[ADT7462_PWM_COUNT];
 235        u8                      alarms[ADT7462_ALARM_REG_COUNT];
 236};
 237
 238static int adt7462_probe(struct i2c_client *client,
 239                         const struct i2c_device_id *id);
 240static int adt7462_detect(struct i2c_client *client, int kind,
 241                          struct i2c_board_info *info);
 242static int adt7462_remove(struct i2c_client *client);
 243
 244static const struct i2c_device_id adt7462_id[] = {
 245        { "adt7462", adt7462 },
 246        { }
 247};
 248MODULE_DEVICE_TABLE(i2c, adt7462_id);
 249
 250static struct i2c_driver adt7462_driver = {
 251        .class          = I2C_CLASS_HWMON,
 252        .driver = {
 253                .name   = "adt7462",
 254        },
 255        .probe          = adt7462_probe,
 256        .remove         = adt7462_remove,
 257        .id_table       = adt7462_id,
 258        .detect         = adt7462_detect,
 259        .address_data   = &addr_data,
 260};
 261
 262/*
 263 * 16-bit registers on the ADT7462 are low-byte first.  The data sheet says
 264 * that the low byte must be read before the high byte.
 265 */
 266static inline int adt7462_read_word_data(struct i2c_client *client, u8 reg)
 267{
 268        u16 foo;
 269        foo = i2c_smbus_read_byte_data(client, reg);
 270        foo |= ((u16)i2c_smbus_read_byte_data(client, reg + 1) << 8);
 271        return foo;
 272}
 273
 274/* For some reason these registers are not contiguous. */
 275static int ADT7462_REG_FAN(int fan)
 276{
 277        if (fan < 4)
 278                return ADT7462_REG_FAN_BASE_ADDR + (2 * fan);
 279        return ADT7462_REG_FAN2_BASE_ADDR + (2 * (fan - 4));
 280}
 281
 282/* Voltage registers are scattered everywhere */
 283static int ADT7462_REG_VOLT_MAX(struct adt7462_data *data, int which)
 284{
 285        switch (which) {
 286        case 0:
 287                if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
 288                        return 0x7C;
 289                break;
 290        case 1:
 291                return 0x69;
 292        case 2:
 293                if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
 294                        return 0x7F;
 295                break;
 296        case 3:
 297                if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
 298                        return 0x7E;
 299                break;
 300        case 4:
 301                if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
 302                        return 0x4B;
 303                break;
 304        case 5:
 305                if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
 306                        return 0x49;
 307                break;
 308        case 6:
 309                if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
 310                        return 0x68;
 311                break;
 312        case 7:
 313                if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
 314                        return 0x7D;
 315                break;
 316        case 8:
 317                if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
 318                        return 0x6C;
 319                break;
 320        case 9:
 321                if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
 322                        return 0x6B;
 323                break;
 324        case 10:
 325                return 0x6A;
 326        case 11:
 327                if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 328                                        ADT7462_PIN28_VOLT &&
 329                    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 330                        return 0x50;
 331                break;
 332        case 12:
 333                if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 334                                        ADT7462_PIN28_VOLT &&
 335                    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 336                        return 0x4C;
 337                break;
 338        }
 339        return -ENODEV;
 340}
 341
 342static int ADT7462_REG_VOLT_MIN(struct adt7462_data *data, int which)
 343{
 344        switch (which) {
 345        case 0:
 346                if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
 347                        return 0x6D;
 348                break;
 349        case 1:
 350                return 0x72;
 351        case 2:
 352                if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
 353                        return 0x6F;
 354                break;
 355        case 3:
 356                if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
 357                        return 0x71;
 358                break;
 359        case 4:
 360                if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
 361                        return 0x47;
 362                break;
 363        case 5:
 364                if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
 365                        return 0x45;
 366                break;
 367        case 6:
 368                if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
 369                        return 0x70;
 370                break;
 371        case 7:
 372                if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
 373                        return 0x6E;
 374                break;
 375        case 8:
 376                if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
 377                        return 0x75;
 378                break;
 379        case 9:
 380                if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
 381                        return 0x74;
 382                break;
 383        case 10:
 384                return 0x73;
 385        case 11:
 386                if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 387                                        ADT7462_PIN28_VOLT &&
 388                    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 389                        return 0x76;
 390                break;
 391        case 12:
 392                if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 393                                        ADT7462_PIN28_VOLT &&
 394                    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 395                        return 0x77;
 396                break;
 397        }
 398        return -ENODEV;
 399}
 400
 401static int ADT7462_REG_VOLT(struct adt7462_data *data, int which)
 402{
 403        switch (which) {
 404        case 0:
 405                if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
 406                        return 0xA3;
 407                break;
 408        case 1:
 409                return 0x90;
 410        case 2:
 411                if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
 412                        return 0xA9;
 413                break;
 414        case 3:
 415                if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
 416                        return 0xA7;
 417                break;
 418        case 4:
 419                if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
 420                        return 0x8F;
 421                break;
 422        case 5:
 423                if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
 424                        return 0x8B;
 425                break;
 426        case 6:
 427                if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
 428                        return 0x96;
 429                break;
 430        case 7:
 431                if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
 432                        return 0xA5;
 433                break;
 434        case 8:
 435                if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
 436                        return 0x93;
 437                break;
 438        case 9:
 439                if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
 440                        return 0x92;
 441                break;
 442        case 10:
 443                return 0x91;
 444        case 11:
 445                if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 446                                        ADT7462_PIN28_VOLT &&
 447                    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 448                        return 0x94;
 449                break;
 450        case 12:
 451                if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 452                                        ADT7462_PIN28_VOLT &&
 453                    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 454                        return 0x95;
 455                break;
 456        }
 457        return -ENODEV;
 458}
 459
 460/* Provide labels for sysfs */
 461static const char *voltage_label(struct adt7462_data *data, int which)
 462{
 463        switch (which) {
 464        case 0:
 465                if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
 466                        return "+12V1";
 467                break;
 468        case 1:
 469                switch (MASK_AND_SHIFT(data->pin_cfg[1], ADT7462_PIN23)) {
 470                case 0:
 471                        return "Vccp1";
 472                case 1:
 473                        return "+2.5V";
 474                case 2:
 475                        return "+1.8V";
 476                case 3:
 477                        return "+1.5V";
 478                }
 479        case 2:
 480                if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
 481                        return "+12V3";
 482                break;
 483        case 3:
 484                if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
 485                        return "+5V";
 486                break;
 487        case 4:
 488                if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) {
 489                        if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
 490                                return "+0.9V";
 491                        return "+1.25V";
 492                }
 493                break;
 494        case 5:
 495                if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) {
 496                        if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
 497                                return "+1.8V";
 498                        return "+2.5V";
 499                }
 500                break;
 501        case 6:
 502                if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
 503                        return "+3.3V";
 504                break;
 505        case 7:
 506                if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
 507                        return "+12V2";
 508                break;
 509        case 8:
 510                switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN26)) {
 511                case 0:
 512                        return "Vbatt";
 513                case 1:
 514                        return "FSB_Vtt";
 515                }
 516                break;
 517        case 9:
 518                switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN25)) {
 519                case 0:
 520                        return "+3.3V";
 521                case 1:
 522                        return "+1.2V1";
 523                }
 524                break;
 525        case 10:
 526                switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN24)) {
 527                case 0:
 528                        return "Vccp2";
 529                case 1:
 530                        return "+2.5V";
 531                case 2:
 532                        return "+1.8V";
 533                case 3:
 534                        return "+1.5";
 535                }
 536        case 11:
 537                if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 538                                        ADT7462_PIN28_VOLT &&
 539                    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 540                        return "+1.5V ICH";
 541                break;
 542        case 12:
 543                if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 544                                        ADT7462_PIN28_VOLT &&
 545                    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 546                        return "+1.5V 3GPIO";
 547                break;
 548        }
 549        return "N/A";
 550}
 551
 552/* Multipliers are actually in uV, not mV. */
 553static int voltage_multiplier(struct adt7462_data *data, int which)
 554{
 555        switch (which) {
 556        case 0:
 557                if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
 558                        return 62500;
 559                break;
 560        case 1:
 561                switch (MASK_AND_SHIFT(data->pin_cfg[1], ADT7462_PIN23)) {
 562                case 0:
 563                        if (data->pin_cfg[0] & ADT7462_VID_INPUT)
 564                                return 12500;
 565                        return 6250;
 566                case 1:
 567                        return 13000;
 568                case 2:
 569                        return 9400;
 570                case 3:
 571                        return 7800;
 572                }
 573        case 2:
 574                if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
 575                        return 62500;
 576                break;
 577        case 3:
 578                if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
 579                        return 26000;
 580                break;
 581        case 4:
 582                if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) {
 583                        if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
 584                                return 4690;
 585                        return 6500;
 586                }
 587                break;
 588        case 5:
 589                if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) {
 590                        if (data->pin_cfg[1] & ADT7462_PIN15_INPUT)
 591                                return 9400;
 592                        return 13000;
 593                }
 594                break;
 595        case 6:
 596                if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
 597                        return 17200;
 598                break;
 599        case 7:
 600                if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
 601                        return 62500;
 602                break;
 603        case 8:
 604                switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN26)) {
 605                case 0:
 606                        return 15600;
 607                case 1:
 608                        return 6250;
 609                }
 610                break;
 611        case 9:
 612                switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN25)) {
 613                case 0:
 614                        return 17200;
 615                case 1:
 616                        return 6250;
 617                }
 618                break;
 619        case 10:
 620                switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN24)) {
 621                case 0:
 622                        return 6250;
 623                case 1:
 624                        return 13000;
 625                case 2:
 626                        return 9400;
 627                case 3:
 628                        return 7800;
 629                }
 630        case 11:
 631        case 12:
 632                if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 633                                        ADT7462_PIN28_VOLT &&
 634                    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 635                        return 7800;
 636        }
 637        return 0;
 638}
 639
 640static int temp_enabled(struct adt7462_data *data, int which)
 641{
 642        switch (which) {
 643        case 0:
 644        case 2:
 645                return 1;
 646        case 1:
 647                if (data->pin_cfg[0] & ADT7462_DIODE1_INPUT)
 648                        return 1;
 649                break;
 650        case 3:
 651                if (data->pin_cfg[0] & ADT7462_DIODE3_INPUT)
 652                        return 1;
 653                break;
 654        }
 655        return 0;
 656}
 657
 658static const char *temp_label(struct adt7462_data *data, int which)
 659{
 660        switch (which) {
 661        case 0:
 662                return "local";
 663        case 1:
 664                if (data->pin_cfg[0] & ADT7462_DIODE1_INPUT)
 665                        return "remote1";
 666                break;
 667        case 2:
 668                return "remote2";
 669        case 3:
 670                if (data->pin_cfg[0] & ADT7462_DIODE3_INPUT)
 671                        return "remote3";
 672                break;
 673        }
 674        return "N/A";
 675}
 676
 677/* Map Trange register values to mC */
 678#define NUM_TRANGE_VALUES       16
 679static const int trange_values[NUM_TRANGE_VALUES] = {
 680        2000,
 681        2500,
 682        3300,
 683        4000,
 684        5000,
 685        6700,
 686        8000,
 687        10000,
 688        13300,
 689        16000,
 690        20000,
 691        26700,
 692        32000,
 693        40000,
 694        53300,
 695        80000
 696};
 697
 698static int find_trange_value(int trange)
 699{
 700        int i;
 701
 702        for (i = 0; i < NUM_TRANGE_VALUES; i++)
 703                if (trange_values[i] == trange)
 704                        return i;
 705
 706        return -ENODEV;
 707}
 708
 709static struct adt7462_data *adt7462_update_device(struct device *dev)
 710{
 711        struct i2c_client *client = to_i2c_client(dev);
 712        struct adt7462_data *data = i2c_get_clientdata(client);
 713        unsigned long local_jiffies = jiffies;
 714        int i;
 715
 716        mutex_lock(&data->lock);
 717        if (time_before(local_jiffies, data->sensors_last_updated +
 718                SENSOR_REFRESH_INTERVAL)
 719                && data->sensors_valid)
 720                goto no_sensor_update;
 721
 722        for (i = 0; i < ADT7462_TEMP_COUNT; i++) {
 723                /*
 724                 * Reading the fractional register locks the integral
 725                 * register until both have been read.
 726                 */
 727                data->temp_frac[i] = i2c_smbus_read_byte_data(client,
 728                                                ADT7462_TEMP_REG(i));
 729                data->temp[i] = i2c_smbus_read_byte_data(client,
 730                                                ADT7462_TEMP_REG(i) + 1);
 731        }
 732
 733        for (i = 0; i < ADT7462_FAN_COUNT; i++)
 734                data->fan[i] = adt7462_read_word_data(client,
 735                                                ADT7462_REG_FAN(i));
 736
 737        data->fan_enabled = i2c_smbus_read_byte_data(client,
 738                                        ADT7462_REG_FAN_ENABLE);
 739
 740        for (i = 0; i < ADT7462_PWM_COUNT; i++)
 741                data->pwm[i] = i2c_smbus_read_byte_data(client,
 742                                                ADT7462_REG_PWM(i));
 743
 744        for (i = 0; i < ADT7462_PIN_CFG_REG_COUNT; i++)
 745                data->pin_cfg[i] = i2c_smbus_read_byte_data(client,
 746                                ADT7462_REG_PIN_CFG(i));
 747
 748        for (i = 0; i < ADT7462_VOLT_COUNT; i++) {
 749                int reg = ADT7462_REG_VOLT(data, i);
 750                if (!reg)
 751                        data->voltages[i] = 0;
 752                else
 753                        data->voltages[i] = i2c_smbus_read_byte_data(client,
 754                                                                     reg);
 755        }
 756
 757        data->alarms[0] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM1);
 758        data->alarms[1] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM2);
 759        data->alarms[2] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM3);
 760        data->alarms[3] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM4);
 761
 762        data->sensors_last_updated = local_jiffies;
 763        data->sensors_valid = 1;
 764
 765no_sensor_update:
 766        if (time_before(local_jiffies, data->limits_last_updated +
 767                LIMIT_REFRESH_INTERVAL)
 768                && data->limits_valid)
 769                goto out;
 770
 771        for (i = 0; i < ADT7462_TEMP_COUNT; i++) {
 772                data->temp_min[i] = i2c_smbus_read_byte_data(client,
 773                                                ADT7462_TEMP_MIN_REG(i));
 774                data->temp_max[i] = i2c_smbus_read_byte_data(client,
 775                                                ADT7462_TEMP_MAX_REG(i));
 776        }
 777
 778        for (i = 0; i < ADT7462_FAN_COUNT; i++)
 779                data->fan_min[i] = i2c_smbus_read_byte_data(client,
 780                                                ADT7462_REG_FAN_MIN(i));
 781
 782        for (i = 0; i < ADT7462_VOLT_COUNT; i++) {
 783                int reg = ADT7462_REG_VOLT_MAX(data, i);
 784                data->volt_max[i] =
 785                        (reg ? i2c_smbus_read_byte_data(client, reg) : 0);
 786
 787                reg = ADT7462_REG_VOLT_MIN(data, i);
 788                data->volt_min[i] =
 789                        (reg ? i2c_smbus_read_byte_data(client, reg) : 0);
 790        }
 791
 792        for (i = 0; i < ADT7462_PWM_COUNT; i++) {
 793                data->pwm_min[i] = i2c_smbus_read_byte_data(client,
 794                                                ADT7462_REG_PWM_MIN(i));
 795                data->pwm_tmin[i] = i2c_smbus_read_byte_data(client,
 796                                                ADT7462_REG_PWM_TMIN(i));
 797                data->pwm_trange[i] = i2c_smbus_read_byte_data(client,
 798                                                ADT7462_REG_PWM_TRANGE(i));
 799                data->pwm_cfg[i] = i2c_smbus_read_byte_data(client,
 800                                                ADT7462_REG_PWM_CFG(i));
 801        }
 802
 803        data->pwm_max = i2c_smbus_read_byte_data(client, ADT7462_REG_PWM_MAX);
 804
 805        data->cfg2 = i2c_smbus_read_byte_data(client, ADT7462_REG_CFG2);
 806
 807        data->limits_last_updated = local_jiffies;
 808        data->limits_valid = 1;
 809
 810out:
 811        mutex_unlock(&data->lock);
 812        return data;
 813}
 814
 815static ssize_t show_temp_min(struct device *dev,
 816                             struct device_attribute *devattr,
 817                             char *buf)
 818{
 819        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 820        struct adt7462_data *data = adt7462_update_device(dev);
 821
 822        if (!temp_enabled(data, attr->index))
 823                return sprintf(buf, "0\n");
 824
 825        return sprintf(buf, "%d\n", 1000 * (data->temp_min[attr->index] - 64));
 826}
 827
 828static ssize_t set_temp_min(struct device *dev,
 829                            struct device_attribute *devattr,
 830                            const char *buf,
 831                            size_t count)
 832{
 833        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 834        struct i2c_client *client = to_i2c_client(dev);
 835        struct adt7462_data *data = i2c_get_clientdata(client);
 836        long temp;
 837
 838        if (strict_strtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
 839                return -EINVAL;
 840
 841        temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
 842        temp = SENSORS_LIMIT(temp, 0, 255);
 843
 844        mutex_lock(&data->lock);
 845        data->temp_min[attr->index] = temp;
 846        i2c_smbus_write_byte_data(client, ADT7462_TEMP_MIN_REG(attr->index),
 847                                  temp);
 848        mutex_unlock(&data->lock);
 849
 850        return count;
 851}
 852
 853static ssize_t show_temp_max(struct device *dev,
 854                             struct device_attribute *devattr,
 855                             char *buf)
 856{
 857        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 858        struct adt7462_data *data = adt7462_update_device(dev);
 859
 860        if (!temp_enabled(data, attr->index))
 861                return sprintf(buf, "0\n");
 862
 863        return sprintf(buf, "%d\n", 1000 * (data->temp_max[attr->index] - 64));
 864}
 865
 866static ssize_t set_temp_max(struct device *dev,
 867                            struct device_attribute *devattr,
 868                            const char *buf,
 869                            size_t count)
 870{
 871        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 872        struct i2c_client *client = to_i2c_client(dev);
 873        struct adt7462_data *data = i2c_get_clientdata(client);
 874        long temp;
 875
 876        if (strict_strtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
 877                return -EINVAL;
 878
 879        temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
 880        temp = SENSORS_LIMIT(temp, 0, 255);
 881
 882        mutex_lock(&data->lock);
 883        data->temp_max[attr->index] = temp;
 884        i2c_smbus_write_byte_data(client, ADT7462_TEMP_MAX_REG(attr->index),
 885                                  temp);
 886        mutex_unlock(&data->lock);
 887
 888        return count;
 889}
 890
 891static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
 892                         char *buf)
 893{
 894        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 895        struct adt7462_data *data = adt7462_update_device(dev);
 896        u8 frac = data->temp_frac[attr->index] >> TEMP_FRAC_OFFSET;
 897
 898        if (!temp_enabled(data, attr->index))
 899                return sprintf(buf, "0\n");
 900
 901        return sprintf(buf, "%d\n", 1000 * (data->temp[attr->index] - 64) +
 902                                     250 * frac);
 903}
 904
 905static ssize_t show_temp_label(struct device *dev,
 906                               struct device_attribute *devattr,
 907                               char *buf)
 908{
 909        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 910        struct adt7462_data *data = adt7462_update_device(dev);
 911
 912        return sprintf(buf, "%s\n", temp_label(data, attr->index));
 913}
 914
 915static ssize_t show_volt_max(struct device *dev,
 916                             struct device_attribute *devattr,
 917                             char *buf)
 918{
 919        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 920        struct adt7462_data *data = adt7462_update_device(dev);
 921        int x = voltage_multiplier(data, attr->index);
 922
 923        x *= data->volt_max[attr->index];
 924        x /= 1000; /* convert from uV to mV */
 925
 926        return sprintf(buf, "%d\n", x);
 927}
 928
 929static ssize_t set_volt_max(struct device *dev,
 930                            struct device_attribute *devattr,
 931                            const char *buf,
 932                            size_t count)
 933{
 934        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 935        struct i2c_client *client = to_i2c_client(dev);
 936        struct adt7462_data *data = i2c_get_clientdata(client);
 937        int x = voltage_multiplier(data, attr->index);
 938        long temp;
 939
 940        if (strict_strtol(buf, 10, &temp) || !x)
 941                return -EINVAL;
 942
 943        temp *= 1000; /* convert mV to uV */
 944        temp = DIV_ROUND_CLOSEST(temp, x);
 945        temp = SENSORS_LIMIT(temp, 0, 255);
 946
 947        mutex_lock(&data->lock);
 948        data->volt_max[attr->index] = temp;
 949        i2c_smbus_write_byte_data(client,
 950                                  ADT7462_REG_VOLT_MAX(data, attr->index),
 951                                  temp);
 952        mutex_unlock(&data->lock);
 953
 954        return count;
 955}
 956
 957static ssize_t show_volt_min(struct device *dev,
 958                             struct device_attribute *devattr,
 959                             char *buf)
 960{
 961        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 962        struct adt7462_data *data = adt7462_update_device(dev);
 963        int x = voltage_multiplier(data, attr->index);
 964
 965        x *= data->volt_min[attr->index];
 966        x /= 1000; /* convert from uV to mV */
 967
 968        return sprintf(buf, "%d\n", x);
 969}
 970
 971static ssize_t set_volt_min(struct device *dev,
 972                            struct device_attribute *devattr,
 973                            const char *buf,
 974                            size_t count)
 975{
 976        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 977        struct i2c_client *client = to_i2c_client(dev);
 978        struct adt7462_data *data = i2c_get_clientdata(client);
 979        int x = voltage_multiplier(data, attr->index);
 980        long temp;
 981
 982        if (strict_strtol(buf, 10, &temp) || !x)
 983                return -EINVAL;
 984
 985        temp *= 1000; /* convert mV to uV */
 986        temp = DIV_ROUND_CLOSEST(temp, x);
 987        temp = SENSORS_LIMIT(temp, 0, 255);
 988
 989        mutex_lock(&data->lock);
 990        data->volt_min[attr->index] = temp;
 991        i2c_smbus_write_byte_data(client,
 992                                  ADT7462_REG_VOLT_MIN(data, attr->index),
 993                                  temp);
 994        mutex_unlock(&data->lock);
 995
 996        return count;
 997}
 998
 999static ssize_t show_voltage(struct device *dev,
1000                            struct device_attribute *devattr,
1001                            char *buf)
1002{
1003        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1004        struct adt7462_data *data = adt7462_update_device(dev);
1005        int x = voltage_multiplier(data, attr->index);
1006
1007        x *= data->voltages[attr->index];
1008        x /= 1000; /* convert from uV to mV */
1009
1010        return sprintf(buf, "%d\n", x);
1011}
1012
1013static ssize_t show_voltage_label(struct device *dev,
1014                                  struct device_attribute *devattr,
1015                                  char *buf)
1016{
1017        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1018        struct adt7462_data *data = adt7462_update_device(dev);
1019
1020        return sprintf(buf, "%s\n", voltage_label(data, attr->index));
1021}
1022
1023static ssize_t show_alarm(struct device *dev,
1024                          struct device_attribute *devattr,
1025                          char *buf)
1026{
1027        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1028        struct adt7462_data *data = adt7462_update_device(dev);
1029        int reg = attr->index >> ADT7462_ALARM_REG_SHIFT;
1030        int mask = attr->index & ADT7462_ALARM_FLAG_MASK;
1031
1032        if (data->alarms[reg] & mask)
1033                return sprintf(buf, "1\n");
1034        else
1035                return sprintf(buf, "0\n");
1036}
1037
1038static int fan_enabled(struct adt7462_data *data, int fan)
1039{
1040        return data->fan_enabled & (1 << fan);
1041}
1042
1043static ssize_t show_fan_min(struct device *dev,
1044                            struct device_attribute *devattr,
1045                            char *buf)
1046{
1047        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1048        struct adt7462_data *data = adt7462_update_device(dev);
1049        u16 temp;
1050
1051        /* Only the MSB of the min fan period is stored... */
1052        temp = data->fan_min[attr->index];
1053        temp <<= 8;
1054
1055        if (!fan_enabled(data, attr->index) ||
1056            !FAN_DATA_VALID(temp))
1057                return sprintf(buf, "0\n");
1058
1059        return sprintf(buf, "%d\n", FAN_PERIOD_TO_RPM(temp));
1060}
1061
1062static ssize_t set_fan_min(struct device *dev,
1063                           struct device_attribute *devattr,
1064                           const char *buf, size_t count)
1065{
1066        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1067        struct i2c_client *client = to_i2c_client(dev);
1068        struct adt7462_data *data = i2c_get_clientdata(client);
1069        long temp;
1070
1071        if (strict_strtol(buf, 10, &temp) || !temp ||
1072            !fan_enabled(data, attr->index))
1073                return -EINVAL;
1074
1075        temp = FAN_RPM_TO_PERIOD(temp);
1076        temp >>= 8;
1077        temp = SENSORS_LIMIT(temp, 1, 255);
1078
1079        mutex_lock(&data->lock);
1080        data->fan_min[attr->index] = temp;
1081        i2c_smbus_write_byte_data(client, ADT7462_REG_FAN_MIN(attr->index),
1082                                  temp);
1083        mutex_unlock(&data->lock);
1084
1085        return count;
1086}
1087
1088static ssize_t show_fan(struct device *dev, struct device_attribute *devattr,
1089                        char *buf)
1090{
1091        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1092        struct adt7462_data *data = adt7462_update_device(dev);
1093
1094        if (!fan_enabled(data, attr->index) ||
1095            !FAN_DATA_VALID(data->fan[attr->index]))
1096                return sprintf(buf, "0\n");
1097
1098        return sprintf(buf, "%d\n",
1099                       FAN_PERIOD_TO_RPM(data->fan[attr->index]));
1100}
1101
1102static ssize_t show_force_pwm_max(struct device *dev,
1103                                  struct device_attribute *devattr,
1104                                  char *buf)
1105{
1106        struct adt7462_data *data = adt7462_update_device(dev);
1107        return sprintf(buf, "%d\n", (data->cfg2 & ADT7462_FSPD_MASK ? 1 : 0));
1108}
1109
1110static ssize_t set_force_pwm_max(struct device *dev,
1111                                 struct device_attribute *devattr,
1112                                 const char *buf,
1113                                 size_t count)
1114{
1115        struct i2c_client *client = to_i2c_client(dev);
1116        struct adt7462_data *data = i2c_get_clientdata(client);
1117        long temp;
1118        u8 reg;
1119
1120        if (strict_strtol(buf, 10, &temp))
1121                return -EINVAL;
1122
1123        mutex_lock(&data->lock);
1124        reg = i2c_smbus_read_byte_data(client, ADT7462_REG_CFG2);
1125        if (temp)
1126                reg |= ADT7462_FSPD_MASK;
1127        else
1128                reg &= ~ADT7462_FSPD_MASK;
1129        data->cfg2 = reg;
1130        i2c_smbus_write_byte_data(client, ADT7462_REG_CFG2, reg);
1131        mutex_unlock(&data->lock);
1132
1133        return count;
1134}
1135
1136static ssize_t show_pwm(struct device *dev, struct device_attribute *devattr,
1137                        char *buf)
1138{
1139        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1140        struct adt7462_data *data = adt7462_update_device(dev);
1141        return sprintf(buf, "%d\n", data->pwm[attr->index]);
1142}
1143
1144static ssize_t set_pwm(struct device *dev, struct device_attribute *devattr,
1145                        const char *buf, size_t count)
1146{
1147        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1148        struct i2c_client *client = to_i2c_client(dev);
1149        struct adt7462_data *data = i2c_get_clientdata(client);
1150        long temp;
1151
1152        if (strict_strtol(buf, 10, &temp))
1153                return -EINVAL;
1154
1155        temp = SENSORS_LIMIT(temp, 0, 255);
1156
1157        mutex_lock(&data->lock);
1158        data->pwm[attr->index] = temp;
1159        i2c_smbus_write_byte_data(client, ADT7462_REG_PWM(attr->index), temp);
1160        mutex_unlock(&data->lock);
1161
1162        return count;
1163}
1164
1165static ssize_t show_pwm_max(struct device *dev,
1166                            struct device_attribute *devattr,
1167                            char *buf)
1168{
1169        struct adt7462_data *data = adt7462_update_device(dev);
1170        return sprintf(buf, "%d\n", data->pwm_max);
1171}
1172
1173static ssize_t set_pwm_max(struct device *dev,
1174                           struct device_attribute *devattr,
1175                           const char *buf,
1176                           size_t count)
1177{
1178        struct i2c_client *client = to_i2c_client(dev);
1179        struct adt7462_data *data = i2c_get_clientdata(client);
1180        long temp;
1181
1182        if (strict_strtol(buf, 10, &temp))
1183                return -EINVAL;
1184
1185        temp = SENSORS_LIMIT(temp, 0, 255);
1186
1187        mutex_lock(&data->lock);
1188        data->pwm_max = temp;
1189        i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_MAX, temp);
1190        mutex_unlock(&data->lock);
1191
1192        return count;
1193}
1194
1195static ssize_t show_pwm_min(struct device *dev,
1196                            struct device_attribute *devattr,
1197                            char *buf)
1198{
1199        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1200        struct adt7462_data *data = adt7462_update_device(dev);
1201        return sprintf(buf, "%d\n", data->pwm_min[attr->index]);
1202}
1203
1204static ssize_t set_pwm_min(struct device *dev,
1205                           struct device_attribute *devattr,
1206                           const char *buf,
1207                           size_t count)
1208{
1209        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1210        struct i2c_client *client = to_i2c_client(dev);
1211        struct adt7462_data *data = i2c_get_clientdata(client);
1212        long temp;
1213
1214        if (strict_strtol(buf, 10, &temp))
1215                return -EINVAL;
1216
1217        temp = SENSORS_LIMIT(temp, 0, 255);
1218
1219        mutex_lock(&data->lock);
1220        data->pwm_min[attr->index] = temp;
1221        i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_MIN(attr->index),
1222                                  temp);
1223        mutex_unlock(&data->lock);
1224
1225        return count;
1226}
1227
1228static ssize_t show_pwm_hyst(struct device *dev,
1229                             struct device_attribute *devattr,
1230                             char *buf)
1231{
1232        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1233        struct adt7462_data *data = adt7462_update_device(dev);
1234        return sprintf(buf, "%d\n", 1000 *
1235                      (data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK));
1236}
1237
1238static ssize_t set_pwm_hyst(struct device *dev,
1239                            struct device_attribute *devattr,
1240                            const char *buf,
1241                            size_t count)
1242{
1243        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1244        struct i2c_client *client = to_i2c_client(dev);
1245        struct adt7462_data *data = i2c_get_clientdata(client);
1246        long temp;
1247
1248        if (strict_strtol(buf, 10, &temp))
1249                return -EINVAL;
1250
1251        temp = DIV_ROUND_CLOSEST(temp, 1000);
1252        temp = SENSORS_LIMIT(temp, 0, 15);
1253
1254        /* package things up */
1255        temp &= ADT7462_PWM_HYST_MASK;
1256        temp |= data->pwm_trange[attr->index] & ADT7462_PWM_RANGE_MASK;
1257
1258        mutex_lock(&data->lock);
1259        data->pwm_trange[attr->index] = temp;
1260        i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index),
1261                                  temp);
1262        mutex_unlock(&data->lock);
1263
1264        return count;
1265}
1266
1267static ssize_t show_pwm_tmax(struct device *dev,
1268                             struct device_attribute *devattr,
1269                             char *buf)
1270{
1271        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1272        struct adt7462_data *data = adt7462_update_device(dev);
1273
1274        /* tmax = tmin + trange */
1275        int trange = trange_values[data->pwm_trange[attr->index] >>
1276                                   ADT7462_PWM_RANGE_SHIFT];
1277        int tmin = (data->pwm_tmin[attr->index] - 64) * 1000;
1278
1279        return sprintf(buf, "%d\n", tmin + trange);
1280}
1281
1282static ssize_t set_pwm_tmax(struct device *dev,
1283                            struct device_attribute *devattr,
1284                            const char *buf,
1285                            size_t count)
1286{
1287        int temp;
1288        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1289        struct i2c_client *client = to_i2c_client(dev);
1290        struct adt7462_data *data = i2c_get_clientdata(client);
1291        int tmin, trange_value;
1292        long trange;
1293
1294        if (strict_strtol(buf, 10, &trange))
1295                return -EINVAL;
1296
1297        /* trange = tmax - tmin */
1298        tmin = (data->pwm_tmin[attr->index] - 64) * 1000;
1299        trange_value = find_trange_value(trange - tmin);
1300
1301        if (trange_value < 0)
1302                return -EINVAL;
1303
1304        temp = trange_value << ADT7462_PWM_RANGE_SHIFT;
1305        temp |= data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK;
1306
1307        mutex_lock(&data->lock);
1308        data->pwm_trange[attr->index] = temp;
1309        i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index),
1310                                  temp);
1311        mutex_unlock(&data->lock);
1312
1313        return count;
1314}
1315
1316static ssize_t show_pwm_tmin(struct device *dev,
1317                             struct device_attribute *devattr,
1318                             char *buf)
1319{
1320        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1321        struct adt7462_data *data = adt7462_update_device(dev);
1322        return sprintf(buf, "%d\n", 1000 * (data->pwm_tmin[attr->index] - 64));
1323}
1324
1325static ssize_t set_pwm_tmin(struct device *dev,
1326                            struct device_attribute *devattr,
1327                            const char *buf,
1328                            size_t count)
1329{
1330        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1331        struct i2c_client *client = to_i2c_client(dev);
1332        struct adt7462_data *data = i2c_get_clientdata(client);
1333        long temp;
1334
1335        if (strict_strtol(buf, 10, &temp))
1336                return -EINVAL;
1337
1338        temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
1339        temp = SENSORS_LIMIT(temp, 0, 255);
1340
1341        mutex_lock(&data->lock);
1342        data->pwm_tmin[attr->index] = temp;
1343        i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TMIN(attr->index),
1344                                  temp);
1345        mutex_unlock(&data->lock);
1346
1347        return count;
1348}
1349
1350static ssize_t show_pwm_auto(struct device *dev,
1351                             struct device_attribute *devattr,
1352                             char *buf)
1353{
1354        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1355        struct adt7462_data *data = adt7462_update_device(dev);
1356        int cfg = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT;
1357
1358        switch (cfg) {
1359        case 4: /* off */
1360                return sprintf(buf, "0\n");
1361        case 7: /* manual */
1362                return sprintf(buf, "1\n");
1363        default: /* automatic */
1364                return sprintf(buf, "2\n");
1365        }
1366}
1367
1368static void set_pwm_channel(struct i2c_client *client,
1369                            struct adt7462_data *data,
1370                            int which,
1371                            int value)
1372{
1373        int temp = data->pwm_cfg[which] & ~ADT7462_PWM_CHANNEL_MASK;
1374        temp |= value << ADT7462_PWM_CHANNEL_SHIFT;
1375
1376        mutex_lock(&data->lock);
1377        data->pwm_cfg[which] = temp;
1378        i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_CFG(which), temp);
1379        mutex_unlock(&data->lock);
1380}
1381
1382static ssize_t set_pwm_auto(struct device *dev,
1383                            struct device_attribute *devattr,
1384                            const char *buf,
1385                            size_t count)
1386{
1387        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1388        struct i2c_client *client = to_i2c_client(dev);
1389        struct adt7462_data *data = i2c_get_clientdata(client);
1390        long temp;
1391
1392        if (strict_strtol(buf, 10, &temp))
1393                return -EINVAL;
1394
1395        switch (temp) {
1396        case 0: /* off */
1397                set_pwm_channel(client, data, attr->index, 4);
1398                return count;
1399        case 1: /* manual */
1400                set_pwm_channel(client, data, attr->index, 7);
1401                return count;
1402        default:
1403                return -EINVAL;
1404        }
1405}
1406
1407static ssize_t show_pwm_auto_temp(struct device *dev,
1408                                  struct device_attribute *devattr,
1409                                  char *buf)
1410{
1411        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1412        struct adt7462_data *data = adt7462_update_device(dev);
1413        int channel = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT;
1414
1415        switch (channel) {
1416        case 0: /* temp[1234] only */
1417        case 1:
1418        case 2:
1419        case 3:
1420                return sprintf(buf, "%d\n", (1 << channel));
1421        case 5: /* temp1 & temp4  */
1422                return sprintf(buf, "9\n");
1423        case 6:
1424                return sprintf(buf, "15\n");
1425        default:
1426                return sprintf(buf, "0\n");
1427        }
1428}
1429
1430static int cvt_auto_temp(int input)
1431{
1432        if (input == 0xF)
1433                return 6;
1434        if (input == 0x9)
1435                return 5;
1436        if (input < 1 || !is_power_of_2(input))
1437                return -EINVAL;
1438        return ilog2(input);
1439}
1440
1441static ssize_t set_pwm_auto_temp(struct device *dev,
1442                                 struct device_attribute *devattr,
1443                                 const char *buf,
1444                                 size_t count)
1445{
1446        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1447        struct i2c_client *client = to_i2c_client(dev);
1448        struct adt7462_data *data = i2c_get_clientdata(client);
1449        long temp;
1450
1451        if (strict_strtol(buf, 10, &temp))
1452                return -EINVAL;
1453
1454        temp = cvt_auto_temp(temp);
1455        if (temp < 0)
1456                return temp;
1457
1458        set_pwm_channel(client, data, attr->index, temp);
1459
1460        return count;
1461}
1462
1463static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max,
1464                    set_temp_max, 0);
1465static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp_max,
1466                    set_temp_max, 1);
1467static SENSOR_DEVICE_ATTR(temp3_max, S_IWUSR | S_IRUGO, show_temp_max,
1468                    set_temp_max, 2);
1469static SENSOR_DEVICE_ATTR(temp4_max, S_IWUSR | S_IRUGO, show_temp_max,
1470                    set_temp_max, 3);
1471
1472static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp_min,
1473                    set_temp_min, 0);
1474static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp_min,
1475                    set_temp_min, 1);
1476static SENSOR_DEVICE_ATTR(temp3_min, S_IWUSR | S_IRUGO, show_temp_min,
1477                    set_temp_min, 2);
1478static SENSOR_DEVICE_ATTR(temp4_min, S_IWUSR | S_IRUGO, show_temp_min,
1479                    set_temp_min, 3);
1480
1481static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);
1482static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1);
1483static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2);
1484static SENSOR_DEVICE_ATTR(temp4_input, S_IRUGO, show_temp, NULL, 3);
1485
1486static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, show_temp_label, NULL, 0);
1487static SENSOR_DEVICE_ATTR(temp2_label, S_IRUGO, show_temp_label, NULL, 1);
1488static SENSOR_DEVICE_ATTR(temp3_label, S_IRUGO, show_temp_label, NULL, 2);
1489static SENSOR_DEVICE_ATTR(temp4_label, S_IRUGO, show_temp_label, NULL, 3);
1490
1491static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL,
1492                          ADT7462_ALARM1 | ADT7462_LT_ALARM);
1493static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL,
1494                          ADT7462_ALARM1 | ADT7462_R1T_ALARM);
1495static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL,
1496                          ADT7462_ALARM1 | ADT7462_R2T_ALARM);
1497static SENSOR_DEVICE_ATTR(temp4_alarm, S_IRUGO, show_alarm, NULL,
1498                          ADT7462_ALARM1 | ADT7462_R3T_ALARM);
1499
1500static SENSOR_DEVICE_ATTR(in1_max, S_IWUSR | S_IRUGO, show_volt_max,
1501                    set_volt_max, 0);
1502static SENSOR_DEVICE_ATTR(in2_max, S_IWUSR | S_IRUGO, show_volt_max,
1503                    set_volt_max, 1);
1504static SENSOR_DEVICE_ATTR(in3_max, S_IWUSR | S_IRUGO, show_volt_max,
1505                    set_volt_max, 2);
1506static SENSOR_DEVICE_ATTR(in4_max, S_IWUSR | S_IRUGO, show_volt_max,
1507                    set_volt_max, 3);
1508static SENSOR_DEVICE_ATTR(in5_max, S_IWUSR | S_IRUGO, show_volt_max,
1509                    set_volt_max, 4);
1510static SENSOR_DEVICE_ATTR(in6_max, S_IWUSR | S_IRUGO, show_volt_max,
1511                    set_volt_max, 5);
1512static SENSOR_DEVICE_ATTR(in7_max, S_IWUSR | S_IRUGO, show_volt_max,
1513                    set_volt_max, 6);
1514static SENSOR_DEVICE_ATTR(in8_max, S_IWUSR | S_IRUGO, show_volt_max,
1515                    set_volt_max, 7);
1516static SENSOR_DEVICE_ATTR(in9_max, S_IWUSR | S_IRUGO, show_volt_max,
1517                    set_volt_max, 8);
1518static SENSOR_DEVICE_ATTR(in10_max, S_IWUSR | S_IRUGO, show_volt_max,
1519                    set_volt_max, 9);
1520static SENSOR_DEVICE_ATTR(in11_max, S_IWUSR | S_IRUGO, show_volt_max,
1521                    set_volt_max, 10);
1522static SENSOR_DEVICE_ATTR(in12_max, S_IWUSR | S_IRUGO, show_volt_max,
1523                    set_volt_max, 11);
1524static SENSOR_DEVICE_ATTR(in13_max, S_IWUSR | S_IRUGO, show_volt_max,
1525                    set_volt_max, 12);
1526
1527static SENSOR_DEVICE_ATTR(in1_min, S_IWUSR | S_IRUGO, show_volt_min,
1528                    set_volt_min, 0);
1529static SENSOR_DEVICE_ATTR(in2_min, S_IWUSR | S_IRUGO, show_volt_min,
1530                    set_volt_min, 1);
1531static SENSOR_DEVICE_ATTR(in3_min, S_IWUSR | S_IRUGO, show_volt_min,
1532                    set_volt_min, 2);
1533static SENSOR_DEVICE_ATTR(in4_min, S_IWUSR | S_IRUGO, show_volt_min,
1534                    set_volt_min, 3);
1535static SENSOR_DEVICE_ATTR(in5_min, S_IWUSR | S_IRUGO, show_volt_min,
1536                    set_volt_min, 4);
1537static SENSOR_DEVICE_ATTR(in6_min, S_IWUSR | S_IRUGO, show_volt_min,
1538                    set_volt_min, 5);
1539static SENSOR_DEVICE_ATTR(in7_min, S_IWUSR | S_IRUGO, show_volt_min,
1540                    set_volt_min, 6);
1541static SENSOR_DEVICE_ATTR(in8_min, S_IWUSR | S_IRUGO, show_volt_min,
1542                    set_volt_min, 7);
1543static SENSOR_DEVICE_ATTR(in9_min, S_IWUSR | S_IRUGO, show_volt_min,
1544                    set_volt_min, 8);
1545static SENSOR_DEVICE_ATTR(in10_min, S_IWUSR | S_IRUGO, show_volt_min,
1546                    set_volt_min, 9);
1547static SENSOR_DEVICE_ATTR(in11_min, S_IWUSR | S_IRUGO, show_volt_min,
1548                    set_volt_min, 10);
1549static SENSOR_DEVICE_ATTR(in12_min, S_IWUSR | S_IRUGO, show_volt_min,
1550                    set_volt_min, 11);
1551static SENSOR_DEVICE_ATTR(in13_min, S_IWUSR | S_IRUGO, show_volt_min,
1552                    set_volt_min, 12);
1553
1554static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, show_voltage, NULL, 0);
1555static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, show_voltage, NULL, 1);
1556static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, show_voltage, NULL, 2);
1557static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, show_voltage, NULL, 3);
1558static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, show_voltage, NULL, 4);
1559static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, show_voltage, NULL, 5);
1560static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, show_voltage, NULL, 6);
1561static SENSOR_DEVICE_ATTR(in8_input, S_IRUGO, show_voltage, NULL, 7);
1562static SENSOR_DEVICE_ATTR(in9_input, S_IRUGO, show_voltage, NULL, 8);
1563static SENSOR_DEVICE_ATTR(in10_input, S_IRUGO, show_voltage, NULL, 9);
1564static SENSOR_DEVICE_ATTR(in11_input, S_IRUGO, show_voltage, NULL, 10);
1565static SENSOR_DEVICE_ATTR(in12_input, S_IRUGO, show_voltage, NULL, 11);
1566static SENSOR_DEVICE_ATTR(in13_input, S_IRUGO, show_voltage, NULL, 12);
1567
1568static SENSOR_DEVICE_ATTR(in1_label, S_IRUGO, show_voltage_label, NULL, 0);
1569static SENSOR_DEVICE_ATTR(in2_label, S_IRUGO, show_voltage_label, NULL, 1);
1570static SENSOR_DEVICE_ATTR(in3_label, S_IRUGO, show_voltage_label, NULL, 2);
1571static SENSOR_DEVICE_ATTR(in4_label, S_IRUGO, show_voltage_label, NULL, 3);
1572static SENSOR_DEVICE_ATTR(in5_label, S_IRUGO, show_voltage_label, NULL, 4);
1573static SENSOR_DEVICE_ATTR(in6_label, S_IRUGO, show_voltage_label, NULL, 5);
1574static SENSOR_DEVICE_ATTR(in7_label, S_IRUGO, show_voltage_label, NULL, 6);
1575static SENSOR_DEVICE_ATTR(in8_label, S_IRUGO, show_voltage_label, NULL, 7);
1576static SENSOR_DEVICE_ATTR(in9_label, S_IRUGO, show_voltage_label, NULL, 8);
1577static SENSOR_DEVICE_ATTR(in10_label, S_IRUGO, show_voltage_label, NULL, 9);
1578static SENSOR_DEVICE_ATTR(in11_label, S_IRUGO, show_voltage_label, NULL, 10);
1579static SENSOR_DEVICE_ATTR(in12_label, S_IRUGO, show_voltage_label, NULL, 11);
1580static SENSOR_DEVICE_ATTR(in13_label, S_IRUGO, show_voltage_label, NULL, 12);
1581
1582static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL,
1583                          ADT7462_ALARM2 | ADT7462_V0_ALARM);
1584static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL,
1585                          ADT7462_ALARM2 | ADT7462_V7_ALARM);
1586static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL,
1587                          ADT7462_ALARM2 | ADT7462_V2_ALARM);
1588static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL,
1589                          ADT7462_ALARM2 | ADT7462_V6_ALARM);
1590static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL,
1591                          ADT7462_ALARM2 | ADT7462_V5_ALARM);
1592static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL,
1593                          ADT7462_ALARM2 | ADT7462_V4_ALARM);
1594static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL,
1595                          ADT7462_ALARM2 | ADT7462_V3_ALARM);
1596static SENSOR_DEVICE_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL,
1597                          ADT7462_ALARM2 | ADT7462_V1_ALARM);
1598static SENSOR_DEVICE_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL,
1599                          ADT7462_ALARM3 | ADT7462_V10_ALARM);
1600static SENSOR_DEVICE_ATTR(in10_alarm, S_IRUGO, show_alarm, NULL,
1601                          ADT7462_ALARM3 | ADT7462_V9_ALARM);
1602static SENSOR_DEVICE_ATTR(in11_alarm, S_IRUGO, show_alarm, NULL,
1603                          ADT7462_ALARM3 | ADT7462_V8_ALARM);
1604static SENSOR_DEVICE_ATTR(in12_alarm, S_IRUGO, show_alarm, NULL,
1605                          ADT7462_ALARM3 | ADT7462_V11_ALARM);
1606static SENSOR_DEVICE_ATTR(in13_alarm, S_IRUGO, show_alarm, NULL,
1607                          ADT7462_ALARM3 | ADT7462_V12_ALARM);
1608
1609static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
1610                    set_fan_min, 0);
1611static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
1612                    set_fan_min, 1);
1613static SENSOR_DEVICE_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
1614                    set_fan_min, 2);
1615static SENSOR_DEVICE_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
1616                    set_fan_min, 3);
1617static SENSOR_DEVICE_ATTR(fan5_min, S_IWUSR | S_IRUGO, show_fan_min,
1618                    set_fan_min, 4);
1619static SENSOR_DEVICE_ATTR(fan6_min, S_IWUSR | S_IRUGO, show_fan_min,
1620                    set_fan_min, 5);
1621static SENSOR_DEVICE_ATTR(fan7_min, S_IWUSR | S_IRUGO, show_fan_min,
1622                    set_fan_min, 6);
1623static SENSOR_DEVICE_ATTR(fan8_min, S_IWUSR | S_IRUGO, show_fan_min,
1624                    set_fan_min, 7);
1625
1626static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0);
1627static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1);
1628static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2);
1629static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3);
1630static SENSOR_DEVICE_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4);
1631static SENSOR_DEVICE_ATTR(fan6_input, S_IRUGO, show_fan, NULL, 5);
1632static SENSOR_DEVICE_ATTR(fan7_input, S_IRUGO, show_fan, NULL, 6);
1633static SENSOR_DEVICE_ATTR(fan8_input, S_IRUGO, show_fan, NULL, 7);
1634
1635static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL,
1636                          ADT7462_ALARM4 | ADT7462_F0_ALARM);
1637static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL,
1638                          ADT7462_ALARM4 | ADT7462_F1_ALARM);
1639static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL,
1640                          ADT7462_ALARM4 | ADT7462_F2_ALARM);
1641static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL,
1642                          ADT7462_ALARM4 | ADT7462_F3_ALARM);
1643static SENSOR_DEVICE_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL,
1644                          ADT7462_ALARM4 | ADT7462_F4_ALARM);
1645static SENSOR_DEVICE_ATTR(fan6_alarm, S_IRUGO, show_alarm, NULL,
1646                          ADT7462_ALARM4 | ADT7462_F5_ALARM);
1647static SENSOR_DEVICE_ATTR(fan7_alarm, S_IRUGO, show_alarm, NULL,
1648                          ADT7462_ALARM4 | ADT7462_F6_ALARM);
1649static SENSOR_DEVICE_ATTR(fan8_alarm, S_IRUGO, show_alarm, NULL,
1650                          ADT7462_ALARM4 | ADT7462_F7_ALARM);
1651
1652static SENSOR_DEVICE_ATTR(force_pwm_max, S_IWUSR | S_IRUGO,
1653                    show_force_pwm_max, set_force_pwm_max, 0);
1654
1655static SENSOR_DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 0);
1656static SENSOR_DEVICE_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 1);
1657static SENSOR_DEVICE_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 2);
1658static SENSOR_DEVICE_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 3);
1659
1660static SENSOR_DEVICE_ATTR(pwm1_auto_point1_pwm, S_IWUSR | S_IRUGO,
1661                    show_pwm_min, set_pwm_min, 0);
1662static SENSOR_DEVICE_ATTR(pwm2_auto_point1_pwm, S_IWUSR | S_IRUGO,
1663                    show_pwm_min, set_pwm_min, 1);
1664static SENSOR_DEVICE_ATTR(pwm3_auto_point1_pwm, S_IWUSR | S_IRUGO,
1665                    show_pwm_min, set_pwm_min, 2);
1666static SENSOR_DEVICE_ATTR(pwm4_auto_point1_pwm, S_IWUSR | S_IRUGO,
1667                    show_pwm_min, set_pwm_min, 3);
1668
1669static SENSOR_DEVICE_ATTR(pwm1_auto_point2_pwm, S_IWUSR | S_IRUGO,
1670                    show_pwm_max, set_pwm_max, 0);
1671static SENSOR_DEVICE_ATTR(pwm2_auto_point2_pwm, S_IWUSR | S_IRUGO,
1672                    show_pwm_max, set_pwm_max, 1);
1673static SENSOR_DEVICE_ATTR(pwm3_auto_point2_pwm, S_IWUSR | S_IRUGO,
1674                    show_pwm_max, set_pwm_max, 2);
1675static SENSOR_DEVICE_ATTR(pwm4_auto_point2_pwm, S_IWUSR | S_IRUGO,
1676                    show_pwm_max, set_pwm_max, 3);
1677
1678static SENSOR_DEVICE_ATTR(temp1_auto_point1_hyst, S_IWUSR | S_IRUGO,
1679                    show_pwm_hyst, set_pwm_hyst, 0);
1680static SENSOR_DEVICE_ATTR(temp2_auto_point1_hyst, S_IWUSR | S_IRUGO,
1681                    show_pwm_hyst, set_pwm_hyst, 1);
1682static SENSOR_DEVICE_ATTR(temp3_auto_point1_hyst, S_IWUSR | S_IRUGO,
1683                    show_pwm_hyst, set_pwm_hyst, 2);
1684static SENSOR_DEVICE_ATTR(temp4_auto_point1_hyst, S_IWUSR | S_IRUGO,
1685                    show_pwm_hyst, set_pwm_hyst, 3);
1686
1687static SENSOR_DEVICE_ATTR(temp1_auto_point2_hyst, S_IWUSR | S_IRUGO,
1688                    show_pwm_hyst, set_pwm_hyst, 0);
1689static SENSOR_DEVICE_ATTR(temp2_auto_point2_hyst, S_IWUSR | S_IRUGO,
1690                    show_pwm_hyst, set_pwm_hyst, 1);
1691static SENSOR_DEVICE_ATTR(temp3_auto_point2_hyst, S_IWUSR | S_IRUGO,
1692                    show_pwm_hyst, set_pwm_hyst, 2);
1693static SENSOR_DEVICE_ATTR(temp4_auto_point2_hyst, S_IWUSR | S_IRUGO,
1694                    show_pwm_hyst, set_pwm_hyst, 3);
1695
1696static SENSOR_DEVICE_ATTR(temp1_auto_point1_temp, S_IWUSR | S_IRUGO,
1697                    show_pwm_tmin, set_pwm_tmin, 0);
1698static SENSOR_DEVICE_ATTR(temp2_auto_point1_temp, S_IWUSR | S_IRUGO,
1699                    show_pwm_tmin, set_pwm_tmin, 1);
1700static SENSOR_DEVICE_ATTR(temp3_auto_point1_temp, S_IWUSR | S_IRUGO,
1701                    show_pwm_tmin, set_pwm_tmin, 2);
1702static SENSOR_DEVICE_ATTR(temp4_auto_point1_temp, S_IWUSR | S_IRUGO,
1703                    show_pwm_tmin, set_pwm_tmin, 3);
1704
1705static SENSOR_DEVICE_ATTR(temp1_auto_point2_temp, S_IWUSR | S_IRUGO,
1706                    show_pwm_tmax, set_pwm_tmax, 0);
1707static SENSOR_DEVICE_ATTR(temp2_auto_point2_temp, S_IWUSR | S_IRUGO,
1708                    show_pwm_tmax, set_pwm_tmax, 1);
1709static SENSOR_DEVICE_ATTR(temp3_auto_point2_temp, S_IWUSR | S_IRUGO,
1710                    show_pwm_tmax, set_pwm_tmax, 2);
1711static SENSOR_DEVICE_ATTR(temp4_auto_point2_temp, S_IWUSR | S_IRUGO,
1712                    show_pwm_tmax, set_pwm_tmax, 3);
1713
1714static SENSOR_DEVICE_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1715                    set_pwm_auto, 0);
1716static SENSOR_DEVICE_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1717                    set_pwm_auto, 1);
1718static SENSOR_DEVICE_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1719                    set_pwm_auto, 2);
1720static SENSOR_DEVICE_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1721                    set_pwm_auto, 3);
1722
1723static SENSOR_DEVICE_ATTR(pwm1_auto_channels_temp, S_IWUSR | S_IRUGO,
1724                    show_pwm_auto_temp, set_pwm_auto_temp, 0);
1725static SENSOR_DEVICE_ATTR(pwm2_auto_channels_temp, S_IWUSR | S_IRUGO,
1726                    show_pwm_auto_temp, set_pwm_auto_temp, 1);
1727static SENSOR_DEVICE_ATTR(pwm3_auto_channels_temp, S_IWUSR | S_IRUGO,
1728                    show_pwm_auto_temp, set_pwm_auto_temp, 2);
1729static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO,
1730                    show_pwm_auto_temp, set_pwm_auto_temp, 3);
1731
1732static struct attribute *adt7462_attr[] =
1733{
1734        &sensor_dev_attr_temp1_max.dev_attr.attr,
1735        &sensor_dev_attr_temp2_max.dev_attr.attr,
1736        &sensor_dev_attr_temp3_max.dev_attr.attr,
1737        &sensor_dev_attr_temp4_max.dev_attr.attr,
1738
1739        &sensor_dev_attr_temp1_min.dev_attr.attr,
1740        &sensor_dev_attr_temp2_min.dev_attr.attr,
1741        &sensor_dev_attr_temp3_min.dev_attr.attr,
1742        &sensor_dev_attr_temp4_min.dev_attr.attr,
1743
1744        &sensor_dev_attr_temp1_input.dev_attr.attr,
1745        &sensor_dev_attr_temp2_input.dev_attr.attr,
1746        &sensor_dev_attr_temp3_input.dev_attr.attr,
1747        &sensor_dev_attr_temp4_input.dev_attr.attr,
1748
1749        &sensor_dev_attr_temp1_label.dev_attr.attr,
1750        &sensor_dev_attr_temp2_label.dev_attr.attr,
1751        &sensor_dev_attr_temp3_label.dev_attr.attr,
1752        &sensor_dev_attr_temp4_label.dev_attr.attr,
1753
1754        &sensor_dev_attr_temp1_alarm.dev_attr.attr,
1755        &sensor_dev_attr_temp2_alarm.dev_attr.attr,
1756        &sensor_dev_attr_temp3_alarm.dev_attr.attr,
1757        &sensor_dev_attr_temp4_alarm.dev_attr.attr,
1758
1759        &sensor_dev_attr_in1_max.dev_attr.attr,
1760        &sensor_dev_attr_in2_max.dev_attr.attr,
1761        &sensor_dev_attr_in3_max.dev_attr.attr,
1762        &sensor_dev_attr_in4_max.dev_attr.attr,
1763        &sensor_dev_attr_in5_max.dev_attr.attr,
1764        &sensor_dev_attr_in6_max.dev_attr.attr,
1765        &sensor_dev_attr_in7_max.dev_attr.attr,
1766        &sensor_dev_attr_in8_max.dev_attr.attr,
1767        &sensor_dev_attr_in9_max.dev_attr.attr,
1768        &sensor_dev_attr_in10_max.dev_attr.attr,
1769        &sensor_dev_attr_in11_max.dev_attr.attr,
1770        &sensor_dev_attr_in12_max.dev_attr.attr,
1771        &sensor_dev_attr_in13_max.dev_attr.attr,
1772
1773        &sensor_dev_attr_in1_min.dev_attr.attr,
1774        &sensor_dev_attr_in2_min.dev_attr.attr,
1775        &sensor_dev_attr_in3_min.dev_attr.attr,
1776        &sensor_dev_attr_in4_min.dev_attr.attr,
1777        &sensor_dev_attr_in5_min.dev_attr.attr,
1778        &sensor_dev_attr_in6_min.dev_attr.attr,
1779        &sensor_dev_attr_in7_min.dev_attr.attr,
1780        &sensor_dev_attr_in8_min.dev_attr.attr,
1781        &sensor_dev_attr_in9_min.dev_attr.attr,
1782        &sensor_dev_attr_in10_min.dev_attr.attr,
1783        &sensor_dev_attr_in11_min.dev_attr.attr,
1784        &sensor_dev_attr_in12_min.dev_attr.attr,
1785        &sensor_dev_attr_in13_min.dev_attr.attr,
1786
1787        &sensor_dev_attr_in1_input.dev_attr.attr,
1788        &sensor_dev_attr_in2_input.dev_attr.attr,
1789        &sensor_dev_attr_in3_input.dev_attr.attr,
1790        &sensor_dev_attr_in4_input.dev_attr.attr,
1791        &sensor_dev_attr_in5_input.dev_attr.attr,
1792        &sensor_dev_attr_in6_input.dev_attr.attr,
1793        &sensor_dev_attr_in7_input.dev_attr.attr,
1794        &sensor_dev_attr_in8_input.dev_attr.attr,
1795        &sensor_dev_attr_in9_input.dev_attr.attr,
1796        &sensor_dev_attr_in10_input.dev_attr.attr,
1797        &sensor_dev_attr_in11_input.dev_attr.attr,
1798        &sensor_dev_attr_in12_input.dev_attr.attr,
1799        &sensor_dev_attr_in13_input.dev_attr.attr,
1800
1801        &sensor_dev_attr_in1_label.dev_attr.attr,
1802        &sensor_dev_attr_in2_label.dev_attr.attr,
1803        &sensor_dev_attr_in3_label.dev_attr.attr,
1804        &sensor_dev_attr_in4_label.dev_attr.attr,
1805        &sensor_dev_attr_in5_label.dev_attr.attr,
1806        &sensor_dev_attr_in6_label.dev_attr.attr,
1807        &sensor_dev_attr_in7_label.dev_attr.attr,
1808        &sensor_dev_attr_in8_label.dev_attr.attr,
1809        &sensor_dev_attr_in9_label.dev_attr.attr,
1810        &sensor_dev_attr_in10_label.dev_attr.attr,
1811        &sensor_dev_attr_in11_label.dev_attr.attr,
1812        &sensor_dev_attr_in12_label.dev_attr.attr,
1813        &sensor_dev_attr_in13_label.dev_attr.attr,
1814
1815        &sensor_dev_attr_in1_alarm.dev_attr.attr,
1816        &sensor_dev_attr_in2_alarm.dev_attr.attr,
1817        &sensor_dev_attr_in3_alarm.dev_attr.attr,
1818        &sensor_dev_attr_in4_alarm.dev_attr.attr,
1819        &sensor_dev_attr_in5_alarm.dev_attr.attr,
1820        &sensor_dev_attr_in6_alarm.dev_attr.attr,
1821        &sensor_dev_attr_in7_alarm.dev_attr.attr,
1822        &sensor_dev_attr_in8_alarm.dev_attr.attr,
1823        &sensor_dev_attr_in9_alarm.dev_attr.attr,
1824        &sensor_dev_attr_in10_alarm.dev_attr.attr,
1825        &sensor_dev_attr_in11_alarm.dev_attr.attr,
1826        &sensor_dev_attr_in12_alarm.dev_attr.attr,
1827        &sensor_dev_attr_in13_alarm.dev_attr.attr,
1828
1829        &sensor_dev_attr_fan1_min.dev_attr.attr,
1830        &sensor_dev_attr_fan2_min.dev_attr.attr,
1831        &sensor_dev_attr_fan3_min.dev_attr.attr,
1832        &sensor_dev_attr_fan4_min.dev_attr.attr,
1833        &sensor_dev_attr_fan5_min.dev_attr.attr,
1834        &sensor_dev_attr_fan6_min.dev_attr.attr,
1835        &sensor_dev_attr_fan7_min.dev_attr.attr,
1836        &sensor_dev_attr_fan8_min.dev_attr.attr,
1837
1838        &sensor_dev_attr_fan1_input.dev_attr.attr,
1839        &sensor_dev_attr_fan2_input.dev_attr.attr,
1840        &sensor_dev_attr_fan3_input.dev_attr.attr,
1841        &sensor_dev_attr_fan4_input.dev_attr.attr,
1842        &sensor_dev_attr_fan5_input.dev_attr.attr,
1843        &sensor_dev_attr_fan6_input.dev_attr.attr,
1844        &sensor_dev_attr_fan7_input.dev_attr.attr,
1845        &sensor_dev_attr_fan8_input.dev_attr.attr,
1846
1847        &sensor_dev_attr_fan1_alarm.dev_attr.attr,
1848        &sensor_dev_attr_fan2_alarm.dev_attr.attr,
1849        &sensor_dev_attr_fan3_alarm.dev_attr.attr,
1850        &sensor_dev_attr_fan4_alarm.dev_attr.attr,
1851        &sensor_dev_attr_fan5_alarm.dev_attr.attr,
1852        &sensor_dev_attr_fan6_alarm.dev_attr.attr,
1853        &sensor_dev_attr_fan7_alarm.dev_attr.attr,
1854        &sensor_dev_attr_fan8_alarm.dev_attr.attr,
1855
1856        &sensor_dev_attr_force_pwm_max.dev_attr.attr,
1857        &sensor_dev_attr_pwm1.dev_attr.attr,
1858        &sensor_dev_attr_pwm2.dev_attr.attr,
1859        &sensor_dev_attr_pwm3.dev_attr.attr,
1860        &sensor_dev_attr_pwm4.dev_attr.attr,
1861
1862        &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
1863        &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
1864        &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
1865        &sensor_dev_attr_pwm4_auto_point1_pwm.dev_attr.attr,
1866
1867        &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
1868        &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
1869        &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
1870        &sensor_dev_attr_pwm4_auto_point2_pwm.dev_attr.attr,
1871
1872        &sensor_dev_attr_temp1_auto_point1_hyst.dev_attr.attr,
1873        &sensor_dev_attr_temp2_auto_point1_hyst.dev_attr.attr,
1874        &sensor_dev_attr_temp3_auto_point1_hyst.dev_attr.attr,
1875        &sensor_dev_attr_temp4_auto_point1_hyst.dev_attr.attr,
1876
1877        &sensor_dev_attr_temp1_auto_point2_hyst.dev_attr.attr,
1878        &sensor_dev_attr_temp2_auto_point2_hyst.dev_attr.attr,
1879        &sensor_dev_attr_temp3_auto_point2_hyst.dev_attr.attr,
1880        &sensor_dev_attr_temp4_auto_point2_hyst.dev_attr.attr,
1881
1882        &sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr,
1883        &sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr,
1884        &sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr,
1885        &sensor_dev_attr_temp4_auto_point1_temp.dev_attr.attr,
1886
1887        &sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr,
1888        &sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr,
1889        &sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr,
1890        &sensor_dev_attr_temp4_auto_point2_temp.dev_attr.attr,
1891
1892        &sensor_dev_attr_pwm1_enable.dev_attr.attr,
1893        &sensor_dev_attr_pwm2_enable.dev_attr.attr,
1894        &sensor_dev_attr_pwm3_enable.dev_attr.attr,
1895        &sensor_dev_attr_pwm4_enable.dev_attr.attr,
1896
1897        &sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
1898        &sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
1899        &sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
1900        &sensor_dev_attr_pwm4_auto_channels_temp.dev_attr.attr,
1901        NULL
1902};
1903
1904/* Return 0 if detection is successful, -ENODEV otherwise */
1905static int adt7462_detect(struct i2c_client *client, int kind,
1906                          struct i2c_board_info *info)
1907{
1908        struct i2c_adapter *adapter = client->adapter;
1909
1910        if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1911                return -ENODEV;
1912
1913        if (kind <= 0) {
1914                int vendor, device, revision;
1915
1916                vendor = i2c_smbus_read_byte_data(client, ADT7462_REG_VENDOR);
1917                if (vendor != ADT7462_VENDOR)
1918                        return -ENODEV;
1919
1920                device = i2c_smbus_read_byte_data(client, ADT7462_REG_DEVICE);
1921                if (device != ADT7462_DEVICE)
1922                        return -ENODEV;
1923
1924                revision = i2c_smbus_read_byte_data(client,
1925                                                    ADT7462_REG_REVISION);
1926                if (revision != ADT7462_REVISION)
1927                        return -ENODEV;
1928        } else
1929                dev_dbg(&adapter->dev, "detection forced\n");
1930
1931        strlcpy(info->type, "adt7462", I2C_NAME_SIZE);
1932
1933        return 0;
1934}
1935
1936static int adt7462_probe(struct i2c_client *client,
1937                         const struct i2c_device_id *id)
1938{
1939        struct adt7462_data *data;
1940        int err;
1941
1942        data = kzalloc(sizeof(struct adt7462_data), GFP_KERNEL);
1943        if (!data) {
1944                err = -ENOMEM;
1945                goto exit;
1946        }
1947
1948        i2c_set_clientdata(client, data);
1949        mutex_init(&data->lock);
1950
1951        dev_info(&client->dev, "%s chip found\n", client->name);
1952
1953        /* Register sysfs hooks */
1954        data->attrs.attrs = adt7462_attr;
1955        err = sysfs_create_group(&client->dev.kobj, &data->attrs);
1956        if (err)
1957                goto exit_free;
1958
1959        data->hwmon_dev = hwmon_device_register(&client->dev);
1960        if (IS_ERR(data->hwmon_dev)) {
1961                err = PTR_ERR(data->hwmon_dev);
1962                goto exit_remove;
1963        }
1964
1965        return 0;
1966
1967exit_remove:
1968        sysfs_remove_group(&client->dev.kobj, &data->attrs);
1969exit_free:
1970        kfree(data);
1971exit:
1972        return err;
1973}
1974
1975static int adt7462_remove(struct i2c_client *client)
1976{
1977        struct adt7462_data *data = i2c_get_clientdata(client);
1978
1979        hwmon_device_unregister(data->hwmon_dev);
1980        sysfs_remove_group(&client->dev.kobj, &data->attrs);
1981        kfree(data);
1982        return 0;
1983}
1984
1985static int __init adt7462_init(void)
1986{
1987        return i2c_add_driver(&adt7462_driver);
1988}
1989
1990static void __exit adt7462_exit(void)
1991{
1992        i2c_del_driver(&adt7462_driver);
1993}
1994
1995MODULE_AUTHOR("Darrick J. Wong <djwong@us.ibm.com>");
1996MODULE_DESCRIPTION("ADT7462 driver");
1997MODULE_LICENSE("GPL");
1998
1999module_init(adt7462_init);
2000module_exit(adt7462_exit);
2001