linux/drivers/hwmon/lm93.c
<<
>>
Prefs
   1/*
   2    lm93.c - Part of lm_sensors, Linux kernel modules for hardware monitoring
   3
   4    Author/Maintainer: Mark M. Hoffman <mhoffman@lightlink.com>
   5        Copyright (c) 2004 Utilitek Systems, Inc.
   6
   7    derived in part from lm78.c:
   8        Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl>
   9
  10    derived in part from lm85.c:
  11        Copyright (c) 2002, 2003 Philip Pokorny <ppokorny@penguincomputing.com>
  12        Copyright (c) 2003       Margit Schubert-While <margitsw@t-online.de>
  13
  14    derived in part from w83l785ts.c:
  15        Copyright (c) 2003-2004 Jean Delvare <khali@linux-fr.org>
  16
  17    Ported to Linux 2.6 by Eric J. Bowersox <ericb@aspsys.com>
  18        Copyright (c) 2005 Aspen Systems, Inc.
  19
  20    Adapted to 2.6.20 by Carsten Emde <cbe@osadl.org>
  21        Copyright (c) 2006 Carsten Emde, Open Source Automation Development Lab
  22
  23    Modified for mainline integration by Hans J. Koch <hjk@hansjkoch.de>
  24        Copyright (c) 2007 Hans J. Koch, Linutronix GmbH
  25
  26    This program is free software; you can redistribute it and/or modify
  27    it under the terms of the GNU General Public License as published by
  28    the Free Software Foundation; either version 2 of the License, or
  29    (at your option) any later version.
  30
  31    This program is distributed in the hope that it will be useful,
  32    but WITHOUT ANY WARRANTY; without even the implied warranty of
  33    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  34    GNU General Public License for more details.
  35
  36    You should have received a copy of the GNU General Public License
  37    along with this program; if not, write to the Free Software
  38    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  39*/
  40
  41#include <linux/module.h>
  42#include <linux/init.h>
  43#include <linux/slab.h>
  44#include <linux/i2c.h>
  45#include <linux/hwmon.h>
  46#include <linux/hwmon-sysfs.h>
  47#include <linux/hwmon-vid.h>
  48#include <linux/err.h>
  49#include <linux/delay.h>
  50
  51/* LM93 REGISTER ADDRESSES */
  52
  53/* miscellaneous */
  54#define LM93_REG_MFR_ID                 0x3e
  55#define LM93_REG_VER                    0x3f
  56#define LM93_REG_STATUS_CONTROL         0xe2
  57#define LM93_REG_CONFIG                 0xe3
  58#define LM93_REG_SLEEP_CONTROL          0xe4
  59
  60/* alarm values start here */
  61#define LM93_REG_HOST_ERROR_1           0x48
  62
  63/* voltage inputs: in1-in16 (nr => 0-15) */
  64#define LM93_REG_IN(nr)                 (0x56 + (nr))
  65#define LM93_REG_IN_MIN(nr)             (0x90 + (nr) * 2)
  66#define LM93_REG_IN_MAX(nr)             (0x91 + (nr) * 2)
  67
  68/* temperature inputs: temp1-temp4 (nr => 0-3) */
  69#define LM93_REG_TEMP(nr)               (0x50 + (nr))
  70#define LM93_REG_TEMP_MIN(nr)           (0x78 + (nr) * 2)
  71#define LM93_REG_TEMP_MAX(nr)           (0x79 + (nr) * 2)
  72
  73/* temp[1-4]_auto_boost (nr => 0-3) */
  74#define LM93_REG_BOOST(nr)              (0x80 + (nr))
  75
  76/* #PROCHOT inputs: prochot1-prochot2 (nr => 0-1) */
  77#define LM93_REG_PROCHOT_CUR(nr)        (0x67 + (nr) * 2)
  78#define LM93_REG_PROCHOT_AVG(nr)        (0x68 + (nr) * 2)
  79#define LM93_REG_PROCHOT_MAX(nr)        (0xb0 + (nr))
  80
  81/* fan tach inputs: fan1-fan4 (nr => 0-3) */
  82#define LM93_REG_FAN(nr)                (0x6e + (nr) * 2)
  83#define LM93_REG_FAN_MIN(nr)            (0xb4 + (nr) * 2)
  84
  85/* pwm outputs: pwm1-pwm2 (nr => 0-1, reg => 0-3) */
  86#define LM93_REG_PWM_CTL(nr,reg)        (0xc8 + (reg) + (nr) * 4)
  87#define LM93_PWM_CTL1   0x0
  88#define LM93_PWM_CTL2   0x1
  89#define LM93_PWM_CTL3   0x2
  90#define LM93_PWM_CTL4   0x3
  91
  92/* GPIO input state */
  93#define LM93_REG_GPI                    0x6b
  94
  95/* vid inputs: vid1-vid2 (nr => 0-1) */
  96#define LM93_REG_VID(nr)                (0x6c + (nr))
  97
  98/* vccp1 & vccp2: VID relative inputs (nr => 0-1) */
  99#define LM93_REG_VCCP_LIMIT_OFF(nr)     (0xb2 + (nr))
 100
 101/* temp[1-4]_auto_boost_hyst */
 102#define LM93_REG_BOOST_HYST_12          0xc0
 103#define LM93_REG_BOOST_HYST_34          0xc1
 104#define LM93_REG_BOOST_HYST(nr)         (0xc0 + (nr)/2)
 105
 106/* temp[1-4]_auto_pwm_[min|hyst] */
 107#define LM93_REG_PWM_MIN_HYST_12        0xc3
 108#define LM93_REG_PWM_MIN_HYST_34        0xc4
 109#define LM93_REG_PWM_MIN_HYST(nr)       (0xc3 + (nr)/2)
 110
 111/* prochot_override & prochot_interval */
 112#define LM93_REG_PROCHOT_OVERRIDE       0xc6
 113#define LM93_REG_PROCHOT_INTERVAL       0xc7
 114
 115/* temp[1-4]_auto_base (nr => 0-3) */
 116#define LM93_REG_TEMP_BASE(nr)          (0xd0 + (nr))
 117
 118/* temp[1-4]_auto_offsets (step => 0-11) */
 119#define LM93_REG_TEMP_OFFSET(step)      (0xd4 + (step))
 120
 121/* #PROCHOT & #VRDHOT PWM ramp control */
 122#define LM93_REG_PWM_RAMP_CTL           0xbf
 123
 124/* miscellaneous */
 125#define LM93_REG_SFC1           0xbc
 126#define LM93_REG_SFC2           0xbd
 127#define LM93_REG_GPI_VID_CTL    0xbe
 128#define LM93_REG_SF_TACH_TO_PWM 0xe0
 129
 130/* error masks */
 131#define LM93_REG_GPI_ERR_MASK   0xec
 132#define LM93_REG_MISC_ERR_MASK  0xed
 133
 134/* LM93 REGISTER VALUES */
 135#define LM93_MFR_ID             0x73
 136#define LM93_MFR_ID_PROTOTYPE   0x72
 137
 138/* LM94 REGISTER VALUES */
 139#define LM94_MFR_ID_2           0x7a
 140#define LM94_MFR_ID             0x79
 141#define LM94_MFR_ID_PROTOTYPE   0x78
 142
 143/* SMBus capabilities */
 144#define LM93_SMBUS_FUNC_FULL (I2C_FUNC_SMBUS_BYTE_DATA | \
 145                I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_BLOCK_DATA)
 146#define LM93_SMBUS_FUNC_MIN  (I2C_FUNC_SMBUS_BYTE_DATA | \
 147                I2C_FUNC_SMBUS_WORD_DATA)
 148
 149/* Addresses to scan */
 150static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
 151
 152/* Insmod parameters */
 153
 154static int disable_block;
 155module_param(disable_block, bool, 0);
 156MODULE_PARM_DESC(disable_block,
 157        "Set to non-zero to disable SMBus block data transactions.");
 158
 159static int init;
 160module_param(init, bool, 0);
 161MODULE_PARM_DESC(init, "Set to non-zero to force chip initialization.");
 162
 163static int vccp_limit_type[2] = {0,0};
 164module_param_array(vccp_limit_type, int, NULL, 0);
 165MODULE_PARM_DESC(vccp_limit_type, "Configures in7 and in8 limit modes.");
 166
 167static int vid_agtl;
 168module_param(vid_agtl, int, 0);
 169MODULE_PARM_DESC(vid_agtl, "Configures VID pin input thresholds.");
 170
 171/* Driver data */
 172static struct i2c_driver lm93_driver;
 173
 174/* LM93 BLOCK READ COMMANDS */
 175static const struct { u8 cmd; u8 len; } lm93_block_read_cmds[12] = {
 176        { 0xf2,  8 },
 177        { 0xf3,  8 },
 178        { 0xf4,  6 },
 179        { 0xf5, 16 },
 180        { 0xf6,  4 },
 181        { 0xf7,  8 },
 182        { 0xf8, 12 },
 183        { 0xf9, 32 },
 184        { 0xfa,  8 },
 185        { 0xfb,  8 },
 186        { 0xfc, 16 },
 187        { 0xfd,  9 },
 188};
 189
 190/* ALARMS: SYSCTL format described further below
 191   REG: 64 bits in 8 registers, as immediately below */
 192struct block1_t {
 193        u8 host_status_1;
 194        u8 host_status_2;
 195        u8 host_status_3;
 196        u8 host_status_4;
 197        u8 p1_prochot_status;
 198        u8 p2_prochot_status;
 199        u8 gpi_status;
 200        u8 fan_status;
 201};
 202
 203/*
 204 * Client-specific data
 205 */
 206struct lm93_data {
 207        struct device *hwmon_dev;
 208
 209        struct mutex update_lock;
 210        unsigned long last_updated;     /* In jiffies */
 211
 212        /* client update function */
 213        void (*update)(struct lm93_data *, struct i2c_client *);
 214
 215        char valid; /* !=0 if following fields are valid */
 216
 217        /* register values, arranged by block read groups */
 218        struct block1_t block1;
 219
 220        /* temp1 - temp4: unfiltered readings
 221           temp1 - temp2: filtered readings */
 222        u8 block2[6];
 223
 224        /* vin1 - vin16: readings */
 225        u8 block3[16];
 226
 227        /* prochot1 - prochot2: readings */
 228        struct {
 229                u8 cur;
 230                u8 avg;
 231        } block4[2];
 232
 233        /* fan counts 1-4 => 14-bits, LE, *left* justified */
 234        u16 block5[4];
 235
 236        /* block6 has a lot of data we don't need */
 237        struct {
 238                u8 min;
 239                u8 max;
 240        } temp_lim[4];
 241
 242        /* vin1 - vin16: low and high limits */
 243        struct {
 244                u8 min;
 245                u8 max;
 246        } block7[16];
 247
 248        /* fan count limits 1-4 => same format as block5 */
 249        u16 block8[4];
 250
 251        /* pwm control registers (2 pwms, 4 regs) */
 252        u8 block9[2][4];
 253
 254        /* auto/pwm base temp and offset temp registers */
 255        struct {
 256                u8 base[4];
 257                u8 offset[12];
 258        } block10;
 259
 260        /* master config register */
 261        u8 config;
 262
 263        /* VID1 & VID2 => register format, 6-bits, right justified */
 264        u8 vid[2];
 265
 266        /* prochot1 - prochot2: limits */
 267        u8 prochot_max[2];
 268
 269        /* vccp1 & vccp2 (in7 & in8): VID relative limits (register format) */
 270        u8 vccp_limits[2];
 271
 272        /* GPIO input state (register format, i.e. inverted) */
 273        u8 gpi;
 274
 275        /* #PROCHOT override (register format) */
 276        u8 prochot_override;
 277
 278        /* #PROCHOT intervals (register format) */
 279        u8 prochot_interval;
 280
 281        /* Fan Boost Temperatures (register format) */
 282        u8 boost[4];
 283
 284        /* Fan Boost Hysteresis (register format) */
 285        u8 boost_hyst[2];
 286
 287        /* Temperature Zone Min. PWM & Hysteresis (register format) */
 288        u8 auto_pwm_min_hyst[2];
 289
 290        /* #PROCHOT & #VRDHOT PWM Ramp Control */
 291        u8 pwm_ramp_ctl;
 292
 293        /* miscellaneous setup regs */
 294        u8 sfc1;
 295        u8 sfc2;
 296        u8 sf_tach_to_pwm;
 297
 298        /* The two PWM CTL2  registers can read something other than what was
 299           last written for the OVR_DC field (duty cycle override).  So, we
 300           save the user-commanded value here. */
 301        u8 pwm_override[2];
 302};
 303
 304/* VID: mV
 305   REG: 6-bits, right justified, *always* using Intel VRM/VRD 10 */
 306static int LM93_VID_FROM_REG(u8 reg)
 307{
 308        return vid_from_reg((reg & 0x3f), 100);
 309}
 310
 311/* min, max, and nominal register values, per channel (u8) */
 312static const u8 lm93_vin_reg_min[16] = {
 313        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 314        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae,
 315};
 316static const u8 lm93_vin_reg_max[16] = {
 317        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 318        0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1,
 319};
 320/* Values from the datasheet. They're here for documentation only.
 321static const u8 lm93_vin_reg_nom[16] = {
 322        0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
 323        0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x40, 0xc0,
 324};
 325*/
 326
 327/* min, max, and nominal voltage readings, per channel (mV)*/
 328static const unsigned long lm93_vin_val_min[16] = {
 329        0, 0, 0, 0, 0, 0, 0, 0,
 330        0, 0, 0, 0, 0, 0, 0, 3000,
 331};
 332
 333static const unsigned long lm93_vin_val_max[16] = {
 334        1236, 1236, 1236, 1600, 2000, 2000, 1600, 1600,
 335        4400, 6500, 3333, 2625, 1312, 1312, 1236, 3600,
 336};
 337/* Values from the datasheet. They're here for documentation only.
 338static const unsigned long lm93_vin_val_nom[16] = {
 339         927,  927,  927, 1200, 1500, 1500, 1200, 1200,
 340        3300, 5000, 2500, 1969,  984,  984,  309, 3300,
 341};
 342*/
 343
 344static unsigned LM93_IN_FROM_REG(int nr, u8 reg)
 345{
 346        const long uV_max = lm93_vin_val_max[nr] * 1000;
 347        const long uV_min = lm93_vin_val_min[nr] * 1000;
 348
 349        const long slope = (uV_max - uV_min) /
 350                (lm93_vin_reg_max[nr] - lm93_vin_reg_min[nr]);
 351        const long intercept = uV_min - slope * lm93_vin_reg_min[nr];
 352
 353        return (slope * reg + intercept + 500) / 1000;
 354}
 355
 356/* IN: mV, limits determined by channel nr
 357   REG: scaling determined by channel nr */
 358static u8 LM93_IN_TO_REG(int nr, unsigned val)
 359{
 360        /* range limit */
 361        const long mV = SENSORS_LIMIT(val,
 362                lm93_vin_val_min[nr], lm93_vin_val_max[nr]);
 363
 364        /* try not to lose too much precision here */
 365        const long uV = mV * 1000;
 366        const long uV_max = lm93_vin_val_max[nr] * 1000;
 367        const long uV_min = lm93_vin_val_min[nr] * 1000;
 368
 369        /* convert */
 370        const long slope = (uV_max - uV_min) /
 371                (lm93_vin_reg_max[nr] - lm93_vin_reg_min[nr]);
 372        const long intercept = uV_min - slope * lm93_vin_reg_min[nr];
 373
 374        u8 result = ((uV - intercept + (slope/2)) / slope);
 375        result = SENSORS_LIMIT(result,
 376                        lm93_vin_reg_min[nr], lm93_vin_reg_max[nr]);
 377        return result;
 378}
 379
 380/* vid in mV, upper == 0 indicates low limit, otherwise upper limit */
 381static unsigned LM93_IN_REL_FROM_REG(u8 reg, int upper, int vid)
 382{
 383        const long uV_offset = upper ? (((reg >> 4 & 0x0f) + 1) * 12500) :
 384                                (((reg >> 0 & 0x0f) + 1) * -25000);
 385        const long uV_vid = vid * 1000;
 386        return (uV_vid + uV_offset + 5000) / 10000;
 387}
 388
 389#define LM93_IN_MIN_FROM_REG(reg,vid)   LM93_IN_REL_FROM_REG(reg,0,vid)
 390#define LM93_IN_MAX_FROM_REG(reg,vid)   LM93_IN_REL_FROM_REG(reg,1,vid)
 391
 392/* vid in mV , upper == 0 indicates low limit, otherwise upper limit
 393   upper also determines which nibble of the register is returned
 394   (the other nibble will be 0x0) */
 395static u8 LM93_IN_REL_TO_REG(unsigned val, int upper, int vid)
 396{
 397        long uV_offset = vid * 1000 - val * 10000;
 398        if (upper) {
 399                uV_offset = SENSORS_LIMIT(uV_offset, 12500, 200000);
 400                return (u8)((uV_offset /  12500 - 1) << 4);
 401        } else {
 402                uV_offset = SENSORS_LIMIT(uV_offset, -400000, -25000);
 403                return (u8)((uV_offset / -25000 - 1) << 0);
 404        }
 405}
 406
 407/* TEMP: 1/1000 degrees C (-128C to +127C)
 408   REG: 1C/bit, two's complement */
 409static int LM93_TEMP_FROM_REG(u8 reg)
 410{
 411        return (s8)reg * 1000;
 412}
 413
 414#define LM93_TEMP_MIN (-128000)
 415#define LM93_TEMP_MAX ( 127000)
 416
 417/* TEMP: 1/1000 degrees C (-128C to +127C)
 418   REG: 1C/bit, two's complement */
 419static u8 LM93_TEMP_TO_REG(long temp)
 420{
 421        int ntemp = SENSORS_LIMIT(temp, LM93_TEMP_MIN, LM93_TEMP_MAX);
 422        ntemp += (ntemp<0 ? -500 : 500);
 423        return (u8)(ntemp / 1000);
 424}
 425
 426/* Determine 4-bit temperature offset resolution */
 427static int LM93_TEMP_OFFSET_MODE_FROM_REG(u8 sfc2, int nr)
 428{
 429        /* mode: 0 => 1C/bit, nonzero => 0.5C/bit */
 430        return sfc2 & (nr < 2 ? 0x10 : 0x20);
 431}
 432
 433/* This function is common to all 4-bit temperature offsets
 434   reg is 4 bits right justified
 435   mode 0 => 1C/bit, mode !0 => 0.5C/bit */
 436static int LM93_TEMP_OFFSET_FROM_REG(u8 reg, int mode)
 437{
 438        return (reg & 0x0f) * (mode ? 5 : 10);
 439}
 440
 441#define LM93_TEMP_OFFSET_MIN  (  0)
 442#define LM93_TEMP_OFFSET_MAX0 (150)
 443#define LM93_TEMP_OFFSET_MAX1 ( 75)
 444
 445/* This function is common to all 4-bit temperature offsets
 446   returns 4 bits right justified
 447   mode 0 => 1C/bit, mode !0 => 0.5C/bit */
 448static u8 LM93_TEMP_OFFSET_TO_REG(int off, int mode)
 449{
 450        int factor = mode ? 5 : 10;
 451
 452        off = SENSORS_LIMIT(off, LM93_TEMP_OFFSET_MIN,
 453                mode ? LM93_TEMP_OFFSET_MAX1 : LM93_TEMP_OFFSET_MAX0);
 454        return (u8)((off + factor/2) / factor);
 455}
 456
 457/* 0 <= nr <= 3 */
 458static int LM93_TEMP_AUTO_OFFSET_FROM_REG(u8 reg, int nr, int mode)
 459{
 460        /* temp1-temp2 (nr=0,1) use lower nibble */
 461        if (nr < 2)
 462                return LM93_TEMP_OFFSET_FROM_REG(reg & 0x0f, mode);
 463
 464        /* temp3-temp4 (nr=2,3) use upper nibble */
 465        else
 466                return LM93_TEMP_OFFSET_FROM_REG(reg >> 4 & 0x0f, mode);
 467}
 468
 469/* TEMP: 1/10 degrees C (0C to +15C (mode 0) or +7.5C (mode non-zero))
 470   REG: 1.0C/bit (mode 0) or 0.5C/bit (mode non-zero)
 471   0 <= nr <= 3 */
 472static u8 LM93_TEMP_AUTO_OFFSET_TO_REG(u8 old, int off, int nr, int mode)
 473{
 474        u8 new = LM93_TEMP_OFFSET_TO_REG(off, mode);
 475
 476        /* temp1-temp2 (nr=0,1) use lower nibble */
 477        if (nr < 2)
 478                return (old & 0xf0) | (new & 0x0f);
 479
 480        /* temp3-temp4 (nr=2,3) use upper nibble */
 481        else
 482                return (new << 4 & 0xf0) | (old & 0x0f);
 483}
 484
 485static int LM93_AUTO_BOOST_HYST_FROM_REGS(struct lm93_data *data, int nr,
 486                int mode)
 487{
 488        u8 reg;
 489
 490        switch (nr) {
 491        case 0:
 492                reg = data->boost_hyst[0] & 0x0f;
 493                break;
 494        case 1:
 495                reg = data->boost_hyst[0] >> 4 & 0x0f;
 496                break;
 497        case 2:
 498                reg = data->boost_hyst[1] & 0x0f;
 499                break;
 500        case 3:
 501        default:
 502                reg = data->boost_hyst[1] >> 4 & 0x0f;
 503                break;
 504        }
 505
 506        return LM93_TEMP_FROM_REG(data->boost[nr]) -
 507                        LM93_TEMP_OFFSET_FROM_REG(reg, mode);
 508}
 509
 510static u8 LM93_AUTO_BOOST_HYST_TO_REG(struct lm93_data *data, long hyst,
 511                int nr, int mode)
 512{
 513        u8 reg = LM93_TEMP_OFFSET_TO_REG(
 514                        (LM93_TEMP_FROM_REG(data->boost[nr]) - hyst), mode);
 515
 516        switch (nr) {
 517        case 0:
 518                reg = (data->boost_hyst[0] & 0xf0) | (reg & 0x0f);
 519                break;
 520        case 1:
 521                reg = (reg << 4 & 0xf0) | (data->boost_hyst[0] & 0x0f);
 522                break;
 523        case 2:
 524                reg = (data->boost_hyst[1] & 0xf0) | (reg & 0x0f);
 525                break;
 526        case 3:
 527        default:
 528                reg = (reg << 4 & 0xf0) | (data->boost_hyst[1] & 0x0f);
 529                break;
 530        }
 531
 532        return reg;
 533}
 534
 535/* PWM: 0-255 per sensors documentation
 536   REG: 0-13 as mapped below... right justified */
 537typedef enum { LM93_PWM_MAP_HI_FREQ, LM93_PWM_MAP_LO_FREQ } pwm_freq_t;
 538static int lm93_pwm_map[2][16] = {
 539        {
 540                0x00, /*   0.00% */ 0x40, /*  25.00% */
 541                0x50, /*  31.25% */ 0x60, /*  37.50% */
 542                0x70, /*  43.75% */ 0x80, /*  50.00% */
 543                0x90, /*  56.25% */ 0xa0, /*  62.50% */
 544                0xb0, /*  68.75% */ 0xc0, /*  75.00% */
 545                0xd0, /*  81.25% */ 0xe0, /*  87.50% */
 546                0xf0, /*  93.75% */ 0xff, /* 100.00% */
 547                0xff, 0xff, /* 14, 15 are reserved and should never occur */
 548        },
 549        {
 550                0x00, /*   0.00% */ 0x40, /*  25.00% */
 551                0x49, /*  28.57% */ 0x52, /*  32.14% */
 552                0x5b, /*  35.71% */ 0x64, /*  39.29% */
 553                0x6d, /*  42.86% */ 0x76, /*  46.43% */
 554                0x80, /*  50.00% */ 0x89, /*  53.57% */
 555                0x92, /*  57.14% */ 0xb6, /*  71.43% */
 556                0xdb, /*  85.71% */ 0xff, /* 100.00% */
 557                0xff, 0xff, /* 14, 15 are reserved and should never occur */
 558        },
 559};
 560
 561static int LM93_PWM_FROM_REG(u8 reg, pwm_freq_t freq)
 562{
 563        return lm93_pwm_map[freq][reg & 0x0f];
 564}
 565
 566/* round up to nearest match */
 567static u8 LM93_PWM_TO_REG(int pwm, pwm_freq_t freq)
 568{
 569        int i;
 570        for (i = 0; i < 13; i++)
 571                if (pwm <= lm93_pwm_map[freq][i])
 572                        break;
 573
 574        /* can fall through with i==13 */
 575        return (u8)i;
 576}
 577
 578static int LM93_FAN_FROM_REG(u16 regs)
 579{
 580        const u16 count = le16_to_cpu(regs) >> 2;
 581        return count==0 ? -1 : count==0x3fff ? 0: 1350000 / count;
 582}
 583
 584/*
 585 * RPM: (82.5 to 1350000)
 586 * REG: 14-bits, LE, *left* justified
 587 */
 588static u16 LM93_FAN_TO_REG(long rpm)
 589{
 590        u16 count, regs;
 591
 592        if (rpm == 0) {
 593                count = 0x3fff;
 594        } else {
 595                rpm = SENSORS_LIMIT(rpm, 1, 1000000);
 596                count = SENSORS_LIMIT((1350000 + rpm) / rpm, 1, 0x3ffe);
 597        }
 598
 599        regs = count << 2;
 600        return cpu_to_le16(regs);
 601}
 602
 603/* PWM FREQ: HZ
 604   REG: 0-7 as mapped below */
 605static int lm93_pwm_freq_map[8] = {
 606        22500, 96, 84, 72, 60, 48, 36, 12
 607};
 608
 609static int LM93_PWM_FREQ_FROM_REG(u8 reg)
 610{
 611        return lm93_pwm_freq_map[reg & 0x07];
 612}
 613
 614/* round up to nearest match */
 615static u8 LM93_PWM_FREQ_TO_REG(int freq)
 616{
 617        int i;
 618        for (i = 7; i > 0; i--)
 619                if (freq <= lm93_pwm_freq_map[i])
 620                        break;
 621
 622        /* can fall through with i==0 */
 623        return (u8)i;
 624}
 625
 626/* TIME: 1/100 seconds
 627 * REG: 0-7 as mapped below */
 628static int lm93_spinup_time_map[8] = {
 629        0, 10, 25, 40, 70, 100, 200, 400,
 630};
 631
 632static int LM93_SPINUP_TIME_FROM_REG(u8 reg)
 633{
 634        return lm93_spinup_time_map[reg >> 5 & 0x07];
 635}
 636
 637/* round up to nearest match */
 638static u8 LM93_SPINUP_TIME_TO_REG(int time)
 639{
 640        int i;
 641        for (i = 0; i < 7; i++)
 642                if (time <= lm93_spinup_time_map[i])
 643                        break;
 644
 645        /* can fall through with i==8 */
 646        return (u8)i;
 647}
 648
 649#define LM93_RAMP_MIN 0
 650#define LM93_RAMP_MAX 75
 651
 652static int LM93_RAMP_FROM_REG(u8 reg)
 653{
 654        return (reg & 0x0f) * 5;
 655}
 656
 657/* RAMP: 1/100 seconds
 658   REG: 50mS/bit 4-bits right justified */
 659static u8 LM93_RAMP_TO_REG(int ramp)
 660{
 661        ramp = SENSORS_LIMIT(ramp, LM93_RAMP_MIN, LM93_RAMP_MAX);
 662        return (u8)((ramp + 2) / 5);
 663}
 664
 665/* PROCHOT: 0-255, 0 => 0%, 255 => > 96.6%
 666 * REG: (same) */
 667static u8 LM93_PROCHOT_TO_REG(long prochot)
 668{
 669        prochot = SENSORS_LIMIT(prochot, 0, 255);
 670        return (u8)prochot;
 671}
 672
 673/* PROCHOT-INTERVAL: 73 - 37200 (1/100 seconds)
 674 * REG: 0-9 as mapped below */
 675static int lm93_interval_map[10] = {
 676        73, 146, 290, 580, 1170, 2330, 4660, 9320, 18600, 37200,
 677};
 678
 679static int LM93_INTERVAL_FROM_REG(u8 reg)
 680{
 681        return lm93_interval_map[reg & 0x0f];
 682}
 683
 684/* round up to nearest match */
 685static u8 LM93_INTERVAL_TO_REG(long interval)
 686{
 687        int i;
 688        for (i = 0; i < 9; i++)
 689                if (interval <= lm93_interval_map[i])
 690                        break;
 691
 692        /* can fall through with i==9 */
 693        return (u8)i;
 694}
 695
 696/* GPIO: 0-255, GPIO0 is LSB
 697 * REG: inverted */
 698static unsigned LM93_GPI_FROM_REG(u8 reg)
 699{
 700        return ~reg & 0xff;
 701}
 702
 703/* alarm bitmask definitions
 704   The LM93 has nearly 64 bits of error status... I've pared that down to
 705   what I think is a useful subset in order to fit it into 32 bits.
 706
 707   Especially note that the #VRD_HOT alarms are missing because we provide
 708   that information as values in another sysfs file.
 709
 710   If libsensors is extended to support 64 bit values, this could be revisited.
 711*/
 712#define LM93_ALARM_IN1          0x00000001
 713#define LM93_ALARM_IN2          0x00000002
 714#define LM93_ALARM_IN3          0x00000004
 715#define LM93_ALARM_IN4          0x00000008
 716#define LM93_ALARM_IN5          0x00000010
 717#define LM93_ALARM_IN6          0x00000020
 718#define LM93_ALARM_IN7          0x00000040
 719#define LM93_ALARM_IN8          0x00000080
 720#define LM93_ALARM_IN9          0x00000100
 721#define LM93_ALARM_IN10         0x00000200
 722#define LM93_ALARM_IN11         0x00000400
 723#define LM93_ALARM_IN12         0x00000800
 724#define LM93_ALARM_IN13         0x00001000
 725#define LM93_ALARM_IN14         0x00002000
 726#define LM93_ALARM_IN15         0x00004000
 727#define LM93_ALARM_IN16         0x00008000
 728#define LM93_ALARM_FAN1         0x00010000
 729#define LM93_ALARM_FAN2         0x00020000
 730#define LM93_ALARM_FAN3         0x00040000
 731#define LM93_ALARM_FAN4         0x00080000
 732#define LM93_ALARM_PH1_ERR      0x00100000
 733#define LM93_ALARM_PH2_ERR      0x00200000
 734#define LM93_ALARM_SCSI1_ERR    0x00400000
 735#define LM93_ALARM_SCSI2_ERR    0x00800000
 736#define LM93_ALARM_DVDDP1_ERR   0x01000000
 737#define LM93_ALARM_DVDDP2_ERR   0x02000000
 738#define LM93_ALARM_D1_ERR       0x04000000
 739#define LM93_ALARM_D2_ERR       0x08000000
 740#define LM93_ALARM_TEMP1        0x10000000
 741#define LM93_ALARM_TEMP2        0x20000000
 742#define LM93_ALARM_TEMP3        0x40000000
 743
 744static unsigned LM93_ALARMS_FROM_REG(struct block1_t b1)
 745{
 746        unsigned result;
 747        result  = b1.host_status_2 & 0x3f;
 748
 749        if (vccp_limit_type[0])
 750                result |= (b1.host_status_4 & 0x10) << 2;
 751        else
 752                result |= b1.host_status_2 & 0x40;
 753
 754        if (vccp_limit_type[1])
 755                result |= (b1.host_status_4 & 0x20) << 2;
 756        else
 757                result |= b1.host_status_2 & 0x80;
 758
 759        result |= b1.host_status_3 << 8;
 760        result |= (b1.fan_status & 0x0f) << 16;
 761        result |= (b1.p1_prochot_status & 0x80) << 13;
 762        result |= (b1.p2_prochot_status & 0x80) << 14;
 763        result |= (b1.host_status_4 & 0xfc) << 20;
 764        result |= (b1.host_status_1 & 0x07) << 28;
 765        return result;
 766}
 767
 768#define MAX_RETRIES 5
 769
 770static u8 lm93_read_byte(struct i2c_client *client, u8 reg)
 771{
 772        int value, i;
 773
 774        /* retry in case of read errors */
 775        for (i=1; i<=MAX_RETRIES; i++) {
 776                if ((value = i2c_smbus_read_byte_data(client, reg)) >= 0) {
 777                        return value;
 778                } else {
 779                        dev_warn(&client->dev,"lm93: read byte data failed, "
 780                                "address 0x%02x.\n", reg);
 781                        mdelay(i + 3);
 782                }
 783
 784        }
 785
 786        /* <TODO> what to return in case of error? */
 787        dev_err(&client->dev,"lm93: All read byte retries failed!!\n");
 788        return 0;
 789}
 790
 791static int lm93_write_byte(struct i2c_client *client, u8 reg, u8 value)
 792{
 793        int result;
 794
 795        /* <TODO> how to handle write errors? */
 796        result = i2c_smbus_write_byte_data(client, reg, value);
 797
 798        if (result < 0)
 799                dev_warn(&client->dev,"lm93: write byte data failed, "
 800                         "0x%02x at address 0x%02x.\n", value, reg);
 801
 802        return result;
 803}
 804
 805static u16 lm93_read_word(struct i2c_client *client, u8 reg)
 806{
 807        int value, i;
 808
 809        /* retry in case of read errors */
 810        for (i=1; i<=MAX_RETRIES; i++) {
 811                if ((value = i2c_smbus_read_word_data(client, reg)) >= 0) {
 812                        return value;
 813                } else {
 814                        dev_warn(&client->dev,"lm93: read word data failed, "
 815                                 "address 0x%02x.\n", reg);
 816                        mdelay(i + 3);
 817                }
 818
 819        }
 820
 821        /* <TODO> what to return in case of error? */
 822        dev_err(&client->dev,"lm93: All read word retries failed!!\n");
 823        return 0;
 824}
 825
 826static int lm93_write_word(struct i2c_client *client, u8 reg, u16 value)
 827{
 828        int result;
 829
 830        /* <TODO> how to handle write errors? */
 831        result = i2c_smbus_write_word_data(client, reg, value);
 832
 833        if (result < 0)
 834                dev_warn(&client->dev,"lm93: write word data failed, "
 835                         "0x%04x at address 0x%02x.\n", value, reg);
 836
 837        return result;
 838}
 839
 840static u8 lm93_block_buffer[I2C_SMBUS_BLOCK_MAX];
 841
 842/*
 843        read block data into values, retry if not expected length
 844        fbn => index to lm93_block_read_cmds table
 845                (Fixed Block Number - section 14.5.2 of LM93 datasheet)
 846*/
 847static void lm93_read_block(struct i2c_client *client, u8 fbn, u8 *values)
 848{
 849        int i, result=0;
 850
 851        for (i = 1; i <= MAX_RETRIES; i++) {
 852                result = i2c_smbus_read_block_data(client,
 853                        lm93_block_read_cmds[fbn].cmd, lm93_block_buffer);
 854
 855                if (result == lm93_block_read_cmds[fbn].len) {
 856                        break;
 857                } else {
 858                        dev_warn(&client->dev,"lm93: block read data failed, "
 859                                 "command 0x%02x.\n",
 860                                 lm93_block_read_cmds[fbn].cmd);
 861                        mdelay(i + 3);
 862                }
 863        }
 864
 865        if (result == lm93_block_read_cmds[fbn].len) {
 866                memcpy(values,lm93_block_buffer,lm93_block_read_cmds[fbn].len);
 867        } else {
 868                /* <TODO> what to do in case of error? */
 869        }
 870}
 871
 872static struct lm93_data *lm93_update_device(struct device *dev)
 873{
 874        struct i2c_client *client = to_i2c_client(dev);
 875        struct lm93_data *data = i2c_get_clientdata(client);
 876        const unsigned long interval = HZ + (HZ / 2);
 877
 878        mutex_lock(&data->update_lock);
 879
 880        if (time_after(jiffies, data->last_updated + interval) ||
 881                !data->valid) {
 882
 883                data->update(data, client);
 884                data->last_updated = jiffies;
 885                data->valid = 1;
 886        }
 887
 888        mutex_unlock(&data->update_lock);
 889        return data;
 890}
 891
 892/* update routine for data that has no corresponding SMBus block command */
 893static void lm93_update_client_common(struct lm93_data *data,
 894                                      struct i2c_client *client)
 895{
 896        int i;
 897        u8 *ptr;
 898
 899        /* temp1 - temp4: limits */
 900        for (i = 0; i < 4; i++) {
 901                data->temp_lim[i].min =
 902                        lm93_read_byte(client, LM93_REG_TEMP_MIN(i));
 903                data->temp_lim[i].max =
 904                        lm93_read_byte(client, LM93_REG_TEMP_MAX(i));
 905        }
 906
 907        /* config register */
 908        data->config = lm93_read_byte(client, LM93_REG_CONFIG);
 909
 910        /* vid1 - vid2: values */
 911        for (i = 0; i < 2; i++)
 912                data->vid[i] = lm93_read_byte(client, LM93_REG_VID(i));
 913
 914        /* prochot1 - prochot2: limits */
 915        for (i = 0; i < 2; i++)
 916                data->prochot_max[i] = lm93_read_byte(client,
 917                                LM93_REG_PROCHOT_MAX(i));
 918
 919        /* vccp1 - vccp2: VID relative limits */
 920        for (i = 0; i < 2; i++)
 921                data->vccp_limits[i] = lm93_read_byte(client,
 922                                LM93_REG_VCCP_LIMIT_OFF(i));
 923
 924        /* GPIO input state */
 925        data->gpi = lm93_read_byte(client, LM93_REG_GPI);
 926
 927        /* #PROCHOT override state */
 928        data->prochot_override = lm93_read_byte(client,
 929                        LM93_REG_PROCHOT_OVERRIDE);
 930
 931        /* #PROCHOT intervals */
 932        data->prochot_interval = lm93_read_byte(client,
 933                        LM93_REG_PROCHOT_INTERVAL);
 934
 935        /* Fan Boost Temperature registers */
 936        for (i = 0; i < 4; i++)
 937                data->boost[i] = lm93_read_byte(client, LM93_REG_BOOST(i));
 938
 939        /* Fan Boost Temperature Hyst. registers */
 940        data->boost_hyst[0] = lm93_read_byte(client, LM93_REG_BOOST_HYST_12);
 941        data->boost_hyst[1] = lm93_read_byte(client, LM93_REG_BOOST_HYST_34);
 942
 943        /* Temperature Zone Min. PWM & Hysteresis registers */
 944        data->auto_pwm_min_hyst[0] =
 945                        lm93_read_byte(client, LM93_REG_PWM_MIN_HYST_12);
 946        data->auto_pwm_min_hyst[1] =
 947                        lm93_read_byte(client, LM93_REG_PWM_MIN_HYST_34);
 948
 949        /* #PROCHOT & #VRDHOT PWM Ramp Control register */
 950        data->pwm_ramp_ctl = lm93_read_byte(client, LM93_REG_PWM_RAMP_CTL);
 951
 952        /* misc setup registers */
 953        data->sfc1 = lm93_read_byte(client, LM93_REG_SFC1);
 954        data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
 955        data->sf_tach_to_pwm = lm93_read_byte(client,
 956                        LM93_REG_SF_TACH_TO_PWM);
 957
 958        /* write back alarm values to clear */
 959        for (i = 0, ptr = (u8 *)(&data->block1); i < 8; i++)
 960                lm93_write_byte(client, LM93_REG_HOST_ERROR_1 + i, *(ptr + i));
 961}
 962
 963/* update routine which uses SMBus block data commands */
 964static void lm93_update_client_full(struct lm93_data *data,
 965                                    struct i2c_client *client)
 966{
 967        dev_dbg(&client->dev,"starting device update (block data enabled)\n");
 968
 969        /* in1 - in16: values & limits */
 970        lm93_read_block(client, 3, (u8 *)(data->block3));
 971        lm93_read_block(client, 7, (u8 *)(data->block7));
 972
 973        /* temp1 - temp4: values */
 974        lm93_read_block(client, 2, (u8 *)(data->block2));
 975
 976        /* prochot1 - prochot2: values */
 977        lm93_read_block(client, 4, (u8 *)(data->block4));
 978
 979        /* fan1 - fan4: values & limits */
 980        lm93_read_block(client, 5, (u8 *)(data->block5));
 981        lm93_read_block(client, 8, (u8 *)(data->block8));
 982
 983        /* pmw control registers */
 984        lm93_read_block(client, 9, (u8 *)(data->block9));
 985
 986        /* alarm values */
 987        lm93_read_block(client, 1, (u8 *)(&data->block1));
 988
 989        /* auto/pwm registers */
 990        lm93_read_block(client, 10, (u8 *)(&data->block10));
 991
 992        lm93_update_client_common(data, client);
 993}
 994
 995/* update routine which uses SMBus byte/word data commands only */
 996static void lm93_update_client_min(struct lm93_data *data,
 997                                   struct i2c_client *client)
 998{
 999        int i,j;
1000        u8 *ptr;
1001
1002        dev_dbg(&client->dev,"starting device update (block data disabled)\n");
1003
1004        /* in1 - in16: values & limits */
1005        for (i = 0; i < 16; i++) {
1006                data->block3[i] =
1007                        lm93_read_byte(client, LM93_REG_IN(i));
1008                data->block7[i].min =
1009                        lm93_read_byte(client, LM93_REG_IN_MIN(i));
1010                data->block7[i].max =
1011                        lm93_read_byte(client, LM93_REG_IN_MAX(i));
1012        }
1013
1014        /* temp1 - temp4: values */
1015        for (i = 0; i < 4; i++) {
1016                data->block2[i] =
1017                        lm93_read_byte(client, LM93_REG_TEMP(i));
1018        }
1019
1020        /* prochot1 - prochot2: values */
1021        for (i = 0; i < 2; i++) {
1022                data->block4[i].cur =
1023                        lm93_read_byte(client, LM93_REG_PROCHOT_CUR(i));
1024                data->block4[i].avg =
1025                        lm93_read_byte(client, LM93_REG_PROCHOT_AVG(i));
1026        }
1027
1028        /* fan1 - fan4: values & limits */
1029        for (i = 0; i < 4; i++) {
1030                data->block5[i] =
1031                        lm93_read_word(client, LM93_REG_FAN(i));
1032                data->block8[i] =
1033                        lm93_read_word(client, LM93_REG_FAN_MIN(i));
1034        }
1035
1036        /* pwm control registers */
1037        for (i = 0; i < 2; i++) {
1038                for (j = 0; j < 4; j++) {
1039                        data->block9[i][j] =
1040                                lm93_read_byte(client, LM93_REG_PWM_CTL(i,j));
1041                }
1042        }
1043
1044        /* alarm values */
1045        for (i = 0, ptr = (u8 *)(&data->block1); i < 8; i++) {
1046                *(ptr + i) =
1047                        lm93_read_byte(client, LM93_REG_HOST_ERROR_1 + i);
1048        }
1049
1050        /* auto/pwm (base temp) registers */
1051        for (i = 0; i < 4; i++) {
1052                data->block10.base[i] =
1053                        lm93_read_byte(client, LM93_REG_TEMP_BASE(i));
1054        }
1055
1056        /* auto/pwm (offset temp) registers */
1057        for (i = 0; i < 12; i++) {
1058                data->block10.offset[i] =
1059                        lm93_read_byte(client, LM93_REG_TEMP_OFFSET(i));
1060        }
1061
1062        lm93_update_client_common(data, client);
1063}
1064
1065/* following are the sysfs callback functions */
1066static ssize_t show_in(struct device *dev, struct device_attribute *attr,
1067                        char *buf)
1068{
1069        int nr = (to_sensor_dev_attr(attr))->index;
1070
1071        struct lm93_data *data = lm93_update_device(dev);
1072        return sprintf(buf, "%d\n", LM93_IN_FROM_REG(nr, data->block3[nr]));
1073}
1074
1075static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, show_in, NULL, 0);
1076static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, show_in, NULL, 1);
1077static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, show_in, NULL, 2);
1078static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, show_in, NULL, 3);
1079static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, show_in, NULL, 4);
1080static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, show_in, NULL, 5);
1081static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, show_in, NULL, 6);
1082static SENSOR_DEVICE_ATTR(in8_input, S_IRUGO, show_in, NULL, 7);
1083static SENSOR_DEVICE_ATTR(in9_input, S_IRUGO, show_in, NULL, 8);
1084static SENSOR_DEVICE_ATTR(in10_input, S_IRUGO, show_in, NULL, 9);
1085static SENSOR_DEVICE_ATTR(in11_input, S_IRUGO, show_in, NULL, 10);
1086static SENSOR_DEVICE_ATTR(in12_input, S_IRUGO, show_in, NULL, 11);
1087static SENSOR_DEVICE_ATTR(in13_input, S_IRUGO, show_in, NULL, 12);
1088static SENSOR_DEVICE_ATTR(in14_input, S_IRUGO, show_in, NULL, 13);
1089static SENSOR_DEVICE_ATTR(in15_input, S_IRUGO, show_in, NULL, 14);
1090static SENSOR_DEVICE_ATTR(in16_input, S_IRUGO, show_in, NULL, 15);
1091
1092static ssize_t show_in_min(struct device *dev,
1093                        struct device_attribute *attr, char *buf)
1094{
1095        int nr = (to_sensor_dev_attr(attr))->index;
1096        struct lm93_data *data = lm93_update_device(dev);
1097        int vccp = nr - 6;
1098        long rc, vid;
1099
1100        if ((nr==6 || nr==7) && (vccp_limit_type[vccp])) {
1101                vid = LM93_VID_FROM_REG(data->vid[vccp]);
1102                rc = LM93_IN_MIN_FROM_REG(data->vccp_limits[vccp], vid);
1103        }
1104        else {
1105                rc = LM93_IN_FROM_REG(nr, data->block7[nr].min); \
1106        }
1107        return sprintf(buf, "%ld\n", rc); \
1108}
1109
1110static ssize_t store_in_min(struct device *dev, struct device_attribute *attr,
1111                            const char *buf, size_t count)
1112{
1113        int nr = (to_sensor_dev_attr(attr))->index;
1114        struct i2c_client *client = to_i2c_client(dev);
1115        struct lm93_data *data = i2c_get_clientdata(client);
1116        u32 val = simple_strtoul(buf, NULL, 10);
1117        int vccp = nr - 6;
1118        long vid;
1119
1120        mutex_lock(&data->update_lock);
1121        if ((nr==6 || nr==7) && (vccp_limit_type[vccp])) {
1122                vid = LM93_VID_FROM_REG(data->vid[vccp]);
1123                data->vccp_limits[vccp] = (data->vccp_limits[vccp] & 0xf0) |
1124                                LM93_IN_REL_TO_REG(val, 0, vid);
1125                lm93_write_byte(client, LM93_REG_VCCP_LIMIT_OFF(vccp),
1126                                data->vccp_limits[vccp]);
1127        }
1128        else {
1129                data->block7[nr].min = LM93_IN_TO_REG(nr,val);
1130                lm93_write_byte(client, LM93_REG_IN_MIN(nr),
1131                                data->block7[nr].min);
1132        }
1133        mutex_unlock(&data->update_lock);
1134        return count;
1135}
1136
1137static SENSOR_DEVICE_ATTR(in1_min, S_IWUSR | S_IRUGO,
1138                          show_in_min, store_in_min, 0);
1139static SENSOR_DEVICE_ATTR(in2_min, S_IWUSR | S_IRUGO,
1140                          show_in_min, store_in_min, 1);
1141static SENSOR_DEVICE_ATTR(in3_min, S_IWUSR | S_IRUGO,
1142                          show_in_min, store_in_min, 2);
1143static SENSOR_DEVICE_ATTR(in4_min, S_IWUSR | S_IRUGO,
1144                          show_in_min, store_in_min, 3);
1145static SENSOR_DEVICE_ATTR(in5_min, S_IWUSR | S_IRUGO,
1146                          show_in_min, store_in_min, 4);
1147static SENSOR_DEVICE_ATTR(in6_min, S_IWUSR | S_IRUGO,
1148                          show_in_min, store_in_min, 5);
1149static SENSOR_DEVICE_ATTR(in7_min, S_IWUSR | S_IRUGO,
1150                          show_in_min, store_in_min, 6);
1151static SENSOR_DEVICE_ATTR(in8_min, S_IWUSR | S_IRUGO,
1152                          show_in_min, store_in_min, 7);
1153static SENSOR_DEVICE_ATTR(in9_min, S_IWUSR | S_IRUGO,
1154                          show_in_min, store_in_min, 8);
1155static SENSOR_DEVICE_ATTR(in10_min, S_IWUSR | S_IRUGO,
1156                          show_in_min, store_in_min, 9);
1157static SENSOR_DEVICE_ATTR(in11_min, S_IWUSR | S_IRUGO,
1158                          show_in_min, store_in_min, 10);
1159static SENSOR_DEVICE_ATTR(in12_min, S_IWUSR | S_IRUGO,
1160                          show_in_min, store_in_min, 11);
1161static SENSOR_DEVICE_ATTR(in13_min, S_IWUSR | S_IRUGO,
1162                          show_in_min, store_in_min, 12);
1163static SENSOR_DEVICE_ATTR(in14_min, S_IWUSR | S_IRUGO,
1164                          show_in_min, store_in_min, 13);
1165static SENSOR_DEVICE_ATTR(in15_min, S_IWUSR | S_IRUGO,
1166                          show_in_min, store_in_min, 14);
1167static SENSOR_DEVICE_ATTR(in16_min, S_IWUSR | S_IRUGO,
1168                          show_in_min, store_in_min, 15);
1169
1170static ssize_t show_in_max(struct device *dev,
1171                           struct device_attribute *attr, char *buf)
1172{
1173        int nr = (to_sensor_dev_attr(attr))->index;
1174        struct lm93_data *data = lm93_update_device(dev);
1175        int vccp = nr - 6;
1176        long rc, vid;
1177
1178        if ((nr==6 || nr==7) && (vccp_limit_type[vccp])) {
1179                vid = LM93_VID_FROM_REG(data->vid[vccp]);
1180                rc = LM93_IN_MAX_FROM_REG(data->vccp_limits[vccp],vid);
1181        }
1182        else {
1183                rc = LM93_IN_FROM_REG(nr,data->block7[nr].max); \
1184        }
1185        return sprintf(buf,"%ld\n",rc); \
1186}
1187
1188static ssize_t store_in_max(struct device *dev, struct device_attribute *attr,
1189                            const char *buf, size_t count)
1190{
1191        int nr = (to_sensor_dev_attr(attr))->index;
1192        struct i2c_client *client = to_i2c_client(dev);
1193        struct lm93_data *data = i2c_get_clientdata(client);
1194        u32 val = simple_strtoul(buf, NULL, 10);
1195        int vccp = nr - 6;
1196        long vid;
1197
1198        mutex_lock(&data->update_lock);
1199        if ((nr==6 || nr==7) && (vccp_limit_type[vccp])) {
1200                vid = LM93_VID_FROM_REG(data->vid[vccp]);
1201                data->vccp_limits[vccp] = (data->vccp_limits[vccp] & 0x0f) |
1202                                LM93_IN_REL_TO_REG(val, 1, vid);
1203                lm93_write_byte(client, LM93_REG_VCCP_LIMIT_OFF(vccp),
1204                                data->vccp_limits[vccp]);
1205        }
1206        else {
1207                data->block7[nr].max = LM93_IN_TO_REG(nr,val);
1208                lm93_write_byte(client, LM93_REG_IN_MAX(nr),
1209                                data->block7[nr].max);
1210        }
1211        mutex_unlock(&data->update_lock);
1212        return count;
1213}
1214
1215static SENSOR_DEVICE_ATTR(in1_max, S_IWUSR | S_IRUGO,
1216                          show_in_max, store_in_max, 0);
1217static SENSOR_DEVICE_ATTR(in2_max, S_IWUSR | S_IRUGO,
1218                          show_in_max, store_in_max, 1);
1219static SENSOR_DEVICE_ATTR(in3_max, S_IWUSR | S_IRUGO,
1220                          show_in_max, store_in_max, 2);
1221static SENSOR_DEVICE_ATTR(in4_max, S_IWUSR | S_IRUGO,
1222                          show_in_max, store_in_max, 3);
1223static SENSOR_DEVICE_ATTR(in5_max, S_IWUSR | S_IRUGO,
1224                          show_in_max, store_in_max, 4);
1225static SENSOR_DEVICE_ATTR(in6_max, S_IWUSR | S_IRUGO,
1226                          show_in_max, store_in_max, 5);
1227static SENSOR_DEVICE_ATTR(in7_max, S_IWUSR | S_IRUGO,
1228                          show_in_max, store_in_max, 6);
1229static SENSOR_DEVICE_ATTR(in8_max, S_IWUSR | S_IRUGO,
1230                          show_in_max, store_in_max, 7);
1231static SENSOR_DEVICE_ATTR(in9_max, S_IWUSR | S_IRUGO,
1232                          show_in_max, store_in_max, 8);
1233static SENSOR_DEVICE_ATTR(in10_max, S_IWUSR | S_IRUGO,
1234                          show_in_max, store_in_max, 9);
1235static SENSOR_DEVICE_ATTR(in11_max, S_IWUSR | S_IRUGO,
1236                          show_in_max, store_in_max, 10);
1237static SENSOR_DEVICE_ATTR(in12_max, S_IWUSR | S_IRUGO,
1238                          show_in_max, store_in_max, 11);
1239static SENSOR_DEVICE_ATTR(in13_max, S_IWUSR | S_IRUGO,
1240                          show_in_max, store_in_max, 12);
1241static SENSOR_DEVICE_ATTR(in14_max, S_IWUSR | S_IRUGO,
1242                          show_in_max, store_in_max, 13);
1243static SENSOR_DEVICE_ATTR(in15_max, S_IWUSR | S_IRUGO,
1244                          show_in_max, store_in_max, 14);
1245static SENSOR_DEVICE_ATTR(in16_max, S_IWUSR | S_IRUGO,
1246                          show_in_max, store_in_max, 15);
1247
1248static ssize_t show_temp(struct device *dev,
1249                         struct device_attribute *attr, char *buf)
1250{
1251        int nr = (to_sensor_dev_attr(attr))->index;
1252        struct lm93_data *data = lm93_update_device(dev);
1253        return sprintf(buf,"%d\n",LM93_TEMP_FROM_REG(data->block2[nr]));
1254}
1255
1256static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);
1257static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1);
1258static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2);
1259
1260static ssize_t show_temp_min(struct device *dev,
1261                                struct device_attribute *attr, char *buf)
1262{
1263        int nr = (to_sensor_dev_attr(attr))->index;
1264        struct lm93_data *data = lm93_update_device(dev);
1265        return sprintf(buf,"%d\n",LM93_TEMP_FROM_REG(data->temp_lim[nr].min));
1266}
1267
1268static ssize_t store_temp_min(struct device *dev, struct device_attribute *attr,
1269                              const char *buf, size_t count)
1270{
1271        int nr = (to_sensor_dev_attr(attr))->index;
1272        struct i2c_client *client = to_i2c_client(dev);
1273        struct lm93_data *data = i2c_get_clientdata(client);
1274        long val = simple_strtol(buf, NULL, 10);
1275
1276        mutex_lock(&data->update_lock);
1277        data->temp_lim[nr].min = LM93_TEMP_TO_REG(val);
1278        lm93_write_byte(client, LM93_REG_TEMP_MIN(nr), data->temp_lim[nr].min);
1279        mutex_unlock(&data->update_lock);
1280        return count;
1281}
1282
1283static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO,
1284                          show_temp_min, store_temp_min, 0);
1285static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO,
1286                          show_temp_min, store_temp_min, 1);
1287static SENSOR_DEVICE_ATTR(temp3_min, S_IWUSR | S_IRUGO,
1288                          show_temp_min, store_temp_min, 2);
1289
1290static ssize_t show_temp_max(struct device *dev,
1291                             struct device_attribute *attr, char *buf)
1292{
1293        int nr = (to_sensor_dev_attr(attr))->index;
1294        struct lm93_data *data = lm93_update_device(dev);
1295        return sprintf(buf,"%d\n",LM93_TEMP_FROM_REG(data->temp_lim[nr].max));
1296}
1297
1298static ssize_t store_temp_max(struct device *dev, struct device_attribute *attr,
1299                              const char *buf, size_t count)
1300{
1301        int nr = (to_sensor_dev_attr(attr))->index;
1302        struct i2c_client *client = to_i2c_client(dev);
1303        struct lm93_data *data = i2c_get_clientdata(client);
1304        long val = simple_strtol(buf, NULL, 10);
1305
1306        mutex_lock(&data->update_lock);
1307        data->temp_lim[nr].max = LM93_TEMP_TO_REG(val);
1308        lm93_write_byte(client, LM93_REG_TEMP_MAX(nr), data->temp_lim[nr].max);
1309        mutex_unlock(&data->update_lock);
1310        return count;
1311}
1312
1313static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO,
1314                          show_temp_max, store_temp_max, 0);
1315static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO,
1316                          show_temp_max, store_temp_max, 1);
1317static SENSOR_DEVICE_ATTR(temp3_max, S_IWUSR | S_IRUGO,
1318                          show_temp_max, store_temp_max, 2);
1319
1320static ssize_t show_temp_auto_base(struct device *dev,
1321                                struct device_attribute *attr, char *buf)
1322{
1323        int nr = (to_sensor_dev_attr(attr))->index;
1324        struct lm93_data *data = lm93_update_device(dev);
1325        return sprintf(buf,"%d\n",LM93_TEMP_FROM_REG(data->block10.base[nr]));
1326}
1327
1328static ssize_t store_temp_auto_base(struct device *dev,
1329                                        struct device_attribute *attr,
1330                                        const char *buf, size_t count)
1331{
1332        int nr = (to_sensor_dev_attr(attr))->index;
1333        struct i2c_client *client = to_i2c_client(dev);
1334        struct lm93_data *data = i2c_get_clientdata(client);
1335        long val = simple_strtol(buf, NULL, 10);
1336
1337        mutex_lock(&data->update_lock);
1338        data->block10.base[nr] = LM93_TEMP_TO_REG(val);
1339        lm93_write_byte(client, LM93_REG_TEMP_BASE(nr), data->block10.base[nr]);
1340        mutex_unlock(&data->update_lock);
1341        return count;
1342}
1343
1344static SENSOR_DEVICE_ATTR(temp1_auto_base, S_IWUSR | S_IRUGO,
1345                          show_temp_auto_base, store_temp_auto_base, 0);
1346static SENSOR_DEVICE_ATTR(temp2_auto_base, S_IWUSR | S_IRUGO,
1347                          show_temp_auto_base, store_temp_auto_base, 1);
1348static SENSOR_DEVICE_ATTR(temp3_auto_base, S_IWUSR | S_IRUGO,
1349                          show_temp_auto_base, store_temp_auto_base, 2);
1350
1351static ssize_t show_temp_auto_boost(struct device *dev,
1352                                    struct device_attribute *attr,char *buf)
1353{
1354        int nr = (to_sensor_dev_attr(attr))->index;
1355        struct lm93_data *data = lm93_update_device(dev);
1356        return sprintf(buf,"%d\n",LM93_TEMP_FROM_REG(data->boost[nr]));
1357}
1358
1359static ssize_t store_temp_auto_boost(struct device *dev,
1360                                     struct device_attribute *attr,
1361                                     const char *buf, size_t count)
1362{
1363        int nr = (to_sensor_dev_attr(attr))->index;
1364        struct i2c_client *client = to_i2c_client(dev);
1365        struct lm93_data *data = i2c_get_clientdata(client);
1366        long val = simple_strtol(buf, NULL, 10);
1367
1368        mutex_lock(&data->update_lock);
1369        data->boost[nr] = LM93_TEMP_TO_REG(val);
1370        lm93_write_byte(client, LM93_REG_BOOST(nr), data->boost[nr]);
1371        mutex_unlock(&data->update_lock);
1372        return count;
1373}
1374
1375static SENSOR_DEVICE_ATTR(temp1_auto_boost, S_IWUSR | S_IRUGO,
1376                          show_temp_auto_boost, store_temp_auto_boost, 0);
1377static SENSOR_DEVICE_ATTR(temp2_auto_boost, S_IWUSR | S_IRUGO,
1378                          show_temp_auto_boost, store_temp_auto_boost, 1);
1379static SENSOR_DEVICE_ATTR(temp3_auto_boost, S_IWUSR | S_IRUGO,
1380                          show_temp_auto_boost, store_temp_auto_boost, 2);
1381
1382static ssize_t show_temp_auto_boost_hyst(struct device *dev,
1383                                         struct device_attribute *attr,
1384                                         char *buf)
1385{
1386        int nr = (to_sensor_dev_attr(attr))->index;
1387        struct lm93_data *data = lm93_update_device(dev);
1388        int mode = LM93_TEMP_OFFSET_MODE_FROM_REG(data->sfc2, nr);
1389        return sprintf(buf,"%d\n",
1390                       LM93_AUTO_BOOST_HYST_FROM_REGS(data, nr, mode));
1391}
1392
1393static ssize_t store_temp_auto_boost_hyst(struct device *dev,
1394                                          struct device_attribute *attr,
1395                                          const char *buf, size_t count)
1396{
1397        int nr = (to_sensor_dev_attr(attr))->index;
1398        struct i2c_client *client = to_i2c_client(dev);
1399        struct lm93_data *data = i2c_get_clientdata(client);
1400        u32 val = simple_strtoul(buf, NULL, 10);
1401
1402        mutex_lock(&data->update_lock);
1403        /* force 0.5C/bit mode */
1404        data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
1405        data->sfc2 |= ((nr < 2) ? 0x10 : 0x20);
1406        lm93_write_byte(client, LM93_REG_SFC2, data->sfc2);
1407        data->boost_hyst[nr/2] = LM93_AUTO_BOOST_HYST_TO_REG(data, val, nr, 1);
1408        lm93_write_byte(client, LM93_REG_BOOST_HYST(nr),
1409                        data->boost_hyst[nr/2]);
1410        mutex_unlock(&data->update_lock);
1411        return count;
1412}
1413
1414static SENSOR_DEVICE_ATTR(temp1_auto_boost_hyst, S_IWUSR | S_IRUGO,
1415                          show_temp_auto_boost_hyst,
1416                          store_temp_auto_boost_hyst, 0);
1417static SENSOR_DEVICE_ATTR(temp2_auto_boost_hyst, S_IWUSR | S_IRUGO,
1418                          show_temp_auto_boost_hyst,
1419                          store_temp_auto_boost_hyst, 1);
1420static SENSOR_DEVICE_ATTR(temp3_auto_boost_hyst, S_IWUSR | S_IRUGO,
1421                          show_temp_auto_boost_hyst,
1422                          store_temp_auto_boost_hyst, 2);
1423
1424static ssize_t show_temp_auto_offset(struct device *dev,
1425                                struct device_attribute *attr, char *buf)
1426{
1427        struct sensor_device_attribute_2 *s_attr = to_sensor_dev_attr_2(attr);
1428        int nr = s_attr->index;
1429        int ofs = s_attr->nr;
1430        struct lm93_data *data = lm93_update_device(dev);
1431        int mode = LM93_TEMP_OFFSET_MODE_FROM_REG(data->sfc2, nr);
1432        return sprintf(buf,"%d\n",
1433               LM93_TEMP_AUTO_OFFSET_FROM_REG(data->block10.offset[ofs],
1434                                              nr,mode));
1435}
1436
1437static ssize_t store_temp_auto_offset(struct device *dev,
1438                                        struct device_attribute *attr,
1439                                        const char *buf, size_t count)
1440{
1441        struct sensor_device_attribute_2 *s_attr = to_sensor_dev_attr_2(attr);
1442        int nr = s_attr->index;
1443        int ofs = s_attr->nr;
1444        struct i2c_client *client = to_i2c_client(dev);
1445        struct lm93_data *data = i2c_get_clientdata(client);
1446        u32 val = simple_strtoul(buf, NULL, 10);
1447
1448        mutex_lock(&data->update_lock);
1449        /* force 0.5C/bit mode */
1450        data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
1451        data->sfc2 |= ((nr < 2) ? 0x10 : 0x20);
1452        lm93_write_byte(client, LM93_REG_SFC2, data->sfc2);
1453        data->block10.offset[ofs] = LM93_TEMP_AUTO_OFFSET_TO_REG(
1454                        data->block10.offset[ofs], val, nr, 1);
1455        lm93_write_byte(client, LM93_REG_TEMP_OFFSET(ofs),
1456                        data->block10.offset[ofs]);
1457        mutex_unlock(&data->update_lock);
1458        return count;
1459}
1460
1461static SENSOR_DEVICE_ATTR_2(temp1_auto_offset1, S_IWUSR | S_IRUGO,
1462                          show_temp_auto_offset, store_temp_auto_offset, 0, 0);
1463static SENSOR_DEVICE_ATTR_2(temp1_auto_offset2, S_IWUSR | S_IRUGO,
1464                          show_temp_auto_offset, store_temp_auto_offset, 1, 0);
1465static SENSOR_DEVICE_ATTR_2(temp1_auto_offset3, S_IWUSR | S_IRUGO,
1466                          show_temp_auto_offset, store_temp_auto_offset, 2, 0);
1467static SENSOR_DEVICE_ATTR_2(temp1_auto_offset4, S_IWUSR | S_IRUGO,
1468                          show_temp_auto_offset, store_temp_auto_offset, 3, 0);
1469static SENSOR_DEVICE_ATTR_2(temp1_auto_offset5, S_IWUSR | S_IRUGO,
1470                          show_temp_auto_offset, store_temp_auto_offset, 4, 0);
1471static SENSOR_DEVICE_ATTR_2(temp1_auto_offset6, S_IWUSR | S_IRUGO,
1472                          show_temp_auto_offset, store_temp_auto_offset, 5, 0);
1473static SENSOR_DEVICE_ATTR_2(temp1_auto_offset7, S_IWUSR | S_IRUGO,
1474                          show_temp_auto_offset, store_temp_auto_offset, 6, 0);
1475static SENSOR_DEVICE_ATTR_2(temp1_auto_offset8, S_IWUSR | S_IRUGO,
1476                          show_temp_auto_offset, store_temp_auto_offset, 7, 0);
1477static SENSOR_DEVICE_ATTR_2(temp1_auto_offset9, S_IWUSR | S_IRUGO,
1478                          show_temp_auto_offset, store_temp_auto_offset, 8, 0);
1479static SENSOR_DEVICE_ATTR_2(temp1_auto_offset10, S_IWUSR | S_IRUGO,
1480                          show_temp_auto_offset, store_temp_auto_offset, 9, 0);
1481static SENSOR_DEVICE_ATTR_2(temp1_auto_offset11, S_IWUSR | S_IRUGO,
1482                          show_temp_auto_offset, store_temp_auto_offset, 10, 0);
1483static SENSOR_DEVICE_ATTR_2(temp1_auto_offset12, S_IWUSR | S_IRUGO,
1484                          show_temp_auto_offset, store_temp_auto_offset, 11, 0);
1485static SENSOR_DEVICE_ATTR_2(temp2_auto_offset1, S_IWUSR | S_IRUGO,
1486                          show_temp_auto_offset, store_temp_auto_offset, 0, 1);
1487static SENSOR_DEVICE_ATTR_2(temp2_auto_offset2, S_IWUSR | S_IRUGO,
1488                          show_temp_auto_offset, store_temp_auto_offset, 1, 1);
1489static SENSOR_DEVICE_ATTR_2(temp2_auto_offset3, S_IWUSR | S_IRUGO,
1490                          show_temp_auto_offset, store_temp_auto_offset, 2, 1);
1491static SENSOR_DEVICE_ATTR_2(temp2_auto_offset4, S_IWUSR | S_IRUGO,
1492                          show_temp_auto_offset, store_temp_auto_offset, 3, 1);
1493static SENSOR_DEVICE_ATTR_2(temp2_auto_offset5, S_IWUSR | S_IRUGO,
1494                          show_temp_auto_offset, store_temp_auto_offset, 4, 1);
1495static SENSOR_DEVICE_ATTR_2(temp2_auto_offset6, S_IWUSR | S_IRUGO,
1496                          show_temp_auto_offset, store_temp_auto_offset, 5, 1);
1497static SENSOR_DEVICE_ATTR_2(temp2_auto_offset7, S_IWUSR | S_IRUGO,
1498                          show_temp_auto_offset, store_temp_auto_offset, 6, 1);
1499static SENSOR_DEVICE_ATTR_2(temp2_auto_offset8, S_IWUSR | S_IRUGO,
1500                          show_temp_auto_offset, store_temp_auto_offset, 7, 1);
1501static SENSOR_DEVICE_ATTR_2(temp2_auto_offset9, S_IWUSR | S_IRUGO,
1502                          show_temp_auto_offset, store_temp_auto_offset, 8, 1);
1503static SENSOR_DEVICE_ATTR_2(temp2_auto_offset10, S_IWUSR | S_IRUGO,
1504                          show_temp_auto_offset, store_temp_auto_offset, 9, 1);
1505static SENSOR_DEVICE_ATTR_2(temp2_auto_offset11, S_IWUSR | S_IRUGO,
1506                          show_temp_auto_offset, store_temp_auto_offset, 10, 1);
1507static SENSOR_DEVICE_ATTR_2(temp2_auto_offset12, S_IWUSR | S_IRUGO,
1508                          show_temp_auto_offset, store_temp_auto_offset, 11, 1);
1509static SENSOR_DEVICE_ATTR_2(temp3_auto_offset1, S_IWUSR | S_IRUGO,
1510                          show_temp_auto_offset, store_temp_auto_offset, 0, 2);
1511static SENSOR_DEVICE_ATTR_2(temp3_auto_offset2, S_IWUSR | S_IRUGO,
1512                          show_temp_auto_offset, store_temp_auto_offset, 1, 2);
1513static SENSOR_DEVICE_ATTR_2(temp3_auto_offset3, S_IWUSR | S_IRUGO,
1514                          show_temp_auto_offset, store_temp_auto_offset, 2, 2);
1515static SENSOR_DEVICE_ATTR_2(temp3_auto_offset4, S_IWUSR | S_IRUGO,
1516                          show_temp_auto_offset, store_temp_auto_offset, 3, 2);
1517static SENSOR_DEVICE_ATTR_2(temp3_auto_offset5, S_IWUSR | S_IRUGO,
1518                          show_temp_auto_offset, store_temp_auto_offset, 4, 2);
1519static SENSOR_DEVICE_ATTR_2(temp3_auto_offset6, S_IWUSR | S_IRUGO,
1520                          show_temp_auto_offset, store_temp_auto_offset, 5, 2);
1521static SENSOR_DEVICE_ATTR_2(temp3_auto_offset7, S_IWUSR | S_IRUGO,
1522                          show_temp_auto_offset, store_temp_auto_offset, 6, 2);
1523static SENSOR_DEVICE_ATTR_2(temp3_auto_offset8, S_IWUSR | S_IRUGO,
1524                          show_temp_auto_offset, store_temp_auto_offset, 7, 2);
1525static SENSOR_DEVICE_ATTR_2(temp3_auto_offset9, S_IWUSR | S_IRUGO,
1526                          show_temp_auto_offset, store_temp_auto_offset, 8, 2);
1527static SENSOR_DEVICE_ATTR_2(temp3_auto_offset10, S_IWUSR | S_IRUGO,
1528                          show_temp_auto_offset, store_temp_auto_offset, 9, 2);
1529static SENSOR_DEVICE_ATTR_2(temp3_auto_offset11, S_IWUSR | S_IRUGO,
1530                          show_temp_auto_offset, store_temp_auto_offset, 10, 2);
1531static SENSOR_DEVICE_ATTR_2(temp3_auto_offset12, S_IWUSR | S_IRUGO,
1532                          show_temp_auto_offset, store_temp_auto_offset, 11, 2);
1533
1534static ssize_t show_temp_auto_pwm_min(struct device *dev,
1535                                struct device_attribute *attr, char *buf)
1536{
1537        int nr = (to_sensor_dev_attr(attr))->index;
1538        u8 reg, ctl4;
1539        struct lm93_data *data = lm93_update_device(dev);
1540        reg = data->auto_pwm_min_hyst[nr/2] >> 4 & 0x0f;
1541        ctl4 = data->block9[nr][LM93_PWM_CTL4];
1542        return sprintf(buf,"%d\n",LM93_PWM_FROM_REG(reg, (ctl4 & 0x07) ?
1543                                LM93_PWM_MAP_LO_FREQ : LM93_PWM_MAP_HI_FREQ));
1544}
1545
1546static ssize_t store_temp_auto_pwm_min(struct device *dev,
1547                                        struct device_attribute *attr,
1548                                        const char *buf, size_t count)
1549{
1550        int nr = (to_sensor_dev_attr(attr))->index;
1551        struct i2c_client *client = to_i2c_client(dev);
1552        struct lm93_data *data = i2c_get_clientdata(client);
1553        u32 val = simple_strtoul(buf, NULL, 10);
1554        u8 reg, ctl4;
1555
1556        mutex_lock(&data->update_lock);
1557        reg = lm93_read_byte(client, LM93_REG_PWM_MIN_HYST(nr));
1558        ctl4 = lm93_read_byte(client, LM93_REG_PWM_CTL(nr,LM93_PWM_CTL4));
1559        reg = (reg & 0x0f) |
1560                LM93_PWM_TO_REG(val, (ctl4 & 0x07) ?
1561                                LM93_PWM_MAP_LO_FREQ :
1562                                LM93_PWM_MAP_HI_FREQ) << 4;
1563        data->auto_pwm_min_hyst[nr/2] = reg;
1564        lm93_write_byte(client, LM93_REG_PWM_MIN_HYST(nr), reg);
1565        mutex_unlock(&data->update_lock);
1566        return count;
1567}
1568
1569static SENSOR_DEVICE_ATTR(temp1_auto_pwm_min, S_IWUSR | S_IRUGO,
1570                          show_temp_auto_pwm_min,
1571                          store_temp_auto_pwm_min, 0);
1572static SENSOR_DEVICE_ATTR(temp2_auto_pwm_min, S_IWUSR | S_IRUGO,
1573                          show_temp_auto_pwm_min,
1574                          store_temp_auto_pwm_min, 1);
1575static SENSOR_DEVICE_ATTR(temp3_auto_pwm_min, S_IWUSR | S_IRUGO,
1576                          show_temp_auto_pwm_min,
1577                          store_temp_auto_pwm_min, 2);
1578
1579static ssize_t show_temp_auto_offset_hyst(struct device *dev,
1580                                struct device_attribute *attr, char *buf)
1581{
1582        int nr = (to_sensor_dev_attr(attr))->index;
1583        struct lm93_data *data = lm93_update_device(dev);
1584        int mode = LM93_TEMP_OFFSET_MODE_FROM_REG(data->sfc2, nr);
1585        return sprintf(buf,"%d\n",LM93_TEMP_OFFSET_FROM_REG(
1586                                        data->auto_pwm_min_hyst[nr/2], mode));
1587}
1588
1589static ssize_t store_temp_auto_offset_hyst(struct device *dev,
1590                                                struct device_attribute *attr,
1591                                                const char *buf, size_t count)
1592{
1593        int nr = (to_sensor_dev_attr(attr))->index;
1594        struct i2c_client *client = to_i2c_client(dev);
1595        struct lm93_data *data = i2c_get_clientdata(client);
1596        u32 val = simple_strtoul(buf, NULL, 10);
1597        u8 reg;
1598
1599        mutex_lock(&data->update_lock);
1600        /* force 0.5C/bit mode */
1601        data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
1602        data->sfc2 |= ((nr < 2) ? 0x10 : 0x20);
1603        lm93_write_byte(client, LM93_REG_SFC2, data->sfc2);
1604        reg = data->auto_pwm_min_hyst[nr/2];
1605        reg = (reg & 0xf0) | (LM93_TEMP_OFFSET_TO_REG(val, 1) & 0x0f);
1606        data->auto_pwm_min_hyst[nr/2] = reg;
1607        lm93_write_byte(client, LM93_REG_PWM_MIN_HYST(nr), reg);
1608        mutex_unlock(&data->update_lock);
1609        return count;
1610}
1611
1612static SENSOR_DEVICE_ATTR(temp1_auto_offset_hyst, S_IWUSR | S_IRUGO,
1613                          show_temp_auto_offset_hyst,
1614                          store_temp_auto_offset_hyst, 0);
1615static SENSOR_DEVICE_ATTR(temp2_auto_offset_hyst, S_IWUSR | S_IRUGO,
1616                          show_temp_auto_offset_hyst,
1617                          store_temp_auto_offset_hyst, 1);
1618static SENSOR_DEVICE_ATTR(temp3_auto_offset_hyst, S_IWUSR | S_IRUGO,
1619                          show_temp_auto_offset_hyst,
1620                          store_temp_auto_offset_hyst, 2);
1621
1622static ssize_t show_fan_input(struct device *dev,
1623                struct device_attribute *attr, char *buf)
1624{
1625        struct sensor_device_attribute *s_attr = to_sensor_dev_attr(attr);
1626        int nr = s_attr->index;
1627        struct lm93_data *data = lm93_update_device(dev);
1628
1629        return sprintf(buf,"%d\n",LM93_FAN_FROM_REG(data->block5[nr]));
1630}
1631
1632static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan_input, NULL, 0);
1633static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan_input, NULL, 1);
1634static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan_input, NULL, 2);
1635static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan_input, NULL, 3);
1636
1637static ssize_t show_fan_min(struct device *dev,
1638                              struct device_attribute *attr, char *buf)
1639{
1640        int nr = (to_sensor_dev_attr(attr))->index;
1641        struct lm93_data *data = lm93_update_device(dev);
1642
1643        return sprintf(buf,"%d\n",LM93_FAN_FROM_REG(data->block8[nr]));
1644}
1645
1646static ssize_t store_fan_min(struct device *dev, struct device_attribute *attr,
1647                                const char *buf, size_t count)
1648{
1649        int nr = (to_sensor_dev_attr(attr))->index;
1650        struct i2c_client *client = to_i2c_client(dev);
1651        struct lm93_data *data = i2c_get_clientdata(client);
1652        u32 val = simple_strtoul(buf, NULL, 10);
1653
1654        mutex_lock(&data->update_lock);
1655        data->block8[nr] = LM93_FAN_TO_REG(val);
1656        lm93_write_word(client,LM93_REG_FAN_MIN(nr),data->block8[nr]);
1657        mutex_unlock(&data->update_lock);
1658        return count;
1659}
1660
1661static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO,
1662                          show_fan_min, store_fan_min, 0);
1663static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO,
1664                          show_fan_min, store_fan_min, 1);
1665static SENSOR_DEVICE_ATTR(fan3_min, S_IWUSR | S_IRUGO,
1666                          show_fan_min, store_fan_min, 2);
1667static SENSOR_DEVICE_ATTR(fan4_min, S_IWUSR | S_IRUGO,
1668                          show_fan_min, store_fan_min, 3);
1669
1670/* some tedious bit-twiddling here to deal with the register format:
1671
1672        data->sf_tach_to_pwm: (tach to pwm mapping bits)
1673
1674                bit |  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0
1675                     T4:P2 T4:P1 T3:P2 T3:P1 T2:P2 T2:P1 T1:P2 T1:P1
1676
1677        data->sfc2: (enable bits)
1678
1679                bit |  3  |  2  |  1  |  0
1680                       T4    T3    T2    T1
1681*/
1682
1683static ssize_t show_fan_smart_tach(struct device *dev,
1684                                struct device_attribute *attr, char *buf)
1685{
1686        int nr = (to_sensor_dev_attr(attr))->index;
1687        struct lm93_data *data = lm93_update_device(dev);
1688        long rc = 0;
1689        int mapping;
1690
1691        /* extract the relevant mapping */
1692        mapping = (data->sf_tach_to_pwm >> (nr * 2)) & 0x03;
1693
1694        /* if there's a mapping and it's enabled */
1695        if (mapping && ((data->sfc2 >> nr) & 0x01))
1696                rc = mapping;
1697        return sprintf(buf,"%ld\n",rc);
1698}
1699
1700/* helper function - must grab data->update_lock before calling
1701   fan is 0-3, indicating fan1-fan4 */
1702static void lm93_write_fan_smart_tach(struct i2c_client *client,
1703        struct lm93_data *data, int fan, long value)
1704{
1705        /* insert the new mapping and write it out */
1706        data->sf_tach_to_pwm = lm93_read_byte(client, LM93_REG_SF_TACH_TO_PWM);
1707        data->sf_tach_to_pwm &= ~(0x3 << fan * 2);
1708        data->sf_tach_to_pwm |= value << fan * 2;
1709        lm93_write_byte(client, LM93_REG_SF_TACH_TO_PWM, data->sf_tach_to_pwm);
1710
1711        /* insert the enable bit and write it out */
1712        data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
1713        if (value)
1714                data->sfc2 |= 1 << fan;
1715        else
1716                data->sfc2 &= ~(1 << fan);
1717        lm93_write_byte(client, LM93_REG_SFC2, data->sfc2);
1718}
1719
1720static ssize_t store_fan_smart_tach(struct device *dev,
1721                                        struct device_attribute *attr,
1722                                        const char *buf, size_t count)
1723{
1724        int nr = (to_sensor_dev_attr(attr))->index;
1725        struct i2c_client *client = to_i2c_client(dev);
1726        struct lm93_data *data = i2c_get_clientdata(client);
1727        u32 val = simple_strtoul(buf, NULL, 10);
1728
1729        mutex_lock(&data->update_lock);
1730        /* sanity test, ignore the write otherwise */
1731        if (0 <= val && val <= 2) {
1732                /* can't enable if pwm freq is 22.5KHz */
1733                if (val) {
1734                        u8 ctl4 = lm93_read_byte(client,
1735                                LM93_REG_PWM_CTL(val-1,LM93_PWM_CTL4));
1736                        if ((ctl4 & 0x07) == 0)
1737                                val = 0;
1738                }
1739                lm93_write_fan_smart_tach(client, data, nr, val);
1740        }
1741        mutex_unlock(&data->update_lock);
1742        return count;
1743}
1744
1745static SENSOR_DEVICE_ATTR(fan1_smart_tach, S_IWUSR | S_IRUGO,
1746                          show_fan_smart_tach, store_fan_smart_tach, 0);
1747static SENSOR_DEVICE_ATTR(fan2_smart_tach, S_IWUSR | S_IRUGO,
1748                          show_fan_smart_tach, store_fan_smart_tach, 1);
1749static SENSOR_DEVICE_ATTR(fan3_smart_tach, S_IWUSR | S_IRUGO,
1750                          show_fan_smart_tach, store_fan_smart_tach, 2);
1751static SENSOR_DEVICE_ATTR(fan4_smart_tach, S_IWUSR | S_IRUGO,
1752                          show_fan_smart_tach, store_fan_smart_tach, 3);
1753
1754static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,
1755                        char *buf)
1756{
1757        int nr = (to_sensor_dev_attr(attr))->index;
1758        struct lm93_data *data = lm93_update_device(dev);
1759        u8 ctl2, ctl4;
1760        long rc;
1761
1762        ctl2 = data->block9[nr][LM93_PWM_CTL2];
1763        ctl4 = data->block9[nr][LM93_PWM_CTL4];
1764        if (ctl2 & 0x01) /* show user commanded value if enabled */
1765                rc = data->pwm_override[nr];
1766        else /* show present h/w value if manual pwm disabled */
1767                rc = LM93_PWM_FROM_REG(ctl2 >> 4, (ctl4 & 0x07) ?
1768                        LM93_PWM_MAP_LO_FREQ : LM93_PWM_MAP_HI_FREQ);
1769        return sprintf(buf,"%ld\n",rc);
1770}
1771
1772static ssize_t store_pwm(struct device *dev, struct device_attribute *attr,
1773                                const char *buf, size_t count)
1774{
1775        int nr = (to_sensor_dev_attr(attr))->index;
1776        struct i2c_client *client = to_i2c_client(dev);
1777        struct lm93_data *data = i2c_get_clientdata(client);
1778        u32 val = simple_strtoul(buf, NULL, 10);
1779        u8 ctl2, ctl4;
1780
1781        mutex_lock(&data->update_lock);
1782        ctl2 = lm93_read_byte(client,LM93_REG_PWM_CTL(nr,LM93_PWM_CTL2));
1783        ctl4 = lm93_read_byte(client, LM93_REG_PWM_CTL(nr,LM93_PWM_CTL4));
1784        ctl2 = (ctl2 & 0x0f) | LM93_PWM_TO_REG(val,(ctl4 & 0x07) ?
1785                        LM93_PWM_MAP_LO_FREQ : LM93_PWM_MAP_HI_FREQ) << 4;
1786        /* save user commanded value */
1787        data->pwm_override[nr] = LM93_PWM_FROM_REG(ctl2 >> 4,
1788                        (ctl4 & 0x07) ?  LM93_PWM_MAP_LO_FREQ :
1789                        LM93_PWM_MAP_HI_FREQ);
1790        lm93_write_byte(client,LM93_REG_PWM_CTL(nr,LM93_PWM_CTL2),ctl2);
1791        mutex_unlock(&data->update_lock);
1792        return count;
1793}
1794
1795static SENSOR_DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 0);
1796static SENSOR_DEVICE_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 1);
1797
1798static ssize_t show_pwm_enable(struct device *dev,
1799                                struct device_attribute *attr, char *buf)
1800{
1801        int nr = (to_sensor_dev_attr(attr))->index;
1802        struct lm93_data *data = lm93_update_device(dev);
1803        u8 ctl2;
1804        long rc;
1805
1806        ctl2 = data->block9[nr][LM93_PWM_CTL2];
1807        if (ctl2 & 0x01) /* manual override enabled ? */
1808                rc = ((ctl2 & 0xF0) == 0xF0) ? 0 : 1;
1809        else
1810                rc = 2;
1811        return sprintf(buf,"%ld\n",rc);
1812}
1813
1814static ssize_t store_pwm_enable(struct device *dev,
1815                                struct device_attribute *attr,
1816                                const char *buf, size_t count)
1817{
1818        int nr = (to_sensor_dev_attr(attr))->index;
1819        struct i2c_client *client = to_i2c_client(dev);
1820        struct lm93_data *data = i2c_get_clientdata(client);
1821        u32 val = simple_strtoul(buf, NULL, 10);
1822        u8 ctl2;
1823
1824        mutex_lock(&data->update_lock);
1825        ctl2 = lm93_read_byte(client,LM93_REG_PWM_CTL(nr,LM93_PWM_CTL2));
1826
1827        switch (val) {
1828        case 0:
1829                ctl2 |= 0xF1; /* enable manual override, set PWM to max */
1830                break;
1831        case 1: ctl2 |= 0x01; /* enable manual override */
1832                break;
1833        case 2: ctl2 &= ~0x01; /* disable manual override */
1834                break;
1835        default:
1836                mutex_unlock(&data->update_lock);
1837                return -EINVAL;
1838        }
1839
1840        lm93_write_byte(client,LM93_REG_PWM_CTL(nr,LM93_PWM_CTL2),ctl2);
1841        mutex_unlock(&data->update_lock);
1842        return count;
1843}
1844
1845static SENSOR_DEVICE_ATTR(pwm1_enable, S_IWUSR | S_IRUGO,
1846                                show_pwm_enable, store_pwm_enable, 0);
1847static SENSOR_DEVICE_ATTR(pwm2_enable, S_IWUSR | S_IRUGO,
1848                                show_pwm_enable, store_pwm_enable, 1);
1849
1850static ssize_t show_pwm_freq(struct device *dev, struct device_attribute *attr,
1851                                char *buf)
1852{
1853        int nr = (to_sensor_dev_attr(attr))->index;
1854        struct lm93_data *data = lm93_update_device(dev);
1855        u8 ctl4;
1856
1857        ctl4 = data->block9[nr][LM93_PWM_CTL4];
1858        return sprintf(buf,"%d\n",LM93_PWM_FREQ_FROM_REG(ctl4));
1859}
1860
1861/* helper function - must grab data->update_lock before calling
1862   pwm is 0-1, indicating pwm1-pwm2
1863   this disables smart tach for all tach channels bound to the given pwm */
1864static void lm93_disable_fan_smart_tach(struct i2c_client *client,
1865        struct lm93_data *data, int pwm)
1866{
1867        int mapping = lm93_read_byte(client, LM93_REG_SF_TACH_TO_PWM);
1868        int mask;
1869
1870        /* collapse the mapping into a mask of enable bits */
1871        mapping = (mapping >> pwm) & 0x55;
1872        mask = mapping & 0x01;
1873        mask |= (mapping & 0x04) >> 1;
1874        mask |= (mapping & 0x10) >> 2;
1875        mask |= (mapping & 0x40) >> 3;
1876
1877        /* disable smart tach according to the mask */
1878        data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
1879        data->sfc2 &= ~mask;
1880        lm93_write_byte(client, LM93_REG_SFC2, data->sfc2);
1881}
1882
1883static ssize_t store_pwm_freq(struct device *dev,
1884                                struct device_attribute *attr,
1885                                const char *buf, size_t count)
1886{
1887        int nr = (to_sensor_dev_attr(attr))->index;
1888        struct i2c_client *client = to_i2c_client(dev);
1889        struct lm93_data *data = i2c_get_clientdata(client);
1890        u32 val = simple_strtoul(buf, NULL, 10);
1891        u8 ctl4;
1892
1893        mutex_lock(&data->update_lock);
1894        ctl4 = lm93_read_byte(client,LM93_REG_PWM_CTL(nr,LM93_PWM_CTL4));
1895        ctl4 = (ctl4 & 0xf8) | LM93_PWM_FREQ_TO_REG(val);
1896        data->block9[nr][LM93_PWM_CTL4] = ctl4;
1897        /* ctl4 == 0 -> 22.5KHz -> disable smart tach */
1898        if (!ctl4)
1899                lm93_disable_fan_smart_tach(client, data, nr);
1900        lm93_write_byte(client, LM93_REG_PWM_CTL(nr,LM93_PWM_CTL4), ctl4);
1901        mutex_unlock(&data->update_lock);
1902        return count;
1903}
1904
1905static SENSOR_DEVICE_ATTR(pwm1_freq, S_IWUSR | S_IRUGO,
1906                          show_pwm_freq, store_pwm_freq, 0);
1907static SENSOR_DEVICE_ATTR(pwm2_freq, S_IWUSR | S_IRUGO,
1908                          show_pwm_freq, store_pwm_freq, 1);
1909
1910static ssize_t show_pwm_auto_channels(struct device *dev,
1911                                struct device_attribute *attr, char *buf)
1912{
1913        int nr = (to_sensor_dev_attr(attr))->index;
1914        struct lm93_data *data = lm93_update_device(dev);
1915        return sprintf(buf,"%d\n",data->block9[nr][LM93_PWM_CTL1]);
1916}
1917
1918static ssize_t store_pwm_auto_channels(struct device *dev,
1919                                        struct device_attribute *attr,
1920                                        const char *buf, size_t count)
1921{
1922        int nr = (to_sensor_dev_attr(attr))->index;
1923        struct i2c_client *client = to_i2c_client(dev);
1924        struct lm93_data *data = i2c_get_clientdata(client);
1925        u32 val = simple_strtoul(buf, NULL, 10);
1926
1927        mutex_lock(&data->update_lock);
1928        data->block9[nr][LM93_PWM_CTL1] = SENSORS_LIMIT(val, 0, 255);
1929        lm93_write_byte(client, LM93_REG_PWM_CTL(nr,LM93_PWM_CTL1),
1930                                data->block9[nr][LM93_PWM_CTL1]);
1931        mutex_unlock(&data->update_lock);
1932        return count;
1933}
1934
1935static SENSOR_DEVICE_ATTR(pwm1_auto_channels, S_IWUSR | S_IRUGO,
1936                          show_pwm_auto_channels, store_pwm_auto_channels, 0);
1937static SENSOR_DEVICE_ATTR(pwm2_auto_channels, S_IWUSR | S_IRUGO,
1938                          show_pwm_auto_channels, store_pwm_auto_channels, 1);
1939
1940static ssize_t show_pwm_auto_spinup_min(struct device *dev,
1941                                struct device_attribute *attr,char *buf)
1942{
1943        int nr = (to_sensor_dev_attr(attr))->index;
1944        struct lm93_data *data = lm93_update_device(dev);
1945        u8 ctl3, ctl4;
1946
1947        ctl3 = data->block9[nr][LM93_PWM_CTL3];
1948        ctl4 = data->block9[nr][LM93_PWM_CTL4];
1949        return sprintf(buf,"%d\n",
1950                       LM93_PWM_FROM_REG(ctl3 & 0x0f, (ctl4 & 0x07) ?
1951                        LM93_PWM_MAP_LO_FREQ : LM93_PWM_MAP_HI_FREQ));
1952}
1953
1954static ssize_t store_pwm_auto_spinup_min(struct device *dev,
1955                                                struct device_attribute *attr,
1956                                                const char *buf, size_t count)
1957{
1958        int nr = (to_sensor_dev_attr(attr))->index;
1959        struct i2c_client *client = to_i2c_client(dev);
1960        struct lm93_data *data = i2c_get_clientdata(client);
1961        u32 val = simple_strtoul(buf, NULL, 10);
1962        u8 ctl3, ctl4;
1963
1964        mutex_lock(&data->update_lock);
1965        ctl3 = lm93_read_byte(client,LM93_REG_PWM_CTL(nr, LM93_PWM_CTL3));
1966        ctl4 = lm93_read_byte(client,LM93_REG_PWM_CTL(nr, LM93_PWM_CTL4));
1967        ctl3 = (ctl3 & 0xf0) |  LM93_PWM_TO_REG(val, (ctl4 & 0x07) ?
1968                        LM93_PWM_MAP_LO_FREQ :
1969                        LM93_PWM_MAP_HI_FREQ);
1970        data->block9[nr][LM93_PWM_CTL3] = ctl3;
1971        lm93_write_byte(client,LM93_REG_PWM_CTL(nr, LM93_PWM_CTL3), ctl3);
1972        mutex_unlock(&data->update_lock);
1973        return count;
1974}
1975
1976static SENSOR_DEVICE_ATTR(pwm1_auto_spinup_min, S_IWUSR | S_IRUGO,
1977                          show_pwm_auto_spinup_min,
1978                          store_pwm_auto_spinup_min, 0);
1979static SENSOR_DEVICE_ATTR(pwm2_auto_spinup_min, S_IWUSR | S_IRUGO,
1980                          show_pwm_auto_spinup_min,
1981                          store_pwm_auto_spinup_min, 1);
1982
1983static ssize_t show_pwm_auto_spinup_time(struct device *dev,
1984                                struct device_attribute *attr, char *buf)
1985{
1986        int nr = (to_sensor_dev_attr(attr))->index;
1987        struct lm93_data *data = lm93_update_device(dev);
1988        return sprintf(buf,"%d\n",LM93_SPINUP_TIME_FROM_REG(
1989                                data->block9[nr][LM93_PWM_CTL3]));
1990}
1991
1992static ssize_t store_pwm_auto_spinup_time(struct device *dev,
1993                                                struct device_attribute *attr,
1994                                                const char *buf, size_t count)
1995{
1996        int nr = (to_sensor_dev_attr(attr))->index;
1997        struct i2c_client *client = to_i2c_client(dev);
1998        struct lm93_data *data = i2c_get_clientdata(client);
1999        u32 val = simple_strtoul(buf, NULL, 10);
2000        u8 ctl3;
2001
2002        mutex_lock(&data->update_lock);
2003        ctl3 = lm93_read_byte(client,LM93_REG_PWM_CTL(nr, LM93_PWM_CTL3));
2004        ctl3 = (ctl3 & 0x1f) | (LM93_SPINUP_TIME_TO_REG(val) << 5 & 0xe0);
2005        data->block9[nr][LM93_PWM_CTL3] = ctl3;
2006        lm93_write_byte(client,LM93_REG_PWM_CTL(nr, LM93_PWM_CTL3), ctl3);
2007        mutex_unlock(&data->update_lock);
2008        return count;
2009}
2010
2011static SENSOR_DEVICE_ATTR(pwm1_auto_spinup_time, S_IWUSR | S_IRUGO,
2012                          show_pwm_auto_spinup_time,
2013                          store_pwm_auto_spinup_time, 0);
2014static SENSOR_DEVICE_ATTR(pwm2_auto_spinup_time, S_IWUSR | S_IRUGO,
2015                          show_pwm_auto_spinup_time,
2016                          store_pwm_auto_spinup_time, 1);
2017
2018static ssize_t show_pwm_auto_prochot_ramp(struct device *dev,
2019                                struct device_attribute *attr, char *buf)
2020{
2021        struct lm93_data *data = lm93_update_device(dev);
2022        return sprintf(buf,"%d\n",
2023                       LM93_RAMP_FROM_REG(data->pwm_ramp_ctl >> 4 & 0x0f));
2024}
2025
2026static ssize_t store_pwm_auto_prochot_ramp(struct device *dev,
2027                                                struct device_attribute *attr,
2028                                                const char *buf, size_t count)
2029{
2030        struct i2c_client *client = to_i2c_client(dev);
2031        struct lm93_data *data = i2c_get_clientdata(client);
2032        u32 val = simple_strtoul(buf, NULL, 10);
2033        u8 ramp;
2034
2035        mutex_lock(&data->update_lock);
2036        ramp = lm93_read_byte(client, LM93_REG_PWM_RAMP_CTL);
2037        ramp = (ramp & 0x0f) | (LM93_RAMP_TO_REG(val) << 4 & 0xf0);
2038        lm93_write_byte(client, LM93_REG_PWM_RAMP_CTL, ramp);
2039        mutex_unlock(&data->update_lock);
2040        return count;
2041}
2042
2043static DEVICE_ATTR(pwm_auto_prochot_ramp, S_IRUGO | S_IWUSR,
2044                        show_pwm_auto_prochot_ramp,
2045                        store_pwm_auto_prochot_ramp);
2046
2047static ssize_t show_pwm_auto_vrdhot_ramp(struct device *dev,
2048                                struct device_attribute *attr, char *buf)
2049{
2050        struct lm93_data *data = lm93_update_device(dev);
2051        return sprintf(buf,"%d\n",
2052                       LM93_RAMP_FROM_REG(data->pwm_ramp_ctl & 0x0f));
2053}
2054
2055static ssize_t store_pwm_auto_vrdhot_ramp(struct device *dev,
2056                                                struct device_attribute *attr,
2057                                                const char *buf, size_t count)
2058{
2059        struct i2c_client *client = to_i2c_client(dev);
2060        struct lm93_data *data = i2c_get_clientdata(client);
2061        u32 val = simple_strtoul(buf, NULL, 10);
2062        u8 ramp;
2063
2064        mutex_lock(&data->update_lock);
2065        ramp = lm93_read_byte(client, LM93_REG_PWM_RAMP_CTL);
2066        ramp = (ramp & 0xf0) | (LM93_RAMP_TO_REG(val) & 0x0f);
2067        lm93_write_byte(client, LM93_REG_PWM_RAMP_CTL, ramp);
2068        mutex_unlock(&data->update_lock);
2069        return 0;
2070}
2071
2072static DEVICE_ATTR(pwm_auto_vrdhot_ramp, S_IRUGO | S_IWUSR,
2073                        show_pwm_auto_vrdhot_ramp,
2074                        store_pwm_auto_vrdhot_ramp);
2075
2076static ssize_t show_vid(struct device *dev, struct device_attribute *attr,
2077                        char *buf)
2078{
2079        int nr = (to_sensor_dev_attr(attr))->index;
2080        struct lm93_data *data = lm93_update_device(dev);
2081        return sprintf(buf,"%d\n",LM93_VID_FROM_REG(data->vid[nr]));
2082}
2083
2084static SENSOR_DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL, 0);
2085static SENSOR_DEVICE_ATTR(cpu1_vid, S_IRUGO, show_vid, NULL, 1);
2086
2087static ssize_t show_prochot(struct device *dev, struct device_attribute *attr,
2088                                char *buf)
2089{
2090        int nr = (to_sensor_dev_attr(attr))->index;
2091        struct lm93_data *data = lm93_update_device(dev);
2092        return sprintf(buf,"%d\n",data->block4[nr].cur);
2093}
2094
2095static SENSOR_DEVICE_ATTR(prochot1, S_IRUGO, show_prochot, NULL, 0);
2096static SENSOR_DEVICE_ATTR(prochot2, S_IRUGO, show_prochot, NULL, 1);
2097
2098static ssize_t show_prochot_avg(struct device *dev,
2099                                struct device_attribute *attr, char *buf)
2100{
2101        int nr = (to_sensor_dev_attr(attr))->index;
2102        struct lm93_data *data = lm93_update_device(dev);
2103        return sprintf(buf,"%d\n",data->block4[nr].avg);
2104}
2105
2106static SENSOR_DEVICE_ATTR(prochot1_avg, S_IRUGO, show_prochot_avg, NULL, 0);
2107static SENSOR_DEVICE_ATTR(prochot2_avg, S_IRUGO, show_prochot_avg, NULL, 1);
2108
2109static ssize_t show_prochot_max(struct device *dev,
2110                                struct device_attribute *attr, char *buf)
2111{
2112        int nr = (to_sensor_dev_attr(attr))->index;
2113        struct lm93_data *data = lm93_update_device(dev);
2114        return sprintf(buf,"%d\n",data->prochot_max[nr]);
2115}
2116
2117static ssize_t store_prochot_max(struct device *dev,
2118                                        struct device_attribute *attr,
2119                                        const char *buf, size_t count)
2120{
2121        int nr = (to_sensor_dev_attr(attr))->index;
2122        struct i2c_client *client = to_i2c_client(dev);
2123        struct lm93_data *data = i2c_get_clientdata(client);
2124        u32 val = simple_strtoul(buf, NULL, 10);
2125
2126        mutex_lock(&data->update_lock);
2127        data->prochot_max[nr] = LM93_PROCHOT_TO_REG(val);
2128        lm93_write_byte(client, LM93_REG_PROCHOT_MAX(nr),
2129                        data->prochot_max[nr]);
2130        mutex_unlock(&data->update_lock);
2131        return count;
2132}
2133
2134static SENSOR_DEVICE_ATTR(prochot1_max, S_IWUSR | S_IRUGO,
2135                          show_prochot_max, store_prochot_max, 0);
2136static SENSOR_DEVICE_ATTR(prochot2_max, S_IWUSR | S_IRUGO,
2137                          show_prochot_max, store_prochot_max, 1);
2138
2139static const u8 prochot_override_mask[] = { 0x80, 0x40 };
2140
2141static ssize_t show_prochot_override(struct device *dev,
2142                                struct device_attribute *attr, char *buf)
2143{
2144        int nr = (to_sensor_dev_attr(attr))->index;
2145        struct lm93_data *data = lm93_update_device(dev);
2146        return sprintf(buf,"%d\n",
2147                (data->prochot_override & prochot_override_mask[nr]) ? 1 : 0);
2148}
2149
2150static ssize_t store_prochot_override(struct device *dev,
2151                                        struct device_attribute *attr,
2152                                        const char *buf, size_t count)
2153{
2154        int nr = (to_sensor_dev_attr(attr))->index;
2155        struct i2c_client *client = to_i2c_client(dev);
2156        struct lm93_data *data = i2c_get_clientdata(client);
2157        u32 val = simple_strtoul(buf, NULL, 10);
2158
2159        mutex_lock(&data->update_lock);
2160        if (val)
2161                data->prochot_override |= prochot_override_mask[nr];
2162        else
2163                data->prochot_override &= (~prochot_override_mask[nr]);
2164        lm93_write_byte(client, LM93_REG_PROCHOT_OVERRIDE,
2165                        data->prochot_override);
2166        mutex_unlock(&data->update_lock);
2167        return count;
2168}
2169
2170static SENSOR_DEVICE_ATTR(prochot1_override, S_IWUSR | S_IRUGO,
2171                          show_prochot_override, store_prochot_override, 0);
2172static SENSOR_DEVICE_ATTR(prochot2_override, S_IWUSR | S_IRUGO,
2173                          show_prochot_override, store_prochot_override, 1);
2174
2175static ssize_t show_prochot_interval(struct device *dev,
2176                                struct device_attribute *attr, char *buf)
2177{
2178        int nr = (to_sensor_dev_attr(attr))->index;
2179        struct lm93_data *data = lm93_update_device(dev);
2180        u8 tmp;
2181        if (nr==1)
2182                tmp = (data->prochot_interval & 0xf0) >> 4;
2183        else
2184                tmp = data->prochot_interval & 0x0f;
2185        return sprintf(buf,"%d\n",LM93_INTERVAL_FROM_REG(tmp));
2186}
2187
2188static ssize_t store_prochot_interval(struct device *dev,
2189                                        struct device_attribute *attr,
2190                                        const char *buf, size_t count)
2191{
2192        int nr = (to_sensor_dev_attr(attr))->index;
2193        struct i2c_client *client = to_i2c_client(dev);
2194        struct lm93_data *data = i2c_get_clientdata(client);
2195        u32 val = simple_strtoul(buf, NULL, 10);
2196        u8 tmp;
2197
2198        mutex_lock(&data->update_lock);
2199        tmp = lm93_read_byte(client, LM93_REG_PROCHOT_INTERVAL);
2200        if (nr==1)
2201                tmp = (tmp & 0x0f) | (LM93_INTERVAL_TO_REG(val) << 4);
2202        else
2203                tmp = (tmp & 0xf0) | LM93_INTERVAL_TO_REG(val);
2204        data->prochot_interval = tmp;
2205        lm93_write_byte(client, LM93_REG_PROCHOT_INTERVAL, tmp);
2206        mutex_unlock(&data->update_lock);
2207        return count;
2208}
2209
2210static SENSOR_DEVICE_ATTR(prochot1_interval, S_IWUSR | S_IRUGO,
2211                          show_prochot_interval, store_prochot_interval, 0);
2212static SENSOR_DEVICE_ATTR(prochot2_interval, S_IWUSR | S_IRUGO,
2213                          show_prochot_interval, store_prochot_interval, 1);
2214
2215static ssize_t show_prochot_override_duty_cycle(struct device *dev,
2216                                                struct device_attribute *attr,
2217                                                char *buf)
2218{
2219        struct lm93_data *data = lm93_update_device(dev);
2220        return sprintf(buf,"%d\n",data->prochot_override & 0x0f);
2221}
2222
2223static ssize_t store_prochot_override_duty_cycle(struct device *dev,
2224                                                struct device_attribute *attr,
2225                                                const char *buf, size_t count)
2226{
2227        struct i2c_client *client = to_i2c_client(dev);
2228        struct lm93_data *data = i2c_get_clientdata(client);
2229        u32 val = simple_strtoul(buf, NULL, 10);
2230
2231        mutex_lock(&data->update_lock);
2232        data->prochot_override = (data->prochot_override & 0xf0) |
2233                                        SENSORS_LIMIT(val, 0, 15);
2234        lm93_write_byte(client, LM93_REG_PROCHOT_OVERRIDE,
2235                        data->prochot_override);
2236        mutex_unlock(&data->update_lock);
2237        return count;
2238}
2239
2240static DEVICE_ATTR(prochot_override_duty_cycle, S_IRUGO | S_IWUSR,
2241                        show_prochot_override_duty_cycle,
2242                        store_prochot_override_duty_cycle);
2243
2244static ssize_t show_prochot_short(struct device *dev,
2245                                struct device_attribute *attr, char *buf)
2246{
2247        struct lm93_data *data = lm93_update_device(dev);
2248        return sprintf(buf,"%d\n",(data->config & 0x10) ? 1 : 0);
2249}
2250
2251static ssize_t store_prochot_short(struct device *dev,
2252                                        struct device_attribute *attr,
2253                                        const char *buf, size_t count)
2254{
2255        struct i2c_client *client = to_i2c_client(dev);
2256        struct lm93_data *data = i2c_get_clientdata(client);
2257        u32 val = simple_strtoul(buf, NULL, 10);
2258
2259        mutex_lock(&data->update_lock);
2260        if (val)
2261                data->config |= 0x10;
2262        else
2263                data->config &= ~0x10;
2264        lm93_write_byte(client, LM93_REG_CONFIG, data->config);
2265        mutex_unlock(&data->update_lock);
2266        return count;
2267}
2268
2269static DEVICE_ATTR(prochot_short, S_IRUGO | S_IWUSR,
2270                   show_prochot_short, store_prochot_short);
2271
2272static ssize_t show_vrdhot(struct device *dev, struct device_attribute *attr,
2273                                char *buf)
2274{
2275        int nr = (to_sensor_dev_attr(attr))->index;
2276        struct lm93_data *data = lm93_update_device(dev);
2277        return sprintf(buf,"%d\n",
2278                       data->block1.host_status_1 & (1 << (nr+4)) ? 1 : 0);
2279}
2280
2281static SENSOR_DEVICE_ATTR(vrdhot1, S_IRUGO, show_vrdhot, NULL, 0);
2282static SENSOR_DEVICE_ATTR(vrdhot2, S_IRUGO, show_vrdhot, NULL, 1);
2283
2284static ssize_t show_gpio(struct device *dev, struct device_attribute *attr,
2285                                char *buf)
2286{
2287        struct lm93_data *data = lm93_update_device(dev);
2288        return sprintf(buf,"%d\n",LM93_GPI_FROM_REG(data->gpi));
2289}
2290
2291static DEVICE_ATTR(gpio, S_IRUGO, show_gpio, NULL);
2292
2293static ssize_t show_alarms(struct device *dev, struct device_attribute *attr,
2294                                char *buf)
2295{
2296        struct lm93_data *data = lm93_update_device(dev);
2297        return sprintf(buf,"%d\n",LM93_ALARMS_FROM_REG(data->block1));
2298}
2299
2300static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
2301
2302static struct attribute *lm93_attrs[] = {
2303        &sensor_dev_attr_in1_input.dev_attr.attr,
2304        &sensor_dev_attr_in2_input.dev_attr.attr,
2305        &sensor_dev_attr_in3_input.dev_attr.attr,
2306        &sensor_dev_attr_in4_input.dev_attr.attr,
2307        &sensor_dev_attr_in5_input.dev_attr.attr,
2308        &sensor_dev_attr_in6_input.dev_attr.attr,
2309        &sensor_dev_attr_in7_input.dev_attr.attr,
2310        &sensor_dev_attr_in8_input.dev_attr.attr,
2311        &sensor_dev_attr_in9_input.dev_attr.attr,
2312        &sensor_dev_attr_in10_input.dev_attr.attr,
2313        &sensor_dev_attr_in11_input.dev_attr.attr,
2314        &sensor_dev_attr_in12_input.dev_attr.attr,
2315        &sensor_dev_attr_in13_input.dev_attr.attr,
2316        &sensor_dev_attr_in14_input.dev_attr.attr,
2317        &sensor_dev_attr_in15_input.dev_attr.attr,
2318        &sensor_dev_attr_in16_input.dev_attr.attr,
2319        &sensor_dev_attr_in1_min.dev_attr.attr,
2320        &sensor_dev_attr_in2_min.dev_attr.attr,
2321        &sensor_dev_attr_in3_min.dev_attr.attr,
2322        &sensor_dev_attr_in4_min.dev_attr.attr,
2323        &sensor_dev_attr_in5_min.dev_attr.attr,
2324        &sensor_dev_attr_in6_min.dev_attr.attr,
2325        &sensor_dev_attr_in7_min.dev_attr.attr,
2326        &sensor_dev_attr_in8_min.dev_attr.attr,
2327        &sensor_dev_attr_in9_min.dev_attr.attr,
2328        &sensor_dev_attr_in10_min.dev_attr.attr,
2329        &sensor_dev_attr_in11_min.dev_attr.attr,
2330        &sensor_dev_attr_in12_min.dev_attr.attr,
2331        &sensor_dev_attr_in13_min.dev_attr.attr,
2332        &sensor_dev_attr_in14_min.dev_attr.attr,
2333        &sensor_dev_attr_in15_min.dev_attr.attr,
2334        &sensor_dev_attr_in16_min.dev_attr.attr,
2335        &sensor_dev_attr_in1_max.dev_attr.attr,
2336        &sensor_dev_attr_in2_max.dev_attr.attr,
2337        &sensor_dev_attr_in3_max.dev_attr.attr,
2338        &sensor_dev_attr_in4_max.dev_attr.attr,
2339        &sensor_dev_attr_in5_max.dev_attr.attr,
2340        &sensor_dev_attr_in6_max.dev_attr.attr,
2341        &sensor_dev_attr_in7_max.dev_attr.attr,
2342        &sensor_dev_attr_in8_max.dev_attr.attr,
2343        &sensor_dev_attr_in9_max.dev_attr.attr,
2344        &sensor_dev_attr_in10_max.dev_attr.attr,
2345        &sensor_dev_attr_in11_max.dev_attr.attr,
2346        &sensor_dev_attr_in12_max.dev_attr.attr,
2347        &sensor_dev_attr_in13_max.dev_attr.attr,
2348        &sensor_dev_attr_in14_max.dev_attr.attr,
2349        &sensor_dev_attr_in15_max.dev_attr.attr,
2350        &sensor_dev_attr_in16_max.dev_attr.attr,
2351        &sensor_dev_attr_temp1_input.dev_attr.attr,
2352        &sensor_dev_attr_temp2_input.dev_attr.attr,
2353        &sensor_dev_attr_temp3_input.dev_attr.attr,
2354        &sensor_dev_attr_temp1_min.dev_attr.attr,
2355        &sensor_dev_attr_temp2_min.dev_attr.attr,
2356        &sensor_dev_attr_temp3_min.dev_attr.attr,
2357        &sensor_dev_attr_temp1_max.dev_attr.attr,
2358        &sensor_dev_attr_temp2_max.dev_attr.attr,
2359        &sensor_dev_attr_temp3_max.dev_attr.attr,
2360        &sensor_dev_attr_temp1_auto_base.dev_attr.attr,
2361        &sensor_dev_attr_temp2_auto_base.dev_attr.attr,
2362        &sensor_dev_attr_temp3_auto_base.dev_attr.attr,
2363        &sensor_dev_attr_temp1_auto_boost.dev_attr.attr,
2364        &sensor_dev_attr_temp2_auto_boost.dev_attr.attr,
2365        &sensor_dev_attr_temp3_auto_boost.dev_attr.attr,
2366        &sensor_dev_attr_temp1_auto_boost_hyst.dev_attr.attr,
2367        &sensor_dev_attr_temp2_auto_boost_hyst.dev_attr.attr,
2368        &sensor_dev_attr_temp3_auto_boost_hyst.dev_attr.attr,
2369        &sensor_dev_attr_temp1_auto_offset1.dev_attr.attr,
2370        &sensor_dev_attr_temp1_auto_offset2.dev_attr.attr,
2371        &sensor_dev_attr_temp1_auto_offset3.dev_attr.attr,
2372        &sensor_dev_attr_temp1_auto_offset4.dev_attr.attr,
2373        &sensor_dev_attr_temp1_auto_offset5.dev_attr.attr,
2374        &sensor_dev_attr_temp1_auto_offset6.dev_attr.attr,
2375        &sensor_dev_attr_temp1_auto_offset7.dev_attr.attr,
2376        &sensor_dev_attr_temp1_auto_offset8.dev_attr.attr,
2377        &sensor_dev_attr_temp1_auto_offset9.dev_attr.attr,
2378        &sensor_dev_attr_temp1_auto_offset10.dev_attr.attr,
2379        &sensor_dev_attr_temp1_auto_offset11.dev_attr.attr,
2380        &sensor_dev_attr_temp1_auto_offset12.dev_attr.attr,
2381        &sensor_dev_attr_temp2_auto_offset1.dev_attr.attr,
2382        &sensor_dev_attr_temp2_auto_offset2.dev_attr.attr,
2383        &sensor_dev_attr_temp2_auto_offset3.dev_attr.attr,
2384        &sensor_dev_attr_temp2_auto_offset4.dev_attr.attr,
2385        &sensor_dev_attr_temp2_auto_offset5.dev_attr.attr,
2386        &sensor_dev_attr_temp2_auto_offset6.dev_attr.attr,
2387        &sensor_dev_attr_temp2_auto_offset7.dev_attr.attr,
2388        &sensor_dev_attr_temp2_auto_offset8.dev_attr.attr,
2389        &sensor_dev_attr_temp2_auto_offset9.dev_attr.attr,
2390        &sensor_dev_attr_temp2_auto_offset10.dev_attr.attr,
2391        &sensor_dev_attr_temp2_auto_offset11.dev_attr.attr,
2392        &sensor_dev_attr_temp2_auto_offset12.dev_attr.attr,
2393        &sensor_dev_attr_temp3_auto_offset1.dev_attr.attr,
2394        &sensor_dev_attr_temp3_auto_offset2.dev_attr.attr,
2395        &sensor_dev_attr_temp3_auto_offset3.dev_attr.attr,
2396        &sensor_dev_attr_temp3_auto_offset4.dev_attr.attr,
2397        &sensor_dev_attr_temp3_auto_offset5.dev_attr.attr,
2398        &sensor_dev_attr_temp3_auto_offset6.dev_attr.attr,
2399        &sensor_dev_attr_temp3_auto_offset7.dev_attr.attr,
2400        &sensor_dev_attr_temp3_auto_offset8.dev_attr.attr,
2401        &sensor_dev_attr_temp3_auto_offset9.dev_attr.attr,
2402        &sensor_dev_attr_temp3_auto_offset10.dev_attr.attr,
2403        &sensor_dev_attr_temp3_auto_offset11.dev_attr.attr,
2404        &sensor_dev_attr_temp3_auto_offset12.dev_attr.attr,
2405        &sensor_dev_attr_temp1_auto_pwm_min.dev_attr.attr,
2406        &sensor_dev_attr_temp2_auto_pwm_min.dev_attr.attr,
2407        &sensor_dev_attr_temp3_auto_pwm_min.dev_attr.attr,
2408        &sensor_dev_attr_temp1_auto_offset_hyst.dev_attr.attr,
2409        &sensor_dev_attr_temp2_auto_offset_hyst.dev_attr.attr,
2410        &sensor_dev_attr_temp3_auto_offset_hyst.dev_attr.attr,
2411        &sensor_dev_attr_fan1_input.dev_attr.attr,
2412        &sensor_dev_attr_fan2_input.dev_attr.attr,
2413        &sensor_dev_attr_fan3_input.dev_attr.attr,
2414        &sensor_dev_attr_fan4_input.dev_attr.attr,
2415        &sensor_dev_attr_fan1_min.dev_attr.attr,
2416        &sensor_dev_attr_fan2_min.dev_attr.attr,
2417        &sensor_dev_attr_fan3_min.dev_attr.attr,
2418        &sensor_dev_attr_fan4_min.dev_attr.attr,
2419        &sensor_dev_attr_fan1_smart_tach.dev_attr.attr,
2420        &sensor_dev_attr_fan2_smart_tach.dev_attr.attr,
2421        &sensor_dev_attr_fan3_smart_tach.dev_attr.attr,
2422        &sensor_dev_attr_fan4_smart_tach.dev_attr.attr,
2423        &sensor_dev_attr_pwm1.dev_attr.attr,
2424        &sensor_dev_attr_pwm2.dev_attr.attr,
2425        &sensor_dev_attr_pwm1_enable.dev_attr.attr,
2426        &sensor_dev_attr_pwm2_enable.dev_attr.attr,
2427        &sensor_dev_attr_pwm1_freq.dev_attr.attr,
2428        &sensor_dev_attr_pwm2_freq.dev_attr.attr,
2429        &sensor_dev_attr_pwm1_auto_channels.dev_attr.attr,
2430        &sensor_dev_attr_pwm2_auto_channels.dev_attr.attr,
2431        &sensor_dev_attr_pwm1_auto_spinup_min.dev_attr.attr,
2432        &sensor_dev_attr_pwm2_auto_spinup_min.dev_attr.attr,
2433        &sensor_dev_attr_pwm1_auto_spinup_time.dev_attr.attr,
2434        &sensor_dev_attr_pwm2_auto_spinup_time.dev_attr.attr,
2435        &dev_attr_pwm_auto_prochot_ramp.attr,
2436        &dev_attr_pwm_auto_vrdhot_ramp.attr,
2437        &sensor_dev_attr_cpu0_vid.dev_attr.attr,
2438        &sensor_dev_attr_cpu1_vid.dev_attr.attr,
2439        &sensor_dev_attr_prochot1.dev_attr.attr,
2440        &sensor_dev_attr_prochot2.dev_attr.attr,
2441        &sensor_dev_attr_prochot1_avg.dev_attr.attr,
2442        &sensor_dev_attr_prochot2_avg.dev_attr.attr,
2443        &sensor_dev_attr_prochot1_max.dev_attr.attr,
2444        &sensor_dev_attr_prochot2_max.dev_attr.attr,
2445        &sensor_dev_attr_prochot1_override.dev_attr.attr,
2446        &sensor_dev_attr_prochot2_override.dev_attr.attr,
2447        &sensor_dev_attr_prochot1_interval.dev_attr.attr,
2448        &sensor_dev_attr_prochot2_interval.dev_attr.attr,
2449        &dev_attr_prochot_override_duty_cycle.attr,
2450        &dev_attr_prochot_short.attr,
2451        &sensor_dev_attr_vrdhot1.dev_attr.attr,
2452        &sensor_dev_attr_vrdhot2.dev_attr.attr,
2453        &dev_attr_gpio.attr,
2454        &dev_attr_alarms.attr,
2455        NULL
2456};
2457
2458static struct attribute_group lm93_attr_grp = {
2459        .attrs = lm93_attrs,
2460};
2461
2462static void lm93_init_client(struct i2c_client *client)
2463{
2464        int i;
2465        u8 reg;
2466
2467        /* configure VID pin input thresholds */
2468        reg = lm93_read_byte(client, LM93_REG_GPI_VID_CTL);
2469        lm93_write_byte(client, LM93_REG_GPI_VID_CTL,
2470                        reg | (vid_agtl ? 0x03 : 0x00));
2471
2472        if (init) {
2473                /* enable #ALERT pin */
2474                reg = lm93_read_byte(client, LM93_REG_CONFIG);
2475                lm93_write_byte(client, LM93_REG_CONFIG, reg | 0x08);
2476
2477                /* enable ASF mode for BMC status registers */
2478                reg = lm93_read_byte(client, LM93_REG_STATUS_CONTROL);
2479                lm93_write_byte(client, LM93_REG_STATUS_CONTROL, reg | 0x02);
2480
2481                /* set sleep state to S0 */
2482                lm93_write_byte(client, LM93_REG_SLEEP_CONTROL, 0);
2483
2484                /* unmask #VRDHOT and dynamic VCCP (if nec) error events */
2485                reg = lm93_read_byte(client, LM93_REG_MISC_ERR_MASK);
2486                reg &= ~0x03;
2487                reg &= ~(vccp_limit_type[0] ? 0x10 : 0);
2488                reg &= ~(vccp_limit_type[1] ? 0x20 : 0);
2489                lm93_write_byte(client, LM93_REG_MISC_ERR_MASK, reg);
2490        }
2491
2492        /* start monitoring */
2493        reg = lm93_read_byte(client, LM93_REG_CONFIG);
2494        lm93_write_byte(client, LM93_REG_CONFIG, reg | 0x01);
2495
2496        /* spin until ready */
2497        for (i=0; i<20; i++) {
2498                msleep(10);
2499                if ((lm93_read_byte(client, LM93_REG_CONFIG) & 0x80) == 0x80)
2500                        return;
2501        }
2502
2503        dev_warn(&client->dev,"timed out waiting for sensor "
2504                 "chip to signal ready!\n");
2505}
2506
2507/* Return 0 if detection is successful, -ENODEV otherwise */
2508static int lm93_detect(struct i2c_client *client, struct i2c_board_info *info)
2509{
2510        struct i2c_adapter *adapter = client->adapter;
2511        int mfr, ver;
2512        const char *name;
2513
2514        if (!i2c_check_functionality(adapter, LM93_SMBUS_FUNC_MIN))
2515                return -ENODEV;
2516
2517        /* detection */
2518        mfr = lm93_read_byte(client, LM93_REG_MFR_ID);
2519        if (mfr != 0x01) {
2520                dev_dbg(&adapter->dev,
2521                        "detect failed, bad manufacturer id 0x%02x!\n", mfr);
2522                return -ENODEV;
2523        }
2524
2525        ver = lm93_read_byte(client, LM93_REG_VER);
2526        switch (ver) {
2527        case LM93_MFR_ID:
2528        case LM93_MFR_ID_PROTOTYPE:
2529                name = "lm93";
2530                break;
2531        case LM94_MFR_ID_2:
2532        case LM94_MFR_ID:
2533        case LM94_MFR_ID_PROTOTYPE:
2534                name = "lm94";
2535                break;
2536        default:
2537                dev_dbg(&adapter->dev,
2538                        "detect failed, bad version id 0x%02x!\n", ver);
2539                return -ENODEV;
2540        }
2541
2542        strlcpy(info->type, name, I2C_NAME_SIZE);
2543        dev_dbg(&adapter->dev,"loading %s at %d,0x%02x\n",
2544                client->name, i2c_adapter_id(client->adapter),
2545                client->addr);
2546
2547        return 0;
2548}
2549
2550static int lm93_probe(struct i2c_client *client,
2551                      const struct i2c_device_id *id)
2552{
2553        struct lm93_data *data;
2554        int err, func;
2555        void (*update)(struct lm93_data *, struct i2c_client *);
2556
2557        /* choose update routine based on bus capabilities */
2558        func = i2c_get_functionality(client->adapter);
2559        if (((LM93_SMBUS_FUNC_FULL & func) == LM93_SMBUS_FUNC_FULL) &&
2560                        (!disable_block)) {
2561                dev_dbg(&client->dev, "using SMBus block data transactions\n");
2562                update = lm93_update_client_full;
2563        } else if ((LM93_SMBUS_FUNC_MIN & func) == LM93_SMBUS_FUNC_MIN) {
2564                dev_dbg(&client->dev, "disabled SMBus block data "
2565                        "transactions\n");
2566                update = lm93_update_client_min;
2567        } else {
2568                dev_dbg(&client->dev, "detect failed, "
2569                        "smbus byte and/or word data not supported!\n");
2570                err = -ENODEV;
2571                goto err_out;
2572        }
2573
2574        data = kzalloc(sizeof(struct lm93_data), GFP_KERNEL);
2575        if (!data) {
2576                dev_dbg(&client->dev, "out of memory!\n");
2577                err = -ENOMEM;
2578                goto err_out;
2579        }
2580        i2c_set_clientdata(client, data);
2581
2582        /* housekeeping */
2583        data->valid = 0;
2584        data->update = update;
2585        mutex_init(&data->update_lock);
2586
2587        /* initialize the chip */
2588        lm93_init_client(client);
2589
2590        err = sysfs_create_group(&client->dev.kobj, &lm93_attr_grp);
2591        if (err)
2592                goto err_free;
2593
2594        /* Register hwmon driver class */
2595        data->hwmon_dev = hwmon_device_register(&client->dev);
2596        if ( !IS_ERR(data->hwmon_dev))
2597                return 0;
2598
2599        err = PTR_ERR(data->hwmon_dev);
2600        dev_err(&client->dev, "error registering hwmon device.\n");
2601        sysfs_remove_group(&client->dev.kobj, &lm93_attr_grp);
2602err_free:
2603        kfree(data);
2604err_out:
2605        return err;
2606}
2607
2608static int lm93_remove(struct i2c_client *client)
2609{
2610        struct lm93_data *data = i2c_get_clientdata(client);
2611
2612        hwmon_device_unregister(data->hwmon_dev);
2613        sysfs_remove_group(&client->dev.kobj, &lm93_attr_grp);
2614
2615        kfree(data);
2616        return 0;
2617}
2618
2619static const struct i2c_device_id lm93_id[] = {
2620        { "lm93", 0 },
2621        { "lm94", 0 },
2622        { }
2623};
2624MODULE_DEVICE_TABLE(i2c, lm93_id);
2625
2626static struct i2c_driver lm93_driver = {
2627        .class          = I2C_CLASS_HWMON,
2628        .driver = {
2629                .name   = "lm93",
2630        },
2631        .probe          = lm93_probe,
2632        .remove         = lm93_remove,
2633        .id_table       = lm93_id,
2634        .detect         = lm93_detect,
2635        .address_list   = normal_i2c,
2636};
2637
2638static int __init lm93_init(void)
2639{
2640        return i2c_add_driver(&lm93_driver);
2641}
2642
2643static void __exit lm93_exit(void)
2644{
2645        i2c_del_driver(&lm93_driver);
2646}
2647
2648MODULE_AUTHOR("Mark M. Hoffman <mhoffman@lightlink.com>, "
2649                "Hans J. Koch <hjk@hansjkoch.de>");
2650MODULE_DESCRIPTION("LM93 driver");
2651MODULE_LICENSE("GPL");
2652
2653module_init(lm93_init);
2654module_exit(lm93_exit);
2655