i2c: Drop the kind parameter from detect callbacks
[safe/jmp/linux-2.6] / drivers / hwmon / w83793.c
1 /*
2     w83793.c - Linux kernel driver for hardware monitoring
3     Copyright (C) 2006 Winbond Electronics Corp.
4                   Yuan Mu
5                   Rudolf Marek <r.marek@assembler.cz>
6
7     This program is free software; you can redistribute it and/or modify
8     it under the terms of the GNU General Public License as published by
9     the Free Software Foundation - version 2.
10
11     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with this program; if not, write to the Free Software
18     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19     02110-1301 USA.
20 */
21
22 /*
23     Supports following chips:
24
25     Chip        #vin    #fanin  #pwm    #temp   wchipid vendid  i2c     ISA
26     w83793      10      12      8       6       0x7b    0x5ca3  yes     no
27 */
28
29 #include <linux/module.h>
30 #include <linux/init.h>
31 #include <linux/slab.h>
32 #include <linux/i2c.h>
33 #include <linux/hwmon.h>
34 #include <linux/hwmon-vid.h>
35 #include <linux/hwmon-sysfs.h>
36 #include <linux/err.h>
37 #include <linux/mutex.h>
38
39 /* Addresses to scan */
40 static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
41                                                 I2C_CLIENT_END };
42
43 /* Insmod parameters */
44 I2C_CLIENT_INSMOD_1(w83793);
45
46 static unsigned short force_subclients[4];
47 module_param_array(force_subclients, short, NULL, 0);
48 MODULE_PARM_DESC(force_subclients, "List of subclient addresses: "
49                        "{bus, clientaddr, subclientaddr1, subclientaddr2}");
50
51 static int reset;
52 module_param(reset, bool, 0);
53 MODULE_PARM_DESC(reset, "Set to 1 to reset chip, not recommended");
54
55 /*
56    Address 0x00, 0x0d, 0x0e, 0x0f in all three banks are reserved
57    as ID, Bank Select registers
58 */
59 #define W83793_REG_BANKSEL              0x00
60 #define W83793_REG_VENDORID             0x0d
61 #define W83793_REG_CHIPID               0x0e
62 #define W83793_REG_DEVICEID             0x0f
63
64 #define W83793_REG_CONFIG               0x40
65 #define W83793_REG_MFC                  0x58
66 #define W83793_REG_FANIN_CTRL           0x5c
67 #define W83793_REG_FANIN_SEL            0x5d
68 #define W83793_REG_I2C_ADDR             0x0b
69 #define W83793_REG_I2C_SUBADDR          0x0c
70 #define W83793_REG_VID_INA              0x05
71 #define W83793_REG_VID_INB              0x06
72 #define W83793_REG_VID_LATCHA           0x07
73 #define W83793_REG_VID_LATCHB           0x08
74 #define W83793_REG_VID_CTRL             0x59
75
76 static u16 W83793_REG_TEMP_MODE[2] = { 0x5e, 0x5f };
77
78 #define TEMP_READ       0
79 #define TEMP_CRIT       1
80 #define TEMP_CRIT_HYST  2
81 #define TEMP_WARN       3
82 #define TEMP_WARN_HYST  4
83 /* only crit and crit_hyst affect real-time alarm status
84    current crit crit_hyst warn warn_hyst */
85 static u16 W83793_REG_TEMP[][5] = {
86         {0x1c, 0x78, 0x79, 0x7a, 0x7b},
87         {0x1d, 0x7c, 0x7d, 0x7e, 0x7f},
88         {0x1e, 0x80, 0x81, 0x82, 0x83},
89         {0x1f, 0x84, 0x85, 0x86, 0x87},
90         {0x20, 0x88, 0x89, 0x8a, 0x8b},
91         {0x21, 0x8c, 0x8d, 0x8e, 0x8f},
92 };
93
94 #define W83793_REG_TEMP_LOW_BITS        0x22
95
96 #define W83793_REG_BEEP(index)          (0x53 + (index))
97 #define W83793_REG_ALARM(index)         (0x4b + (index))
98
99 #define W83793_REG_CLR_CHASSIS          0x4a    /* SMI MASK4 */
100 #define W83793_REG_IRQ_CTRL             0x50
101 #define W83793_REG_OVT_CTRL             0x51
102 #define W83793_REG_OVT_BEEP             0x52
103
104 #define IN_READ                         0
105 #define IN_MAX                          1
106 #define IN_LOW                          2
107 static const u16 W83793_REG_IN[][3] = {
108         /* Current, High, Low */
109         {0x10, 0x60, 0x61},     /* Vcore A      */
110         {0x11, 0x62, 0x63},     /* Vcore B      */
111         {0x12, 0x64, 0x65},     /* Vtt          */
112         {0x14, 0x6a, 0x6b},     /* VSEN1        */
113         {0x15, 0x6c, 0x6d},     /* VSEN2        */
114         {0x16, 0x6e, 0x6f},     /* +3VSEN       */
115         {0x17, 0x70, 0x71},     /* +12VSEN      */
116         {0x18, 0x72, 0x73},     /* 5VDD         */
117         {0x19, 0x74, 0x75},     /* 5VSB         */
118         {0x1a, 0x76, 0x77},     /* VBAT         */
119 };
120
121 /* Low Bits of Vcore A/B Vtt Read/High/Low */
122 static const u16 W83793_REG_IN_LOW_BITS[] = { 0x1b, 0x68, 0x69 };
123 static u8 scale_in[] = { 2, 2, 2, 16, 16, 16, 8, 24, 24, 16 };
124 static u8 scale_in_add[] = { 0, 0, 0, 0, 0, 0, 0, 150, 150, 0 };
125
126 #define W83793_REG_FAN(index)           (0x23 + 2 * (index))    /* High byte */
127 #define W83793_REG_FAN_MIN(index)       (0x90 + 2 * (index))    /* High byte */
128
129 #define W83793_REG_PWM_DEFAULT          0xb2
130 #define W83793_REG_PWM_ENABLE           0x207
131 #define W83793_REG_PWM_UPTIME           0xc3    /* Unit in 0.1 second */
132 #define W83793_REG_PWM_DOWNTIME         0xc4    /* Unit in 0.1 second */
133 #define W83793_REG_TEMP_CRITICAL        0xc5
134
135 #define PWM_DUTY                        0
136 #define PWM_START                       1
137 #define PWM_NONSTOP                     2
138 #define PWM_STOP_TIME                   3
139 #define W83793_REG_PWM(index, nr)       (((nr) == 0 ? 0xb3 : \
140                                          (nr) == 1 ? 0x220 : 0x218) + (index))
141
142 /* bit field, fan1 is bit0, fan2 is bit1 ... */
143 #define W83793_REG_TEMP_FAN_MAP(index)  (0x201 + (index))
144 #define W83793_REG_TEMP_TOL(index)      (0x208 + (index))
145 #define W83793_REG_TEMP_CRUISE(index)   (0x210 + (index))
146 #define W83793_REG_PWM_STOP_TIME(index) (0x228 + (index))
147 #define W83793_REG_SF2_TEMP(index, nr)  (0x230 + ((index) << 4) + (nr))
148 #define W83793_REG_SF2_PWM(index, nr)   (0x238 + ((index) << 4) + (nr))
149
150 static inline unsigned long FAN_FROM_REG(u16 val)
151 {
152         if ((val >= 0xfff) || (val == 0))
153                 return  0;
154         return (1350000UL / val);
155 }
156
157 static inline u16 FAN_TO_REG(long rpm)
158 {
159         if (rpm <= 0)
160                 return 0x0fff;
161         return SENSORS_LIMIT((1350000 + (rpm >> 1)) / rpm, 1, 0xffe);
162 }
163
164 static inline unsigned long TIME_FROM_REG(u8 reg)
165 {
166         return (reg * 100);
167 }
168
169 static inline u8 TIME_TO_REG(unsigned long val)
170 {
171         return SENSORS_LIMIT((val + 50) / 100, 0, 0xff);
172 }
173
174 static inline long TEMP_FROM_REG(s8 reg)
175 {
176         return (reg * 1000);
177 }
178
179 static inline s8 TEMP_TO_REG(long val, s8 min, s8 max)
180 {
181         return SENSORS_LIMIT((val + (val < 0 ? -500 : 500)) / 1000, min, max);
182 }
183
184 struct w83793_data {
185         struct i2c_client *lm75[2];
186         struct device *hwmon_dev;
187         struct mutex update_lock;
188         char valid;                     /* !=0 if following fields are valid */
189         unsigned long last_updated;     /* In jiffies */
190         unsigned long last_nonvolatile; /* In jiffies, last time we update the
191                                            nonvolatile registers */
192
193         u8 bank;
194         u8 vrm;
195         u8 vid[2];
196         u8 in[10][3];           /* Register value, read/high/low */
197         u8 in_low_bits[3];      /* Additional resolution for VCore A/B Vtt */
198
199         u16 has_fan;            /* Only fan1- fan5 has own pins */
200         u16 fan[12];            /* Register value combine */
201         u16 fan_min[12];        /* Register value combine */
202
203         s8 temp[6][5];          /* current, crit, crit_hyst,warn, warn_hyst */
204         u8 temp_low_bits;       /* Additional resolution TD1-TD4 */
205         u8 temp_mode[2];        /* byte 0: Temp D1-D4 mode each has 2 bits
206                                    byte 1: Temp R1,R2 mode, each has 1 bit */
207         u8 temp_critical;       /* If reached all fan will be at full speed */
208         u8 temp_fan_map[6];     /* Temp controls which pwm fan, bit field */
209
210         u8 has_pwm;
211         u8 has_temp;
212         u8 has_vid;
213         u8 pwm_enable;          /* Register value, each Temp has 1 bit */
214         u8 pwm_uptime;          /* Register value */
215         u8 pwm_downtime;        /* Register value */
216         u8 pwm_default;         /* All fan default pwm, next poweron valid */
217         u8 pwm[8][3];           /* Register value */
218         u8 pwm_stop_time[8];
219         u8 temp_cruise[6];
220
221         u8 alarms[5];           /* realtime status registers */
222         u8 beeps[5];
223         u8 beep_enable;
224         u8 tolerance[3];        /* Temp tolerance(Smart Fan I/II) */
225         u8 sf2_pwm[6][7];       /* Smart FanII: Fan duty cycle */
226         u8 sf2_temp[6][7];      /* Smart FanII: Temp level point */
227 };
228
229 static u8 w83793_read_value(struct i2c_client *client, u16 reg);
230 static int w83793_write_value(struct i2c_client *client, u16 reg, u8 value);
231 static int w83793_probe(struct i2c_client *client,
232                         const struct i2c_device_id *id);
233 static int w83793_detect(struct i2c_client *client,
234                          struct i2c_board_info *info);
235 static int w83793_remove(struct i2c_client *client);
236 static void w83793_init_client(struct i2c_client *client);
237 static void w83793_update_nonvolatile(struct device *dev);
238 static struct w83793_data *w83793_update_device(struct device *dev);
239
240 static const struct i2c_device_id w83793_id[] = {
241         { "w83793", w83793 },
242         { }
243 };
244 MODULE_DEVICE_TABLE(i2c, w83793_id);
245
246 static struct i2c_driver w83793_driver = {
247         .class          = I2C_CLASS_HWMON,
248         .driver = {
249                    .name = "w83793",
250         },
251         .probe          = w83793_probe,
252         .remove         = w83793_remove,
253         .id_table       = w83793_id,
254         .detect         = w83793_detect,
255         .address_data   = &addr_data,
256 };
257
258 static ssize_t
259 show_vrm(struct device *dev, struct device_attribute *attr, char *buf)
260 {
261         struct w83793_data *data = dev_get_drvdata(dev);
262         return sprintf(buf, "%d\n", data->vrm);
263 }
264
265 static ssize_t
266 show_vid(struct device *dev, struct device_attribute *attr, char *buf)
267 {
268         struct w83793_data *data = w83793_update_device(dev);
269         struct sensor_device_attribute_2 *sensor_attr =
270             to_sensor_dev_attr_2(attr);
271         int index = sensor_attr->index;
272
273         return sprintf(buf, "%d\n", vid_from_reg(data->vid[index], data->vrm));
274 }
275
276 static ssize_t
277 store_vrm(struct device *dev, struct device_attribute *attr,
278           const char *buf, size_t count)
279 {
280         struct w83793_data *data = dev_get_drvdata(dev);
281         data->vrm = simple_strtoul(buf, NULL, 10);
282         return count;
283 }
284
285 #define ALARM_STATUS                    0
286 #define BEEP_ENABLE                     1
287 static ssize_t
288 show_alarm_beep(struct device *dev, struct device_attribute *attr, char *buf)
289 {
290         struct w83793_data *data = w83793_update_device(dev);
291         struct sensor_device_attribute_2 *sensor_attr =
292             to_sensor_dev_attr_2(attr);
293         int nr = sensor_attr->nr;
294         int index = sensor_attr->index >> 3;
295         int bit = sensor_attr->index & 0x07;
296         u8 val;
297
298         if (ALARM_STATUS == nr) {
299                 val = (data->alarms[index] >> (bit)) & 1;
300         } else {                /* BEEP_ENABLE */
301                 val = (data->beeps[index] >> (bit)) & 1;
302         }
303
304         return sprintf(buf, "%u\n", val);
305 }
306
307 static ssize_t
308 store_beep(struct device *dev, struct device_attribute *attr,
309            const char *buf, size_t count)
310 {
311         struct i2c_client *client = to_i2c_client(dev);
312         struct w83793_data *data = i2c_get_clientdata(client);
313         struct sensor_device_attribute_2 *sensor_attr =
314             to_sensor_dev_attr_2(attr);
315         int index = sensor_attr->index >> 3;
316         int shift = sensor_attr->index & 0x07;
317         u8 beep_bit = 1 << shift;
318         u8 val;
319
320         val = simple_strtoul(buf, NULL, 10);
321         if (val != 0 && val != 1)
322                 return -EINVAL;
323
324         mutex_lock(&data->update_lock);
325         data->beeps[index] = w83793_read_value(client, W83793_REG_BEEP(index));
326         data->beeps[index] &= ~beep_bit;
327         data->beeps[index] |= val << shift;
328         w83793_write_value(client, W83793_REG_BEEP(index), data->beeps[index]);
329         mutex_unlock(&data->update_lock);
330
331         return count;
332 }
333
334 static ssize_t
335 show_beep_enable(struct device *dev, struct device_attribute *attr, char *buf)
336 {
337         struct w83793_data *data = w83793_update_device(dev);
338         return sprintf(buf, "%u\n", (data->beep_enable >> 1) & 0x01);
339 }
340
341 static ssize_t
342 store_beep_enable(struct device *dev, struct device_attribute *attr,
343                   const char *buf, size_t count)
344 {
345         struct i2c_client *client = to_i2c_client(dev);
346         struct w83793_data *data = i2c_get_clientdata(client);
347         u8 val = simple_strtoul(buf, NULL, 10);
348
349         if (val != 0 && val != 1)
350                 return -EINVAL;
351
352         mutex_lock(&data->update_lock);
353         data->beep_enable = w83793_read_value(client, W83793_REG_OVT_BEEP)
354                             & 0xfd;
355         data->beep_enable |= val << 1;
356         w83793_write_value(client, W83793_REG_OVT_BEEP, data->beep_enable);
357         mutex_unlock(&data->update_lock);
358
359         return count;
360 }
361
362 /* Write any value to clear chassis alarm */
363 static ssize_t
364 store_chassis_clear(struct device *dev,
365                     struct device_attribute *attr, const char *buf,
366                     size_t count)
367 {
368         struct i2c_client *client = to_i2c_client(dev);
369         struct w83793_data *data = i2c_get_clientdata(client);
370         u8 val;
371
372         mutex_lock(&data->update_lock);
373         val = w83793_read_value(client, W83793_REG_CLR_CHASSIS);
374         val |= 0x80;
375         w83793_write_value(client, W83793_REG_CLR_CHASSIS, val);
376         mutex_unlock(&data->update_lock);
377         return count;
378 }
379
380 #define FAN_INPUT                       0
381 #define FAN_MIN                         1
382 static ssize_t
383 show_fan(struct device *dev, struct device_attribute *attr, char *buf)
384 {
385         struct sensor_device_attribute_2 *sensor_attr =
386             to_sensor_dev_attr_2(attr);
387         int nr = sensor_attr->nr;
388         int index = sensor_attr->index;
389         struct w83793_data *data = w83793_update_device(dev);
390         u16 val;
391
392         if (FAN_INPUT == nr) {
393                 val = data->fan[index] & 0x0fff;
394         } else {
395                 val = data->fan_min[index] & 0x0fff;
396         }
397
398         return sprintf(buf, "%lu\n", FAN_FROM_REG(val));
399 }
400
401 static ssize_t
402 store_fan_min(struct device *dev, struct device_attribute *attr,
403               const char *buf, size_t count)
404 {
405         struct sensor_device_attribute_2 *sensor_attr =
406             to_sensor_dev_attr_2(attr);
407         int index = sensor_attr->index;
408         struct i2c_client *client = to_i2c_client(dev);
409         struct w83793_data *data = i2c_get_clientdata(client);
410         u16 val = FAN_TO_REG(simple_strtoul(buf, NULL, 10));
411
412         mutex_lock(&data->update_lock);
413         data->fan_min[index] = val;
414         w83793_write_value(client, W83793_REG_FAN_MIN(index),
415                            (val >> 8) & 0xff);
416         w83793_write_value(client, W83793_REG_FAN_MIN(index) + 1, val & 0xff);
417         mutex_unlock(&data->update_lock);
418
419         return count;
420 }
421
422 static ssize_t
423 show_pwm(struct device *dev, struct device_attribute *attr, char *buf)
424 {
425         struct sensor_device_attribute_2 *sensor_attr =
426             to_sensor_dev_attr_2(attr);
427         struct w83793_data *data = w83793_update_device(dev);
428         u16 val;
429         int nr = sensor_attr->nr;
430         int index = sensor_attr->index;
431
432         if (PWM_STOP_TIME == nr)
433                 val = TIME_FROM_REG(data->pwm_stop_time[index]);
434         else
435                 val = (data->pwm[index][nr] & 0x3f) << 2;
436
437         return sprintf(buf, "%d\n", val);
438 }
439
440 static ssize_t
441 store_pwm(struct device *dev, struct device_attribute *attr,
442           const char *buf, size_t count)
443 {
444         struct i2c_client *client = to_i2c_client(dev);
445         struct w83793_data *data = i2c_get_clientdata(client);
446         struct sensor_device_attribute_2 *sensor_attr =
447             to_sensor_dev_attr_2(attr);
448         int nr = sensor_attr->nr;
449         int index = sensor_attr->index;
450         u8 val;
451
452         mutex_lock(&data->update_lock);
453         if (PWM_STOP_TIME == nr) {
454                 val = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
455                 data->pwm_stop_time[index] = val;
456                 w83793_write_value(client, W83793_REG_PWM_STOP_TIME(index),
457                                    val);
458         } else {
459                 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 0xff)
460                       >> 2;
461                 data->pwm[index][nr] =
462                     w83793_read_value(client, W83793_REG_PWM(index, nr)) & 0xc0;
463                 data->pwm[index][nr] |= val;
464                 w83793_write_value(client, W83793_REG_PWM(index, nr),
465                                                         data->pwm[index][nr]);
466         }
467
468         mutex_unlock(&data->update_lock);
469         return count;
470 }
471
472 static ssize_t
473 show_temp(struct device *dev, struct device_attribute *attr, char *buf)
474 {
475         struct sensor_device_attribute_2 *sensor_attr =
476             to_sensor_dev_attr_2(attr);
477         int nr = sensor_attr->nr;
478         int index = sensor_attr->index;
479         struct w83793_data *data = w83793_update_device(dev);
480         long temp = TEMP_FROM_REG(data->temp[index][nr]);
481
482         if (TEMP_READ == nr && index < 4) {     /* Only TD1-TD4 have low bits */
483                 int low = ((data->temp_low_bits >> (index * 2)) & 0x03) * 250;
484                 temp += temp > 0 ? low : -low;
485         }
486         return sprintf(buf, "%ld\n", temp);
487 }
488
489 static ssize_t
490 store_temp(struct device *dev, struct device_attribute *attr,
491            const char *buf, size_t count)
492 {
493         struct sensor_device_attribute_2 *sensor_attr =
494             to_sensor_dev_attr_2(attr);
495         int nr = sensor_attr->nr;
496         int index = sensor_attr->index;
497         struct i2c_client *client = to_i2c_client(dev);
498         struct w83793_data *data = i2c_get_clientdata(client);
499         long tmp = simple_strtol(buf, NULL, 10);
500
501         mutex_lock(&data->update_lock);
502         data->temp[index][nr] = TEMP_TO_REG(tmp, -128, 127);
503         w83793_write_value(client, W83793_REG_TEMP[index][nr],
504                            data->temp[index][nr]);
505         mutex_unlock(&data->update_lock);
506         return count;
507 }
508
509 /*
510         TD1-TD4
511         each has 4 mode:(2 bits)
512         0:      Stop monitor
513         1:      Use internal temp sensor(default)
514         2:      Reserved
515         3:      Use sensor in Intel CPU and get result by PECI
516
517         TR1-TR2
518         each has 2 mode:(1 bit)
519         0:      Disable temp sensor monitor
520         1:      To enable temp sensors monitor
521 */
522
523 /* 0 disable, 6 PECI */
524 static u8 TO_TEMP_MODE[] = { 0, 0, 0, 6 };
525
526 static ssize_t
527 show_temp_mode(struct device *dev, struct device_attribute *attr, char *buf)
528 {
529         struct w83793_data *data = w83793_update_device(dev);
530         struct sensor_device_attribute_2 *sensor_attr =
531             to_sensor_dev_attr_2(attr);
532         int index = sensor_attr->index;
533         u8 mask = (index < 4) ? 0x03 : 0x01;
534         u8 shift = (index < 4) ? (2 * index) : (index - 4);
535         u8 tmp;
536         index = (index < 4) ? 0 : 1;
537
538         tmp = (data->temp_mode[index] >> shift) & mask;
539
540         /* for the internal sensor, found out if diode or thermistor */
541         if (tmp == 1) {
542                 tmp = index == 0 ? 3 : 4;
543         } else {
544                 tmp = TO_TEMP_MODE[tmp];
545         }
546
547         return sprintf(buf, "%d\n", tmp);
548 }
549
550 static ssize_t
551 store_temp_mode(struct device *dev, struct device_attribute *attr,
552                 const char *buf, size_t count)
553 {
554         struct i2c_client *client = to_i2c_client(dev);
555         struct w83793_data *data = i2c_get_clientdata(client);
556         struct sensor_device_attribute_2 *sensor_attr =
557             to_sensor_dev_attr_2(attr);
558         int index = sensor_attr->index;
559         u8 mask = (index < 4) ? 0x03 : 0x01;
560         u8 shift = (index < 4) ? (2 * index) : (index - 4);
561         u8 val = simple_strtoul(buf, NULL, 10);
562
563         /* transform the sysfs interface values into table above */
564         if ((val == 6) && (index < 4)) {
565                 val -= 3;
566         } else if ((val == 3 && index < 4)
567                 || (val == 4 && index >= 4)) {
568                 /* transform diode or thermistor into internal enable */
569                 val = !!val;
570         } else {
571                 return -EINVAL;
572         }
573
574         index = (index < 4) ? 0 : 1;
575         mutex_lock(&data->update_lock);
576         data->temp_mode[index] =
577             w83793_read_value(client, W83793_REG_TEMP_MODE[index]);
578         data->temp_mode[index] &= ~(mask << shift);
579         data->temp_mode[index] |= val << shift;
580         w83793_write_value(client, W83793_REG_TEMP_MODE[index],
581                                                         data->temp_mode[index]);
582         mutex_unlock(&data->update_lock);
583
584         return count;
585 }
586
587 #define SETUP_PWM_DEFAULT               0
588 #define SETUP_PWM_UPTIME                1       /* Unit in 0.1s */
589 #define SETUP_PWM_DOWNTIME              2       /* Unit in 0.1s */
590 #define SETUP_TEMP_CRITICAL             3
591 static ssize_t
592 show_sf_setup(struct device *dev, struct device_attribute *attr, char *buf)
593 {
594         struct sensor_device_attribute_2 *sensor_attr =
595             to_sensor_dev_attr_2(attr);
596         int nr = sensor_attr->nr;
597         struct w83793_data *data = w83793_update_device(dev);
598         u32 val = 0;
599
600         if (SETUP_PWM_DEFAULT == nr) {
601                 val = (data->pwm_default & 0x3f) << 2;
602         } else if (SETUP_PWM_UPTIME == nr) {
603                 val = TIME_FROM_REG(data->pwm_uptime);
604         } else if (SETUP_PWM_DOWNTIME == nr) {
605                 val = TIME_FROM_REG(data->pwm_downtime);
606         } else if (SETUP_TEMP_CRITICAL == nr) {
607                 val = TEMP_FROM_REG(data->temp_critical & 0x7f);
608         }
609
610         return sprintf(buf, "%d\n", val);
611 }
612
613 static ssize_t
614 store_sf_setup(struct device *dev, struct device_attribute *attr,
615                const char *buf, size_t count)
616 {
617         struct sensor_device_attribute_2 *sensor_attr =
618             to_sensor_dev_attr_2(attr);
619         int nr = sensor_attr->nr;
620         struct i2c_client *client = to_i2c_client(dev);
621         struct w83793_data *data = i2c_get_clientdata(client);
622
623         mutex_lock(&data->update_lock);
624         if (SETUP_PWM_DEFAULT == nr) {
625                 data->pwm_default =
626                     w83793_read_value(client, W83793_REG_PWM_DEFAULT) & 0xc0;
627                 data->pwm_default |= SENSORS_LIMIT(simple_strtoul(buf, NULL,
628                                                                   10),
629                                                    0, 0xff) >> 2;
630                 w83793_write_value(client, W83793_REG_PWM_DEFAULT,
631                                                         data->pwm_default);
632         } else if (SETUP_PWM_UPTIME == nr) {
633                 data->pwm_uptime = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
634                 data->pwm_uptime += data->pwm_uptime == 0 ? 1 : 0;
635                 w83793_write_value(client, W83793_REG_PWM_UPTIME,
636                                                         data->pwm_uptime);
637         } else if (SETUP_PWM_DOWNTIME == nr) {
638                 data->pwm_downtime = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
639                 data->pwm_downtime += data->pwm_downtime == 0 ? 1 : 0;
640                 w83793_write_value(client, W83793_REG_PWM_DOWNTIME,
641                                                         data->pwm_downtime);
642         } else {                /* SETUP_TEMP_CRITICAL */
643                 data->temp_critical =
644                     w83793_read_value(client, W83793_REG_TEMP_CRITICAL) & 0x80;
645                 data->temp_critical |= TEMP_TO_REG(simple_strtol(buf, NULL, 10),
646                                                    0, 0x7f);
647                 w83793_write_value(client, W83793_REG_TEMP_CRITICAL,
648                                                         data->temp_critical);
649         }
650
651         mutex_unlock(&data->update_lock);
652         return count;
653 }
654
655 /*
656         Temp SmartFan control
657         TEMP_FAN_MAP
658         Temp channel control which pwm fan, bitfield, bit 0 indicate pwm1...
659         It's possible two or more temp channels control the same fan, w83793
660         always prefers to pick the most critical request and applies it to
661         the related Fan.
662         It's possible one fan is not in any mapping of 6 temp channels, this
663         means the fan is manual mode
664
665         TEMP_PWM_ENABLE
666         Each temp channel has its own SmartFan mode, and temp channel
667         control fans that are set by TEMP_FAN_MAP
668         0:      SmartFanII mode
669         1:      Thermal Cruise Mode
670
671         TEMP_CRUISE
672         Target temperature in thermal cruise mode, w83793 will try to turn
673         fan speed to keep the temperature of target device around this
674         temperature.
675
676         TEMP_TOLERANCE
677         If Temp higher or lower than target with this tolerance, w83793
678         will take actions to speed up or slow down the fan to keep the
679         temperature within the tolerance range.
680 */
681
682 #define TEMP_FAN_MAP                    0
683 #define TEMP_PWM_ENABLE                 1
684 #define TEMP_CRUISE                     2
685 #define TEMP_TOLERANCE                  3
686 static ssize_t
687 show_sf_ctrl(struct device *dev, struct device_attribute *attr, char *buf)
688 {
689         struct sensor_device_attribute_2 *sensor_attr =
690             to_sensor_dev_attr_2(attr);
691         int nr = sensor_attr->nr;
692         int index = sensor_attr->index;
693         struct w83793_data *data = w83793_update_device(dev);
694         u32 val;
695
696         if (TEMP_FAN_MAP == nr) {
697                 val = data->temp_fan_map[index];
698         } else if (TEMP_PWM_ENABLE == nr) {
699                 /* +2 to transfrom into 2 and 3 to conform with sysfs intf */
700                 val = ((data->pwm_enable >> index) & 0x01) + 2;
701         } else if (TEMP_CRUISE == nr) {
702                 val = TEMP_FROM_REG(data->temp_cruise[index] & 0x7f);
703         } else {                /* TEMP_TOLERANCE */
704                 val = data->tolerance[index >> 1] >> ((index & 0x01) ? 4 : 0);
705                 val = TEMP_FROM_REG(val & 0x0f);
706         }
707         return sprintf(buf, "%d\n", val);
708 }
709
710 static ssize_t
711 store_sf_ctrl(struct device *dev, struct device_attribute *attr,
712               const char *buf, size_t count)
713 {
714         struct sensor_device_attribute_2 *sensor_attr =
715             to_sensor_dev_attr_2(attr);
716         int nr = sensor_attr->nr;
717         int index = sensor_attr->index;
718         struct i2c_client *client = to_i2c_client(dev);
719         struct w83793_data *data = i2c_get_clientdata(client);
720         u32 val;
721
722         mutex_lock(&data->update_lock);
723         if (TEMP_FAN_MAP == nr) {
724                 val = simple_strtoul(buf, NULL, 10) & 0xff;
725                 w83793_write_value(client, W83793_REG_TEMP_FAN_MAP(index), val);
726                 data->temp_fan_map[index] = val;
727         } else if (TEMP_PWM_ENABLE == nr) {
728                 val = simple_strtoul(buf, NULL, 10);
729                 if (2 == val || 3 == val) {
730                         data->pwm_enable =
731                             w83793_read_value(client, W83793_REG_PWM_ENABLE);
732                         if (val - 2)
733                                 data->pwm_enable |= 1 << index;
734                         else
735                                 data->pwm_enable &= ~(1 << index);
736                         w83793_write_value(client, W83793_REG_PWM_ENABLE,
737                                                         data->pwm_enable);
738                 } else {
739                         mutex_unlock(&data->update_lock);
740                         return -EINVAL;
741                 }
742         } else if (TEMP_CRUISE == nr) {
743                 data->temp_cruise[index] =
744                     w83793_read_value(client, W83793_REG_TEMP_CRUISE(index));
745                 val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x7f);
746                 data->temp_cruise[index] &= 0x80;
747                 data->temp_cruise[index] |= val;
748
749                 w83793_write_value(client, W83793_REG_TEMP_CRUISE(index),
750                                                 data->temp_cruise[index]);
751         } else {                /* TEMP_TOLERANCE */
752                 int i = index >> 1;
753                 u8 shift = (index & 0x01) ? 4 : 0;
754                 data->tolerance[i] =
755                     w83793_read_value(client, W83793_REG_TEMP_TOL(i));
756
757                 val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x0f);
758                 data->tolerance[i] &= ~(0x0f << shift);
759                 data->tolerance[i] |= val << shift;
760                 w83793_write_value(client, W83793_REG_TEMP_TOL(i),
761                                                         data->tolerance[i]);
762         }
763
764         mutex_unlock(&data->update_lock);
765         return count;
766 }
767
768 static ssize_t
769 show_sf2_pwm(struct device *dev, struct device_attribute *attr, char *buf)
770 {
771         struct sensor_device_attribute_2 *sensor_attr =
772             to_sensor_dev_attr_2(attr);
773         int nr = sensor_attr->nr;
774         int index = sensor_attr->index;
775         struct w83793_data *data = w83793_update_device(dev);
776
777         return sprintf(buf, "%d\n", (data->sf2_pwm[index][nr] & 0x3f) << 2);
778 }
779
780 static ssize_t
781 store_sf2_pwm(struct device *dev, struct device_attribute *attr,
782               const char *buf, size_t count)
783 {
784         struct i2c_client *client = to_i2c_client(dev);
785         struct w83793_data *data = i2c_get_clientdata(client);
786         struct sensor_device_attribute_2 *sensor_attr =
787             to_sensor_dev_attr_2(attr);
788         int nr = sensor_attr->nr;
789         int index = sensor_attr->index;
790         u8 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 0xff) >> 2;
791
792         mutex_lock(&data->update_lock);
793         data->sf2_pwm[index][nr] =
794             w83793_read_value(client, W83793_REG_SF2_PWM(index, nr)) & 0xc0;
795         data->sf2_pwm[index][nr] |= val;
796         w83793_write_value(client, W83793_REG_SF2_PWM(index, nr),
797                                                 data->sf2_pwm[index][nr]);
798         mutex_unlock(&data->update_lock);
799         return count;
800 }
801
802 static ssize_t
803 show_sf2_temp(struct device *dev, struct device_attribute *attr, char *buf)
804 {
805         struct sensor_device_attribute_2 *sensor_attr =
806             to_sensor_dev_attr_2(attr);
807         int nr = sensor_attr->nr;
808         int index = sensor_attr->index;
809         struct w83793_data *data = w83793_update_device(dev);
810
811         return sprintf(buf, "%ld\n",
812                        TEMP_FROM_REG(data->sf2_temp[index][nr] & 0x7f));
813 }
814
815 static ssize_t
816 store_sf2_temp(struct device *dev, struct device_attribute *attr,
817                const char *buf, size_t count)
818 {
819         struct i2c_client *client = to_i2c_client(dev);
820         struct w83793_data *data = i2c_get_clientdata(client);
821         struct sensor_device_attribute_2 *sensor_attr =
822             to_sensor_dev_attr_2(attr);
823         int nr = sensor_attr->nr;
824         int index = sensor_attr->index;
825         u8 val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x7f);
826
827         mutex_lock(&data->update_lock);
828         data->sf2_temp[index][nr] =
829             w83793_read_value(client, W83793_REG_SF2_TEMP(index, nr)) & 0x80;
830         data->sf2_temp[index][nr] |= val;
831         w83793_write_value(client, W83793_REG_SF2_TEMP(index, nr),
832                                              data->sf2_temp[index][nr]);
833         mutex_unlock(&data->update_lock);
834         return count;
835 }
836
837 /* only Vcore A/B and Vtt have additional 2 bits precision */
838 static ssize_t
839 show_in(struct device *dev, struct device_attribute *attr, char *buf)
840 {
841         struct sensor_device_attribute_2 *sensor_attr =
842             to_sensor_dev_attr_2(attr);
843         int nr = sensor_attr->nr;
844         int index = sensor_attr->index;
845         struct w83793_data *data = w83793_update_device(dev);
846         u16 val = data->in[index][nr];
847
848         if (index < 3) {
849                 val <<= 2;
850                 val += (data->in_low_bits[nr] >> (index * 2)) & 0x3;
851         }
852         /* voltage inputs 5VDD and 5VSB needs 150mV offset */
853         val = val * scale_in[index] + scale_in_add[index];
854         return sprintf(buf, "%d\n", val);
855 }
856
857 static ssize_t
858 store_in(struct device *dev, struct device_attribute *attr,
859          const char *buf, size_t count)
860 {
861         struct sensor_device_attribute_2 *sensor_attr =
862             to_sensor_dev_attr_2(attr);
863         int nr = sensor_attr->nr;
864         int index = sensor_attr->index;
865         struct i2c_client *client = to_i2c_client(dev);
866         struct w83793_data *data = i2c_get_clientdata(client);
867         u32 val;
868
869         val =
870             (simple_strtoul(buf, NULL, 10) +
871              scale_in[index] / 2) / scale_in[index];
872         mutex_lock(&data->update_lock);
873         if (index > 2) {
874                 /* fix the limit values of 5VDD and 5VSB to ALARM mechanism */
875                 if (1 == nr || 2 == nr) {
876                         val -= scale_in_add[index] / scale_in[index];
877                 }
878                 val = SENSORS_LIMIT(val, 0, 255);
879         } else {
880                 val = SENSORS_LIMIT(val, 0, 0x3FF);
881                 data->in_low_bits[nr] =
882                     w83793_read_value(client, W83793_REG_IN_LOW_BITS[nr]);
883                 data->in_low_bits[nr] &= ~(0x03 << (2 * index));
884                 data->in_low_bits[nr] |= (val & 0x03) << (2 * index);
885                 w83793_write_value(client, W83793_REG_IN_LOW_BITS[nr],
886                                                      data->in_low_bits[nr]);
887                 val >>= 2;
888         }
889         data->in[index][nr] = val;
890         w83793_write_value(client, W83793_REG_IN[index][nr],
891                                                         data->in[index][nr]);
892         mutex_unlock(&data->update_lock);
893         return count;
894 }
895
896 #define NOT_USED                        -1
897
898 #define SENSOR_ATTR_IN(index)                                           \
899         SENSOR_ATTR_2(in##index##_input, S_IRUGO, show_in, NULL,        \
900                 IN_READ, index),                                        \
901         SENSOR_ATTR_2(in##index##_max, S_IRUGO | S_IWUSR, show_in,      \
902                 store_in, IN_MAX, index),                               \
903         SENSOR_ATTR_2(in##index##_min, S_IRUGO | S_IWUSR, show_in,      \
904                 store_in, IN_LOW, index),                               \
905         SENSOR_ATTR_2(in##index##_alarm, S_IRUGO, show_alarm_beep,      \
906                 NULL, ALARM_STATUS, index + ((index > 2) ? 1 : 0)),     \
907         SENSOR_ATTR_2(in##index##_beep, S_IWUSR | S_IRUGO,              \
908                 show_alarm_beep, store_beep, BEEP_ENABLE,               \
909                 index + ((index > 2) ? 1 : 0))
910
911 #define SENSOR_ATTR_FAN(index)                                          \
912         SENSOR_ATTR_2(fan##index##_alarm, S_IRUGO, show_alarm_beep,     \
913                 NULL, ALARM_STATUS, index + 17),                        \
914         SENSOR_ATTR_2(fan##index##_beep, S_IWUSR | S_IRUGO,             \
915                 show_alarm_beep, store_beep, BEEP_ENABLE, index + 17),  \
916         SENSOR_ATTR_2(fan##index##_input, S_IRUGO, show_fan,            \
917                 NULL, FAN_INPUT, index - 1),                            \
918         SENSOR_ATTR_2(fan##index##_min, S_IWUSR | S_IRUGO,              \
919                 show_fan, store_fan_min, FAN_MIN, index - 1)
920
921 #define SENSOR_ATTR_PWM(index)                                          \
922         SENSOR_ATTR_2(pwm##index, S_IWUSR | S_IRUGO, show_pwm,          \
923                 store_pwm, PWM_DUTY, index - 1),                        \
924         SENSOR_ATTR_2(pwm##index##_nonstop, S_IWUSR | S_IRUGO,          \
925                 show_pwm, store_pwm, PWM_NONSTOP, index - 1),           \
926         SENSOR_ATTR_2(pwm##index##_start, S_IWUSR | S_IRUGO,            \
927                 show_pwm, store_pwm, PWM_START, index - 1),             \
928         SENSOR_ATTR_2(pwm##index##_stop_time, S_IWUSR | S_IRUGO,        \
929                 show_pwm, store_pwm, PWM_STOP_TIME, index - 1)
930
931 #define SENSOR_ATTR_TEMP(index)                                         \
932         SENSOR_ATTR_2(temp##index##_type, S_IRUGO | S_IWUSR,            \
933                 show_temp_mode, store_temp_mode, NOT_USED, index - 1),  \
934         SENSOR_ATTR_2(temp##index##_input, S_IRUGO, show_temp,          \
935                 NULL, TEMP_READ, index - 1),                            \
936         SENSOR_ATTR_2(temp##index##_max, S_IRUGO | S_IWUSR, show_temp,  \
937                 store_temp, TEMP_CRIT, index - 1),                      \
938         SENSOR_ATTR_2(temp##index##_max_hyst, S_IRUGO | S_IWUSR,        \
939                 show_temp, store_temp, TEMP_CRIT_HYST, index - 1),      \
940         SENSOR_ATTR_2(temp##index##_warn, S_IRUGO | S_IWUSR, show_temp, \
941                 store_temp, TEMP_WARN, index - 1),                      \
942         SENSOR_ATTR_2(temp##index##_warn_hyst, S_IRUGO | S_IWUSR,       \
943                 show_temp, store_temp, TEMP_WARN_HYST, index - 1),      \
944         SENSOR_ATTR_2(temp##index##_alarm, S_IRUGO,                     \
945                 show_alarm_beep, NULL, ALARM_STATUS, index + 11),       \
946         SENSOR_ATTR_2(temp##index##_beep, S_IWUSR | S_IRUGO,            \
947                 show_alarm_beep, store_beep, BEEP_ENABLE, index + 11),  \
948         SENSOR_ATTR_2(temp##index##_auto_channels_pwm,                  \
949                 S_IRUGO | S_IWUSR, show_sf_ctrl, store_sf_ctrl,         \
950                 TEMP_FAN_MAP, index - 1),                               \
951         SENSOR_ATTR_2(temp##index##_pwm_enable, S_IWUSR | S_IRUGO,      \
952                 show_sf_ctrl, store_sf_ctrl, TEMP_PWM_ENABLE,           \
953                 index - 1),                                             \
954         SENSOR_ATTR_2(thermal_cruise##index, S_IRUGO | S_IWUSR,         \
955                 show_sf_ctrl, store_sf_ctrl, TEMP_CRUISE, index - 1),   \
956         SENSOR_ATTR_2(tolerance##index, S_IRUGO | S_IWUSR, show_sf_ctrl,\
957                 store_sf_ctrl, TEMP_TOLERANCE, index - 1),              \
958         SENSOR_ATTR_2(temp##index##_auto_point1_pwm, S_IRUGO | S_IWUSR, \
959                 show_sf2_pwm, store_sf2_pwm, 0, index - 1),             \
960         SENSOR_ATTR_2(temp##index##_auto_point2_pwm, S_IRUGO | S_IWUSR, \
961                 show_sf2_pwm, store_sf2_pwm, 1, index - 1),             \
962         SENSOR_ATTR_2(temp##index##_auto_point3_pwm, S_IRUGO | S_IWUSR, \
963                 show_sf2_pwm, store_sf2_pwm, 2, index - 1),             \
964         SENSOR_ATTR_2(temp##index##_auto_point4_pwm, S_IRUGO | S_IWUSR, \
965                 show_sf2_pwm, store_sf2_pwm, 3, index - 1),             \
966         SENSOR_ATTR_2(temp##index##_auto_point5_pwm, S_IRUGO | S_IWUSR, \
967                 show_sf2_pwm, store_sf2_pwm, 4, index - 1),             \
968         SENSOR_ATTR_2(temp##index##_auto_point6_pwm, S_IRUGO | S_IWUSR, \
969                 show_sf2_pwm, store_sf2_pwm, 5, index - 1),             \
970         SENSOR_ATTR_2(temp##index##_auto_point7_pwm, S_IRUGO | S_IWUSR, \
971                 show_sf2_pwm, store_sf2_pwm, 6, index - 1),             \
972         SENSOR_ATTR_2(temp##index##_auto_point1_temp, S_IRUGO | S_IWUSR,\
973                 show_sf2_temp, store_sf2_temp, 0, index - 1),           \
974         SENSOR_ATTR_2(temp##index##_auto_point2_temp, S_IRUGO | S_IWUSR,\
975                 show_sf2_temp, store_sf2_temp, 1, index - 1),           \
976         SENSOR_ATTR_2(temp##index##_auto_point3_temp, S_IRUGO | S_IWUSR,\
977                 show_sf2_temp, store_sf2_temp, 2, index - 1),           \
978         SENSOR_ATTR_2(temp##index##_auto_point4_temp, S_IRUGO | S_IWUSR,\
979                 show_sf2_temp, store_sf2_temp, 3, index - 1),           \
980         SENSOR_ATTR_2(temp##index##_auto_point5_temp, S_IRUGO | S_IWUSR,\
981                 show_sf2_temp, store_sf2_temp, 4, index - 1),           \
982         SENSOR_ATTR_2(temp##index##_auto_point6_temp, S_IRUGO | S_IWUSR,\
983                 show_sf2_temp, store_sf2_temp, 5, index - 1),           \
984         SENSOR_ATTR_2(temp##index##_auto_point7_temp, S_IRUGO | S_IWUSR,\
985                 show_sf2_temp, store_sf2_temp, 6, index - 1)
986
987 static struct sensor_device_attribute_2 w83793_sensor_attr_2[] = {
988         SENSOR_ATTR_IN(0),
989         SENSOR_ATTR_IN(1),
990         SENSOR_ATTR_IN(2),
991         SENSOR_ATTR_IN(3),
992         SENSOR_ATTR_IN(4),
993         SENSOR_ATTR_IN(5),
994         SENSOR_ATTR_IN(6),
995         SENSOR_ATTR_IN(7),
996         SENSOR_ATTR_IN(8),
997         SENSOR_ATTR_IN(9),
998         SENSOR_ATTR_FAN(1),
999         SENSOR_ATTR_FAN(2),
1000         SENSOR_ATTR_FAN(3),
1001         SENSOR_ATTR_FAN(4),
1002         SENSOR_ATTR_FAN(5),
1003         SENSOR_ATTR_PWM(1),
1004         SENSOR_ATTR_PWM(2),
1005         SENSOR_ATTR_PWM(3),
1006 };
1007
1008 static struct sensor_device_attribute_2 w83793_temp[] = {
1009         SENSOR_ATTR_TEMP(1),
1010         SENSOR_ATTR_TEMP(2),
1011         SENSOR_ATTR_TEMP(3),
1012         SENSOR_ATTR_TEMP(4),
1013         SENSOR_ATTR_TEMP(5),
1014         SENSOR_ATTR_TEMP(6),
1015 };
1016
1017 /* Fan6-Fan12 */
1018 static struct sensor_device_attribute_2 w83793_left_fan[] = {
1019         SENSOR_ATTR_FAN(6),
1020         SENSOR_ATTR_FAN(7),
1021         SENSOR_ATTR_FAN(8),
1022         SENSOR_ATTR_FAN(9),
1023         SENSOR_ATTR_FAN(10),
1024         SENSOR_ATTR_FAN(11),
1025         SENSOR_ATTR_FAN(12),
1026 };
1027
1028 /* Pwm4-Pwm8 */
1029 static struct sensor_device_attribute_2 w83793_left_pwm[] = {
1030         SENSOR_ATTR_PWM(4),
1031         SENSOR_ATTR_PWM(5),
1032         SENSOR_ATTR_PWM(6),
1033         SENSOR_ATTR_PWM(7),
1034         SENSOR_ATTR_PWM(8),
1035 };
1036
1037 static struct sensor_device_attribute_2 w83793_vid[] = {
1038         SENSOR_ATTR_2(cpu0_vid, S_IRUGO, show_vid, NULL, NOT_USED, 0),
1039         SENSOR_ATTR_2(cpu1_vid, S_IRUGO, show_vid, NULL, NOT_USED, 1),
1040 };
1041 static DEVICE_ATTR(vrm, S_IWUSR | S_IRUGO, show_vrm, store_vrm);
1042
1043 static struct sensor_device_attribute_2 sda_single_files[] = {
1044         SENSOR_ATTR_2(chassis, S_IWUSR | S_IRUGO, show_alarm_beep,
1045                       store_chassis_clear, ALARM_STATUS, 30),
1046         SENSOR_ATTR_2(beep_enable, S_IWUSR | S_IRUGO, show_beep_enable,
1047                       store_beep_enable, NOT_USED, NOT_USED),
1048         SENSOR_ATTR_2(pwm_default, S_IWUSR | S_IRUGO, show_sf_setup,
1049                       store_sf_setup, SETUP_PWM_DEFAULT, NOT_USED),
1050         SENSOR_ATTR_2(pwm_uptime, S_IWUSR | S_IRUGO, show_sf_setup,
1051                       store_sf_setup, SETUP_PWM_UPTIME, NOT_USED),
1052         SENSOR_ATTR_2(pwm_downtime, S_IWUSR | S_IRUGO, show_sf_setup,
1053                       store_sf_setup, SETUP_PWM_DOWNTIME, NOT_USED),
1054         SENSOR_ATTR_2(temp_critical, S_IWUSR | S_IRUGO, show_sf_setup,
1055                       store_sf_setup, SETUP_TEMP_CRITICAL, NOT_USED),
1056 };
1057
1058 static void w83793_init_client(struct i2c_client *client)
1059 {
1060         if (reset) {
1061                 w83793_write_value(client, W83793_REG_CONFIG, 0x80);
1062         }
1063
1064         /* Start monitoring */
1065         w83793_write_value(client, W83793_REG_CONFIG,
1066                            w83793_read_value(client, W83793_REG_CONFIG) | 0x01);
1067
1068 }
1069
1070 static int w83793_remove(struct i2c_client *client)
1071 {
1072         struct w83793_data *data = i2c_get_clientdata(client);
1073         struct device *dev = &client->dev;
1074         int i;
1075
1076         hwmon_device_unregister(data->hwmon_dev);
1077
1078         for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++)
1079                 device_remove_file(dev,
1080                                    &w83793_sensor_attr_2[i].dev_attr);
1081
1082         for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
1083                 device_remove_file(dev, &sda_single_files[i].dev_attr);
1084
1085         for (i = 0; i < ARRAY_SIZE(w83793_vid); i++)
1086                 device_remove_file(dev, &w83793_vid[i].dev_attr);
1087         device_remove_file(dev, &dev_attr_vrm);
1088
1089         for (i = 0; i < ARRAY_SIZE(w83793_left_fan); i++)
1090                 device_remove_file(dev, &w83793_left_fan[i].dev_attr);
1091
1092         for (i = 0; i < ARRAY_SIZE(w83793_left_pwm); i++)
1093                 device_remove_file(dev, &w83793_left_pwm[i].dev_attr);
1094
1095         for (i = 0; i < ARRAY_SIZE(w83793_temp); i++)
1096                 device_remove_file(dev, &w83793_temp[i].dev_attr);
1097
1098         if (data->lm75[0] != NULL)
1099                 i2c_unregister_device(data->lm75[0]);
1100         if (data->lm75[1] != NULL)
1101                 i2c_unregister_device(data->lm75[1]);
1102
1103         kfree(data);
1104
1105         return 0;
1106 }
1107
1108 static int
1109 w83793_detect_subclients(struct i2c_client *client)
1110 {
1111         int i, id, err;
1112         int address = client->addr;
1113         u8 tmp;
1114         struct i2c_adapter *adapter = client->adapter;
1115         struct w83793_data *data = i2c_get_clientdata(client);
1116
1117         id = i2c_adapter_id(adapter);
1118         if (force_subclients[0] == id && force_subclients[1] == address) {
1119                 for (i = 2; i <= 3; i++) {
1120                         if (force_subclients[i] < 0x48
1121                             || force_subclients[i] > 0x4f) {
1122                                 dev_err(&client->dev,
1123                                         "invalid subclient "
1124                                         "address %d; must be 0x48-0x4f\n",
1125                                         force_subclients[i]);
1126                                 err = -EINVAL;
1127                                 goto ERROR_SC_0;
1128                         }
1129                 }
1130                 w83793_write_value(client, W83793_REG_I2C_SUBADDR,
1131                                    (force_subclients[2] & 0x07) |
1132                                    ((force_subclients[3] & 0x07) << 4));
1133         }
1134
1135         tmp = w83793_read_value(client, W83793_REG_I2C_SUBADDR);
1136         if (!(tmp & 0x08)) {
1137                 data->lm75[0] = i2c_new_dummy(adapter, 0x48 + (tmp & 0x7));
1138         }
1139         if (!(tmp & 0x80)) {
1140                 if ((data->lm75[0] != NULL)
1141                     && ((tmp & 0x7) == ((tmp >> 4) & 0x7))) {
1142                         dev_err(&client->dev,
1143                                 "duplicate addresses 0x%x, "
1144                                 "use force_subclients\n", data->lm75[0]->addr);
1145                         err = -ENODEV;
1146                         goto ERROR_SC_1;
1147                 }
1148                 data->lm75[1] = i2c_new_dummy(adapter,
1149                                               0x48 + ((tmp >> 4) & 0x7));
1150         }
1151
1152         return 0;
1153
1154         /* Undo inits in case of errors */
1155
1156 ERROR_SC_1:
1157         if (data->lm75[0] != NULL)
1158                 i2c_unregister_device(data->lm75[0]);
1159 ERROR_SC_0:
1160         return err;
1161 }
1162
1163 /* Return 0 if detection is successful, -ENODEV otherwise */
1164 static int w83793_detect(struct i2c_client *client,
1165                          struct i2c_board_info *info)
1166 {
1167         u8 tmp, bank, chip_id;
1168         struct i2c_adapter *adapter = client->adapter;
1169         unsigned short address = client->addr;
1170
1171         if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
1172                 return -ENODEV;
1173         }
1174
1175         bank = i2c_smbus_read_byte_data(client, W83793_REG_BANKSEL);
1176
1177         tmp = bank & 0x80 ? 0x5c : 0xa3;
1178         /* Check Winbond vendor ID */
1179         if (tmp != i2c_smbus_read_byte_data(client, W83793_REG_VENDORID)) {
1180                 pr_debug("w83793: Detection failed at check vendor id\n");
1181                 return -ENODEV;
1182         }
1183
1184         /* If Winbond chip, address of chip and W83793_REG_I2C_ADDR
1185            should match */
1186         if ((bank & 0x07) == 0
1187          && i2c_smbus_read_byte_data(client, W83793_REG_I2C_ADDR) !=
1188             (address << 1)) {
1189                 pr_debug("w83793: Detection failed at check i2c addr\n");
1190                 return -ENODEV;
1191         }
1192
1193         /* Determine the chip type now */
1194         chip_id = i2c_smbus_read_byte_data(client, W83793_REG_CHIPID);
1195         if (chip_id != 0x7b)
1196                 return -ENODEV;
1197
1198         strlcpy(info->type, "w83793", I2C_NAME_SIZE);
1199
1200         return 0;
1201 }
1202
1203 static int w83793_probe(struct i2c_client *client,
1204                         const struct i2c_device_id *id)
1205 {
1206         struct device *dev = &client->dev;
1207         struct w83793_data *data;
1208         int i, tmp, val, err;
1209         int files_fan = ARRAY_SIZE(w83793_left_fan) / 7;
1210         int files_pwm = ARRAY_SIZE(w83793_left_pwm) / 5;
1211         int files_temp = ARRAY_SIZE(w83793_temp) / 6;
1212
1213         data = kzalloc(sizeof(struct w83793_data), GFP_KERNEL);
1214         if (!data) {
1215                 err = -ENOMEM;
1216                 goto exit;
1217         }
1218
1219         i2c_set_clientdata(client, data);
1220         data->bank = i2c_smbus_read_byte_data(client, W83793_REG_BANKSEL);
1221         mutex_init(&data->update_lock);
1222
1223         err = w83793_detect_subclients(client);
1224         if (err)
1225                 goto free_mem;
1226
1227         /* Initialize the chip */
1228         w83793_init_client(client);
1229
1230         /*
1231            Only fan 1-5 has their own input pins,
1232            Pwm 1-3 has their own pins
1233          */
1234         data->has_fan = 0x1f;
1235         data->has_pwm = 0x07;
1236         tmp = w83793_read_value(client, W83793_REG_MFC);
1237         val = w83793_read_value(client, W83793_REG_FANIN_CTRL);
1238
1239         /* check the function of pins 49-56 */
1240         if (tmp & 0x80) {
1241                 data->has_vid |= 0x2;   /* has VIDB */
1242         } else {
1243                 data->has_pwm |= 0x18;  /* pwm 4,5 */
1244                 if (val & 0x01) {       /* fan 6 */
1245                         data->has_fan |= 0x20;
1246                         data->has_pwm |= 0x20;
1247                 }
1248                 if (val & 0x02) {       /* fan 7 */
1249                         data->has_fan |= 0x40;
1250                         data->has_pwm |= 0x40;
1251                 }
1252                 if (!(tmp & 0x40) && (val & 0x04)) {    /* fan 8 */
1253                         data->has_fan |= 0x80;
1254                         data->has_pwm |= 0x80;
1255                 }
1256         }
1257
1258         /* check the function of pins 37-40 */
1259         if (!(tmp & 0x29))
1260                 data->has_vid |= 0x1;   /* has VIDA */
1261         if (0x08 == (tmp & 0x0c)) {
1262                 if (val & 0x08) /* fan 9 */
1263                         data->has_fan |= 0x100;
1264                 if (val & 0x10) /* fan 10 */
1265                         data->has_fan |= 0x200;
1266         }
1267         if (0x20 == (tmp & 0x30)) {
1268                 if (val & 0x20) /* fan 11 */
1269                         data->has_fan |= 0x400;
1270                 if (val & 0x40) /* fan 12 */
1271                         data->has_fan |= 0x800;
1272         }
1273
1274         if ((tmp & 0x01) && (val & 0x04)) {     /* fan 8, second location */
1275                 data->has_fan |= 0x80;
1276                 data->has_pwm |= 0x80;
1277         }
1278
1279         tmp = w83793_read_value(client, W83793_REG_FANIN_SEL);
1280         if ((tmp & 0x01) && (val & 0x08)) {     /* fan 9, second location */
1281                 data->has_fan |= 0x100;
1282         }
1283         if ((tmp & 0x02) && (val & 0x10)) {     /* fan 10, second location */
1284                 data->has_fan |= 0x200;
1285         }
1286         if ((tmp & 0x04) && (val & 0x20)) {     /* fan 11, second location */
1287                 data->has_fan |= 0x400;
1288         }
1289         if ((tmp & 0x08) && (val & 0x40)) {     /* fan 12, second location */
1290                 data->has_fan |= 0x800;
1291         }
1292
1293         /* check the temp1-6 mode, ignore former AMDSI selected inputs */
1294         tmp = w83793_read_value(client,W83793_REG_TEMP_MODE[0]);
1295         if (tmp & 0x01)
1296                 data->has_temp |= 0x01;
1297         if (tmp & 0x04)
1298                 data->has_temp |= 0x02;
1299         if (tmp & 0x10)
1300                 data->has_temp |= 0x04;
1301         if (tmp & 0x40)
1302                 data->has_temp |= 0x08;
1303
1304         tmp = w83793_read_value(client,W83793_REG_TEMP_MODE[1]);
1305         if (tmp & 0x01)
1306                 data->has_temp |= 0x10;
1307         if (tmp & 0x02)
1308                 data->has_temp |= 0x20;
1309
1310         /* Register sysfs hooks */
1311         for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++) {
1312                 err = device_create_file(dev,
1313                                          &w83793_sensor_attr_2[i].dev_attr);
1314                 if (err)
1315                         goto exit_remove;
1316         }
1317
1318         for (i = 0; i < ARRAY_SIZE(w83793_vid); i++) {
1319                 if (!(data->has_vid & (1 << i)))
1320                         continue;
1321                 err = device_create_file(dev, &w83793_vid[i].dev_attr);
1322                 if (err)
1323                         goto exit_remove;
1324         }
1325         if (data->has_vid) {
1326                 data->vrm = vid_which_vrm();
1327                 err = device_create_file(dev, &dev_attr_vrm);
1328                 if (err)
1329                         goto exit_remove;
1330         }
1331
1332         for (i = 0; i < ARRAY_SIZE(sda_single_files); i++) {
1333                 err = device_create_file(dev, &sda_single_files[i].dev_attr);
1334                 if (err)
1335                         goto exit_remove;
1336
1337         }
1338
1339         for (i = 0; i < 6; i++) {
1340                 int j;
1341                 if (!(data->has_temp & (1 << i)))
1342                         continue;
1343                 for (j = 0; j < files_temp; j++) {
1344                         err = device_create_file(dev,
1345                                                 &w83793_temp[(i) * files_temp
1346                                                                 + j].dev_attr);
1347                         if (err)
1348                                 goto exit_remove;
1349                 }
1350         }
1351
1352         for (i = 5; i < 12; i++) {
1353                 int j;
1354                 if (!(data->has_fan & (1 << i)))
1355                         continue;
1356                 for (j = 0; j < files_fan; j++) {
1357                         err = device_create_file(dev,
1358                                            &w83793_left_fan[(i - 5) * files_fan
1359                                                                 + j].dev_attr);
1360                         if (err)
1361                                 goto exit_remove;
1362                 }
1363         }
1364
1365         for (i = 3; i < 8; i++) {
1366                 int j;
1367                 if (!(data->has_pwm & (1 << i)))
1368                         continue;
1369                 for (j = 0; j < files_pwm; j++) {
1370                         err = device_create_file(dev,
1371                                            &w83793_left_pwm[(i - 3) * files_pwm
1372                                                                 + j].dev_attr);
1373                         if (err)
1374                                 goto exit_remove;
1375                 }
1376         }
1377
1378         data->hwmon_dev = hwmon_device_register(dev);
1379         if (IS_ERR(data->hwmon_dev)) {
1380                 err = PTR_ERR(data->hwmon_dev);
1381                 goto exit_remove;
1382         }
1383
1384         return 0;
1385
1386         /* Unregister sysfs hooks */
1387
1388 exit_remove:
1389         for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++)
1390                 device_remove_file(dev, &w83793_sensor_attr_2[i].dev_attr);
1391
1392         for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
1393                 device_remove_file(dev, &sda_single_files[i].dev_attr);
1394
1395         for (i = 0; i < ARRAY_SIZE(w83793_vid); i++)
1396                 device_remove_file(dev, &w83793_vid[i].dev_attr);
1397
1398         for (i = 0; i < ARRAY_SIZE(w83793_left_fan); i++)
1399                 device_remove_file(dev, &w83793_left_fan[i].dev_attr);
1400
1401         for (i = 0; i < ARRAY_SIZE(w83793_left_pwm); i++)
1402                 device_remove_file(dev, &w83793_left_pwm[i].dev_attr);
1403
1404         for (i = 0; i < ARRAY_SIZE(w83793_temp); i++)
1405                 device_remove_file(dev, &w83793_temp[i].dev_attr);
1406
1407         if (data->lm75[0] != NULL)
1408                 i2c_unregister_device(data->lm75[0]);
1409         if (data->lm75[1] != NULL)
1410                 i2c_unregister_device(data->lm75[1]);
1411 free_mem:
1412         kfree(data);
1413 exit:
1414         return err;
1415 }
1416
1417 static void w83793_update_nonvolatile(struct device *dev)
1418 {
1419         struct i2c_client *client = to_i2c_client(dev);
1420         struct w83793_data *data = i2c_get_clientdata(client);
1421         int i, j;
1422         /*
1423            They are somewhat "stable" registers, and to update them everytime
1424            takes so much time, it's just not worthy. Update them in a long
1425            interval to avoid exception.
1426          */
1427         if (!(time_after(jiffies, data->last_nonvolatile + HZ * 300)
1428               || !data->valid))
1429                 return;
1430         /* update voltage limits */
1431         for (i = 1; i < 3; i++) {
1432                 for (j = 0; j < ARRAY_SIZE(data->in); j++) {
1433                         data->in[j][i] =
1434                             w83793_read_value(client, W83793_REG_IN[j][i]);
1435                 }
1436                 data->in_low_bits[i] =
1437                     w83793_read_value(client, W83793_REG_IN_LOW_BITS[i]);
1438         }
1439
1440         for (i = 0; i < ARRAY_SIZE(data->fan_min); i++) {
1441                 /* Update the Fan measured value and limits */
1442                 if (!(data->has_fan & (1 << i))) {
1443                         continue;
1444                 }
1445                 data->fan_min[i] =
1446                     w83793_read_value(client, W83793_REG_FAN_MIN(i)) << 8;
1447                 data->fan_min[i] |=
1448                     w83793_read_value(client, W83793_REG_FAN_MIN(i) + 1);
1449         }
1450
1451         for (i = 0; i < ARRAY_SIZE(data->temp_fan_map); i++) {
1452                 if (!(data->has_temp & (1 << i)))
1453                         continue;
1454                 data->temp_fan_map[i] =
1455                     w83793_read_value(client, W83793_REG_TEMP_FAN_MAP(i));
1456                 for (j = 1; j < 5; j++) {
1457                         data->temp[i][j] =
1458                             w83793_read_value(client, W83793_REG_TEMP[i][j]);
1459                 }
1460                 data->temp_cruise[i] =
1461                     w83793_read_value(client, W83793_REG_TEMP_CRUISE(i));
1462                 for (j = 0; j < 7; j++) {
1463                         data->sf2_pwm[i][j] =
1464                             w83793_read_value(client, W83793_REG_SF2_PWM(i, j));
1465                         data->sf2_temp[i][j] =
1466                             w83793_read_value(client,
1467                                               W83793_REG_SF2_TEMP(i, j));
1468                 }
1469         }
1470
1471         for (i = 0; i < ARRAY_SIZE(data->temp_mode); i++)
1472                 data->temp_mode[i] =
1473                     w83793_read_value(client, W83793_REG_TEMP_MODE[i]);
1474
1475         for (i = 0; i < ARRAY_SIZE(data->tolerance); i++) {
1476                 data->tolerance[i] =
1477                     w83793_read_value(client, W83793_REG_TEMP_TOL(i));
1478         }
1479
1480         for (i = 0; i < ARRAY_SIZE(data->pwm); i++) {
1481                 if (!(data->has_pwm & (1 << i)))
1482                         continue;
1483                 data->pwm[i][PWM_NONSTOP] =
1484                     w83793_read_value(client, W83793_REG_PWM(i, PWM_NONSTOP));
1485                 data->pwm[i][PWM_START] =
1486                     w83793_read_value(client, W83793_REG_PWM(i, PWM_START));
1487                 data->pwm_stop_time[i] =
1488                     w83793_read_value(client, W83793_REG_PWM_STOP_TIME(i));
1489         }
1490
1491         data->pwm_default = w83793_read_value(client, W83793_REG_PWM_DEFAULT);
1492         data->pwm_enable = w83793_read_value(client, W83793_REG_PWM_ENABLE);
1493         data->pwm_uptime = w83793_read_value(client, W83793_REG_PWM_UPTIME);
1494         data->pwm_downtime = w83793_read_value(client, W83793_REG_PWM_DOWNTIME);
1495         data->temp_critical =
1496             w83793_read_value(client, W83793_REG_TEMP_CRITICAL);
1497         data->beep_enable = w83793_read_value(client, W83793_REG_OVT_BEEP);
1498
1499         for (i = 0; i < ARRAY_SIZE(data->beeps); i++) {
1500                 data->beeps[i] = w83793_read_value(client, W83793_REG_BEEP(i));
1501         }
1502
1503         data->last_nonvolatile = jiffies;
1504 }
1505
1506 static struct w83793_data *w83793_update_device(struct device *dev)
1507 {
1508         struct i2c_client *client = to_i2c_client(dev);
1509         struct w83793_data *data = i2c_get_clientdata(client);
1510         int i;
1511
1512         mutex_lock(&data->update_lock);
1513
1514         if (!(time_after(jiffies, data->last_updated + HZ * 2)
1515               || !data->valid))
1516                 goto END;
1517
1518         /* Update the voltages measured value and limits */
1519         for (i = 0; i < ARRAY_SIZE(data->in); i++)
1520                 data->in[i][IN_READ] =
1521                     w83793_read_value(client, W83793_REG_IN[i][IN_READ]);
1522
1523         data->in_low_bits[IN_READ] =
1524             w83793_read_value(client, W83793_REG_IN_LOW_BITS[IN_READ]);
1525
1526         for (i = 0; i < ARRAY_SIZE(data->fan); i++) {
1527                 if (!(data->has_fan & (1 << i))) {
1528                         continue;
1529                 }
1530                 data->fan[i] =
1531                     w83793_read_value(client, W83793_REG_FAN(i)) << 8;
1532                 data->fan[i] |=
1533                     w83793_read_value(client, W83793_REG_FAN(i) + 1);
1534         }
1535
1536         for (i = 0; i < ARRAY_SIZE(data->temp); i++) {
1537                 if (!(data->has_temp & (1 << i)))
1538                         continue;
1539                 data->temp[i][TEMP_READ] =
1540                     w83793_read_value(client, W83793_REG_TEMP[i][TEMP_READ]);
1541         }
1542
1543         data->temp_low_bits =
1544             w83793_read_value(client, W83793_REG_TEMP_LOW_BITS);
1545
1546         for (i = 0; i < ARRAY_SIZE(data->pwm); i++) {
1547                 if (data->has_pwm & (1 << i))
1548                         data->pwm[i][PWM_DUTY] =
1549                             w83793_read_value(client,
1550                                               W83793_REG_PWM(i, PWM_DUTY));
1551         }
1552
1553         for (i = 0; i < ARRAY_SIZE(data->alarms); i++)
1554                 data->alarms[i] =
1555                     w83793_read_value(client, W83793_REG_ALARM(i));
1556         if (data->has_vid & 0x01)
1557                 data->vid[0] = w83793_read_value(client, W83793_REG_VID_INA);
1558         if (data->has_vid & 0x02)
1559                 data->vid[1] = w83793_read_value(client, W83793_REG_VID_INB);
1560         w83793_update_nonvolatile(dev);
1561         data->last_updated = jiffies;
1562         data->valid = 1;
1563
1564 END:
1565         mutex_unlock(&data->update_lock);
1566         return data;
1567 }
1568
1569 /* Ignore the possibility that somebody change bank outside the driver
1570    Must be called with data->update_lock held, except during initialization */
1571 static u8 w83793_read_value(struct i2c_client *client, u16 reg)
1572 {
1573         struct w83793_data *data = i2c_get_clientdata(client);
1574         u8 res = 0xff;
1575         u8 new_bank = reg >> 8;
1576
1577         new_bank |= data->bank & 0xfc;
1578         if (data->bank != new_bank) {
1579                 if (i2c_smbus_write_byte_data
1580                     (client, W83793_REG_BANKSEL, new_bank) >= 0)
1581                         data->bank = new_bank;
1582                 else {
1583                         dev_err(&client->dev,
1584                                 "set bank to %d failed, fall back "
1585                                 "to bank %d, read reg 0x%x error\n",
1586                                 new_bank, data->bank, reg);
1587                         res = 0x0;      /* read 0x0 from the chip */
1588                         goto END;
1589                 }
1590         }
1591         res = i2c_smbus_read_byte_data(client, reg & 0xff);
1592 END:
1593         return res;
1594 }
1595
1596 /* Must be called with data->update_lock held, except during initialization */
1597 static int w83793_write_value(struct i2c_client *client, u16 reg, u8 value)
1598 {
1599         struct w83793_data *data = i2c_get_clientdata(client);
1600         int res;
1601         u8 new_bank = reg >> 8;
1602
1603         new_bank |= data->bank & 0xfc;
1604         if (data->bank != new_bank) {
1605                 if ((res = i2c_smbus_write_byte_data
1606                     (client, W83793_REG_BANKSEL, new_bank)) >= 0)
1607                         data->bank = new_bank;
1608                 else {
1609                         dev_err(&client->dev,
1610                                 "set bank to %d failed, fall back "
1611                                 "to bank %d, write reg 0x%x error\n",
1612                                 new_bank, data->bank, reg);
1613                         goto END;
1614                 }
1615         }
1616
1617         res = i2c_smbus_write_byte_data(client, reg & 0xff, value);
1618 END:
1619         return res;
1620 }
1621
1622 static int __init sensors_w83793_init(void)
1623 {
1624         return i2c_add_driver(&w83793_driver);
1625 }
1626
1627 static void __exit sensors_w83793_exit(void)
1628 {
1629         i2c_del_driver(&w83793_driver);
1630 }
1631
1632 MODULE_AUTHOR("Yuan Mu");
1633 MODULE_DESCRIPTION("w83793 driver");
1634 MODULE_LICENSE("GPL");
1635
1636 module_init(sensors_w83793_init);
1637 module_exit(sensors_w83793_exit);