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