Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
[pandora-kernel.git] / 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     Copyright (C) 2009-2010 Sven Anders <anders@anduras.de>, ANDURAS AG.
7                   Watchdog driver part
8                   (Based partially on fschmd driver,
9                    Copyright 2007-2008 by Hans de Goede)
10
11     This program is free software; you can redistribute it and/or modify
12     it under the terms of the GNU General Public License as published by
13     the Free Software Foundation - version 2.
14
15     This program is distributed in the hope that it will be useful,
16     but WITHOUT ANY WARRANTY; without even the implied warranty of
17     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18     GNU General Public License for more details.
19
20     You should have received a copy of the GNU General Public License
21     along with this program; if not, write to the Free Software
22     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23     02110-1301 USA.
24 */
25
26 /*
27     Supports following chips:
28
29     Chip        #vin    #fanin  #pwm    #temp   wchipid vendid  i2c     ISA
30     w83793      10      12      8       6       0x7b    0x5ca3  yes     no
31 */
32
33 #include <linux/module.h>
34 #include <linux/init.h>
35 #include <linux/slab.h>
36 #include <linux/i2c.h>
37 #include <linux/hwmon.h>
38 #include <linux/smp_lock.h>
39 #include <linux/hwmon-vid.h>
40 #include <linux/hwmon-sysfs.h>
41 #include <linux/err.h>
42 #include <linux/mutex.h>
43 #include <linux/fs.h>
44 #include <linux/watchdog.h>
45 #include <linux/miscdevice.h>
46 #include <linux/uaccess.h>
47 #include <linux/kref.h>
48 #include <linux/notifier.h>
49 #include <linux/reboot.h>
50
51 /* Default values */
52 #define WATCHDOG_TIMEOUT 2      /* 2 minute default timeout */
53
54 /* Addresses to scan */
55 static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
56                                                 I2C_CLIENT_END };
57
58 /* Insmod parameters */
59
60 static unsigned short force_subclients[4];
61 module_param_array(force_subclients, short, NULL, 0);
62 MODULE_PARM_DESC(force_subclients, "List of subclient addresses: "
63                        "{bus, clientaddr, subclientaddr1, subclientaddr2}");
64
65 static int reset;
66 module_param(reset, bool, 0);
67 MODULE_PARM_DESC(reset, "Set to 1 to reset chip, not recommended");
68
69 static int timeout = WATCHDOG_TIMEOUT;  /* default timeout in minutes */
70 module_param(timeout, int, 0);
71 MODULE_PARM_DESC(timeout,
72         "Watchdog timeout in minutes. 2<= timeout <=255 (default="
73                                 __MODULE_STRING(WATCHDOG_TIMEOUT) ")");
74
75 static int nowayout = WATCHDOG_NOWAYOUT;
76 module_param(nowayout, int, 0);
77 MODULE_PARM_DESC(nowayout,
78         "Watchdog cannot be stopped once started (default="
79                                 __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
80
81 /*
82    Address 0x00, 0x0d, 0x0e, 0x0f in all three banks are reserved
83    as ID, Bank Select registers
84 */
85 #define W83793_REG_BANKSEL              0x00
86 #define W83793_REG_VENDORID             0x0d
87 #define W83793_REG_CHIPID               0x0e
88 #define W83793_REG_DEVICEID             0x0f
89
90 #define W83793_REG_CONFIG               0x40
91 #define W83793_REG_MFC                  0x58
92 #define W83793_REG_FANIN_CTRL           0x5c
93 #define W83793_REG_FANIN_SEL            0x5d
94 #define W83793_REG_I2C_ADDR             0x0b
95 #define W83793_REG_I2C_SUBADDR          0x0c
96 #define W83793_REG_VID_INA              0x05
97 #define W83793_REG_VID_INB              0x06
98 #define W83793_REG_VID_LATCHA           0x07
99 #define W83793_REG_VID_LATCHB           0x08
100 #define W83793_REG_VID_CTRL             0x59
101
102 #define W83793_REG_WDT_LOCK             0x01
103 #define W83793_REG_WDT_ENABLE           0x02
104 #define W83793_REG_WDT_STATUS           0x03
105 #define W83793_REG_WDT_TIMEOUT          0x04
106
107 static u16 W83793_REG_TEMP_MODE[2] = { 0x5e, 0x5f };
108
109 #define TEMP_READ       0
110 #define TEMP_CRIT       1
111 #define TEMP_CRIT_HYST  2
112 #define TEMP_WARN       3
113 #define TEMP_WARN_HYST  4
114 /* only crit and crit_hyst affect real-time alarm status
115    current crit crit_hyst warn warn_hyst */
116 static u16 W83793_REG_TEMP[][5] = {
117         {0x1c, 0x78, 0x79, 0x7a, 0x7b},
118         {0x1d, 0x7c, 0x7d, 0x7e, 0x7f},
119         {0x1e, 0x80, 0x81, 0x82, 0x83},
120         {0x1f, 0x84, 0x85, 0x86, 0x87},
121         {0x20, 0x88, 0x89, 0x8a, 0x8b},
122         {0x21, 0x8c, 0x8d, 0x8e, 0x8f},
123 };
124
125 #define W83793_REG_TEMP_LOW_BITS        0x22
126
127 #define W83793_REG_BEEP(index)          (0x53 + (index))
128 #define W83793_REG_ALARM(index)         (0x4b + (index))
129
130 #define W83793_REG_CLR_CHASSIS          0x4a    /* SMI MASK4 */
131 #define W83793_REG_IRQ_CTRL             0x50
132 #define W83793_REG_OVT_CTRL             0x51
133 #define W83793_REG_OVT_BEEP             0x52
134
135 #define IN_READ                         0
136 #define IN_MAX                          1
137 #define IN_LOW                          2
138 static const u16 W83793_REG_IN[][3] = {
139         /* Current, High, Low */
140         {0x10, 0x60, 0x61},     /* Vcore A      */
141         {0x11, 0x62, 0x63},     /* Vcore B      */
142         {0x12, 0x64, 0x65},     /* Vtt          */
143         {0x14, 0x6a, 0x6b},     /* VSEN1        */
144         {0x15, 0x6c, 0x6d},     /* VSEN2        */
145         {0x16, 0x6e, 0x6f},     /* +3VSEN       */
146         {0x17, 0x70, 0x71},     /* +12VSEN      */
147         {0x18, 0x72, 0x73},     /* 5VDD         */
148         {0x19, 0x74, 0x75},     /* 5VSB         */
149         {0x1a, 0x76, 0x77},     /* VBAT         */
150 };
151
152 /* Low Bits of Vcore A/B Vtt Read/High/Low */
153 static const u16 W83793_REG_IN_LOW_BITS[] = { 0x1b, 0x68, 0x69 };
154 static u8 scale_in[] = { 2, 2, 2, 16, 16, 16, 8, 24, 24, 16 };
155 static u8 scale_in_add[] = { 0, 0, 0, 0, 0, 0, 0, 150, 150, 0 };
156
157 #define W83793_REG_FAN(index)           (0x23 + 2 * (index))    /* High byte */
158 #define W83793_REG_FAN_MIN(index)       (0x90 + 2 * (index))    /* High byte */
159
160 #define W83793_REG_PWM_DEFAULT          0xb2
161 #define W83793_REG_PWM_ENABLE           0x207
162 #define W83793_REG_PWM_UPTIME           0xc3    /* Unit in 0.1 second */
163 #define W83793_REG_PWM_DOWNTIME         0xc4    /* Unit in 0.1 second */
164 #define W83793_REG_TEMP_CRITICAL        0xc5
165
166 #define PWM_DUTY                        0
167 #define PWM_START                       1
168 #define PWM_NONSTOP                     2
169 #define PWM_STOP_TIME                   3
170 #define W83793_REG_PWM(index, nr)       (((nr) == 0 ? 0xb3 : \
171                                          (nr) == 1 ? 0x220 : 0x218) + (index))
172
173 /* bit field, fan1 is bit0, fan2 is bit1 ... */
174 #define W83793_REG_TEMP_FAN_MAP(index)  (0x201 + (index))
175 #define W83793_REG_TEMP_TOL(index)      (0x208 + (index))
176 #define W83793_REG_TEMP_CRUISE(index)   (0x210 + (index))
177 #define W83793_REG_PWM_STOP_TIME(index) (0x228 + (index))
178 #define W83793_REG_SF2_TEMP(index, nr)  (0x230 + ((index) << 4) + (nr))
179 #define W83793_REG_SF2_PWM(index, nr)   (0x238 + ((index) << 4) + (nr))
180
181 static inline unsigned long FAN_FROM_REG(u16 val)
182 {
183         if ((val >= 0xfff) || (val == 0))
184                 return  0;
185         return (1350000UL / val);
186 }
187
188 static inline u16 FAN_TO_REG(long rpm)
189 {
190         if (rpm <= 0)
191                 return 0x0fff;
192         return SENSORS_LIMIT((1350000 + (rpm >> 1)) / rpm, 1, 0xffe);
193 }
194
195 static inline unsigned long TIME_FROM_REG(u8 reg)
196 {
197         return (reg * 100);
198 }
199
200 static inline u8 TIME_TO_REG(unsigned long val)
201 {
202         return SENSORS_LIMIT((val + 50) / 100, 0, 0xff);
203 }
204
205 static inline long TEMP_FROM_REG(s8 reg)
206 {
207         return (reg * 1000);
208 }
209
210 static inline s8 TEMP_TO_REG(long val, s8 min, s8 max)
211 {
212         return SENSORS_LIMIT((val + (val < 0 ? -500 : 500)) / 1000, min, max);
213 }
214
215 struct w83793_data {
216         struct i2c_client *lm75[2];
217         struct device *hwmon_dev;
218         struct mutex update_lock;
219         char valid;                     /* !=0 if following fields are valid */
220         unsigned long last_updated;     /* In jiffies */
221         unsigned long last_nonvolatile; /* In jiffies, last time we update the
222                                            nonvolatile registers */
223
224         u8 bank;
225         u8 vrm;
226         u8 vid[2];
227         u8 in[10][3];           /* Register value, read/high/low */
228         u8 in_low_bits[3];      /* Additional resolution for VCore A/B Vtt */
229
230         u16 has_fan;            /* Only fan1- fan5 has own pins */
231         u16 fan[12];            /* Register value combine */
232         u16 fan_min[12];        /* Register value combine */
233
234         s8 temp[6][5];          /* current, crit, crit_hyst,warn, warn_hyst */
235         u8 temp_low_bits;       /* Additional resolution TD1-TD4 */
236         u8 temp_mode[2];        /* byte 0: Temp D1-D4 mode each has 2 bits
237                                    byte 1: Temp R1,R2 mode, each has 1 bit */
238         u8 temp_critical;       /* If reached all fan will be at full speed */
239         u8 temp_fan_map[6];     /* Temp controls which pwm fan, bit field */
240
241         u8 has_pwm;
242         u8 has_temp;
243         u8 has_vid;
244         u8 pwm_enable;          /* Register value, each Temp has 1 bit */
245         u8 pwm_uptime;          /* Register value */
246         u8 pwm_downtime;        /* Register value */
247         u8 pwm_default;         /* All fan default pwm, next poweron valid */
248         u8 pwm[8][3];           /* Register value */
249         u8 pwm_stop_time[8];
250         u8 temp_cruise[6];
251
252         u8 alarms[5];           /* realtime status registers */
253         u8 beeps[5];
254         u8 beep_enable;
255         u8 tolerance[3];        /* Temp tolerance(Smart Fan I/II) */
256         u8 sf2_pwm[6][7];       /* Smart FanII: Fan duty cycle */
257         u8 sf2_temp[6][7];      /* Smart FanII: Temp level point */
258
259         /* watchdog */
260         struct i2c_client *client;
261         struct mutex watchdog_lock;
262         struct list_head list; /* member of the watchdog_data_list */
263         struct kref kref;
264         struct miscdevice watchdog_miscdev;
265         unsigned long watchdog_is_open;
266         char watchdog_expect_close;
267         char watchdog_name[10]; /* must be unique to avoid sysfs conflict */
268         unsigned int watchdog_caused_reboot;
269         int watchdog_timeout; /* watchdog timeout in minutes */
270 };
271
272 /* Somewhat ugly :( global data pointer list with all devices, so that
273    we can find our device data as when using misc_register. There is no
274    other method to get to one's device data from the open file-op and
275    for usage in the reboot notifier callback. */
276 static LIST_HEAD(watchdog_data_list);
277
278 /* Note this lock not only protect list access, but also data.kref access */
279 static DEFINE_MUTEX(watchdog_data_mutex);
280
281 /* Release our data struct when we're detached from the i2c client *and* all
282    references to our watchdog device are released */
283 static void w83793_release_resources(struct kref *ref)
284 {
285         struct w83793_data *data = container_of(ref, struct w83793_data, kref);
286         kfree(data);
287 }
288
289 static u8 w83793_read_value(struct i2c_client *client, u16 reg);
290 static int w83793_write_value(struct i2c_client *client, u16 reg, u8 value);
291 static int w83793_probe(struct i2c_client *client,
292                         const struct i2c_device_id *id);
293 static int w83793_detect(struct i2c_client *client,
294                          struct i2c_board_info *info);
295 static int w83793_remove(struct i2c_client *client);
296 static void w83793_init_client(struct i2c_client *client);
297 static void w83793_update_nonvolatile(struct device *dev);
298 static struct w83793_data *w83793_update_device(struct device *dev);
299
300 static const struct i2c_device_id w83793_id[] = {
301         { "w83793", 0 },
302         { }
303 };
304 MODULE_DEVICE_TABLE(i2c, w83793_id);
305
306 static struct i2c_driver w83793_driver = {
307         .class          = I2C_CLASS_HWMON,
308         .driver = {
309                    .name = "w83793",
310         },
311         .probe          = w83793_probe,
312         .remove         = w83793_remove,
313         .id_table       = w83793_id,
314         .detect         = w83793_detect,
315         .address_list   = normal_i2c,
316 };
317
318 static ssize_t
319 show_vrm(struct device *dev, struct device_attribute *attr, char *buf)
320 {
321         struct w83793_data *data = dev_get_drvdata(dev);
322         return sprintf(buf, "%d\n", data->vrm);
323 }
324
325 static ssize_t
326 show_vid(struct device *dev, struct device_attribute *attr, char *buf)
327 {
328         struct w83793_data *data = w83793_update_device(dev);
329         struct sensor_device_attribute_2 *sensor_attr =
330             to_sensor_dev_attr_2(attr);
331         int index = sensor_attr->index;
332
333         return sprintf(buf, "%d\n", vid_from_reg(data->vid[index], data->vrm));
334 }
335
336 static ssize_t
337 store_vrm(struct device *dev, struct device_attribute *attr,
338           const char *buf, size_t count)
339 {
340         struct w83793_data *data = dev_get_drvdata(dev);
341         data->vrm = simple_strtoul(buf, NULL, 10);
342         return count;
343 }
344
345 #define ALARM_STATUS                    0
346 #define BEEP_ENABLE                     1
347 static ssize_t
348 show_alarm_beep(struct device *dev, struct device_attribute *attr, char *buf)
349 {
350         struct w83793_data *data = w83793_update_device(dev);
351         struct sensor_device_attribute_2 *sensor_attr =
352             to_sensor_dev_attr_2(attr);
353         int nr = sensor_attr->nr;
354         int index = sensor_attr->index >> 3;
355         int bit = sensor_attr->index & 0x07;
356         u8 val;
357
358         if (ALARM_STATUS == nr) {
359                 val = (data->alarms[index] >> (bit)) & 1;
360         } else {                /* BEEP_ENABLE */
361                 val = (data->beeps[index] >> (bit)) & 1;
362         }
363
364         return sprintf(buf, "%u\n", val);
365 }
366
367 static ssize_t
368 store_beep(struct device *dev, struct device_attribute *attr,
369            const char *buf, size_t count)
370 {
371         struct i2c_client *client = to_i2c_client(dev);
372         struct w83793_data *data = i2c_get_clientdata(client);
373         struct sensor_device_attribute_2 *sensor_attr =
374             to_sensor_dev_attr_2(attr);
375         int index = sensor_attr->index >> 3;
376         int shift = sensor_attr->index & 0x07;
377         u8 beep_bit = 1 << shift;
378         u8 val;
379
380         val = simple_strtoul(buf, NULL, 10);
381         if (val != 0 && val != 1)
382                 return -EINVAL;
383
384         mutex_lock(&data->update_lock);
385         data->beeps[index] = w83793_read_value(client, W83793_REG_BEEP(index));
386         data->beeps[index] &= ~beep_bit;
387         data->beeps[index] |= val << shift;
388         w83793_write_value(client, W83793_REG_BEEP(index), data->beeps[index]);
389         mutex_unlock(&data->update_lock);
390
391         return count;
392 }
393
394 static ssize_t
395 show_beep_enable(struct device *dev, struct device_attribute *attr, char *buf)
396 {
397         struct w83793_data *data = w83793_update_device(dev);
398         return sprintf(buf, "%u\n", (data->beep_enable >> 1) & 0x01);
399 }
400
401 static ssize_t
402 store_beep_enable(struct device *dev, struct device_attribute *attr,
403                   const char *buf, size_t count)
404 {
405         struct i2c_client *client = to_i2c_client(dev);
406         struct w83793_data *data = i2c_get_clientdata(client);
407         u8 val = simple_strtoul(buf, NULL, 10);
408
409         if (val != 0 && val != 1)
410                 return -EINVAL;
411
412         mutex_lock(&data->update_lock);
413         data->beep_enable = w83793_read_value(client, W83793_REG_OVT_BEEP)
414                             & 0xfd;
415         data->beep_enable |= val << 1;
416         w83793_write_value(client, W83793_REG_OVT_BEEP, data->beep_enable);
417         mutex_unlock(&data->update_lock);
418
419         return count;
420 }
421
422 /* Write any value to clear chassis alarm */
423 static ssize_t
424 store_chassis_clear(struct device *dev,
425                     struct device_attribute *attr, const char *buf,
426                     size_t count)
427 {
428         struct i2c_client *client = to_i2c_client(dev);
429         struct w83793_data *data = i2c_get_clientdata(client);
430         u8 val;
431
432         mutex_lock(&data->update_lock);
433         val = w83793_read_value(client, W83793_REG_CLR_CHASSIS);
434         val |= 0x80;
435         w83793_write_value(client, W83793_REG_CLR_CHASSIS, val);
436         mutex_unlock(&data->update_lock);
437         return count;
438 }
439
440 #define FAN_INPUT                       0
441 #define FAN_MIN                         1
442 static ssize_t
443 show_fan(struct device *dev, struct device_attribute *attr, char *buf)
444 {
445         struct sensor_device_attribute_2 *sensor_attr =
446             to_sensor_dev_attr_2(attr);
447         int nr = sensor_attr->nr;
448         int index = sensor_attr->index;
449         struct w83793_data *data = w83793_update_device(dev);
450         u16 val;
451
452         if (FAN_INPUT == nr) {
453                 val = data->fan[index] & 0x0fff;
454         } else {
455                 val = data->fan_min[index] & 0x0fff;
456         }
457
458         return sprintf(buf, "%lu\n", FAN_FROM_REG(val));
459 }
460
461 static ssize_t
462 store_fan_min(struct device *dev, struct device_attribute *attr,
463               const char *buf, size_t count)
464 {
465         struct sensor_device_attribute_2 *sensor_attr =
466             to_sensor_dev_attr_2(attr);
467         int index = sensor_attr->index;
468         struct i2c_client *client = to_i2c_client(dev);
469         struct w83793_data *data = i2c_get_clientdata(client);
470         u16 val = FAN_TO_REG(simple_strtoul(buf, NULL, 10));
471
472         mutex_lock(&data->update_lock);
473         data->fan_min[index] = val;
474         w83793_write_value(client, W83793_REG_FAN_MIN(index),
475                            (val >> 8) & 0xff);
476         w83793_write_value(client, W83793_REG_FAN_MIN(index) + 1, val & 0xff);
477         mutex_unlock(&data->update_lock);
478
479         return count;
480 }
481
482 static ssize_t
483 show_pwm(struct device *dev, struct device_attribute *attr, char *buf)
484 {
485         struct sensor_device_attribute_2 *sensor_attr =
486             to_sensor_dev_attr_2(attr);
487         struct w83793_data *data = w83793_update_device(dev);
488         u16 val;
489         int nr = sensor_attr->nr;
490         int index = sensor_attr->index;
491
492         if (PWM_STOP_TIME == nr)
493                 val = TIME_FROM_REG(data->pwm_stop_time[index]);
494         else
495                 val = (data->pwm[index][nr] & 0x3f) << 2;
496
497         return sprintf(buf, "%d\n", val);
498 }
499
500 static ssize_t
501 store_pwm(struct device *dev, struct device_attribute *attr,
502           const char *buf, size_t count)
503 {
504         struct i2c_client *client = to_i2c_client(dev);
505         struct w83793_data *data = i2c_get_clientdata(client);
506         struct sensor_device_attribute_2 *sensor_attr =
507             to_sensor_dev_attr_2(attr);
508         int nr = sensor_attr->nr;
509         int index = sensor_attr->index;
510         u8 val;
511
512         mutex_lock(&data->update_lock);
513         if (PWM_STOP_TIME == nr) {
514                 val = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
515                 data->pwm_stop_time[index] = val;
516                 w83793_write_value(client, W83793_REG_PWM_STOP_TIME(index),
517                                    val);
518         } else {
519                 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 0xff)
520                       >> 2;
521                 data->pwm[index][nr] =
522                     w83793_read_value(client, W83793_REG_PWM(index, nr)) & 0xc0;
523                 data->pwm[index][nr] |= val;
524                 w83793_write_value(client, W83793_REG_PWM(index, nr),
525                                                         data->pwm[index][nr]);
526         }
527
528         mutex_unlock(&data->update_lock);
529         return count;
530 }
531
532 static ssize_t
533 show_temp(struct device *dev, struct device_attribute *attr, char *buf)
534 {
535         struct sensor_device_attribute_2 *sensor_attr =
536             to_sensor_dev_attr_2(attr);
537         int nr = sensor_attr->nr;
538         int index = sensor_attr->index;
539         struct w83793_data *data = w83793_update_device(dev);
540         long temp = TEMP_FROM_REG(data->temp[index][nr]);
541
542         if (TEMP_READ == nr && index < 4) {     /* Only TD1-TD4 have low bits */
543                 int low = ((data->temp_low_bits >> (index * 2)) & 0x03) * 250;
544                 temp += temp > 0 ? low : -low;
545         }
546         return sprintf(buf, "%ld\n", temp);
547 }
548
549 static ssize_t
550 store_temp(struct device *dev, struct device_attribute *attr,
551            const char *buf, size_t count)
552 {
553         struct sensor_device_attribute_2 *sensor_attr =
554             to_sensor_dev_attr_2(attr);
555         int nr = sensor_attr->nr;
556         int index = sensor_attr->index;
557         struct i2c_client *client = to_i2c_client(dev);
558         struct w83793_data *data = i2c_get_clientdata(client);
559         long tmp = simple_strtol(buf, NULL, 10);
560
561         mutex_lock(&data->update_lock);
562         data->temp[index][nr] = TEMP_TO_REG(tmp, -128, 127);
563         w83793_write_value(client, W83793_REG_TEMP[index][nr],
564                            data->temp[index][nr]);
565         mutex_unlock(&data->update_lock);
566         return count;
567 }
568
569 /*
570         TD1-TD4
571         each has 4 mode:(2 bits)
572         0:      Stop monitor
573         1:      Use internal temp sensor(default)
574         2:      Reserved
575         3:      Use sensor in Intel CPU and get result by PECI
576
577         TR1-TR2
578         each has 2 mode:(1 bit)
579         0:      Disable temp sensor monitor
580         1:      To enable temp sensors monitor
581 */
582
583 /* 0 disable, 6 PECI */
584 static u8 TO_TEMP_MODE[] = { 0, 0, 0, 6 };
585
586 static ssize_t
587 show_temp_mode(struct device *dev, struct device_attribute *attr, char *buf)
588 {
589         struct w83793_data *data = w83793_update_device(dev);
590         struct sensor_device_attribute_2 *sensor_attr =
591             to_sensor_dev_attr_2(attr);
592         int index = sensor_attr->index;
593         u8 mask = (index < 4) ? 0x03 : 0x01;
594         u8 shift = (index < 4) ? (2 * index) : (index - 4);
595         u8 tmp;
596         index = (index < 4) ? 0 : 1;
597
598         tmp = (data->temp_mode[index] >> shift) & mask;
599
600         /* for the internal sensor, found out if diode or thermistor */
601         if (tmp == 1) {
602                 tmp = index == 0 ? 3 : 4;
603         } else {
604                 tmp = TO_TEMP_MODE[tmp];
605         }
606
607         return sprintf(buf, "%d\n", tmp);
608 }
609
610 static ssize_t
611 store_temp_mode(struct device *dev, struct device_attribute *attr,
612                 const char *buf, size_t count)
613 {
614         struct i2c_client *client = to_i2c_client(dev);
615         struct w83793_data *data = i2c_get_clientdata(client);
616         struct sensor_device_attribute_2 *sensor_attr =
617             to_sensor_dev_attr_2(attr);
618         int index = sensor_attr->index;
619         u8 mask = (index < 4) ? 0x03 : 0x01;
620         u8 shift = (index < 4) ? (2 * index) : (index - 4);
621         u8 val = simple_strtoul(buf, NULL, 10);
622
623         /* transform the sysfs interface values into table above */
624         if ((val == 6) && (index < 4)) {
625                 val -= 3;
626         } else if ((val == 3 && index < 4)
627                 || (val == 4 && index >= 4)) {
628                 /* transform diode or thermistor into internal enable */
629                 val = !!val;
630         } else {
631                 return -EINVAL;
632         }
633
634         index = (index < 4) ? 0 : 1;
635         mutex_lock(&data->update_lock);
636         data->temp_mode[index] =
637             w83793_read_value(client, W83793_REG_TEMP_MODE[index]);
638         data->temp_mode[index] &= ~(mask << shift);
639         data->temp_mode[index] |= val << shift;
640         w83793_write_value(client, W83793_REG_TEMP_MODE[index],
641                                                         data->temp_mode[index]);
642         mutex_unlock(&data->update_lock);
643
644         return count;
645 }
646
647 #define SETUP_PWM_DEFAULT               0
648 #define SETUP_PWM_UPTIME                1       /* Unit in 0.1s */
649 #define SETUP_PWM_DOWNTIME              2       /* Unit in 0.1s */
650 #define SETUP_TEMP_CRITICAL             3
651 static ssize_t
652 show_sf_setup(struct device *dev, struct device_attribute *attr, char *buf)
653 {
654         struct sensor_device_attribute_2 *sensor_attr =
655             to_sensor_dev_attr_2(attr);
656         int nr = sensor_attr->nr;
657         struct w83793_data *data = w83793_update_device(dev);
658         u32 val = 0;
659
660         if (SETUP_PWM_DEFAULT == nr) {
661                 val = (data->pwm_default & 0x3f) << 2;
662         } else if (SETUP_PWM_UPTIME == nr) {
663                 val = TIME_FROM_REG(data->pwm_uptime);
664         } else if (SETUP_PWM_DOWNTIME == nr) {
665                 val = TIME_FROM_REG(data->pwm_downtime);
666         } else if (SETUP_TEMP_CRITICAL == nr) {
667                 val = TEMP_FROM_REG(data->temp_critical & 0x7f);
668         }
669
670         return sprintf(buf, "%d\n", val);
671 }
672
673 static ssize_t
674 store_sf_setup(struct device *dev, struct device_attribute *attr,
675                const char *buf, size_t count)
676 {
677         struct sensor_device_attribute_2 *sensor_attr =
678             to_sensor_dev_attr_2(attr);
679         int nr = sensor_attr->nr;
680         struct i2c_client *client = to_i2c_client(dev);
681         struct w83793_data *data = i2c_get_clientdata(client);
682
683         mutex_lock(&data->update_lock);
684         if (SETUP_PWM_DEFAULT == nr) {
685                 data->pwm_default =
686                     w83793_read_value(client, W83793_REG_PWM_DEFAULT) & 0xc0;
687                 data->pwm_default |= SENSORS_LIMIT(simple_strtoul(buf, NULL,
688                                                                   10),
689                                                    0, 0xff) >> 2;
690                 w83793_write_value(client, W83793_REG_PWM_DEFAULT,
691                                                         data->pwm_default);
692         } else if (SETUP_PWM_UPTIME == nr) {
693                 data->pwm_uptime = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
694                 data->pwm_uptime += data->pwm_uptime == 0 ? 1 : 0;
695                 w83793_write_value(client, W83793_REG_PWM_UPTIME,
696                                                         data->pwm_uptime);
697         } else if (SETUP_PWM_DOWNTIME == nr) {
698                 data->pwm_downtime = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
699                 data->pwm_downtime += data->pwm_downtime == 0 ? 1 : 0;
700                 w83793_write_value(client, W83793_REG_PWM_DOWNTIME,
701                                                         data->pwm_downtime);
702         } else {                /* SETUP_TEMP_CRITICAL */
703                 data->temp_critical =
704                     w83793_read_value(client, W83793_REG_TEMP_CRITICAL) & 0x80;
705                 data->temp_critical |= TEMP_TO_REG(simple_strtol(buf, NULL, 10),
706                                                    0, 0x7f);
707                 w83793_write_value(client, W83793_REG_TEMP_CRITICAL,
708                                                         data->temp_critical);
709         }
710
711         mutex_unlock(&data->update_lock);
712         return count;
713 }
714
715 /*
716         Temp SmartFan control
717         TEMP_FAN_MAP
718         Temp channel control which pwm fan, bitfield, bit 0 indicate pwm1...
719         It's possible two or more temp channels control the same fan, w83793
720         always prefers to pick the most critical request and applies it to
721         the related Fan.
722         It's possible one fan is not in any mapping of 6 temp channels, this
723         means the fan is manual mode
724
725         TEMP_PWM_ENABLE
726         Each temp channel has its own SmartFan mode, and temp channel
727         control fans that are set by TEMP_FAN_MAP
728         0:      SmartFanII mode
729         1:      Thermal Cruise Mode
730
731         TEMP_CRUISE
732         Target temperature in thermal cruise mode, w83793 will try to turn
733         fan speed to keep the temperature of target device around this
734         temperature.
735
736         TEMP_TOLERANCE
737         If Temp higher or lower than target with this tolerance, w83793
738         will take actions to speed up or slow down the fan to keep the
739         temperature within the tolerance range.
740 */
741
742 #define TEMP_FAN_MAP                    0
743 #define TEMP_PWM_ENABLE                 1
744 #define TEMP_CRUISE                     2
745 #define TEMP_TOLERANCE                  3
746 static ssize_t
747 show_sf_ctrl(struct device *dev, struct device_attribute *attr, char *buf)
748 {
749         struct sensor_device_attribute_2 *sensor_attr =
750             to_sensor_dev_attr_2(attr);
751         int nr = sensor_attr->nr;
752         int index = sensor_attr->index;
753         struct w83793_data *data = w83793_update_device(dev);
754         u32 val;
755
756         if (TEMP_FAN_MAP == nr) {
757                 val = data->temp_fan_map[index];
758         } else if (TEMP_PWM_ENABLE == nr) {
759                 /* +2 to transfrom into 2 and 3 to conform with sysfs intf */
760                 val = ((data->pwm_enable >> index) & 0x01) + 2;
761         } else if (TEMP_CRUISE == nr) {
762                 val = TEMP_FROM_REG(data->temp_cruise[index] & 0x7f);
763         } else {                /* TEMP_TOLERANCE */
764                 val = data->tolerance[index >> 1] >> ((index & 0x01) ? 4 : 0);
765                 val = TEMP_FROM_REG(val & 0x0f);
766         }
767         return sprintf(buf, "%d\n", val);
768 }
769
770 static ssize_t
771 store_sf_ctrl(struct device *dev, struct device_attribute *attr,
772               const char *buf, size_t count)
773 {
774         struct sensor_device_attribute_2 *sensor_attr =
775             to_sensor_dev_attr_2(attr);
776         int nr = sensor_attr->nr;
777         int index = sensor_attr->index;
778         struct i2c_client *client = to_i2c_client(dev);
779         struct w83793_data *data = i2c_get_clientdata(client);
780         u32 val;
781
782         mutex_lock(&data->update_lock);
783         if (TEMP_FAN_MAP == nr) {
784                 val = simple_strtoul(buf, NULL, 10) & 0xff;
785                 w83793_write_value(client, W83793_REG_TEMP_FAN_MAP(index), val);
786                 data->temp_fan_map[index] = val;
787         } else if (TEMP_PWM_ENABLE == nr) {
788                 val = simple_strtoul(buf, NULL, 10);
789                 if (2 == val || 3 == val) {
790                         data->pwm_enable =
791                             w83793_read_value(client, W83793_REG_PWM_ENABLE);
792                         if (val - 2)
793                                 data->pwm_enable |= 1 << index;
794                         else
795                                 data->pwm_enable &= ~(1 << index);
796                         w83793_write_value(client, W83793_REG_PWM_ENABLE,
797                                                         data->pwm_enable);
798                 } else {
799                         mutex_unlock(&data->update_lock);
800                         return -EINVAL;
801                 }
802         } else if (TEMP_CRUISE == nr) {
803                 data->temp_cruise[index] =
804                     w83793_read_value(client, W83793_REG_TEMP_CRUISE(index));
805                 val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x7f);
806                 data->temp_cruise[index] &= 0x80;
807                 data->temp_cruise[index] |= val;
808
809                 w83793_write_value(client, W83793_REG_TEMP_CRUISE(index),
810                                                 data->temp_cruise[index]);
811         } else {                /* TEMP_TOLERANCE */
812                 int i = index >> 1;
813                 u8 shift = (index & 0x01) ? 4 : 0;
814                 data->tolerance[i] =
815                     w83793_read_value(client, W83793_REG_TEMP_TOL(i));
816
817                 val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x0f);
818                 data->tolerance[i] &= ~(0x0f << shift);
819                 data->tolerance[i] |= val << shift;
820                 w83793_write_value(client, W83793_REG_TEMP_TOL(i),
821                                                         data->tolerance[i]);
822         }
823
824         mutex_unlock(&data->update_lock);
825         return count;
826 }
827
828 static ssize_t
829 show_sf2_pwm(struct device *dev, struct device_attribute *attr, char *buf)
830 {
831         struct sensor_device_attribute_2 *sensor_attr =
832             to_sensor_dev_attr_2(attr);
833         int nr = sensor_attr->nr;
834         int index = sensor_attr->index;
835         struct w83793_data *data = w83793_update_device(dev);
836
837         return sprintf(buf, "%d\n", (data->sf2_pwm[index][nr] & 0x3f) << 2);
838 }
839
840 static ssize_t
841 store_sf2_pwm(struct device *dev, struct device_attribute *attr,
842               const char *buf, size_t count)
843 {
844         struct i2c_client *client = to_i2c_client(dev);
845         struct w83793_data *data = i2c_get_clientdata(client);
846         struct sensor_device_attribute_2 *sensor_attr =
847             to_sensor_dev_attr_2(attr);
848         int nr = sensor_attr->nr;
849         int index = sensor_attr->index;
850         u8 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 0xff) >> 2;
851
852         mutex_lock(&data->update_lock);
853         data->sf2_pwm[index][nr] =
854             w83793_read_value(client, W83793_REG_SF2_PWM(index, nr)) & 0xc0;
855         data->sf2_pwm[index][nr] |= val;
856         w83793_write_value(client, W83793_REG_SF2_PWM(index, nr),
857                                                 data->sf2_pwm[index][nr]);
858         mutex_unlock(&data->update_lock);
859         return count;
860 }
861
862 static ssize_t
863 show_sf2_temp(struct device *dev, struct device_attribute *attr, char *buf)
864 {
865         struct sensor_device_attribute_2 *sensor_attr =
866             to_sensor_dev_attr_2(attr);
867         int nr = sensor_attr->nr;
868         int index = sensor_attr->index;
869         struct w83793_data *data = w83793_update_device(dev);
870
871         return sprintf(buf, "%ld\n",
872                        TEMP_FROM_REG(data->sf2_temp[index][nr] & 0x7f));
873 }
874
875 static ssize_t
876 store_sf2_temp(struct device *dev, struct device_attribute *attr,
877                const char *buf, size_t count)
878 {
879         struct i2c_client *client = to_i2c_client(dev);
880         struct w83793_data *data = i2c_get_clientdata(client);
881         struct sensor_device_attribute_2 *sensor_attr =
882             to_sensor_dev_attr_2(attr);
883         int nr = sensor_attr->nr;
884         int index = sensor_attr->index;
885         u8 val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x7f);
886
887         mutex_lock(&data->update_lock);
888         data->sf2_temp[index][nr] =
889             w83793_read_value(client, W83793_REG_SF2_TEMP(index, nr)) & 0x80;
890         data->sf2_temp[index][nr] |= val;
891         w83793_write_value(client, W83793_REG_SF2_TEMP(index, nr),
892                                              data->sf2_temp[index][nr]);
893         mutex_unlock(&data->update_lock);
894         return count;
895 }
896
897 /* only Vcore A/B and Vtt have additional 2 bits precision */
898 static ssize_t
899 show_in(struct device *dev, struct device_attribute *attr, char *buf)
900 {
901         struct sensor_device_attribute_2 *sensor_attr =
902             to_sensor_dev_attr_2(attr);
903         int nr = sensor_attr->nr;
904         int index = sensor_attr->index;
905         struct w83793_data *data = w83793_update_device(dev);
906         u16 val = data->in[index][nr];
907
908         if (index < 3) {
909                 val <<= 2;
910                 val += (data->in_low_bits[nr] >> (index * 2)) & 0x3;
911         }
912         /* voltage inputs 5VDD and 5VSB needs 150mV offset */
913         val = val * scale_in[index] + scale_in_add[index];
914         return sprintf(buf, "%d\n", val);
915 }
916
917 static ssize_t
918 store_in(struct device *dev, struct device_attribute *attr,
919          const char *buf, size_t count)
920 {
921         struct sensor_device_attribute_2 *sensor_attr =
922             to_sensor_dev_attr_2(attr);
923         int nr = sensor_attr->nr;
924         int index = sensor_attr->index;
925         struct i2c_client *client = to_i2c_client(dev);
926         struct w83793_data *data = i2c_get_clientdata(client);
927         u32 val;
928
929         val =
930             (simple_strtoul(buf, NULL, 10) +
931              scale_in[index] / 2) / scale_in[index];
932         mutex_lock(&data->update_lock);
933         if (index > 2) {
934                 /* fix the limit values of 5VDD and 5VSB to ALARM mechanism */
935                 if (1 == nr || 2 == nr) {
936                         val -= scale_in_add[index] / scale_in[index];
937                 }
938                 val = SENSORS_LIMIT(val, 0, 255);
939         } else {
940                 val = SENSORS_LIMIT(val, 0, 0x3FF);
941                 data->in_low_bits[nr] =
942                     w83793_read_value(client, W83793_REG_IN_LOW_BITS[nr]);
943                 data->in_low_bits[nr] &= ~(0x03 << (2 * index));
944                 data->in_low_bits[nr] |= (val & 0x03) << (2 * index);
945                 w83793_write_value(client, W83793_REG_IN_LOW_BITS[nr],
946                                                      data->in_low_bits[nr]);
947                 val >>= 2;
948         }
949         data->in[index][nr] = val;
950         w83793_write_value(client, W83793_REG_IN[index][nr],
951                                                         data->in[index][nr]);
952         mutex_unlock(&data->update_lock);
953         return count;
954 }
955
956 #define NOT_USED                        -1
957
958 #define SENSOR_ATTR_IN(index)                                           \
959         SENSOR_ATTR_2(in##index##_input, S_IRUGO, show_in, NULL,        \
960                 IN_READ, index),                                        \
961         SENSOR_ATTR_2(in##index##_max, S_IRUGO | S_IWUSR, show_in,      \
962                 store_in, IN_MAX, index),                               \
963         SENSOR_ATTR_2(in##index##_min, S_IRUGO | S_IWUSR, show_in,      \
964                 store_in, IN_LOW, index),                               \
965         SENSOR_ATTR_2(in##index##_alarm, S_IRUGO, show_alarm_beep,      \
966                 NULL, ALARM_STATUS, index + ((index > 2) ? 1 : 0)),     \
967         SENSOR_ATTR_2(in##index##_beep, S_IWUSR | S_IRUGO,              \
968                 show_alarm_beep, store_beep, BEEP_ENABLE,               \
969                 index + ((index > 2) ? 1 : 0))
970
971 #define SENSOR_ATTR_FAN(index)                                          \
972         SENSOR_ATTR_2(fan##index##_alarm, S_IRUGO, show_alarm_beep,     \
973                 NULL, ALARM_STATUS, index + 17),                        \
974         SENSOR_ATTR_2(fan##index##_beep, S_IWUSR | S_IRUGO,             \
975                 show_alarm_beep, store_beep, BEEP_ENABLE, index + 17),  \
976         SENSOR_ATTR_2(fan##index##_input, S_IRUGO, show_fan,            \
977                 NULL, FAN_INPUT, index - 1),                            \
978         SENSOR_ATTR_2(fan##index##_min, S_IWUSR | S_IRUGO,              \
979                 show_fan, store_fan_min, FAN_MIN, index - 1)
980
981 #define SENSOR_ATTR_PWM(index)                                          \
982         SENSOR_ATTR_2(pwm##index, S_IWUSR | S_IRUGO, show_pwm,          \
983                 store_pwm, PWM_DUTY, index - 1),                        \
984         SENSOR_ATTR_2(pwm##index##_nonstop, S_IWUSR | S_IRUGO,          \
985                 show_pwm, store_pwm, PWM_NONSTOP, index - 1),           \
986         SENSOR_ATTR_2(pwm##index##_start, S_IWUSR | S_IRUGO,            \
987                 show_pwm, store_pwm, PWM_START, index - 1),             \
988         SENSOR_ATTR_2(pwm##index##_stop_time, S_IWUSR | S_IRUGO,        \
989                 show_pwm, store_pwm, PWM_STOP_TIME, index - 1)
990
991 #define SENSOR_ATTR_TEMP(index)                                         \
992         SENSOR_ATTR_2(temp##index##_type, S_IRUGO | S_IWUSR,            \
993                 show_temp_mode, store_temp_mode, NOT_USED, index - 1),  \
994         SENSOR_ATTR_2(temp##index##_input, S_IRUGO, show_temp,          \
995                 NULL, TEMP_READ, index - 1),                            \
996         SENSOR_ATTR_2(temp##index##_max, S_IRUGO | S_IWUSR, show_temp,  \
997                 store_temp, TEMP_CRIT, index - 1),                      \
998         SENSOR_ATTR_2(temp##index##_max_hyst, S_IRUGO | S_IWUSR,        \
999                 show_temp, store_temp, TEMP_CRIT_HYST, index - 1),      \
1000         SENSOR_ATTR_2(temp##index##_warn, S_IRUGO | S_IWUSR, show_temp, \
1001                 store_temp, TEMP_WARN, index - 1),                      \
1002         SENSOR_ATTR_2(temp##index##_warn_hyst, S_IRUGO | S_IWUSR,       \
1003                 show_temp, store_temp, TEMP_WARN_HYST, index - 1),      \
1004         SENSOR_ATTR_2(temp##index##_alarm, S_IRUGO,                     \
1005                 show_alarm_beep, NULL, ALARM_STATUS, index + 11),       \
1006         SENSOR_ATTR_2(temp##index##_beep, S_IWUSR | S_IRUGO,            \
1007                 show_alarm_beep, store_beep, BEEP_ENABLE, index + 11),  \
1008         SENSOR_ATTR_2(temp##index##_auto_channels_pwm,                  \
1009                 S_IRUGO | S_IWUSR, show_sf_ctrl, store_sf_ctrl,         \
1010                 TEMP_FAN_MAP, index - 1),                               \
1011         SENSOR_ATTR_2(temp##index##_pwm_enable, S_IWUSR | S_IRUGO,      \
1012                 show_sf_ctrl, store_sf_ctrl, TEMP_PWM_ENABLE,           \
1013                 index - 1),                                             \
1014         SENSOR_ATTR_2(thermal_cruise##index, S_IRUGO | S_IWUSR,         \
1015                 show_sf_ctrl, store_sf_ctrl, TEMP_CRUISE, index - 1),   \
1016         SENSOR_ATTR_2(tolerance##index, S_IRUGO | S_IWUSR, show_sf_ctrl,\
1017                 store_sf_ctrl, TEMP_TOLERANCE, index - 1),              \
1018         SENSOR_ATTR_2(temp##index##_auto_point1_pwm, S_IRUGO | S_IWUSR, \
1019                 show_sf2_pwm, store_sf2_pwm, 0, index - 1),             \
1020         SENSOR_ATTR_2(temp##index##_auto_point2_pwm, S_IRUGO | S_IWUSR, \
1021                 show_sf2_pwm, store_sf2_pwm, 1, index - 1),             \
1022         SENSOR_ATTR_2(temp##index##_auto_point3_pwm, S_IRUGO | S_IWUSR, \
1023                 show_sf2_pwm, store_sf2_pwm, 2, index - 1),             \
1024         SENSOR_ATTR_2(temp##index##_auto_point4_pwm, S_IRUGO | S_IWUSR, \
1025                 show_sf2_pwm, store_sf2_pwm, 3, index - 1),             \
1026         SENSOR_ATTR_2(temp##index##_auto_point5_pwm, S_IRUGO | S_IWUSR, \
1027                 show_sf2_pwm, store_sf2_pwm, 4, index - 1),             \
1028         SENSOR_ATTR_2(temp##index##_auto_point6_pwm, S_IRUGO | S_IWUSR, \
1029                 show_sf2_pwm, store_sf2_pwm, 5, index - 1),             \
1030         SENSOR_ATTR_2(temp##index##_auto_point7_pwm, S_IRUGO | S_IWUSR, \
1031                 show_sf2_pwm, store_sf2_pwm, 6, index - 1),             \
1032         SENSOR_ATTR_2(temp##index##_auto_point1_temp, S_IRUGO | S_IWUSR,\
1033                 show_sf2_temp, store_sf2_temp, 0, index - 1),           \
1034         SENSOR_ATTR_2(temp##index##_auto_point2_temp, S_IRUGO | S_IWUSR,\
1035                 show_sf2_temp, store_sf2_temp, 1, index - 1),           \
1036         SENSOR_ATTR_2(temp##index##_auto_point3_temp, S_IRUGO | S_IWUSR,\
1037                 show_sf2_temp, store_sf2_temp, 2, index - 1),           \
1038         SENSOR_ATTR_2(temp##index##_auto_point4_temp, S_IRUGO | S_IWUSR,\
1039                 show_sf2_temp, store_sf2_temp, 3, index - 1),           \
1040         SENSOR_ATTR_2(temp##index##_auto_point5_temp, S_IRUGO | S_IWUSR,\
1041                 show_sf2_temp, store_sf2_temp, 4, index - 1),           \
1042         SENSOR_ATTR_2(temp##index##_auto_point6_temp, S_IRUGO | S_IWUSR,\
1043                 show_sf2_temp, store_sf2_temp, 5, index - 1),           \
1044         SENSOR_ATTR_2(temp##index##_auto_point7_temp, S_IRUGO | S_IWUSR,\
1045                 show_sf2_temp, store_sf2_temp, 6, index - 1)
1046
1047 static struct sensor_device_attribute_2 w83793_sensor_attr_2[] = {
1048         SENSOR_ATTR_IN(0),
1049         SENSOR_ATTR_IN(1),
1050         SENSOR_ATTR_IN(2),
1051         SENSOR_ATTR_IN(3),
1052         SENSOR_ATTR_IN(4),
1053         SENSOR_ATTR_IN(5),
1054         SENSOR_ATTR_IN(6),
1055         SENSOR_ATTR_IN(7),
1056         SENSOR_ATTR_IN(8),
1057         SENSOR_ATTR_IN(9),
1058         SENSOR_ATTR_FAN(1),
1059         SENSOR_ATTR_FAN(2),
1060         SENSOR_ATTR_FAN(3),
1061         SENSOR_ATTR_FAN(4),
1062         SENSOR_ATTR_FAN(5),
1063         SENSOR_ATTR_PWM(1),
1064         SENSOR_ATTR_PWM(2),
1065         SENSOR_ATTR_PWM(3),
1066 };
1067
1068 static struct sensor_device_attribute_2 w83793_temp[] = {
1069         SENSOR_ATTR_TEMP(1),
1070         SENSOR_ATTR_TEMP(2),
1071         SENSOR_ATTR_TEMP(3),
1072         SENSOR_ATTR_TEMP(4),
1073         SENSOR_ATTR_TEMP(5),
1074         SENSOR_ATTR_TEMP(6),
1075 };
1076
1077 /* Fan6-Fan12 */
1078 static struct sensor_device_attribute_2 w83793_left_fan[] = {
1079         SENSOR_ATTR_FAN(6),
1080         SENSOR_ATTR_FAN(7),
1081         SENSOR_ATTR_FAN(8),
1082         SENSOR_ATTR_FAN(9),
1083         SENSOR_ATTR_FAN(10),
1084         SENSOR_ATTR_FAN(11),
1085         SENSOR_ATTR_FAN(12),
1086 };
1087
1088 /* Pwm4-Pwm8 */
1089 static struct sensor_device_attribute_2 w83793_left_pwm[] = {
1090         SENSOR_ATTR_PWM(4),
1091         SENSOR_ATTR_PWM(5),
1092         SENSOR_ATTR_PWM(6),
1093         SENSOR_ATTR_PWM(7),
1094         SENSOR_ATTR_PWM(8),
1095 };
1096
1097 static struct sensor_device_attribute_2 w83793_vid[] = {
1098         SENSOR_ATTR_2(cpu0_vid, S_IRUGO, show_vid, NULL, NOT_USED, 0),
1099         SENSOR_ATTR_2(cpu1_vid, S_IRUGO, show_vid, NULL, NOT_USED, 1),
1100 };
1101 static DEVICE_ATTR(vrm, S_IWUSR | S_IRUGO, show_vrm, store_vrm);
1102
1103 static struct sensor_device_attribute_2 sda_single_files[] = {
1104         SENSOR_ATTR_2(chassis, S_IWUSR | S_IRUGO, show_alarm_beep,
1105                       store_chassis_clear, ALARM_STATUS, 30),
1106         SENSOR_ATTR_2(beep_enable, S_IWUSR | S_IRUGO, show_beep_enable,
1107                       store_beep_enable, NOT_USED, NOT_USED),
1108         SENSOR_ATTR_2(pwm_default, S_IWUSR | S_IRUGO, show_sf_setup,
1109                       store_sf_setup, SETUP_PWM_DEFAULT, NOT_USED),
1110         SENSOR_ATTR_2(pwm_uptime, S_IWUSR | S_IRUGO, show_sf_setup,
1111                       store_sf_setup, SETUP_PWM_UPTIME, NOT_USED),
1112         SENSOR_ATTR_2(pwm_downtime, S_IWUSR | S_IRUGO, show_sf_setup,
1113                       store_sf_setup, SETUP_PWM_DOWNTIME, NOT_USED),
1114         SENSOR_ATTR_2(temp_critical, S_IWUSR | S_IRUGO, show_sf_setup,
1115                       store_sf_setup, SETUP_TEMP_CRITICAL, NOT_USED),
1116 };
1117
1118 static void w83793_init_client(struct i2c_client *client)
1119 {
1120         if (reset) {
1121                 w83793_write_value(client, W83793_REG_CONFIG, 0x80);
1122         }
1123
1124         /* Start monitoring */
1125         w83793_write_value(client, W83793_REG_CONFIG,
1126                            w83793_read_value(client, W83793_REG_CONFIG) | 0x01);
1127 }
1128
1129 /*
1130  * Watchdog routines
1131  */
1132
1133 static int watchdog_set_timeout(struct w83793_data *data, int timeout)
1134 {
1135         int ret, mtimeout;
1136
1137         mtimeout = DIV_ROUND_UP(timeout, 60);
1138
1139         if (mtimeout > 255)
1140                 return -EINVAL;
1141
1142         mutex_lock(&data->watchdog_lock);
1143         if (!data->client) {
1144                 ret = -ENODEV;
1145                 goto leave;
1146         }
1147
1148         data->watchdog_timeout = mtimeout;
1149
1150         /* Set Timeout value (in Minutes) */
1151         w83793_write_value(data->client, W83793_REG_WDT_TIMEOUT,
1152                            data->watchdog_timeout);
1153
1154         ret = mtimeout * 60;
1155
1156 leave:
1157         mutex_unlock(&data->watchdog_lock);
1158         return ret;
1159 }
1160
1161 static int watchdog_get_timeout(struct w83793_data *data)
1162 {
1163         int timeout;
1164
1165         mutex_lock(&data->watchdog_lock);
1166         timeout = data->watchdog_timeout * 60;
1167         mutex_unlock(&data->watchdog_lock);
1168
1169         return timeout;
1170 }
1171
1172 static int watchdog_trigger(struct w83793_data *data)
1173 {
1174         int ret = 0;
1175
1176         mutex_lock(&data->watchdog_lock);
1177         if (!data->client) {
1178                 ret = -ENODEV;
1179                 goto leave;
1180         }
1181
1182         /* Set Timeout value (in Minutes) */
1183         w83793_write_value(data->client, W83793_REG_WDT_TIMEOUT,
1184                            data->watchdog_timeout);
1185
1186 leave:
1187         mutex_unlock(&data->watchdog_lock);
1188         return ret;
1189 }
1190
1191 static int watchdog_enable(struct w83793_data *data)
1192 {
1193         int ret = 0;
1194
1195         mutex_lock(&data->watchdog_lock);
1196         if (!data->client) {
1197                 ret = -ENODEV;
1198                 goto leave;
1199         }
1200
1201         /* Set initial timeout */
1202         w83793_write_value(data->client, W83793_REG_WDT_TIMEOUT,
1203                            data->watchdog_timeout);
1204
1205         /* Enable Soft Watchdog */
1206         w83793_write_value(data->client, W83793_REG_WDT_LOCK, 0x55);
1207
1208 leave:
1209         mutex_unlock(&data->watchdog_lock);
1210         return ret;
1211 }
1212
1213 static int watchdog_disable(struct w83793_data *data)
1214 {
1215         int ret = 0;
1216
1217         mutex_lock(&data->watchdog_lock);
1218         if (!data->client) {
1219                 ret = -ENODEV;
1220                 goto leave;
1221         }
1222
1223         /* Disable Soft Watchdog */
1224         w83793_write_value(data->client, W83793_REG_WDT_LOCK, 0xAA);
1225
1226 leave:
1227         mutex_unlock(&data->watchdog_lock);
1228         return ret;
1229 }
1230
1231 static int watchdog_open(struct inode *inode, struct file *filp)
1232 {
1233         struct w83793_data *pos, *data = NULL;
1234         int watchdog_is_open;
1235
1236         /* We get called from drivers/char/misc.c with misc_mtx hold, and we
1237            call misc_register() from  w83793_probe() with watchdog_data_mutex
1238            hold, as misc_register() takes the misc_mtx lock, this is a possible
1239            deadlock, so we use mutex_trylock here. */
1240         if (!mutex_trylock(&watchdog_data_mutex))
1241                 return -ERESTARTSYS;
1242         list_for_each_entry(pos, &watchdog_data_list, list) {
1243                 if (pos->watchdog_miscdev.minor == iminor(inode)) {
1244                         data = pos;
1245                         break;
1246                 }
1247         }
1248
1249         /* Check, if device is already open */
1250         watchdog_is_open = test_and_set_bit(0, &data->watchdog_is_open);
1251
1252         /* Increase data reference counter (if not already done).
1253            Note we can never not have found data, so we don't check for this */
1254         if (!watchdog_is_open)
1255                 kref_get(&data->kref);
1256
1257         mutex_unlock(&watchdog_data_mutex);
1258
1259         /* Check, if device is already open and possibly issue error */
1260         if (watchdog_is_open)
1261                 return -EBUSY;
1262
1263         /* Enable Soft Watchdog */
1264         watchdog_enable(data);
1265
1266         /* Store pointer to data into filp's private data */
1267         filp->private_data = data;
1268
1269         return nonseekable_open(inode, filp);
1270 }
1271
1272 static int watchdog_close(struct inode *inode, struct file *filp)
1273 {
1274         struct w83793_data *data = filp->private_data;
1275
1276         if (data->watchdog_expect_close) {
1277                 watchdog_disable(data);
1278                 data->watchdog_expect_close = 0;
1279         } else {
1280                 watchdog_trigger(data);
1281                 dev_crit(&data->client->dev,
1282                         "unexpected close, not stopping watchdog!\n");
1283         }
1284
1285         clear_bit(0, &data->watchdog_is_open);
1286
1287         /* Decrease data reference counter */
1288         mutex_lock(&watchdog_data_mutex);
1289         kref_put(&data->kref, w83793_release_resources);
1290         mutex_unlock(&watchdog_data_mutex);
1291
1292         return 0;
1293 }
1294
1295 static ssize_t watchdog_write(struct file *filp, const char __user *buf,
1296         size_t count, loff_t *offset)
1297 {
1298         ssize_t ret;
1299         struct w83793_data *data = filp->private_data;
1300
1301         if (count) {
1302                 if (!nowayout) {
1303                         size_t i;
1304
1305                         /* Clear it in case it was set with a previous write */
1306                         data->watchdog_expect_close = 0;
1307
1308                         for (i = 0; i != count; i++) {
1309                                 char c;
1310                                 if (get_user(c, buf + i))
1311                                         return -EFAULT;
1312                                 if (c == 'V')
1313                                         data->watchdog_expect_close = 1;
1314                         }
1315                 }
1316                 ret = watchdog_trigger(data);
1317                 if (ret < 0)
1318                         return ret;
1319         }
1320         return count;
1321 }
1322
1323 static long watchdog_ioctl(struct file *filp, unsigned int cmd,
1324                            unsigned long arg)
1325 {
1326         static struct watchdog_info ident = {
1327                 .options = WDIOF_KEEPALIVEPING |
1328                            WDIOF_SETTIMEOUT |
1329                            WDIOF_CARDRESET,
1330                 .identity = "w83793 watchdog"
1331         };
1332
1333         int val, ret = 0;
1334         struct w83793_data *data = filp->private_data;
1335
1336         lock_kernel();
1337         switch (cmd) {
1338         case WDIOC_GETSUPPORT:
1339                 if (!nowayout)
1340                         ident.options |= WDIOF_MAGICCLOSE;
1341                 if (copy_to_user((void __user *)arg, &ident, sizeof(ident)))
1342                         ret = -EFAULT;
1343                 break;
1344
1345         case WDIOC_GETSTATUS:
1346                 val = data->watchdog_caused_reboot ? WDIOF_CARDRESET : 0;
1347                 ret = put_user(val, (int __user *)arg);
1348                 break;
1349
1350         case WDIOC_GETBOOTSTATUS:
1351                 ret = put_user(0, (int __user *)arg);
1352                 break;
1353
1354         case WDIOC_KEEPALIVE:
1355                 ret = watchdog_trigger(data);
1356                 break;
1357
1358         case WDIOC_GETTIMEOUT:
1359                 val = watchdog_get_timeout(data);
1360                 ret = put_user(val, (int __user *)arg);
1361                 break;
1362
1363         case WDIOC_SETTIMEOUT:
1364                 if (get_user(val, (int __user *)arg)) {
1365                         ret = -EFAULT;
1366                         break;
1367                 }
1368                 ret = watchdog_set_timeout(data, val);
1369                 if (ret > 0)
1370                         ret = put_user(ret, (int __user *)arg);
1371                 break;
1372
1373         case WDIOC_SETOPTIONS:
1374                 if (get_user(val, (int __user *)arg)) {
1375                         ret = -EFAULT;
1376                         break;
1377                 }
1378
1379                 if (val & WDIOS_DISABLECARD)
1380                         ret = watchdog_disable(data);
1381                 else if (val & WDIOS_ENABLECARD)
1382                         ret = watchdog_enable(data);
1383                 else
1384                         ret = -EINVAL;
1385
1386                 break;
1387         default:
1388                 ret = -ENOTTY;
1389         }
1390         unlock_kernel();
1391         return ret;
1392 }
1393
1394 static const struct file_operations watchdog_fops = {
1395         .owner = THIS_MODULE,
1396         .llseek = no_llseek,
1397         .open = watchdog_open,
1398         .release = watchdog_close,
1399         .write = watchdog_write,
1400         .unlocked_ioctl = watchdog_ioctl,
1401 };
1402
1403 /*
1404  *      Notifier for system down
1405  */
1406
1407 static int watchdog_notify_sys(struct notifier_block *this, unsigned long code,
1408                                void *unused)
1409 {
1410         struct w83793_data *data = NULL;
1411
1412         if (code == SYS_DOWN || code == SYS_HALT) {
1413
1414                 /* Disable each registered watchdog */
1415                 mutex_lock(&watchdog_data_mutex);
1416                 list_for_each_entry(data, &watchdog_data_list, list) {
1417                         if (data->watchdog_miscdev.minor)
1418                                 watchdog_disable(data);
1419                 }
1420                 mutex_unlock(&watchdog_data_mutex);
1421         }
1422
1423         return NOTIFY_DONE;
1424 }
1425
1426 /*
1427  *      The WDT needs to learn about soft shutdowns in order to
1428  *      turn the timebomb registers off.
1429  */
1430
1431 static struct notifier_block watchdog_notifier = {
1432         .notifier_call = watchdog_notify_sys,
1433 };
1434
1435 /*
1436  * Init / remove routines
1437  */
1438
1439 static int w83793_remove(struct i2c_client *client)
1440 {
1441         struct w83793_data *data = i2c_get_clientdata(client);
1442         struct device *dev = &client->dev;
1443         int i, tmp;
1444
1445         /* Unregister the watchdog (if registered) */
1446         if (data->watchdog_miscdev.minor) {
1447                 misc_deregister(&data->watchdog_miscdev);
1448
1449                 if (data->watchdog_is_open) {
1450                         dev_warn(&client->dev,
1451                                 "i2c client detached with watchdog open! "
1452                                 "Stopping watchdog.\n");
1453                         watchdog_disable(data);
1454                 }
1455
1456                 mutex_lock(&watchdog_data_mutex);
1457                 list_del(&data->list);
1458                 mutex_unlock(&watchdog_data_mutex);
1459
1460                 /* Tell the watchdog code the client is gone */
1461                 mutex_lock(&data->watchdog_lock);
1462                 data->client = NULL;
1463                 mutex_unlock(&data->watchdog_lock);
1464         }
1465
1466         /* Reset Configuration Register to Disable Watch Dog Registers */
1467         tmp = w83793_read_value(client, W83793_REG_CONFIG);
1468         w83793_write_value(client, W83793_REG_CONFIG, tmp & ~0x04);
1469
1470         unregister_reboot_notifier(&watchdog_notifier);
1471
1472         hwmon_device_unregister(data->hwmon_dev);
1473
1474         for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++)
1475                 device_remove_file(dev,
1476                                    &w83793_sensor_attr_2[i].dev_attr);
1477
1478         for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
1479                 device_remove_file(dev, &sda_single_files[i].dev_attr);
1480
1481         for (i = 0; i < ARRAY_SIZE(w83793_vid); i++)
1482                 device_remove_file(dev, &w83793_vid[i].dev_attr);
1483         device_remove_file(dev, &dev_attr_vrm);
1484
1485         for (i = 0; i < ARRAY_SIZE(w83793_left_fan); i++)
1486                 device_remove_file(dev, &w83793_left_fan[i].dev_attr);
1487
1488         for (i = 0; i < ARRAY_SIZE(w83793_left_pwm); i++)
1489                 device_remove_file(dev, &w83793_left_pwm[i].dev_attr);
1490
1491         for (i = 0; i < ARRAY_SIZE(w83793_temp); i++)
1492                 device_remove_file(dev, &w83793_temp[i].dev_attr);
1493
1494         if (data->lm75[0] != NULL)
1495                 i2c_unregister_device(data->lm75[0]);
1496         if (data->lm75[1] != NULL)
1497                 i2c_unregister_device(data->lm75[1]);
1498
1499         /* Decrease data reference counter */
1500         mutex_lock(&watchdog_data_mutex);
1501         kref_put(&data->kref, w83793_release_resources);
1502         mutex_unlock(&watchdog_data_mutex);
1503
1504         return 0;
1505 }
1506
1507 static int
1508 w83793_detect_subclients(struct i2c_client *client)
1509 {
1510         int i, id, err;
1511         int address = client->addr;
1512         u8 tmp;
1513         struct i2c_adapter *adapter = client->adapter;
1514         struct w83793_data *data = i2c_get_clientdata(client);
1515
1516         id = i2c_adapter_id(adapter);
1517         if (force_subclients[0] == id && force_subclients[1] == address) {
1518                 for (i = 2; i <= 3; i++) {
1519                         if (force_subclients[i] < 0x48
1520                             || force_subclients[i] > 0x4f) {
1521                                 dev_err(&client->dev,
1522                                         "invalid subclient "
1523                                         "address %d; must be 0x48-0x4f\n",
1524                                         force_subclients[i]);
1525                                 err = -EINVAL;
1526                                 goto ERROR_SC_0;
1527                         }
1528                 }
1529                 w83793_write_value(client, W83793_REG_I2C_SUBADDR,
1530                                    (force_subclients[2] & 0x07) |
1531                                    ((force_subclients[3] & 0x07) << 4));
1532         }
1533
1534         tmp = w83793_read_value(client, W83793_REG_I2C_SUBADDR);
1535         if (!(tmp & 0x08)) {
1536                 data->lm75[0] = i2c_new_dummy(adapter, 0x48 + (tmp & 0x7));
1537         }
1538         if (!(tmp & 0x80)) {
1539                 if ((data->lm75[0] != NULL)
1540                     && ((tmp & 0x7) == ((tmp >> 4) & 0x7))) {
1541                         dev_err(&client->dev,
1542                                 "duplicate addresses 0x%x, "
1543                                 "use force_subclients\n", data->lm75[0]->addr);
1544                         err = -ENODEV;
1545                         goto ERROR_SC_1;
1546                 }
1547                 data->lm75[1] = i2c_new_dummy(adapter,
1548                                               0x48 + ((tmp >> 4) & 0x7));
1549         }
1550
1551         return 0;
1552
1553         /* Undo inits in case of errors */
1554
1555 ERROR_SC_1:
1556         if (data->lm75[0] != NULL)
1557                 i2c_unregister_device(data->lm75[0]);
1558 ERROR_SC_0:
1559         return err;
1560 }
1561
1562 /* Return 0 if detection is successful, -ENODEV otherwise */
1563 static int w83793_detect(struct i2c_client *client,
1564                          struct i2c_board_info *info)
1565 {
1566         u8 tmp, bank, chip_id;
1567         struct i2c_adapter *adapter = client->adapter;
1568         unsigned short address = client->addr;
1569
1570         if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
1571                 return -ENODEV;
1572         }
1573
1574         bank = i2c_smbus_read_byte_data(client, W83793_REG_BANKSEL);
1575
1576         tmp = bank & 0x80 ? 0x5c : 0xa3;
1577         /* Check Winbond vendor ID */
1578         if (tmp != i2c_smbus_read_byte_data(client, W83793_REG_VENDORID)) {
1579                 pr_debug("w83793: Detection failed at check vendor id\n");
1580                 return -ENODEV;
1581         }
1582
1583         /* If Winbond chip, address of chip and W83793_REG_I2C_ADDR
1584            should match */
1585         if ((bank & 0x07) == 0
1586          && i2c_smbus_read_byte_data(client, W83793_REG_I2C_ADDR) !=
1587             (address << 1)) {
1588                 pr_debug("w83793: Detection failed at check i2c addr\n");
1589                 return -ENODEV;
1590         }
1591
1592         /* Determine the chip type now */
1593         chip_id = i2c_smbus_read_byte_data(client, W83793_REG_CHIPID);
1594         if (chip_id != 0x7b)
1595                 return -ENODEV;
1596
1597         strlcpy(info->type, "w83793", I2C_NAME_SIZE);
1598
1599         return 0;
1600 }
1601
1602 static int w83793_probe(struct i2c_client *client,
1603                         const struct i2c_device_id *id)
1604 {
1605         struct device *dev = &client->dev;
1606         const int watchdog_minors[] = { WATCHDOG_MINOR, 212, 213, 214, 215 };
1607         struct w83793_data *data;
1608         int i, tmp, val, err;
1609         int files_fan = ARRAY_SIZE(w83793_left_fan) / 7;
1610         int files_pwm = ARRAY_SIZE(w83793_left_pwm) / 5;
1611         int files_temp = ARRAY_SIZE(w83793_temp) / 6;
1612
1613         data = kzalloc(sizeof(struct w83793_data), GFP_KERNEL);
1614         if (!data) {
1615                 err = -ENOMEM;
1616                 goto exit;
1617         }
1618
1619         i2c_set_clientdata(client, data);
1620         data->bank = i2c_smbus_read_byte_data(client, W83793_REG_BANKSEL);
1621         mutex_init(&data->update_lock);
1622         mutex_init(&data->watchdog_lock);
1623         INIT_LIST_HEAD(&data->list);
1624         kref_init(&data->kref);
1625
1626         /* Store client pointer in our data struct for watchdog usage
1627            (where the client is found through a data ptr instead of the
1628            otherway around) */
1629         data->client = client;
1630
1631         err = w83793_detect_subclients(client);
1632         if (err)
1633                 goto free_mem;
1634
1635         /* Initialize the chip */
1636         w83793_init_client(client);
1637
1638         /*
1639            Only fan 1-5 has their own input pins,
1640            Pwm 1-3 has their own pins
1641          */
1642         data->has_fan = 0x1f;
1643         data->has_pwm = 0x07;
1644         tmp = w83793_read_value(client, W83793_REG_MFC);
1645         val = w83793_read_value(client, W83793_REG_FANIN_CTRL);
1646
1647         /* check the function of pins 49-56 */
1648         if (tmp & 0x80) {
1649                 data->has_vid |= 0x2;   /* has VIDB */
1650         } else {
1651                 data->has_pwm |= 0x18;  /* pwm 4,5 */
1652                 if (val & 0x01) {       /* fan 6 */
1653                         data->has_fan |= 0x20;
1654                         data->has_pwm |= 0x20;
1655                 }
1656                 if (val & 0x02) {       /* fan 7 */
1657                         data->has_fan |= 0x40;
1658                         data->has_pwm |= 0x40;
1659                 }
1660                 if (!(tmp & 0x40) && (val & 0x04)) {    /* fan 8 */
1661                         data->has_fan |= 0x80;
1662                         data->has_pwm |= 0x80;
1663                 }
1664         }
1665
1666         /* check the function of pins 37-40 */
1667         if (!(tmp & 0x29))
1668                 data->has_vid |= 0x1;   /* has VIDA */
1669         if (0x08 == (tmp & 0x0c)) {
1670                 if (val & 0x08) /* fan 9 */
1671                         data->has_fan |= 0x100;
1672                 if (val & 0x10) /* fan 10 */
1673                         data->has_fan |= 0x200;
1674         }
1675         if (0x20 == (tmp & 0x30)) {
1676                 if (val & 0x20) /* fan 11 */
1677                         data->has_fan |= 0x400;
1678                 if (val & 0x40) /* fan 12 */
1679                         data->has_fan |= 0x800;
1680         }
1681
1682         if ((tmp & 0x01) && (val & 0x04)) {     /* fan 8, second location */
1683                 data->has_fan |= 0x80;
1684                 data->has_pwm |= 0x80;
1685         }
1686
1687         tmp = w83793_read_value(client, W83793_REG_FANIN_SEL);
1688         if ((tmp & 0x01) && (val & 0x08)) {     /* fan 9, second location */
1689                 data->has_fan |= 0x100;
1690         }
1691         if ((tmp & 0x02) && (val & 0x10)) {     /* fan 10, second location */
1692                 data->has_fan |= 0x200;
1693         }
1694         if ((tmp & 0x04) && (val & 0x20)) {     /* fan 11, second location */
1695                 data->has_fan |= 0x400;
1696         }
1697         if ((tmp & 0x08) && (val & 0x40)) {     /* fan 12, second location */
1698                 data->has_fan |= 0x800;
1699         }
1700
1701         /* check the temp1-6 mode, ignore former AMDSI selected inputs */
1702         tmp = w83793_read_value(client,W83793_REG_TEMP_MODE[0]);
1703         if (tmp & 0x01)
1704                 data->has_temp |= 0x01;
1705         if (tmp & 0x04)
1706                 data->has_temp |= 0x02;
1707         if (tmp & 0x10)
1708                 data->has_temp |= 0x04;
1709         if (tmp & 0x40)
1710                 data->has_temp |= 0x08;
1711
1712         tmp = w83793_read_value(client,W83793_REG_TEMP_MODE[1]);
1713         if (tmp & 0x01)
1714                 data->has_temp |= 0x10;
1715         if (tmp & 0x02)
1716                 data->has_temp |= 0x20;
1717
1718         /* Register sysfs hooks */
1719         for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++) {
1720                 err = device_create_file(dev,
1721                                          &w83793_sensor_attr_2[i].dev_attr);
1722                 if (err)
1723                         goto exit_remove;
1724         }
1725
1726         for (i = 0; i < ARRAY_SIZE(w83793_vid); i++) {
1727                 if (!(data->has_vid & (1 << i)))
1728                         continue;
1729                 err = device_create_file(dev, &w83793_vid[i].dev_attr);
1730                 if (err)
1731                         goto exit_remove;
1732         }
1733         if (data->has_vid) {
1734                 data->vrm = vid_which_vrm();
1735                 err = device_create_file(dev, &dev_attr_vrm);
1736                 if (err)
1737                         goto exit_remove;
1738         }
1739
1740         for (i = 0; i < ARRAY_SIZE(sda_single_files); i++) {
1741                 err = device_create_file(dev, &sda_single_files[i].dev_attr);
1742                 if (err)
1743                         goto exit_remove;
1744
1745         }
1746
1747         for (i = 0; i < 6; i++) {
1748                 int j;
1749                 if (!(data->has_temp & (1 << i)))
1750                         continue;
1751                 for (j = 0; j < files_temp; j++) {
1752                         err = device_create_file(dev,
1753                                                 &w83793_temp[(i) * files_temp
1754                                                                 + j].dev_attr);
1755                         if (err)
1756                                 goto exit_remove;
1757                 }
1758         }
1759
1760         for (i = 5; i < 12; i++) {
1761                 int j;
1762                 if (!(data->has_fan & (1 << i)))
1763                         continue;
1764                 for (j = 0; j < files_fan; j++) {
1765                         err = device_create_file(dev,
1766                                            &w83793_left_fan[(i - 5) * files_fan
1767                                                                 + j].dev_attr);
1768                         if (err)
1769                                 goto exit_remove;
1770                 }
1771         }
1772
1773         for (i = 3; i < 8; i++) {
1774                 int j;
1775                 if (!(data->has_pwm & (1 << i)))
1776                         continue;
1777                 for (j = 0; j < files_pwm; j++) {
1778                         err = device_create_file(dev,
1779                                            &w83793_left_pwm[(i - 3) * files_pwm
1780                                                                 + j].dev_attr);
1781                         if (err)
1782                                 goto exit_remove;
1783                 }
1784         }
1785
1786         data->hwmon_dev = hwmon_device_register(dev);
1787         if (IS_ERR(data->hwmon_dev)) {
1788                 err = PTR_ERR(data->hwmon_dev);
1789                 goto exit_remove;
1790         }
1791
1792         /* Watchdog initialization */
1793
1794         /* Register boot notifier */
1795         err = register_reboot_notifier(&watchdog_notifier);
1796         if (err != 0) {
1797                 dev_err(&client->dev,
1798                         "cannot register reboot notifier (err=%d)\n", err);
1799                 goto exit_devunreg;
1800         }
1801
1802         /* Enable Watchdog registers.
1803            Set Configuration Register to Enable Watch Dog Registers
1804            (Bit 2) = XXXX, X1XX. */
1805         tmp = w83793_read_value(client, W83793_REG_CONFIG);
1806         w83793_write_value(client, W83793_REG_CONFIG, tmp | 0x04);
1807
1808         /* Set the default watchdog timeout */
1809         data->watchdog_timeout = timeout;
1810
1811         /* Check, if last reboot was caused by watchdog */
1812         data->watchdog_caused_reboot =
1813           w83793_read_value(data->client, W83793_REG_WDT_STATUS) & 0x01;
1814
1815         /* Disable Soft Watchdog during initialiation */
1816         watchdog_disable(data);
1817
1818         /* We take the data_mutex lock early so that watchdog_open() cannot
1819            run when misc_register() has completed, but we've not yet added
1820            our data to the watchdog_data_list (and set the default timeout) */
1821         mutex_lock(&watchdog_data_mutex);
1822         for (i = 0; i < ARRAY_SIZE(watchdog_minors); i++) {
1823                 /* Register our watchdog part */
1824                 snprintf(data->watchdog_name, sizeof(data->watchdog_name),
1825                         "watchdog%c", (i == 0) ? '\0' : ('0' + i));
1826                 data->watchdog_miscdev.name = data->watchdog_name;
1827                 data->watchdog_miscdev.fops = &watchdog_fops;
1828                 data->watchdog_miscdev.minor = watchdog_minors[i];
1829
1830                 err = misc_register(&data->watchdog_miscdev);
1831                 if (err == -EBUSY)
1832                         continue;
1833                 if (err) {
1834                         data->watchdog_miscdev.minor = 0;
1835                         dev_err(&client->dev,
1836                                 "Registering watchdog chardev: %d\n", err);
1837                         break;
1838                 }
1839
1840                 list_add(&data->list, &watchdog_data_list);
1841
1842                 dev_info(&client->dev,
1843                         "Registered watchdog chardev major 10, minor: %d\n",
1844                         watchdog_minors[i]);
1845                 break;
1846         }
1847         if (i == ARRAY_SIZE(watchdog_minors)) {
1848                 data->watchdog_miscdev.minor = 0;
1849                 dev_warn(&client->dev, "Couldn't register watchdog chardev "
1850                         "(due to no free minor)\n");
1851         }
1852
1853         mutex_unlock(&watchdog_data_mutex);
1854
1855         return 0;
1856
1857         /* Unregister hwmon device */
1858
1859 exit_devunreg:
1860
1861         hwmon_device_unregister(data->hwmon_dev);
1862
1863         /* Unregister sysfs hooks */
1864
1865 exit_remove:
1866         for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++)
1867                 device_remove_file(dev, &w83793_sensor_attr_2[i].dev_attr);
1868
1869         for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
1870                 device_remove_file(dev, &sda_single_files[i].dev_attr);
1871
1872         for (i = 0; i < ARRAY_SIZE(w83793_vid); i++)
1873                 device_remove_file(dev, &w83793_vid[i].dev_attr);
1874
1875         for (i = 0; i < ARRAY_SIZE(w83793_left_fan); i++)
1876                 device_remove_file(dev, &w83793_left_fan[i].dev_attr);
1877
1878         for (i = 0; i < ARRAY_SIZE(w83793_left_pwm); i++)
1879                 device_remove_file(dev, &w83793_left_pwm[i].dev_attr);
1880
1881         for (i = 0; i < ARRAY_SIZE(w83793_temp); i++)
1882                 device_remove_file(dev, &w83793_temp[i].dev_attr);
1883
1884         if (data->lm75[0] != NULL)
1885                 i2c_unregister_device(data->lm75[0]);
1886         if (data->lm75[1] != NULL)
1887                 i2c_unregister_device(data->lm75[1]);
1888 free_mem:
1889         kfree(data);
1890 exit:
1891         return err;
1892 }
1893
1894 static void w83793_update_nonvolatile(struct device *dev)
1895 {
1896         struct i2c_client *client = to_i2c_client(dev);
1897         struct w83793_data *data = i2c_get_clientdata(client);
1898         int i, j;
1899         /*
1900            They are somewhat "stable" registers, and to update them everytime
1901            takes so much time, it's just not worthy. Update them in a long
1902            interval to avoid exception.
1903          */
1904         if (!(time_after(jiffies, data->last_nonvolatile + HZ * 300)
1905               || !data->valid))
1906                 return;
1907         /* update voltage limits */
1908         for (i = 1; i < 3; i++) {
1909                 for (j = 0; j < ARRAY_SIZE(data->in); j++) {
1910                         data->in[j][i] =
1911                             w83793_read_value(client, W83793_REG_IN[j][i]);
1912                 }
1913                 data->in_low_bits[i] =
1914                     w83793_read_value(client, W83793_REG_IN_LOW_BITS[i]);
1915         }
1916
1917         for (i = 0; i < ARRAY_SIZE(data->fan_min); i++) {
1918                 /* Update the Fan measured value and limits */
1919                 if (!(data->has_fan & (1 << i))) {
1920                         continue;
1921                 }
1922                 data->fan_min[i] =
1923                     w83793_read_value(client, W83793_REG_FAN_MIN(i)) << 8;
1924                 data->fan_min[i] |=
1925                     w83793_read_value(client, W83793_REG_FAN_MIN(i) + 1);
1926         }
1927
1928         for (i = 0; i < ARRAY_SIZE(data->temp_fan_map); i++) {
1929                 if (!(data->has_temp & (1 << i)))
1930                         continue;
1931                 data->temp_fan_map[i] =
1932                     w83793_read_value(client, W83793_REG_TEMP_FAN_MAP(i));
1933                 for (j = 1; j < 5; j++) {
1934                         data->temp[i][j] =
1935                             w83793_read_value(client, W83793_REG_TEMP[i][j]);
1936                 }
1937                 data->temp_cruise[i] =
1938                     w83793_read_value(client, W83793_REG_TEMP_CRUISE(i));
1939                 for (j = 0; j < 7; j++) {
1940                         data->sf2_pwm[i][j] =
1941                             w83793_read_value(client, W83793_REG_SF2_PWM(i, j));
1942                         data->sf2_temp[i][j] =
1943                             w83793_read_value(client,
1944                                               W83793_REG_SF2_TEMP(i, j));
1945                 }
1946         }
1947
1948         for (i = 0; i < ARRAY_SIZE(data->temp_mode); i++)
1949                 data->temp_mode[i] =
1950                     w83793_read_value(client, W83793_REG_TEMP_MODE[i]);
1951
1952         for (i = 0; i < ARRAY_SIZE(data->tolerance); i++) {
1953                 data->tolerance[i] =
1954                     w83793_read_value(client, W83793_REG_TEMP_TOL(i));
1955         }
1956
1957         for (i = 0; i < ARRAY_SIZE(data->pwm); i++) {
1958                 if (!(data->has_pwm & (1 << i)))
1959                         continue;
1960                 data->pwm[i][PWM_NONSTOP] =
1961                     w83793_read_value(client, W83793_REG_PWM(i, PWM_NONSTOP));
1962                 data->pwm[i][PWM_START] =
1963                     w83793_read_value(client, W83793_REG_PWM(i, PWM_START));
1964                 data->pwm_stop_time[i] =
1965                     w83793_read_value(client, W83793_REG_PWM_STOP_TIME(i));
1966         }
1967
1968         data->pwm_default = w83793_read_value(client, W83793_REG_PWM_DEFAULT);
1969         data->pwm_enable = w83793_read_value(client, W83793_REG_PWM_ENABLE);
1970         data->pwm_uptime = w83793_read_value(client, W83793_REG_PWM_UPTIME);
1971         data->pwm_downtime = w83793_read_value(client, W83793_REG_PWM_DOWNTIME);
1972         data->temp_critical =
1973             w83793_read_value(client, W83793_REG_TEMP_CRITICAL);
1974         data->beep_enable = w83793_read_value(client, W83793_REG_OVT_BEEP);
1975
1976         for (i = 0; i < ARRAY_SIZE(data->beeps); i++) {
1977                 data->beeps[i] = w83793_read_value(client, W83793_REG_BEEP(i));
1978         }
1979
1980         data->last_nonvolatile = jiffies;
1981 }
1982
1983 static struct w83793_data *w83793_update_device(struct device *dev)
1984 {
1985         struct i2c_client *client = to_i2c_client(dev);
1986         struct w83793_data *data = i2c_get_clientdata(client);
1987         int i;
1988
1989         mutex_lock(&data->update_lock);
1990
1991         if (!(time_after(jiffies, data->last_updated + HZ * 2)
1992               || !data->valid))
1993                 goto END;
1994
1995         /* Update the voltages measured value and limits */
1996         for (i = 0; i < ARRAY_SIZE(data->in); i++)
1997                 data->in[i][IN_READ] =
1998                     w83793_read_value(client, W83793_REG_IN[i][IN_READ]);
1999
2000         data->in_low_bits[IN_READ] =
2001             w83793_read_value(client, W83793_REG_IN_LOW_BITS[IN_READ]);
2002
2003         for (i = 0; i < ARRAY_SIZE(data->fan); i++) {
2004                 if (!(data->has_fan & (1 << i))) {
2005                         continue;
2006                 }
2007                 data->fan[i] =
2008                     w83793_read_value(client, W83793_REG_FAN(i)) << 8;
2009                 data->fan[i] |=
2010                     w83793_read_value(client, W83793_REG_FAN(i) + 1);
2011         }
2012
2013         for (i = 0; i < ARRAY_SIZE(data->temp); i++) {
2014                 if (!(data->has_temp & (1 << i)))
2015                         continue;
2016                 data->temp[i][TEMP_READ] =
2017                     w83793_read_value(client, W83793_REG_TEMP[i][TEMP_READ]);
2018         }
2019
2020         data->temp_low_bits =
2021             w83793_read_value(client, W83793_REG_TEMP_LOW_BITS);
2022
2023         for (i = 0; i < ARRAY_SIZE(data->pwm); i++) {
2024                 if (data->has_pwm & (1 << i))
2025                         data->pwm[i][PWM_DUTY] =
2026                             w83793_read_value(client,
2027                                               W83793_REG_PWM(i, PWM_DUTY));
2028         }
2029
2030         for (i = 0; i < ARRAY_SIZE(data->alarms); i++)
2031                 data->alarms[i] =
2032                     w83793_read_value(client, W83793_REG_ALARM(i));
2033         if (data->has_vid & 0x01)
2034                 data->vid[0] = w83793_read_value(client, W83793_REG_VID_INA);
2035         if (data->has_vid & 0x02)
2036                 data->vid[1] = w83793_read_value(client, W83793_REG_VID_INB);
2037         w83793_update_nonvolatile(dev);
2038         data->last_updated = jiffies;
2039         data->valid = 1;
2040
2041 END:
2042         mutex_unlock(&data->update_lock);
2043         return data;
2044 }
2045
2046 /* Ignore the possibility that somebody change bank outside the driver
2047    Must be called with data->update_lock held, except during initialization */
2048 static u8 w83793_read_value(struct i2c_client *client, u16 reg)
2049 {
2050         struct w83793_data *data = i2c_get_clientdata(client);
2051         u8 res = 0xff;
2052         u8 new_bank = reg >> 8;
2053
2054         new_bank |= data->bank & 0xfc;
2055         if (data->bank != new_bank) {
2056                 if (i2c_smbus_write_byte_data
2057                     (client, W83793_REG_BANKSEL, new_bank) >= 0)
2058                         data->bank = new_bank;
2059                 else {
2060                         dev_err(&client->dev,
2061                                 "set bank to %d failed, fall back "
2062                                 "to bank %d, read reg 0x%x error\n",
2063                                 new_bank, data->bank, reg);
2064                         res = 0x0;      /* read 0x0 from the chip */
2065                         goto END;
2066                 }
2067         }
2068         res = i2c_smbus_read_byte_data(client, reg & 0xff);
2069 END:
2070         return res;
2071 }
2072
2073 /* Must be called with data->update_lock held, except during initialization */
2074 static int w83793_write_value(struct i2c_client *client, u16 reg, u8 value)
2075 {
2076         struct w83793_data *data = i2c_get_clientdata(client);
2077         int res;
2078         u8 new_bank = reg >> 8;
2079
2080         new_bank |= data->bank & 0xfc;
2081         if (data->bank != new_bank) {
2082                 if ((res = i2c_smbus_write_byte_data
2083                     (client, W83793_REG_BANKSEL, new_bank)) >= 0)
2084                         data->bank = new_bank;
2085                 else {
2086                         dev_err(&client->dev,
2087                                 "set bank to %d failed, fall back "
2088                                 "to bank %d, write reg 0x%x error\n",
2089                                 new_bank, data->bank, reg);
2090                         goto END;
2091                 }
2092         }
2093
2094         res = i2c_smbus_write_byte_data(client, reg & 0xff, value);
2095 END:
2096         return res;
2097 }
2098
2099 static int __init sensors_w83793_init(void)
2100 {
2101         return i2c_add_driver(&w83793_driver);
2102 }
2103
2104 static void __exit sensors_w83793_exit(void)
2105 {
2106         i2c_del_driver(&w83793_driver);
2107 }
2108
2109 MODULE_AUTHOR("Yuan Mu, Sven Anders");
2110 MODULE_DESCRIPTION("w83793 driver");
2111 MODULE_LICENSE("GPL");
2112
2113 module_init(sensors_w83793_init);
2114 module_exit(sensors_w83793_exit);