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