linux/drivers/hwmon/w83791d.c
<<
>>
Prefs
   1/*
   2    w83791d.c - Part of lm_sensors, Linux kernel modules for hardware
   3                monitoring
   4
   5    Copyright (C) 2006-2007 Charles Spirakis <bezaur@gmail.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., 675 Mass Ave, Cambridge, MA 02139, USA.
  20*/
  21
  22/*
  23    Supports following chips:
  24
  25    Chip        #vin    #fanin  #pwm    #temp   wchipid vendid  i2c     ISA
  26    w83791d     10      5       5       3       0x71    0x5ca3  yes     no
  27
  28    The w83791d chip appears to be part way between the 83781d and the
  29    83792d. Thus, this file is derived from both the w83792d.c and
  30    w83781d.c files.
  31
  32    The w83791g chip is the same as the w83791d but lead-free.
  33*/
  34
  35#include <linux/module.h>
  36#include <linux/init.h>
  37#include <linux/slab.h>
  38#include <linux/i2c.h>
  39#include <linux/hwmon.h>
  40#include <linux/hwmon-vid.h>
  41#include <linux/hwmon-sysfs.h>
  42#include <linux/err.h>
  43#include <linux/mutex.h>
  44
  45#define NUMBER_OF_VIN           10
  46#define NUMBER_OF_FANIN         5
  47#define NUMBER_OF_TEMPIN        3
  48#define NUMBER_OF_PWM           5
  49
  50/* Addresses to scan */
  51static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
  52                                                I2C_CLIENT_END };
  53
  54/* Insmod parameters */
  55
  56static unsigned short force_subclients[4];
  57module_param_array(force_subclients, short, NULL, 0);
  58MODULE_PARM_DESC(force_subclients, "List of subclient addresses: "
  59                        "{bus, clientaddr, subclientaddr1, subclientaddr2}");
  60
  61static int reset;
  62module_param(reset, bool, 0);
  63MODULE_PARM_DESC(reset, "Set to one to force a hardware chip reset");
  64
  65static int init;
  66module_param(init, bool, 0);
  67MODULE_PARM_DESC(init, "Set to one to force extra software initialization");
  68
  69/* The W83791D registers */
  70static const u8 W83791D_REG_IN[NUMBER_OF_VIN] = {
  71        0x20,                   /* VCOREA in DataSheet */
  72        0x21,                   /* VINR0 in DataSheet */
  73        0x22,                   /* +3.3VIN in DataSheet */
  74        0x23,                   /* VDD5V in DataSheet */
  75        0x24,                   /* +12VIN in DataSheet */
  76        0x25,                   /* -12VIN in DataSheet */
  77        0x26,                   /* -5VIN in DataSheet */
  78        0xB0,                   /* 5VSB in DataSheet */
  79        0xB1,                   /* VBAT in DataSheet */
  80        0xB2                    /* VINR1 in DataSheet */
  81};
  82
  83static const u8 W83791D_REG_IN_MAX[NUMBER_OF_VIN] = {
  84        0x2B,                   /* VCOREA High Limit in DataSheet */
  85        0x2D,                   /* VINR0 High Limit in DataSheet */
  86        0x2F,                   /* +3.3VIN High Limit in DataSheet */
  87        0x31,                   /* VDD5V High Limit in DataSheet */
  88        0x33,                   /* +12VIN High Limit in DataSheet */
  89        0x35,                   /* -12VIN High Limit in DataSheet */
  90        0x37,                   /* -5VIN High Limit in DataSheet */
  91        0xB4,                   /* 5VSB High Limit in DataSheet */
  92        0xB6,                   /* VBAT High Limit in DataSheet */
  93        0xB8                    /* VINR1 High Limit in DataSheet */
  94};
  95static const u8 W83791D_REG_IN_MIN[NUMBER_OF_VIN] = {
  96        0x2C,                   /* VCOREA Low Limit in DataSheet */
  97        0x2E,                   /* VINR0 Low Limit in DataSheet */
  98        0x30,                   /* +3.3VIN Low Limit in DataSheet */
  99        0x32,                   /* VDD5V Low Limit in DataSheet */
 100        0x34,                   /* +12VIN Low Limit in DataSheet */
 101        0x36,                   /* -12VIN Low Limit in DataSheet */
 102        0x38,                   /* -5VIN Low Limit in DataSheet */
 103        0xB5,                   /* 5VSB Low Limit in DataSheet */
 104        0xB7,                   /* VBAT Low Limit in DataSheet */
 105        0xB9                    /* VINR1 Low Limit in DataSheet */
 106};
 107static const u8 W83791D_REG_FAN[NUMBER_OF_FANIN] = {
 108        0x28,                   /* FAN 1 Count in DataSheet */
 109        0x29,                   /* FAN 2 Count in DataSheet */
 110        0x2A,                   /* FAN 3 Count in DataSheet */
 111        0xBA,                   /* FAN 4 Count in DataSheet */
 112        0xBB,                   /* FAN 5 Count in DataSheet */
 113};
 114static const u8 W83791D_REG_FAN_MIN[NUMBER_OF_FANIN] = {
 115        0x3B,                   /* FAN 1 Count Low Limit in DataSheet */
 116        0x3C,                   /* FAN 2 Count Low Limit in DataSheet */
 117        0x3D,                   /* FAN 3 Count Low Limit in DataSheet */
 118        0xBC,                   /* FAN 4 Count Low Limit in DataSheet */
 119        0xBD,                   /* FAN 5 Count Low Limit in DataSheet */
 120};
 121
 122static const u8 W83791D_REG_PWM[NUMBER_OF_PWM] = {
 123        0x81,                   /* PWM 1 duty cycle register in DataSheet */
 124        0x83,                   /* PWM 2 duty cycle register in DataSheet */
 125        0x94,                   /* PWM 3 duty cycle register in DataSheet */
 126        0xA0,                   /* PWM 4 duty cycle register in DataSheet */
 127        0xA1,                   /* PWM 5 duty cycle register in DataSheet */
 128};
 129
 130static const u8 W83791D_REG_TEMP_TARGET[3] = {
 131        0x85,                   /* PWM 1 target temperature for temp 1 */
 132        0x86,                   /* PWM 2 target temperature for temp 2 */
 133        0x96,                   /* PWM 3 target temperature for temp 3 */
 134};
 135
 136static const u8 W83791D_REG_TEMP_TOL[2] = {
 137        0x87,                   /* PWM 1/2 temperature tolerance */
 138        0x97,                   /* PWM 3 temperature tolerance */
 139};
 140
 141static const u8 W83791D_REG_FAN_CFG[2] = {
 142        0x84,                   /* FAN 1/2 configuration */
 143        0x95,                   /* FAN 3 configuration */
 144};
 145
 146static const u8 W83791D_REG_FAN_DIV[3] = {
 147        0x47,                   /* contains FAN1 and FAN2 Divisor */
 148        0x4b,                   /* contains FAN3 Divisor */
 149        0x5C,                   /* contains FAN4 and FAN5 Divisor */
 150};
 151
 152#define W83791D_REG_BANK                0x4E
 153#define W83791D_REG_TEMP2_CONFIG        0xC2
 154#define W83791D_REG_TEMP3_CONFIG        0xCA
 155
 156static const u8 W83791D_REG_TEMP1[3] = {
 157        0x27,                   /* TEMP 1 in DataSheet */
 158        0x39,                   /* TEMP 1 Over in DataSheet */
 159        0x3A,                   /* TEMP 1 Hyst in DataSheet */
 160};
 161
 162static const u8 W83791D_REG_TEMP_ADD[2][6] = {
 163        {0xC0,                  /* TEMP 2 in DataSheet */
 164         0xC1,                  /* TEMP 2(0.5 deg) in DataSheet */
 165         0xC5,                  /* TEMP 2 Over High part in DataSheet */
 166         0xC6,                  /* TEMP 2 Over Low part in DataSheet */
 167         0xC3,                  /* TEMP 2 Thyst High part in DataSheet */
 168         0xC4},                 /* TEMP 2 Thyst Low part in DataSheet */
 169        {0xC8,                  /* TEMP 3 in DataSheet */
 170         0xC9,                  /* TEMP 3(0.5 deg) in DataSheet */
 171         0xCD,                  /* TEMP 3 Over High part in DataSheet */
 172         0xCE,                  /* TEMP 3 Over Low part in DataSheet */
 173         0xCB,                  /* TEMP 3 Thyst High part in DataSheet */
 174         0xCC}                  /* TEMP 3 Thyst Low part in DataSheet */
 175};
 176
 177#define W83791D_REG_BEEP_CONFIG         0x4D
 178
 179static const u8 W83791D_REG_BEEP_CTRL[3] = {
 180        0x56,                   /* BEEP Control Register 1 */
 181        0x57,                   /* BEEP Control Register 2 */
 182        0xA3,                   /* BEEP Control Register 3 */
 183};
 184
 185#define W83791D_REG_GPIO                0x15
 186#define W83791D_REG_CONFIG              0x40
 187#define W83791D_REG_VID_FANDIV          0x47
 188#define W83791D_REG_DID_VID4            0x49
 189#define W83791D_REG_WCHIPID             0x58
 190#define W83791D_REG_CHIPMAN             0x4F
 191#define W83791D_REG_PIN                 0x4B
 192#define W83791D_REG_I2C_SUBADDR         0x4A
 193
 194#define W83791D_REG_ALARM1 0xA9 /* realtime status register1 */
 195#define W83791D_REG_ALARM2 0xAA /* realtime status register2 */
 196#define W83791D_REG_ALARM3 0xAB /* realtime status register3 */
 197
 198#define W83791D_REG_VBAT                0x5D
 199#define W83791D_REG_I2C_ADDR            0x48
 200
 201/* The SMBus locks itself. The Winbond W83791D has a bank select register
 202   (index 0x4e), but the driver only accesses registers in bank 0. Since
 203   we don't switch banks, we don't need any special code to handle
 204   locking access between bank switches */
 205static inline int w83791d_read(struct i2c_client *client, u8 reg)
 206{
 207        return i2c_smbus_read_byte_data(client, reg);
 208}
 209
 210static inline int w83791d_write(struct i2c_client *client, u8 reg, u8 value)
 211{
 212        return i2c_smbus_write_byte_data(client, reg, value);
 213}
 214
 215/* The analog voltage inputs have 16mV LSB. Since the sysfs output is
 216   in mV as would be measured on the chip input pin, need to just
 217   multiply/divide by 16 to translate from/to register values. */
 218#define IN_TO_REG(val)          (SENSORS_LIMIT((((val) + 8) / 16), 0, 255))
 219#define IN_FROM_REG(val)        ((val) * 16)
 220
 221static u8 fan_to_reg(long rpm, int div)
 222{
 223        if (rpm == 0)
 224                return 255;
 225        rpm = SENSORS_LIMIT(rpm, 1, 1000000);
 226        return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1, 254);
 227}
 228
 229#define FAN_FROM_REG(val,div)   ((val) == 0   ? -1 : \
 230                                ((val) == 255 ? 0 : \
 231                                        1350000 / ((val) * (div))))
 232
 233/* for temp1 which is 8-bit resolution, LSB = 1 degree Celsius */
 234#define TEMP1_FROM_REG(val)     ((val) * 1000)
 235#define TEMP1_TO_REG(val)       ((val) <= -128000 ? -128 : \
 236                                 (val) >= 127000 ? 127 : \
 237                                 (val) < 0 ? ((val) - 500) / 1000 : \
 238                                 ((val) + 500) / 1000)
 239
 240/* for temp2 and temp3 which are 9-bit resolution, LSB = 0.5 degree Celsius
 241   Assumes the top 8 bits are the integral amount and the bottom 8 bits
 242   are the fractional amount. Since we only have 0.5 degree resolution,
 243   the bottom 7 bits will always be zero */
 244#define TEMP23_FROM_REG(val)    ((val) / 128 * 500)
 245#define TEMP23_TO_REG(val)      ((val) <= -128000 ? 0x8000 : \
 246                                 (val) >= 127500 ? 0x7F80 : \
 247                                 (val) < 0 ? ((val) - 250) / 500 * 128 : \
 248                                 ((val) + 250) / 500 * 128)
 249
 250/* for thermal cruise target temp, 7-bits, LSB = 1 degree Celsius */
 251#define TARGET_TEMP_TO_REG(val)         ((val) < 0 ? 0 : \
 252                                        (val) >= 127000 ? 127 : \
 253                                        ((val) + 500) / 1000)
 254
 255/* for thermal cruise temp tolerance, 4-bits, LSB = 1 degree Celsius */
 256#define TOL_TEMP_TO_REG(val)            ((val) < 0 ? 0 : \
 257                                        (val) >= 15000 ? 15 : \
 258                                        ((val) + 500) / 1000)
 259
 260#define BEEP_MASK_TO_REG(val)           ((val) & 0xffffff)
 261#define BEEP_MASK_FROM_REG(val)         ((val) & 0xffffff)
 262
 263#define DIV_FROM_REG(val)               (1 << (val))
 264
 265static u8 div_to_reg(int nr, long val)
 266{
 267        int i;
 268
 269        /* fan divisors max out at 128 */
 270        val = SENSORS_LIMIT(val, 1, 128) >> 1;
 271        for (i = 0; i < 7; i++) {
 272                if (val == 0)
 273                        break;
 274                val >>= 1;
 275        }
 276        return (u8) i;
 277}
 278
 279struct w83791d_data {
 280        struct device *hwmon_dev;
 281        struct mutex update_lock;
 282
 283        char valid;                     /* !=0 if following fields are valid */
 284        unsigned long last_updated;     /* In jiffies */
 285
 286        /* array of 2 pointers to subclients */
 287        struct i2c_client *lm75[2];
 288
 289        /* volts */
 290        u8 in[NUMBER_OF_VIN];           /* Register value */
 291        u8 in_max[NUMBER_OF_VIN];       /* Register value */
 292        u8 in_min[NUMBER_OF_VIN];       /* Register value */
 293
 294        /* fans */
 295        u8 fan[NUMBER_OF_FANIN];        /* Register value */
 296        u8 fan_min[NUMBER_OF_FANIN];    /* Register value */
 297        u8 fan_div[NUMBER_OF_FANIN];    /* Register encoding, shifted right */
 298
 299        /* Temperature sensors */
 300
 301        s8 temp1[3];            /* current, over, thyst */
 302        s16 temp_add[2][3];     /* fixed point value. Top 8 bits are the
 303                                   integral part, bottom 8 bits are the
 304                                   fractional part. We only use the top
 305                                   9 bits as the resolution is only
 306                                   to the 0.5 degree C...
 307                                   two sensors with three values
 308                                   (cur, over, hyst)  */
 309
 310        /* PWMs */
 311        u8 pwm[5];              /* pwm duty cycle */
 312        u8 pwm_enable[3];       /* pwm enable status for fan 1-3
 313                                        (fan 4-5 only support manual mode) */
 314
 315        u8 temp_target[3];      /* pwm 1-3 target temperature */
 316        u8 temp_tolerance[3];   /* pwm 1-3 temperature tolerance */
 317
 318        /* Misc */
 319        u32 alarms;             /* realtime status register encoding,combined */
 320        u8 beep_enable;         /* Global beep enable */
 321        u32 beep_mask;          /* Mask off specific beeps */
 322        u8 vid;                 /* Register encoding, combined */
 323        u8 vrm;                 /* hwmon-vid */
 324};
 325
 326static int w83791d_probe(struct i2c_client *client,
 327                         const struct i2c_device_id *id);
 328static int w83791d_detect(struct i2c_client *client,
 329                          struct i2c_board_info *info);
 330static int w83791d_remove(struct i2c_client *client);
 331
 332static int w83791d_read(struct i2c_client *client, u8 register);
 333static int w83791d_write(struct i2c_client *client, u8 register, u8 value);
 334static struct w83791d_data *w83791d_update_device(struct device *dev);
 335
 336#ifdef DEBUG
 337static void w83791d_print_debug(struct w83791d_data *data, struct device *dev);
 338#endif
 339
 340static void w83791d_init_client(struct i2c_client *client);
 341
 342static const struct i2c_device_id w83791d_id[] = {
 343        { "w83791d", 0 },
 344        { }
 345};
 346MODULE_DEVICE_TABLE(i2c, w83791d_id);
 347
 348static struct i2c_driver w83791d_driver = {
 349        .class          = I2C_CLASS_HWMON,
 350        .driver = {
 351                .name = "w83791d",
 352        },
 353        .probe          = w83791d_probe,
 354        .remove         = w83791d_remove,
 355        .id_table       = w83791d_id,
 356        .detect         = w83791d_detect,
 357        .address_list   = normal_i2c,
 358};
 359
 360/* following are the sysfs callback functions */
 361#define show_in_reg(reg) \
 362static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
 363                        char *buf) \
 364{ \
 365        struct sensor_device_attribute *sensor_attr = \
 366                                                to_sensor_dev_attr(attr); \
 367        struct w83791d_data *data = w83791d_update_device(dev); \
 368        int nr = sensor_attr->index; \
 369        return sprintf(buf,"%d\n", IN_FROM_REG(data->reg[nr])); \
 370}
 371
 372show_in_reg(in);
 373show_in_reg(in_min);
 374show_in_reg(in_max);
 375
 376#define store_in_reg(REG, reg) \
 377static ssize_t store_in_##reg(struct device *dev, \
 378                                struct device_attribute *attr, \
 379                                const char *buf, size_t count) \
 380{ \
 381        struct sensor_device_attribute *sensor_attr = \
 382                                                to_sensor_dev_attr(attr); \
 383        struct i2c_client *client = to_i2c_client(dev); \
 384        struct w83791d_data *data = i2c_get_clientdata(client); \
 385        unsigned long val = simple_strtoul(buf, NULL, 10); \
 386        int nr = sensor_attr->index; \
 387         \
 388        mutex_lock(&data->update_lock); \
 389        data->in_##reg[nr] = IN_TO_REG(val); \
 390        w83791d_write(client, W83791D_REG_IN_##REG[nr], data->in_##reg[nr]); \
 391        mutex_unlock(&data->update_lock); \
 392         \
 393        return count; \
 394}
 395store_in_reg(MIN, min);
 396store_in_reg(MAX, max);
 397
 398static struct sensor_device_attribute sda_in_input[] = {
 399        SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
 400        SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
 401        SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
 402        SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
 403        SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
 404        SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
 405        SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
 406        SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
 407        SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
 408        SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
 409};
 410
 411static struct sensor_device_attribute sda_in_min[] = {
 412        SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
 413        SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
 414        SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
 415        SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
 416        SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
 417        SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
 418        SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
 419        SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
 420        SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
 421        SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
 422};
 423
 424static struct sensor_device_attribute sda_in_max[] = {
 425        SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
 426        SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
 427        SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
 428        SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
 429        SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
 430        SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
 431        SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
 432        SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
 433        SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
 434        SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
 435};
 436
 437
 438static ssize_t show_beep(struct device *dev, struct device_attribute *attr,
 439                        char *buf)
 440{
 441        struct sensor_device_attribute *sensor_attr =
 442                                                to_sensor_dev_attr(attr);
 443        struct w83791d_data *data = w83791d_update_device(dev);
 444        int bitnr = sensor_attr->index;
 445
 446        return sprintf(buf, "%d\n", (data->beep_mask >> bitnr) & 1);
 447}
 448
 449static ssize_t store_beep(struct device *dev, struct device_attribute *attr,
 450                        const char *buf, size_t count)
 451{
 452        struct sensor_device_attribute *sensor_attr =
 453                                                to_sensor_dev_attr(attr);
 454        struct i2c_client *client = to_i2c_client(dev);
 455        struct w83791d_data *data = i2c_get_clientdata(client);
 456        int bitnr = sensor_attr->index;
 457        int bytenr = bitnr / 8;
 458        long val = simple_strtol(buf, NULL, 10) ? 1 : 0;
 459
 460        mutex_lock(&data->update_lock);
 461
 462        data->beep_mask &= ~(0xff << (bytenr * 8));
 463        data->beep_mask |= w83791d_read(client, W83791D_REG_BEEP_CTRL[bytenr])
 464                << (bytenr * 8);
 465
 466        data->beep_mask &= ~(1 << bitnr);
 467        data->beep_mask |= val << bitnr;
 468
 469        w83791d_write(client, W83791D_REG_BEEP_CTRL[bytenr],
 470                (data->beep_mask >> (bytenr * 8)) & 0xff);
 471
 472        mutex_unlock(&data->update_lock);
 473
 474        return count;
 475}
 476
 477static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
 478                        char *buf)
 479{
 480        struct sensor_device_attribute *sensor_attr =
 481                                                to_sensor_dev_attr(attr);
 482        struct w83791d_data *data = w83791d_update_device(dev);
 483        int bitnr = sensor_attr->index;
 484
 485        return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1);
 486}
 487
 488/* Note: The bitmask for the beep enable/disable is different than
 489   the bitmask for the alarm. */
 490static struct sensor_device_attribute sda_in_beep[] = {
 491        SENSOR_ATTR(in0_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 0),
 492        SENSOR_ATTR(in1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 13),
 493        SENSOR_ATTR(in2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 2),
 494        SENSOR_ATTR(in3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 3),
 495        SENSOR_ATTR(in4_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 8),
 496        SENSOR_ATTR(in5_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 9),
 497        SENSOR_ATTR(in6_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 10),
 498        SENSOR_ATTR(in7_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 16),
 499        SENSOR_ATTR(in8_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 17),
 500        SENSOR_ATTR(in9_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 14),
 501};
 502
 503static struct sensor_device_attribute sda_in_alarm[] = {
 504        SENSOR_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0),
 505        SENSOR_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1),
 506        SENSOR_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2),
 507        SENSOR_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3),
 508        SENSOR_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8),
 509        SENSOR_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 9),
 510        SENSOR_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 10),
 511        SENSOR_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 19),
 512        SENSOR_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 20),
 513        SENSOR_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL, 14),
 514};
 515
 516#define show_fan_reg(reg) \
 517static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
 518                                char *buf) \
 519{ \
 520        struct sensor_device_attribute *sensor_attr = \
 521                                                to_sensor_dev_attr(attr); \
 522        struct w83791d_data *data = w83791d_update_device(dev); \
 523        int nr = sensor_attr->index; \
 524        return sprintf(buf,"%d\n", \
 525                FAN_FROM_REG(data->reg[nr], DIV_FROM_REG(data->fan_div[nr]))); \
 526}
 527
 528show_fan_reg(fan);
 529show_fan_reg(fan_min);
 530
 531static ssize_t store_fan_min(struct device *dev, struct device_attribute *attr,
 532                                const char *buf, size_t count)
 533{
 534        struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
 535        struct i2c_client *client = to_i2c_client(dev);
 536        struct w83791d_data *data = i2c_get_clientdata(client);
 537        unsigned long val = simple_strtoul(buf, NULL, 10);
 538        int nr = sensor_attr->index;
 539
 540        mutex_lock(&data->update_lock);
 541        data->fan_min[nr] = fan_to_reg(val, DIV_FROM_REG(data->fan_div[nr]));
 542        w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
 543        mutex_unlock(&data->update_lock);
 544
 545        return count;
 546}
 547
 548static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
 549                                char *buf)
 550{
 551        struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
 552        int nr = sensor_attr->index;
 553        struct w83791d_data *data = w83791d_update_device(dev);
 554        return sprintf(buf, "%u\n", DIV_FROM_REG(data->fan_div[nr]));
 555}
 556
 557/* Note: we save and restore the fan minimum here, because its value is
 558   determined in part by the fan divisor.  This follows the principle of
 559   least suprise; the user doesn't expect the fan minimum to change just
 560   because the divisor changed. */
 561static ssize_t store_fan_div(struct device *dev, struct device_attribute *attr,
 562                                const char *buf, size_t count)
 563{
 564        struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
 565        struct i2c_client *client = to_i2c_client(dev);
 566        struct w83791d_data *data = i2c_get_clientdata(client);
 567        int nr = sensor_attr->index;
 568        unsigned long min;
 569        u8 tmp_fan_div;
 570        u8 fan_div_reg;
 571        u8 vbat_reg;
 572        int indx = 0;
 573        u8 keep_mask = 0;
 574        u8 new_shift = 0;
 575
 576        /* Save fan_min */
 577        min = FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr]));
 578
 579        mutex_lock(&data->update_lock);
 580        data->fan_div[nr] = div_to_reg(nr, simple_strtoul(buf, NULL, 10));
 581
 582        switch (nr) {
 583        case 0:
 584                indx = 0;
 585                keep_mask = 0xcf;
 586                new_shift = 4;
 587                break;
 588        case 1:
 589                indx = 0;
 590                keep_mask = 0x3f;
 591                new_shift = 6;
 592                break;
 593        case 2:
 594                indx = 1;
 595                keep_mask = 0x3f;
 596                new_shift = 6;
 597                break;
 598        case 3:
 599                indx = 2;
 600                keep_mask = 0xf8;
 601                new_shift = 0;
 602                break;
 603        case 4:
 604                indx = 2;
 605                keep_mask = 0x8f;
 606                new_shift = 4;
 607                break;
 608#ifdef DEBUG
 609        default:
 610                dev_warn(dev, "store_fan_div: Unexpected nr seen: %d\n", nr);
 611                count = -EINVAL;
 612                goto err_exit;
 613#endif
 614        }
 615
 616        fan_div_reg = w83791d_read(client, W83791D_REG_FAN_DIV[indx])
 617                        & keep_mask;
 618        tmp_fan_div = (data->fan_div[nr] << new_shift) & ~keep_mask;
 619
 620        w83791d_write(client, W83791D_REG_FAN_DIV[indx],
 621                                fan_div_reg | tmp_fan_div);
 622
 623        /* Bit 2 of fans 0-2 is stored in the vbat register (bits 5-7) */
 624        if (nr < 3) {
 625                keep_mask = ~(1 << (nr + 5));
 626                vbat_reg = w83791d_read(client, W83791D_REG_VBAT)
 627                                & keep_mask;
 628                tmp_fan_div = (data->fan_div[nr] << (3 + nr)) & ~keep_mask;
 629                w83791d_write(client, W83791D_REG_VBAT,
 630                                vbat_reg | tmp_fan_div);
 631        }
 632
 633        /* Restore fan_min */
 634        data->fan_min[nr] = fan_to_reg(min, DIV_FROM_REG(data->fan_div[nr]));
 635        w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
 636
 637#ifdef DEBUG
 638err_exit:
 639#endif
 640        mutex_unlock(&data->update_lock);
 641
 642        return count;
 643}
 644
 645static struct sensor_device_attribute sda_fan_input[] = {
 646        SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
 647        SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
 648        SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
 649        SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3),
 650        SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
 651};
 652
 653static struct sensor_device_attribute sda_fan_min[] = {
 654        SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO,
 655                        show_fan_min, store_fan_min, 0),
 656        SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO,
 657                        show_fan_min, store_fan_min, 1),
 658        SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO,
 659                        show_fan_min, store_fan_min, 2),
 660        SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO,
 661                        show_fan_min, store_fan_min, 3),
 662        SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO,
 663                        show_fan_min, store_fan_min, 4),
 664};
 665
 666static struct sensor_device_attribute sda_fan_div[] = {
 667        SENSOR_ATTR(fan1_div, S_IWUSR | S_IRUGO,
 668                        show_fan_div, store_fan_div, 0),
 669        SENSOR_ATTR(fan2_div, S_IWUSR | S_IRUGO,
 670                        show_fan_div, store_fan_div, 1),
 671        SENSOR_ATTR(fan3_div, S_IWUSR | S_IRUGO,
 672                        show_fan_div, store_fan_div, 2),
 673        SENSOR_ATTR(fan4_div, S_IWUSR | S_IRUGO,
 674                        show_fan_div, store_fan_div, 3),
 675        SENSOR_ATTR(fan5_div, S_IWUSR | S_IRUGO,
 676                        show_fan_div, store_fan_div, 4),
 677};
 678
 679static struct sensor_device_attribute sda_fan_beep[] = {
 680        SENSOR_ATTR(fan1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 6),
 681        SENSOR_ATTR(fan2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 7),
 682        SENSOR_ATTR(fan3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 11),
 683        SENSOR_ATTR(fan4_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 21),
 684        SENSOR_ATTR(fan5_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 22),
 685};
 686
 687static struct sensor_device_attribute sda_fan_alarm[] = {
 688        SENSOR_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6),
 689        SENSOR_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7),
 690        SENSOR_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11),
 691        SENSOR_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 21),
 692        SENSOR_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 22),
 693};
 694
 695/* read/write PWMs */
 696static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,
 697                                char *buf)
 698{
 699        struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
 700        int nr = sensor_attr->index;
 701        struct w83791d_data *data = w83791d_update_device(dev);
 702        return sprintf(buf, "%u\n", data->pwm[nr]);
 703}
 704
 705static ssize_t store_pwm(struct device *dev, struct device_attribute *attr,
 706                const char *buf, size_t count)
 707{
 708        struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
 709        struct i2c_client *client = to_i2c_client(dev);
 710        struct w83791d_data *data = i2c_get_clientdata(client);
 711        int nr = sensor_attr->index;
 712        unsigned long val;
 713
 714        if (strict_strtoul(buf, 10, &val))
 715                return -EINVAL;
 716
 717        mutex_lock(&data->update_lock);
 718        data->pwm[nr] = SENSORS_LIMIT(val, 0, 255);
 719        w83791d_write(client, W83791D_REG_PWM[nr], data->pwm[nr]);
 720        mutex_unlock(&data->update_lock);
 721        return count;
 722}
 723
 724static struct sensor_device_attribute sda_pwm[] = {
 725        SENSOR_ATTR(pwm1, S_IWUSR | S_IRUGO,
 726                        show_pwm, store_pwm, 0),
 727        SENSOR_ATTR(pwm2, S_IWUSR | S_IRUGO,
 728                        show_pwm, store_pwm, 1),
 729        SENSOR_ATTR(pwm3, S_IWUSR | S_IRUGO,
 730                        show_pwm, store_pwm, 2),
 731        SENSOR_ATTR(pwm4, S_IWUSR | S_IRUGO,
 732                        show_pwm, store_pwm, 3),
 733        SENSOR_ATTR(pwm5, S_IWUSR | S_IRUGO,
 734                        show_pwm, store_pwm, 4),
 735};
 736
 737static ssize_t show_pwmenable(struct device *dev, struct device_attribute *attr,
 738                                char *buf)
 739{
 740        struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
 741        int nr = sensor_attr->index;
 742        struct w83791d_data *data = w83791d_update_device(dev);
 743        return sprintf(buf, "%u\n", data->pwm_enable[nr] + 1);
 744}
 745
 746static ssize_t store_pwmenable(struct device *dev,
 747                struct device_attribute *attr, const char *buf, size_t count)
 748{
 749        struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
 750        struct i2c_client *client = to_i2c_client(dev);
 751        struct w83791d_data *data = i2c_get_clientdata(client);
 752        int nr = sensor_attr->index;
 753        unsigned long val;
 754        u8 reg_cfg_tmp;
 755        u8 reg_idx = 0;
 756        u8 val_shift = 0;
 757        u8 keep_mask = 0;
 758
 759        int ret = strict_strtoul(buf, 10, &val);
 760
 761        if (ret || val < 1 || val > 3)
 762                return -EINVAL;
 763
 764        mutex_lock(&data->update_lock);
 765        data->pwm_enable[nr] = val - 1;
 766        switch (nr) {
 767        case 0:
 768                reg_idx = 0;
 769                val_shift = 2;
 770                keep_mask = 0xf3;
 771                break;
 772        case 1:
 773                reg_idx = 0;
 774                val_shift = 4;
 775                keep_mask = 0xcf;
 776                break;
 777        case 2:
 778                reg_idx = 1;
 779                val_shift = 2;
 780                keep_mask = 0xf3;
 781                break;
 782        }
 783
 784        reg_cfg_tmp = w83791d_read(client, W83791D_REG_FAN_CFG[reg_idx]);
 785        reg_cfg_tmp = (reg_cfg_tmp & keep_mask) |
 786                                        data->pwm_enable[nr] << val_shift;
 787
 788        w83791d_write(client, W83791D_REG_FAN_CFG[reg_idx], reg_cfg_tmp);
 789        mutex_unlock(&data->update_lock);
 790
 791        return count;
 792}
 793static struct sensor_device_attribute sda_pwmenable[] = {
 794        SENSOR_ATTR(pwm1_enable, S_IWUSR | S_IRUGO,
 795                        show_pwmenable, store_pwmenable, 0),
 796        SENSOR_ATTR(pwm2_enable, S_IWUSR | S_IRUGO,
 797                        show_pwmenable, store_pwmenable, 1),
 798        SENSOR_ATTR(pwm3_enable, S_IWUSR | S_IRUGO,
 799                        show_pwmenable, store_pwmenable, 2),
 800};
 801
 802/* For Smart Fan I / Thermal Cruise */
 803static ssize_t show_temp_target(struct device *dev,
 804                        struct device_attribute *attr, char *buf)
 805{
 806        struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
 807        struct w83791d_data *data = w83791d_update_device(dev);
 808        int nr = sensor_attr->index;
 809        return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp_target[nr]));
 810}
 811
 812static ssize_t store_temp_target(struct device *dev,
 813                struct device_attribute *attr, const char *buf, size_t count)
 814{
 815        struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
 816        struct i2c_client *client = to_i2c_client(dev);
 817        struct w83791d_data *data = i2c_get_clientdata(client);
 818        int nr = sensor_attr->index;
 819        unsigned long val;
 820        u8 target_mask;
 821
 822        if (strict_strtoul(buf, 10, &val))
 823                return -EINVAL;
 824
 825        mutex_lock(&data->update_lock);
 826        data->temp_target[nr] = TARGET_TEMP_TO_REG(val);
 827        target_mask = w83791d_read(client,
 828                                W83791D_REG_TEMP_TARGET[nr]) & 0x80;
 829        w83791d_write(client, W83791D_REG_TEMP_TARGET[nr],
 830                                data->temp_target[nr] | target_mask);
 831        mutex_unlock(&data->update_lock);
 832        return count;
 833}
 834
 835static struct sensor_device_attribute sda_temp_target[] = {
 836        SENSOR_ATTR(temp1_target, S_IWUSR | S_IRUGO,
 837                        show_temp_target, store_temp_target, 0),
 838        SENSOR_ATTR(temp2_target, S_IWUSR | S_IRUGO,
 839                        show_temp_target, store_temp_target, 1),
 840        SENSOR_ATTR(temp3_target, S_IWUSR | S_IRUGO,
 841                        show_temp_target, store_temp_target, 2),
 842};
 843
 844static ssize_t show_temp_tolerance(struct device *dev,
 845                        struct device_attribute *attr, char *buf)
 846{
 847        struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
 848        struct w83791d_data *data = w83791d_update_device(dev);
 849        int nr = sensor_attr->index;
 850        return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp_tolerance[nr]));
 851}
 852
 853static ssize_t store_temp_tolerance(struct device *dev,
 854                struct device_attribute *attr, const char *buf, size_t count)
 855{
 856        struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
 857        struct i2c_client *client = to_i2c_client(dev);
 858        struct w83791d_data *data = i2c_get_clientdata(client);
 859        int nr = sensor_attr->index;
 860        unsigned long val;
 861        u8 target_mask;
 862        u8 reg_idx = 0;
 863        u8 val_shift = 0;
 864        u8 keep_mask = 0;
 865
 866        if (strict_strtoul(buf, 10, &val))
 867                return -EINVAL;
 868
 869        switch (nr) {
 870        case 0:
 871                reg_idx = 0;
 872                val_shift = 0;
 873                keep_mask = 0xf0;
 874                break;
 875        case 1:
 876                reg_idx = 0;
 877                val_shift = 4;
 878                keep_mask = 0x0f;
 879                break;
 880        case 2:
 881                reg_idx = 1;
 882                val_shift = 0;
 883                keep_mask = 0xf0;
 884                break;
 885        }
 886
 887        mutex_lock(&data->update_lock);
 888        data->temp_tolerance[nr] = TOL_TEMP_TO_REG(val);
 889        target_mask = w83791d_read(client,
 890                        W83791D_REG_TEMP_TOL[reg_idx]) & keep_mask;
 891        w83791d_write(client, W83791D_REG_TEMP_TOL[reg_idx],
 892                        (data->temp_tolerance[nr] << val_shift) | target_mask);
 893        mutex_unlock(&data->update_lock);
 894        return count;
 895}
 896
 897static struct sensor_device_attribute sda_temp_tolerance[] = {
 898        SENSOR_ATTR(temp1_tolerance, S_IWUSR | S_IRUGO,
 899                        show_temp_tolerance, store_temp_tolerance, 0),
 900        SENSOR_ATTR(temp2_tolerance, S_IWUSR | S_IRUGO,
 901                        show_temp_tolerance, store_temp_tolerance, 1),
 902        SENSOR_ATTR(temp3_tolerance, S_IWUSR | S_IRUGO,
 903                        show_temp_tolerance, store_temp_tolerance, 2),
 904};
 905
 906/* read/write the temperature1, includes measured value and limits */
 907static ssize_t show_temp1(struct device *dev, struct device_attribute *devattr,
 908                                char *buf)
 909{
 910        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 911        struct w83791d_data *data = w83791d_update_device(dev);
 912        return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp1[attr->index]));
 913}
 914
 915static ssize_t store_temp1(struct device *dev, struct device_attribute *devattr,
 916                                const char *buf, size_t count)
 917{
 918        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 919        struct i2c_client *client = to_i2c_client(dev);
 920        struct w83791d_data *data = i2c_get_clientdata(client);
 921        long val = simple_strtol(buf, NULL, 10);
 922        int nr = attr->index;
 923
 924        mutex_lock(&data->update_lock);
 925        data->temp1[nr] = TEMP1_TO_REG(val);
 926        w83791d_write(client, W83791D_REG_TEMP1[nr], data->temp1[nr]);
 927        mutex_unlock(&data->update_lock);
 928        return count;
 929}
 930
 931/* read/write temperature2-3, includes measured value and limits */
 932static ssize_t show_temp23(struct device *dev, struct device_attribute *devattr,
 933                                char *buf)
 934{
 935        struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
 936        struct w83791d_data *data = w83791d_update_device(dev);
 937        int nr = attr->nr;
 938        int index = attr->index;
 939        return sprintf(buf, "%d\n", TEMP23_FROM_REG(data->temp_add[nr][index]));
 940}
 941
 942static ssize_t store_temp23(struct device *dev,
 943                                struct device_attribute *devattr,
 944                                const char *buf, size_t count)
 945{
 946        struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
 947        struct i2c_client *client = to_i2c_client(dev);
 948        struct w83791d_data *data = i2c_get_clientdata(client);
 949        long val = simple_strtol(buf, NULL, 10);
 950        int nr = attr->nr;
 951        int index = attr->index;
 952
 953        mutex_lock(&data->update_lock);
 954        data->temp_add[nr][index] = TEMP23_TO_REG(val);
 955        w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2],
 956                                data->temp_add[nr][index] >> 8);
 957        w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2 + 1],
 958                                data->temp_add[nr][index] & 0x80);
 959        mutex_unlock(&data->update_lock);
 960
 961        return count;
 962}
 963
 964static struct sensor_device_attribute_2 sda_temp_input[] = {
 965        SENSOR_ATTR_2(temp1_input, S_IRUGO, show_temp1, NULL, 0, 0),
 966        SENSOR_ATTR_2(temp2_input, S_IRUGO, show_temp23, NULL, 0, 0),
 967        SENSOR_ATTR_2(temp3_input, S_IRUGO, show_temp23, NULL, 1, 0),
 968};
 969
 970static struct sensor_device_attribute_2 sda_temp_max[] = {
 971        SENSOR_ATTR_2(temp1_max, S_IRUGO | S_IWUSR,
 972                        show_temp1, store_temp1, 0, 1),
 973        SENSOR_ATTR_2(temp2_max, S_IRUGO | S_IWUSR,
 974                        show_temp23, store_temp23, 0, 1),
 975        SENSOR_ATTR_2(temp3_max, S_IRUGO | S_IWUSR,
 976                        show_temp23, store_temp23, 1, 1),
 977};
 978
 979static struct sensor_device_attribute_2 sda_temp_max_hyst[] = {
 980        SENSOR_ATTR_2(temp1_max_hyst, S_IRUGO | S_IWUSR,
 981                        show_temp1, store_temp1, 0, 2),
 982        SENSOR_ATTR_2(temp2_max_hyst, S_IRUGO | S_IWUSR,
 983                        show_temp23, store_temp23, 0, 2),
 984        SENSOR_ATTR_2(temp3_max_hyst, S_IRUGO | S_IWUSR,
 985                        show_temp23, store_temp23, 1, 2),
 986};
 987
 988/* Note: The bitmask for the beep enable/disable is different than
 989   the bitmask for the alarm. */
 990static struct sensor_device_attribute sda_temp_beep[] = {
 991        SENSOR_ATTR(temp1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 4),
 992        SENSOR_ATTR(temp2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 5),
 993        SENSOR_ATTR(temp3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 1),
 994};
 995
 996static struct sensor_device_attribute sda_temp_alarm[] = {
 997        SENSOR_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4),
 998        SENSOR_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5),
 999        SENSOR_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13),
1000};
1001
1002/* get reatime status of all sensors items: voltage, temp, fan */
1003static ssize_t show_alarms_reg(struct device *dev,
1004                                struct device_attribute *attr, char *buf)
1005{
1006        struct w83791d_data *data = w83791d_update_device(dev);
1007        return sprintf(buf, "%u\n", data->alarms);
1008}
1009
1010static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL);
1011
1012/* Beep control */
1013
1014#define GLOBAL_BEEP_ENABLE_SHIFT        15
1015#define GLOBAL_BEEP_ENABLE_MASK         (1 << GLOBAL_BEEP_ENABLE_SHIFT)
1016
1017static ssize_t show_beep_enable(struct device *dev,
1018                                struct device_attribute *attr, char *buf)
1019{
1020        struct w83791d_data *data = w83791d_update_device(dev);
1021        return sprintf(buf, "%d\n", data->beep_enable);
1022}
1023
1024static ssize_t show_beep_mask(struct device *dev,
1025                                struct device_attribute *attr, char *buf)
1026{
1027        struct w83791d_data *data = w83791d_update_device(dev);
1028        return sprintf(buf, "%d\n", BEEP_MASK_FROM_REG(data->beep_mask));
1029}
1030
1031
1032static ssize_t store_beep_mask(struct device *dev,
1033                                struct device_attribute *attr,
1034                                const char *buf, size_t count)
1035{
1036        struct i2c_client *client = to_i2c_client(dev);
1037        struct w83791d_data *data = i2c_get_clientdata(client);
1038        long val = simple_strtol(buf, NULL, 10);
1039        int i;
1040
1041        mutex_lock(&data->update_lock);
1042
1043        /* The beep_enable state overrides any enabling request from
1044           the masks */
1045        data->beep_mask = BEEP_MASK_TO_REG(val) & ~GLOBAL_BEEP_ENABLE_MASK;
1046        data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
1047
1048        val = data->beep_mask;
1049
1050        for (i = 0; i < 3; i++) {
1051                w83791d_write(client, W83791D_REG_BEEP_CTRL[i], (val & 0xff));
1052                val >>= 8;
1053        }
1054
1055        mutex_unlock(&data->update_lock);
1056
1057        return count;
1058}
1059
1060static ssize_t store_beep_enable(struct device *dev,
1061                                struct device_attribute *attr,
1062                                const char *buf, size_t count)
1063{
1064        struct i2c_client *client = to_i2c_client(dev);
1065        struct w83791d_data *data = i2c_get_clientdata(client);
1066        long val = simple_strtol(buf, NULL, 10);
1067
1068        mutex_lock(&data->update_lock);
1069
1070        data->beep_enable = val ? 1 : 0;
1071
1072        /* Keep the full mask value in sync with the current enable */
1073        data->beep_mask &= ~GLOBAL_BEEP_ENABLE_MASK;
1074        data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
1075
1076        /* The global control is in the second beep control register
1077           so only need to update that register */
1078        val = (data->beep_mask >> 8) & 0xff;
1079
1080        w83791d_write(client, W83791D_REG_BEEP_CTRL[1], val);
1081
1082        mutex_unlock(&data->update_lock);
1083
1084        return count;
1085}
1086
1087static struct sensor_device_attribute sda_beep_ctrl[] = {
1088        SENSOR_ATTR(beep_enable, S_IRUGO | S_IWUSR,
1089                        show_beep_enable, store_beep_enable, 0),
1090        SENSOR_ATTR(beep_mask, S_IRUGO | S_IWUSR,
1091                        show_beep_mask, store_beep_mask, 1)
1092};
1093
1094/* cpu voltage regulation information */
1095static ssize_t show_vid_reg(struct device *dev,
1096                                struct device_attribute *attr, char *buf)
1097{
1098        struct w83791d_data *data = w83791d_update_device(dev);
1099        return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
1100}
1101
1102static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
1103
1104static ssize_t show_vrm_reg(struct device *dev,
1105                                struct device_attribute *attr, char *buf)
1106{
1107        struct w83791d_data *data = dev_get_drvdata(dev);
1108        return sprintf(buf, "%d\n", data->vrm);
1109}
1110
1111static ssize_t store_vrm_reg(struct device *dev,
1112                                struct device_attribute *attr,
1113                                const char *buf, size_t count)
1114{
1115        struct w83791d_data *data = dev_get_drvdata(dev);
1116
1117        /* No lock needed as vrm is internal to the driver
1118           (not read from a chip register) and so is not
1119           updated in w83791d_update_device() */
1120        data->vrm = simple_strtoul(buf, NULL, 10);
1121
1122        return count;
1123}
1124
1125static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
1126
1127#define IN_UNIT_ATTRS(X) \
1128        &sda_in_input[X].dev_attr.attr, \
1129        &sda_in_min[X].dev_attr.attr,   \
1130        &sda_in_max[X].dev_attr.attr,   \
1131        &sda_in_beep[X].dev_attr.attr,  \
1132        &sda_in_alarm[X].dev_attr.attr
1133
1134#define FAN_UNIT_ATTRS(X) \
1135        &sda_fan_input[X].dev_attr.attr,        \
1136        &sda_fan_min[X].dev_attr.attr,          \
1137        &sda_fan_div[X].dev_attr.attr,          \
1138        &sda_fan_beep[X].dev_attr.attr,         \
1139        &sda_fan_alarm[X].dev_attr.attr
1140
1141#define TEMP_UNIT_ATTRS(X) \
1142        &sda_temp_input[X].dev_attr.attr,       \
1143        &sda_temp_max[X].dev_attr.attr,         \
1144        &sda_temp_max_hyst[X].dev_attr.attr,    \
1145        &sda_temp_beep[X].dev_attr.attr,        \
1146        &sda_temp_alarm[X].dev_attr.attr
1147
1148static struct attribute *w83791d_attributes[] = {
1149        IN_UNIT_ATTRS(0),
1150        IN_UNIT_ATTRS(1),
1151        IN_UNIT_ATTRS(2),
1152        IN_UNIT_ATTRS(3),
1153        IN_UNIT_ATTRS(4),
1154        IN_UNIT_ATTRS(5),
1155        IN_UNIT_ATTRS(6),
1156        IN_UNIT_ATTRS(7),
1157        IN_UNIT_ATTRS(8),
1158        IN_UNIT_ATTRS(9),
1159        FAN_UNIT_ATTRS(0),
1160        FAN_UNIT_ATTRS(1),
1161        FAN_UNIT_ATTRS(2),
1162        TEMP_UNIT_ATTRS(0),
1163        TEMP_UNIT_ATTRS(1),
1164        TEMP_UNIT_ATTRS(2),
1165        &dev_attr_alarms.attr,
1166        &sda_beep_ctrl[0].dev_attr.attr,
1167        &sda_beep_ctrl[1].dev_attr.attr,
1168        &dev_attr_cpu0_vid.attr,
1169        &dev_attr_vrm.attr,
1170        &sda_pwm[0].dev_attr.attr,
1171        &sda_pwm[1].dev_attr.attr,
1172        &sda_pwm[2].dev_attr.attr,
1173        &sda_pwmenable[0].dev_attr.attr,
1174        &sda_pwmenable[1].dev_attr.attr,
1175        &sda_pwmenable[2].dev_attr.attr,
1176        &sda_temp_target[0].dev_attr.attr,
1177        &sda_temp_target[1].dev_attr.attr,
1178        &sda_temp_target[2].dev_attr.attr,
1179        &sda_temp_tolerance[0].dev_attr.attr,
1180        &sda_temp_tolerance[1].dev_attr.attr,
1181        &sda_temp_tolerance[2].dev_attr.attr,
1182        NULL
1183};
1184
1185static const struct attribute_group w83791d_group = {
1186        .attrs = w83791d_attributes,
1187};
1188
1189/* Separate group of attributes for fan/pwm 4-5. Their pins can also be
1190   in use for GPIO in which case their sysfs-interface should not be made
1191   available */
1192static struct attribute *w83791d_attributes_fanpwm45[] = {
1193        FAN_UNIT_ATTRS(3),
1194        FAN_UNIT_ATTRS(4),
1195        &sda_pwm[3].dev_attr.attr,
1196        &sda_pwm[4].dev_attr.attr,
1197        NULL
1198};
1199
1200static const struct attribute_group w83791d_group_fanpwm45 = {
1201        .attrs = w83791d_attributes_fanpwm45,
1202};
1203
1204static int w83791d_detect_subclients(struct i2c_client *client)
1205{
1206        struct i2c_adapter *adapter = client->adapter;
1207        struct w83791d_data *data = i2c_get_clientdata(client);
1208        int address = client->addr;
1209        int i, id, err;
1210        u8 val;
1211
1212        id = i2c_adapter_id(adapter);
1213        if (force_subclients[0] == id && force_subclients[1] == address) {
1214                for (i = 2; i <= 3; i++) {
1215                        if (force_subclients[i] < 0x48 ||
1216                            force_subclients[i] > 0x4f) {
1217                                dev_err(&client->dev,
1218                                        "invalid subclient "
1219                                        "address %d; must be 0x48-0x4f\n",
1220                                        force_subclients[i]);
1221                                err = -ENODEV;
1222                                goto error_sc_0;
1223                        }
1224                }
1225                w83791d_write(client, W83791D_REG_I2C_SUBADDR,
1226                                        (force_subclients[2] & 0x07) |
1227                                        ((force_subclients[3] & 0x07) << 4));
1228        }
1229
1230        val = w83791d_read(client, W83791D_REG_I2C_SUBADDR);
1231        if (!(val & 0x08)) {
1232                data->lm75[0] = i2c_new_dummy(adapter, 0x48 + (val & 0x7));
1233        }
1234        if (!(val & 0x80)) {
1235                if ((data->lm75[0] != NULL) &&
1236                                ((val & 0x7) == ((val >> 4) & 0x7))) {
1237                        dev_err(&client->dev,
1238                                "duplicate addresses 0x%x, "
1239                                "use force_subclient\n",
1240                                data->lm75[0]->addr);
1241                        err = -ENODEV;
1242                        goto error_sc_1;
1243                }
1244                data->lm75[1] = i2c_new_dummy(adapter,
1245                                              0x48 + ((val >> 4) & 0x7));
1246        }
1247
1248        return 0;
1249
1250/* Undo inits in case of errors */
1251
1252error_sc_1:
1253        if (data->lm75[0] != NULL)
1254                i2c_unregister_device(data->lm75[0]);
1255error_sc_0:
1256        return err;
1257}
1258
1259
1260/* Return 0 if detection is successful, -ENODEV otherwise */
1261static int w83791d_detect(struct i2c_client *client,
1262                          struct i2c_board_info *info)
1263{
1264        struct i2c_adapter *adapter = client->adapter;
1265        int val1, val2;
1266        unsigned short address = client->addr;
1267
1268        if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
1269                return -ENODEV;
1270        }
1271
1272        if (w83791d_read(client, W83791D_REG_CONFIG) & 0x80)
1273                return -ENODEV;
1274
1275        val1 = w83791d_read(client, W83791D_REG_BANK);
1276        val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
1277        /* Check for Winbond ID if in bank 0 */
1278        if (!(val1 & 0x07)) {
1279                if ((!(val1 & 0x80) && val2 != 0xa3) ||
1280                    ( (val1 & 0x80) && val2 != 0x5c)) {
1281                        return -ENODEV;
1282                }
1283        }
1284        /* If Winbond chip, address of chip and W83791D_REG_I2C_ADDR
1285           should match */
1286        if (w83791d_read(client, W83791D_REG_I2C_ADDR) != address)
1287                return -ENODEV;
1288
1289        /* We want bank 0 and Vendor ID high byte */
1290        val1 = w83791d_read(client, W83791D_REG_BANK) & 0x78;
1291        w83791d_write(client, W83791D_REG_BANK, val1 | 0x80);
1292
1293        /* Verify it is a Winbond w83791d */
1294        val1 = w83791d_read(client, W83791D_REG_WCHIPID);
1295        val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
1296        if (val1 != 0x71 || val2 != 0x5c)
1297                return -ENODEV;
1298
1299        strlcpy(info->type, "w83791d", I2C_NAME_SIZE);
1300
1301        return 0;
1302}
1303
1304static int w83791d_probe(struct i2c_client *client,
1305                         const struct i2c_device_id *id)
1306{
1307        struct w83791d_data *data;
1308        struct device *dev = &client->dev;
1309        int i, err;
1310        u8 has_fanpwm45;
1311
1312#ifdef DEBUG
1313        int val1;
1314        val1 = w83791d_read(client, W83791D_REG_DID_VID4);
1315        dev_dbg(dev, "Device ID version: %d.%d (0x%02x)\n",
1316                        (val1 >> 5) & 0x07, (val1 >> 1) & 0x0f, val1);
1317#endif
1318
1319        data = kzalloc(sizeof(struct w83791d_data), GFP_KERNEL);
1320        if (!data) {
1321                err = -ENOMEM;
1322                goto error0;
1323        }
1324
1325        i2c_set_clientdata(client, data);
1326        mutex_init(&data->update_lock);
1327
1328        err = w83791d_detect_subclients(client);
1329        if (err)
1330                goto error1;
1331
1332        /* Initialize the chip */
1333        w83791d_init_client(client);
1334
1335        /* If the fan_div is changed, make sure there is a rational
1336           fan_min in place */
1337        for (i = 0; i < NUMBER_OF_FANIN; i++) {
1338                data->fan_min[i] = w83791d_read(client, W83791D_REG_FAN_MIN[i]);
1339        }
1340
1341        /* Register sysfs hooks */
1342        if ((err = sysfs_create_group(&client->dev.kobj, &w83791d_group)))
1343                goto error3;
1344
1345        /* Check if pins of fan/pwm 4-5 are in use as GPIO */
1346        has_fanpwm45 = w83791d_read(client, W83791D_REG_GPIO) & 0x10;
1347        if (has_fanpwm45) {
1348                err = sysfs_create_group(&client->dev.kobj,
1349                                         &w83791d_group_fanpwm45);
1350                if (err)
1351                        goto error4;
1352        }
1353
1354        /* Everything is ready, now register the working device */
1355        data->hwmon_dev = hwmon_device_register(dev);
1356        if (IS_ERR(data->hwmon_dev)) {
1357                err = PTR_ERR(data->hwmon_dev);
1358                goto error5;
1359        }
1360
1361        return 0;
1362
1363error5:
1364        if (has_fanpwm45)
1365                sysfs_remove_group(&client->dev.kobj, &w83791d_group_fanpwm45);
1366error4:
1367        sysfs_remove_group(&client->dev.kobj, &w83791d_group);
1368error3:
1369        if (data->lm75[0] != NULL)
1370                i2c_unregister_device(data->lm75[0]);
1371        if (data->lm75[1] != NULL)
1372                i2c_unregister_device(data->lm75[1]);
1373error1:
1374        kfree(data);
1375error0:
1376        return err;
1377}
1378
1379static int w83791d_remove(struct i2c_client *client)
1380{
1381        struct w83791d_data *data = i2c_get_clientdata(client);
1382
1383        hwmon_device_unregister(data->hwmon_dev);
1384        sysfs_remove_group(&client->dev.kobj, &w83791d_group);
1385
1386        if (data->lm75[0] != NULL)
1387                i2c_unregister_device(data->lm75[0]);
1388        if (data->lm75[1] != NULL)
1389                i2c_unregister_device(data->lm75[1]);
1390
1391        kfree(data);
1392        return 0;
1393}
1394
1395static void w83791d_init_client(struct i2c_client *client)
1396{
1397        struct w83791d_data *data = i2c_get_clientdata(client);
1398        u8 tmp;
1399        u8 old_beep;
1400
1401        /* The difference between reset and init is that reset
1402           does a hard reset of the chip via index 0x40, bit 7,
1403           but init simply forces certain registers to have "sane"
1404           values. The hope is that the BIOS has done the right
1405           thing (which is why the default is reset=0, init=0),
1406           but if not, reset is the hard hammer and init
1407           is the soft mallet both of which are trying to whack
1408           things into place...
1409           NOTE: The data sheet makes a distinction between
1410           "power on defaults" and "reset by MR". As far as I can tell,
1411           the hard reset puts everything into a power-on state so I'm
1412           not sure what "reset by MR" means or how it can happen.
1413           */
1414        if (reset || init) {
1415                /* keep some BIOS settings when we... */
1416                old_beep = w83791d_read(client, W83791D_REG_BEEP_CONFIG);
1417
1418                if (reset) {
1419                        /* ... reset the chip and ... */
1420                        w83791d_write(client, W83791D_REG_CONFIG, 0x80);
1421                }
1422
1423                /* ... disable power-on abnormal beep */
1424                w83791d_write(client, W83791D_REG_BEEP_CONFIG, old_beep | 0x80);
1425
1426                /* disable the global beep (not done by hard reset) */
1427                tmp = w83791d_read(client, W83791D_REG_BEEP_CTRL[1]);
1428                w83791d_write(client, W83791D_REG_BEEP_CTRL[1], tmp & 0xef);
1429
1430                if (init) {
1431                        /* Make sure monitoring is turned on for add-ons */
1432                        tmp = w83791d_read(client, W83791D_REG_TEMP2_CONFIG);
1433                        if (tmp & 1) {
1434                                w83791d_write(client, W83791D_REG_TEMP2_CONFIG,
1435                                        tmp & 0xfe);
1436                        }
1437
1438                        tmp = w83791d_read(client, W83791D_REG_TEMP3_CONFIG);
1439                        if (tmp & 1) {
1440                                w83791d_write(client, W83791D_REG_TEMP3_CONFIG,
1441                                        tmp & 0xfe);
1442                        }
1443
1444                        /* Start monitoring */
1445                        tmp = w83791d_read(client, W83791D_REG_CONFIG) & 0xf7;
1446                        w83791d_write(client, W83791D_REG_CONFIG, tmp | 0x01);
1447                }
1448        }
1449
1450        data->vrm = vid_which_vrm();
1451}
1452
1453static struct w83791d_data *w83791d_update_device(struct device *dev)
1454{
1455        struct i2c_client *client = to_i2c_client(dev);
1456        struct w83791d_data *data = i2c_get_clientdata(client);
1457        int i, j;
1458        u8 reg_array_tmp[3];
1459        u8 vbat_reg;
1460
1461        mutex_lock(&data->update_lock);
1462
1463        if (time_after(jiffies, data->last_updated + (HZ * 3))
1464                        || !data->valid) {
1465                dev_dbg(dev, "Starting w83791d device update\n");
1466
1467                /* Update the voltages measured value and limits */
1468                for (i = 0; i < NUMBER_OF_VIN; i++) {
1469                        data->in[i] = w83791d_read(client,
1470                                                W83791D_REG_IN[i]);
1471                        data->in_max[i] = w83791d_read(client,
1472                                                W83791D_REG_IN_MAX[i]);
1473                        data->in_min[i] = w83791d_read(client,
1474                                                W83791D_REG_IN_MIN[i]);
1475                }
1476
1477                /* Update the fan counts and limits */
1478                for (i = 0; i < NUMBER_OF_FANIN; i++) {
1479                        /* Update the Fan measured value and limits */
1480                        data->fan[i] = w83791d_read(client,
1481                                                W83791D_REG_FAN[i]);
1482                        data->fan_min[i] = w83791d_read(client,
1483                                                W83791D_REG_FAN_MIN[i]);
1484                }
1485
1486                /* Update the fan divisor */
1487                for (i = 0; i < 3; i++) {
1488                        reg_array_tmp[i] = w83791d_read(client,
1489                                                W83791D_REG_FAN_DIV[i]);
1490                }
1491                data->fan_div[0] = (reg_array_tmp[0] >> 4) & 0x03;
1492                data->fan_div[1] = (reg_array_tmp[0] >> 6) & 0x03;
1493                data->fan_div[2] = (reg_array_tmp[1] >> 6) & 0x03;
1494                data->fan_div[3] = reg_array_tmp[2] & 0x07;
1495                data->fan_div[4] = (reg_array_tmp[2] >> 4) & 0x07;
1496
1497                /* The fan divisor for fans 0-2 get bit 2 from
1498                   bits 5-7 respectively of vbat register */
1499                vbat_reg = w83791d_read(client, W83791D_REG_VBAT);
1500                for (i = 0; i < 3; i++)
1501                        data->fan_div[i] |= (vbat_reg >> (3 + i)) & 0x04;
1502
1503                /* Update PWM duty cycle */
1504                for (i = 0; i < NUMBER_OF_PWM; i++) {
1505                        data->pwm[i] =  w83791d_read(client,
1506                                                W83791D_REG_PWM[i]);
1507                }
1508
1509                /* Update PWM enable status */
1510                for (i = 0; i < 2; i++) {
1511                        reg_array_tmp[i] = w83791d_read(client,
1512                                                W83791D_REG_FAN_CFG[i]);
1513                }
1514                data->pwm_enable[0] = (reg_array_tmp[0] >> 2) & 0x03;
1515                data->pwm_enable[1] = (reg_array_tmp[0] >> 4) & 0x03;
1516                data->pwm_enable[2] = (reg_array_tmp[1] >> 2) & 0x03;
1517
1518                /* Update PWM target temperature */
1519                for (i = 0; i < 3; i++) {
1520                        data->temp_target[i] = w83791d_read(client,
1521                                W83791D_REG_TEMP_TARGET[i]) & 0x7f;
1522                }
1523
1524                /* Update PWM temperature tolerance */
1525                for (i = 0; i < 2; i++) {
1526                        reg_array_tmp[i] = w83791d_read(client,
1527                                        W83791D_REG_TEMP_TOL[i]);
1528                }
1529                data->temp_tolerance[0] = reg_array_tmp[0] & 0x0f;
1530                data->temp_tolerance[1] = (reg_array_tmp[0] >> 4) & 0x0f;
1531                data->temp_tolerance[2] = reg_array_tmp[1] & 0x0f;
1532
1533                /* Update the first temperature sensor */
1534                for (i = 0; i < 3; i++) {
1535                        data->temp1[i] = w83791d_read(client,
1536                                                W83791D_REG_TEMP1[i]);
1537                }
1538
1539                /* Update the rest of the temperature sensors */
1540                for (i = 0; i < 2; i++) {
1541                        for (j = 0; j < 3; j++) {
1542                                data->temp_add[i][j] =
1543                                        (w83791d_read(client,
1544                                        W83791D_REG_TEMP_ADD[i][j * 2]) << 8) |
1545                                        w83791d_read(client,
1546                                        W83791D_REG_TEMP_ADD[i][j * 2 + 1]);
1547                        }
1548                }
1549
1550                /* Update the realtime status */
1551                data->alarms =
1552                        w83791d_read(client, W83791D_REG_ALARM1) +
1553                        (w83791d_read(client, W83791D_REG_ALARM2) << 8) +
1554                        (w83791d_read(client, W83791D_REG_ALARM3) << 16);
1555
1556                /* Update the beep configuration information */
1557                data->beep_mask =
1558                        w83791d_read(client, W83791D_REG_BEEP_CTRL[0]) +
1559                        (w83791d_read(client, W83791D_REG_BEEP_CTRL[1]) << 8) +
1560                        (w83791d_read(client, W83791D_REG_BEEP_CTRL[2]) << 16);
1561
1562                /* Extract global beep enable flag */
1563                data->beep_enable =
1564                        (data->beep_mask >> GLOBAL_BEEP_ENABLE_SHIFT) & 0x01;
1565
1566                /* Update the cpu voltage information */
1567                i = w83791d_read(client, W83791D_REG_VID_FANDIV);
1568                data->vid = i & 0x0f;
1569                data->vid |= (w83791d_read(client, W83791D_REG_DID_VID4) & 0x01)
1570                                << 4;
1571
1572                data->last_updated = jiffies;
1573                data->valid = 1;
1574        }
1575
1576        mutex_unlock(&data->update_lock);
1577
1578#ifdef DEBUG
1579        w83791d_print_debug(data, dev);
1580#endif
1581
1582        return data;
1583}
1584
1585#ifdef DEBUG
1586static void w83791d_print_debug(struct w83791d_data *data, struct device *dev)
1587{
1588        int i = 0, j = 0;
1589
1590        dev_dbg(dev, "======Start of w83791d debug values======\n");
1591        dev_dbg(dev, "%d set of Voltages: ===>\n", NUMBER_OF_VIN);
1592        for (i = 0; i < NUMBER_OF_VIN; i++) {
1593                dev_dbg(dev, "vin[%d] is:     0x%02x\n", i, data->in[i]);
1594                dev_dbg(dev, "vin[%d] min is: 0x%02x\n", i, data->in_min[i]);
1595                dev_dbg(dev, "vin[%d] max is: 0x%02x\n", i, data->in_max[i]);
1596        }
1597        dev_dbg(dev, "%d set of Fan Counts/Divisors: ===>\n", NUMBER_OF_FANIN);
1598        for (i = 0; i < NUMBER_OF_FANIN; i++) {
1599                dev_dbg(dev, "fan[%d] is:     0x%02x\n", i, data->fan[i]);
1600                dev_dbg(dev, "fan[%d] min is: 0x%02x\n", i, data->fan_min[i]);
1601                dev_dbg(dev, "fan_div[%d] is: 0x%02x\n", i, data->fan_div[i]);
1602        }
1603
1604        /* temperature math is signed, but only print out the
1605           bits that matter */
1606        dev_dbg(dev, "%d set of Temperatures: ===>\n", NUMBER_OF_TEMPIN);
1607        for (i = 0; i < 3; i++) {
1608                dev_dbg(dev, "temp1[%d] is: 0x%02x\n", i, (u8) data->temp1[i]);
1609        }
1610        for (i = 0; i < 2; i++) {
1611                for (j = 0; j < 3; j++) {
1612                        dev_dbg(dev, "temp_add[%d][%d] is: 0x%04x\n", i, j,
1613                                (u16) data->temp_add[i][j]);
1614                }
1615        }
1616
1617        dev_dbg(dev, "Misc Information: ===>\n");
1618        dev_dbg(dev, "alarm is:     0x%08x\n", data->alarms);
1619        dev_dbg(dev, "beep_mask is: 0x%08x\n", data->beep_mask);
1620        dev_dbg(dev, "beep_enable is: %d\n", data->beep_enable);
1621        dev_dbg(dev, "vid is: 0x%02x\n", data->vid);
1622        dev_dbg(dev, "vrm is: 0x%02x\n", data->vrm);
1623        dev_dbg(dev, "=======End of w83791d debug values========\n");
1624        dev_dbg(dev, "\n");
1625}
1626#endif
1627
1628static int __init sensors_w83791d_init(void)
1629{
1630        return i2c_add_driver(&w83791d_driver);
1631}
1632
1633static void __exit sensors_w83791d_exit(void)
1634{
1635        i2c_del_driver(&w83791d_driver);
1636}
1637
1638MODULE_AUTHOR("Charles Spirakis <bezaur@gmail.com>");
1639MODULE_DESCRIPTION("W83791D driver");
1640MODULE_LICENSE("GPL");
1641
1642module_init(sensors_w83791d_init);
1643module_exit(sensors_w83791d_exit);
1644