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