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