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