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