block: add blk_queue_update_dma_pad
[linux-2.6] / drivers / hwmon / w83627hf.c
1 /*
2     w83627hf.c - Part of lm_sensors, Linux kernel modules for hardware
3                 monitoring
4     Copyright (c) 1998 - 2003  Frodo Looijaard <frodol@dds.nl>,
5     Philip Edelbrock <phil@netroedge.com>,
6     and Mark Studebaker <mdsxyz123@yahoo.com>
7     Ported to 2.6 by Bernhard C. Schrenk <clemy@clemy.org>
8     Copyright (c) 2007  Jean Delvare <khali@linux-fr.org>
9
10     This program is free software; you can redistribute it and/or modify
11     it under the terms of the GNU General Public License as published by
12     the Free Software Foundation; either version 2 of the License, or
13     (at your option) any later version.
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., 675 Mass Ave, Cambridge, MA 02139, USA.
23 */
24
25 /*
26     Supports following chips:
27
28     Chip        #vin    #fanin  #pwm    #temp   wchipid vendid  i2c     ISA
29     w83627hf    9       3       2       3       0x20    0x5ca3  no      yes(LPC)
30     w83627thf   7       3       3       3       0x90    0x5ca3  no      yes(LPC)
31     w83637hf    7       3       3       3       0x80    0x5ca3  no      yes(LPC)
32     w83687thf   7       3       3       3       0x90    0x5ca3  no      yes(LPC)
33     w83697hf    8       2       2       2       0x60    0x5ca3  no      yes(LPC)
34
35     For other winbond chips, and for i2c support in the above chips,
36     use w83781d.c.
37
38     Note: automatic ("cruise") fan control for 697, 637 & 627thf not
39     supported yet.
40 */
41
42 #include <linux/module.h>
43 #include <linux/init.h>
44 #include <linux/slab.h>
45 #include <linux/jiffies.h>
46 #include <linux/platform_device.h>
47 #include <linux/hwmon.h>
48 #include <linux/hwmon-sysfs.h>
49 #include <linux/hwmon-vid.h>
50 #include <linux/err.h>
51 #include <linux/mutex.h>
52 #include <linux/ioport.h>
53 #include <asm/io.h>
54 #include "lm75.h"
55
56 static struct platform_device *pdev;
57
58 #define DRVNAME "w83627hf"
59 enum chips { w83627hf, w83627thf, w83697hf, w83637hf, w83687thf };
60
61 static u16 force_addr;
62 module_param(force_addr, ushort, 0);
63 MODULE_PARM_DESC(force_addr,
64                  "Initialize the base address of the sensors");
65 static u8 force_i2c = 0x1f;
66 module_param(force_i2c, byte, 0);
67 MODULE_PARM_DESC(force_i2c,
68                  "Initialize the i2c address of the sensors");
69
70 static int reset;
71 module_param(reset, bool, 0);
72 MODULE_PARM_DESC(reset, "Set to one to reset chip on load");
73
74 static int init = 1;
75 module_param(init, bool, 0);
76 MODULE_PARM_DESC(init, "Set to zero to bypass chip initialization");
77
78 static unsigned short force_id;
79 module_param(force_id, ushort, 0);
80 MODULE_PARM_DESC(force_id, "Override the detected device ID");
81
82 /* modified from kernel/include/traps.c */
83 static int REG;         /* The register to read/write */
84 #define DEV     0x07    /* Register: Logical device select */
85 static int VAL;         /* The value to read/write */
86
87 /* logical device numbers for superio_select (below) */
88 #define W83627HF_LD_FDC         0x00
89 #define W83627HF_LD_PRT         0x01
90 #define W83627HF_LD_UART1       0x02
91 #define W83627HF_LD_UART2       0x03
92 #define W83627HF_LD_KBC         0x05
93 #define W83627HF_LD_CIR         0x06 /* w83627hf only */
94 #define W83627HF_LD_GAME        0x07
95 #define W83627HF_LD_MIDI        0x07
96 #define W83627HF_LD_GPIO1       0x07
97 #define W83627HF_LD_GPIO5       0x07 /* w83627thf only */
98 #define W83627HF_LD_GPIO2       0x08
99 #define W83627HF_LD_GPIO3       0x09
100 #define W83627HF_LD_GPIO4       0x09 /* w83627thf only */
101 #define W83627HF_LD_ACPI        0x0a
102 #define W83627HF_LD_HWM         0x0b
103
104 #define DEVID   0x20    /* Register: Device ID */
105
106 #define W83627THF_GPIO5_EN      0x30 /* w83627thf only */
107 #define W83627THF_GPIO5_IOSR    0xf3 /* w83627thf only */
108 #define W83627THF_GPIO5_DR      0xf4 /* w83627thf only */
109
110 #define W83687THF_VID_EN        0x29 /* w83687thf only */
111 #define W83687THF_VID_CFG       0xF0 /* w83687thf only */
112 #define W83687THF_VID_DATA      0xF1 /* w83687thf only */
113
114 static inline void
115 superio_outb(int reg, int val)
116 {
117         outb(reg, REG);
118         outb(val, VAL);
119 }
120
121 static inline int
122 superio_inb(int reg)
123 {
124         outb(reg, REG);
125         return inb(VAL);
126 }
127
128 static inline void
129 superio_select(int ld)
130 {
131         outb(DEV, REG);
132         outb(ld, VAL);
133 }
134
135 static inline void
136 superio_enter(void)
137 {
138         outb(0x87, REG);
139         outb(0x87, REG);
140 }
141
142 static inline void
143 superio_exit(void)
144 {
145         outb(0xAA, REG);
146 }
147
148 #define W627_DEVID 0x52
149 #define W627THF_DEVID 0x82
150 #define W697_DEVID 0x60
151 #define W637_DEVID 0x70
152 #define W687THF_DEVID 0x85
153 #define WINB_ACT_REG 0x30
154 #define WINB_BASE_REG 0x60
155 /* Constants specified below */
156
157 /* Alignment of the base address */
158 #define WINB_ALIGNMENT          ~7
159
160 /* Offset & size of I/O region we are interested in */
161 #define WINB_REGION_OFFSET      5
162 #define WINB_REGION_SIZE        2
163
164 /* Where are the sensors address/data registers relative to the region offset */
165 #define W83781D_ADDR_REG_OFFSET 0
166 #define W83781D_DATA_REG_OFFSET 1
167
168 /* The W83781D registers */
169 /* The W83782D registers for nr=7,8 are in bank 5 */
170 #define W83781D_REG_IN_MAX(nr) ((nr < 7) ? (0x2b + (nr) * 2) : \
171                                            (0x554 + (((nr) - 7) * 2)))
172 #define W83781D_REG_IN_MIN(nr) ((nr < 7) ? (0x2c + (nr) * 2) : \
173                                            (0x555 + (((nr) - 7) * 2)))
174 #define W83781D_REG_IN(nr)     ((nr < 7) ? (0x20 + (nr)) : \
175                                            (0x550 + (nr) - 7))
176
177 /* nr:0-2 for fans:1-3 */
178 #define W83627HF_REG_FAN_MIN(nr)        (0x3b + (nr))
179 #define W83627HF_REG_FAN(nr)            (0x28 + (nr))
180
181 #define W83627HF_REG_TEMP2_CONFIG 0x152
182 #define W83627HF_REG_TEMP3_CONFIG 0x252
183 /* these are zero-based, unlike config constants above */
184 static const u16 w83627hf_reg_temp[]            = { 0x27, 0x150, 0x250 };
185 static const u16 w83627hf_reg_temp_hyst[]       = { 0x3A, 0x153, 0x253 };
186 static const u16 w83627hf_reg_temp_over[]       = { 0x39, 0x155, 0x255 };
187
188 #define W83781D_REG_BANK 0x4E
189
190 #define W83781D_REG_CONFIG 0x40
191 #define W83781D_REG_ALARM1 0x459
192 #define W83781D_REG_ALARM2 0x45A
193 #define W83781D_REG_ALARM3 0x45B
194
195 #define W83781D_REG_BEEP_CONFIG 0x4D
196 #define W83781D_REG_BEEP_INTS1 0x56
197 #define W83781D_REG_BEEP_INTS2 0x57
198 #define W83781D_REG_BEEP_INTS3 0x453
199
200 #define W83781D_REG_VID_FANDIV 0x47
201
202 #define W83781D_REG_CHIPID 0x49
203 #define W83781D_REG_WCHIPID 0x58
204 #define W83781D_REG_CHIPMAN 0x4F
205 #define W83781D_REG_PIN 0x4B
206
207 #define W83781D_REG_VBAT 0x5D
208
209 #define W83627HF_REG_PWM1 0x5A
210 #define W83627HF_REG_PWM2 0x5B
211
212 #define W83627THF_REG_PWM1              0x01    /* 697HF/637HF/687THF too */
213 #define W83627THF_REG_PWM2              0x03    /* 697HF/637HF/687THF too */
214 #define W83627THF_REG_PWM3              0x11    /* 637HF/687THF too */
215
216 #define W83627THF_REG_VRM_OVT_CFG       0x18    /* 637HF/687THF too */
217
218 static const u8 regpwm_627hf[] = { W83627HF_REG_PWM1, W83627HF_REG_PWM2 };
219 static const u8 regpwm[] = { W83627THF_REG_PWM1, W83627THF_REG_PWM2,
220                              W83627THF_REG_PWM3 };
221 #define W836X7HF_REG_PWM(type, nr) (((type) == w83627hf) ? \
222                                     regpwm_627hf[nr] : regpwm[nr])
223
224 #define W83627HF_REG_PWM_FREQ           0x5C    /* Only for the 627HF */
225
226 #define W83637HF_REG_PWM_FREQ1          0x00    /* 697HF/687THF too */
227 #define W83637HF_REG_PWM_FREQ2          0x02    /* 697HF/687THF too */
228 #define W83637HF_REG_PWM_FREQ3          0x10    /* 687THF too */
229
230 static const u8 W83637HF_REG_PWM_FREQ[] = { W83637HF_REG_PWM_FREQ1,
231                                         W83637HF_REG_PWM_FREQ2,
232                                         W83637HF_REG_PWM_FREQ3 };
233
234 #define W83627HF_BASE_PWM_FREQ  46870
235
236 #define W83781D_REG_I2C_ADDR 0x48
237 #define W83781D_REG_I2C_SUBADDR 0x4A
238
239 /* Sensor selection */
240 #define W83781D_REG_SCFG1 0x5D
241 static const u8 BIT_SCFG1[] = { 0x02, 0x04, 0x08 };
242 #define W83781D_REG_SCFG2 0x59
243 static const u8 BIT_SCFG2[] = { 0x10, 0x20, 0x40 };
244 #define W83781D_DEFAULT_BETA 3435
245
246 /* Conversions. Limit checking is only done on the TO_REG
247    variants. Note that you should be a bit careful with which arguments
248    these macros are called: arguments may be evaluated more than once.
249    Fixing this is just not worth it. */
250 #define IN_TO_REG(val)  (SENSORS_LIMIT((((val) + 8)/16),0,255))
251 #define IN_FROM_REG(val) ((val) * 16)
252
253 static inline u8 FAN_TO_REG(long rpm, int div)
254 {
255         if (rpm == 0)
256                 return 255;
257         rpm = SENSORS_LIMIT(rpm, 1, 1000000);
258         return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1,
259                              254);
260 }
261
262 #define TEMP_MIN (-128000)
263 #define TEMP_MAX ( 127000)
264
265 /* TEMP: 0.001C/bit (-128C to +127C)
266    REG: 1C/bit, two's complement */
267 static u8 TEMP_TO_REG(long temp)
268 {
269         int ntemp = SENSORS_LIMIT(temp, TEMP_MIN, TEMP_MAX);
270         ntemp += (ntemp<0 ? -500 : 500);
271         return (u8)(ntemp / 1000);
272 }
273
274 static int TEMP_FROM_REG(u8 reg)
275 {
276         return (s8)reg * 1000;
277 }
278
279 #define FAN_FROM_REG(val,div) ((val)==0?-1:(val)==255?0:1350000/((val)*(div)))
280
281 #define PWM_TO_REG(val) (SENSORS_LIMIT((val),0,255))
282
283 static inline unsigned long pwm_freq_from_reg_627hf(u8 reg)
284 {
285         unsigned long freq;
286         freq = W83627HF_BASE_PWM_FREQ >> reg;
287         return freq;
288 }
289 static inline u8 pwm_freq_to_reg_627hf(unsigned long val)
290 {
291         u8 i;
292         /* Only 5 dividers (1 2 4 8 16)
293            Search for the nearest available frequency */
294         for (i = 0; i < 4; i++) {
295                 if (val > (((W83627HF_BASE_PWM_FREQ >> i) +
296                             (W83627HF_BASE_PWM_FREQ >> (i+1))) / 2))
297                         break;
298         }
299         return i;
300 }
301
302 static inline unsigned long pwm_freq_from_reg(u8 reg)
303 {
304         /* Clock bit 8 -> 180 kHz or 24 MHz */
305         unsigned long clock = (reg & 0x80) ? 180000UL : 24000000UL;
306
307         reg &= 0x7f;
308         /* This should not happen but anyway... */
309         if (reg == 0)
310                 reg++;
311         return (clock / (reg << 8));
312 }
313 static inline u8 pwm_freq_to_reg(unsigned long val)
314 {
315         /* Minimum divider value is 0x01 and maximum is 0x7F */
316         if (val >= 93750)       /* The highest we can do */
317                 return 0x01;
318         if (val >= 720) /* Use 24 MHz clock */
319                 return (24000000UL / (val << 8));
320         if (val < 6)            /* The lowest we can do */
321                 return 0xFF;
322         else                    /* Use 180 kHz clock */
323                 return (0x80 | (180000UL / (val << 8)));
324 }
325
326 #define BEEP_MASK_FROM_REG(val)         ((val) & 0xff7fff)
327 #define BEEP_MASK_TO_REG(val)           ((val) & 0xff7fff)
328
329 #define DIV_FROM_REG(val) (1 << (val))
330
331 static inline u8 DIV_TO_REG(long val)
332 {
333         int i;
334         val = SENSORS_LIMIT(val, 1, 128) >> 1;
335         for (i = 0; i < 7; i++) {
336                 if (val == 0)
337                         break;
338                 val >>= 1;
339         }
340         return ((u8) i);
341 }
342
343 /* For each registered chip, we need to keep some data in memory.
344    The structure is dynamically allocated. */
345 struct w83627hf_data {
346         unsigned short addr;
347         const char *name;
348         struct device *hwmon_dev;
349         struct mutex lock;
350         enum chips type;
351
352         struct mutex update_lock;
353         char valid;             /* !=0 if following fields are valid */
354         unsigned long last_updated;     /* In jiffies */
355
356         u8 in[9];               /* Register value */
357         u8 in_max[9];           /* Register value */
358         u8 in_min[9];           /* Register value */
359         u8 fan[3];              /* Register value */
360         u8 fan_min[3];          /* Register value */
361         u16 temp[3];            /* Register value */
362         u16 temp_max[3];        /* Register value */
363         u16 temp_max_hyst[3];   /* Register value */
364         u8 fan_div[3];          /* Register encoding, shifted right */
365         u8 vid;                 /* Register encoding, combined */
366         u32 alarms;             /* Register encoding, combined */
367         u32 beep_mask;          /* Register encoding, combined */
368         u8 pwm[3];              /* Register value */
369         u8 pwm_freq[3];         /* Register value */
370         u16 sens[3];            /* 1 = pentium diode; 2 = 3904 diode;
371                                    4 = thermistor */
372         u8 vrm;
373         u8 vrm_ovt;             /* Register value, 627THF/637HF/687THF only */
374 };
375
376 struct w83627hf_sio_data {
377         enum chips type;
378 };
379
380
381 static int w83627hf_probe(struct platform_device *pdev);
382 static int __devexit w83627hf_remove(struct platform_device *pdev);
383
384 static int w83627hf_read_value(struct w83627hf_data *data, u16 reg);
385 static int w83627hf_write_value(struct w83627hf_data *data, u16 reg, u16 value);
386 static void w83627hf_update_fan_div(struct w83627hf_data *data);
387 static struct w83627hf_data *w83627hf_update_device(struct device *dev);
388 static void w83627hf_init_device(struct platform_device *pdev);
389
390 static struct platform_driver w83627hf_driver = {
391         .driver = {
392                 .owner  = THIS_MODULE,
393                 .name   = DRVNAME,
394         },
395         .probe          = w83627hf_probe,
396         .remove         = __devexit_p(w83627hf_remove),
397 };
398
399 static ssize_t
400 show_in_input(struct device *dev, struct device_attribute *devattr, char *buf)
401 {
402         int nr = to_sensor_dev_attr(devattr)->index;
403         struct w83627hf_data *data = w83627hf_update_device(dev);
404         return sprintf(buf, "%ld\n", (long)IN_FROM_REG(data->in[nr]));
405 }
406 static ssize_t
407 show_in_min(struct device *dev, struct device_attribute *devattr, char *buf)
408 {
409         int nr = to_sensor_dev_attr(devattr)->index;
410         struct w83627hf_data *data = w83627hf_update_device(dev);
411         return sprintf(buf, "%ld\n", (long)IN_FROM_REG(data->in_min[nr]));
412 }
413 static ssize_t
414 show_in_max(struct device *dev, struct device_attribute *devattr, char *buf)
415 {
416         int nr = to_sensor_dev_attr(devattr)->index;
417         struct w83627hf_data *data = w83627hf_update_device(dev);
418         return sprintf(buf, "%ld\n", (long)IN_FROM_REG(data->in_max[nr]));
419 }
420 static ssize_t
421 store_in_min(struct device *dev, struct device_attribute *devattr,
422              const char *buf, size_t count)
423 {
424         int nr = to_sensor_dev_attr(devattr)->index;
425         struct w83627hf_data *data = dev_get_drvdata(dev);
426         long val = simple_strtol(buf, NULL, 10);
427
428         mutex_lock(&data->update_lock);
429         data->in_min[nr] = IN_TO_REG(val);
430         w83627hf_write_value(data, W83781D_REG_IN_MIN(nr), data->in_min[nr]);
431         mutex_unlock(&data->update_lock);
432         return count;
433 }
434 static ssize_t
435 store_in_max(struct device *dev, struct device_attribute *devattr,
436              const char *buf, size_t count)
437 {
438         int nr = to_sensor_dev_attr(devattr)->index;
439         struct w83627hf_data *data = dev_get_drvdata(dev);
440         long val = simple_strtol(buf, NULL, 10);
441
442         mutex_lock(&data->update_lock);
443         data->in_max[nr] = IN_TO_REG(val);
444         w83627hf_write_value(data, W83781D_REG_IN_MAX(nr), data->in_max[nr]);
445         mutex_unlock(&data->update_lock);
446         return count;
447 }
448 #define sysfs_vin_decl(offset) \
449 static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO,          \
450                           show_in_input, NULL, offset);         \
451 static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO|S_IWUSR,    \
452                           show_in_min, store_in_min, offset);   \
453 static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO|S_IWUSR,    \
454                           show_in_max, store_in_max, offset);
455
456 sysfs_vin_decl(1);
457 sysfs_vin_decl(2);
458 sysfs_vin_decl(3);
459 sysfs_vin_decl(4);
460 sysfs_vin_decl(5);
461 sysfs_vin_decl(6);
462 sysfs_vin_decl(7);
463 sysfs_vin_decl(8);
464
465 /* use a different set of functions for in0 */
466 static ssize_t show_in_0(struct w83627hf_data *data, char *buf, u8 reg)
467 {
468         long in0;
469
470         if ((data->vrm_ovt & 0x01) &&
471                 (w83627thf == data->type || w83637hf == data->type
472                  || w83687thf == data->type))
473
474                 /* use VRM9 calculation */
475                 in0 = (long)((reg * 488 + 70000 + 50) / 100);
476         else
477                 /* use VRM8 (standard) calculation */
478                 in0 = (long)IN_FROM_REG(reg);
479
480         return sprintf(buf,"%ld\n", in0);
481 }
482
483 static ssize_t show_regs_in_0(struct device *dev, struct device_attribute *attr, char *buf)
484 {
485         struct w83627hf_data *data = w83627hf_update_device(dev);
486         return show_in_0(data, buf, data->in[0]);
487 }
488
489 static ssize_t show_regs_in_min0(struct device *dev, struct device_attribute *attr, char *buf)
490 {
491         struct w83627hf_data *data = w83627hf_update_device(dev);
492         return show_in_0(data, buf, data->in_min[0]);
493 }
494
495 static ssize_t show_regs_in_max0(struct device *dev, struct device_attribute *attr, char *buf)
496 {
497         struct w83627hf_data *data = w83627hf_update_device(dev);
498         return show_in_0(data, buf, data->in_max[0]);
499 }
500
501 static ssize_t store_regs_in_min0(struct device *dev, struct device_attribute *attr,
502         const char *buf, size_t count)
503 {
504         struct w83627hf_data *data = dev_get_drvdata(dev);
505         u32 val;
506
507         val = simple_strtoul(buf, NULL, 10);
508
509         mutex_lock(&data->update_lock);
510         
511         if ((data->vrm_ovt & 0x01) &&
512                 (w83627thf == data->type || w83637hf == data->type
513                  || w83687thf == data->type))
514
515                 /* use VRM9 calculation */
516                 data->in_min[0] =
517                         SENSORS_LIMIT(((val * 100) - 70000 + 244) / 488, 0,
518                                         255);
519         else
520                 /* use VRM8 (standard) calculation */
521                 data->in_min[0] = IN_TO_REG(val);
522
523         w83627hf_write_value(data, W83781D_REG_IN_MIN(0), data->in_min[0]);
524         mutex_unlock(&data->update_lock);
525         return count;
526 }
527
528 static ssize_t store_regs_in_max0(struct device *dev, struct device_attribute *attr,
529         const char *buf, size_t count)
530 {
531         struct w83627hf_data *data = dev_get_drvdata(dev);
532         u32 val;
533
534         val = simple_strtoul(buf, NULL, 10);
535
536         mutex_lock(&data->update_lock);
537
538         if ((data->vrm_ovt & 0x01) &&
539                 (w83627thf == data->type || w83637hf == data->type
540                  || w83687thf == data->type))
541                 
542                 /* use VRM9 calculation */
543                 data->in_max[0] =
544                         SENSORS_LIMIT(((val * 100) - 70000 + 244) / 488, 0,
545                                         255);
546         else
547                 /* use VRM8 (standard) calculation */
548                 data->in_max[0] = IN_TO_REG(val);
549
550         w83627hf_write_value(data, W83781D_REG_IN_MAX(0), data->in_max[0]);
551         mutex_unlock(&data->update_lock);
552         return count;
553 }
554
555 static DEVICE_ATTR(in0_input, S_IRUGO, show_regs_in_0, NULL);
556 static DEVICE_ATTR(in0_min, S_IRUGO | S_IWUSR,
557         show_regs_in_min0, store_regs_in_min0);
558 static DEVICE_ATTR(in0_max, S_IRUGO | S_IWUSR,
559         show_regs_in_max0, store_regs_in_max0);
560
561 static ssize_t
562 show_fan_input(struct device *dev, struct device_attribute *devattr, char *buf)
563 {
564         int nr = to_sensor_dev_attr(devattr)->index;
565         struct w83627hf_data *data = w83627hf_update_device(dev);
566         return sprintf(buf, "%ld\n", FAN_FROM_REG(data->fan[nr],
567                                 (long)DIV_FROM_REG(data->fan_div[nr])));
568 }
569 static ssize_t
570 show_fan_min(struct device *dev, struct device_attribute *devattr, char *buf)
571 {
572         int nr = to_sensor_dev_attr(devattr)->index;
573         struct w83627hf_data *data = w83627hf_update_device(dev);
574         return sprintf(buf, "%ld\n", FAN_FROM_REG(data->fan_min[nr],
575                                 (long)DIV_FROM_REG(data->fan_div[nr])));
576 }
577 static ssize_t
578 store_fan_min(struct device *dev, struct device_attribute *devattr,
579               const char *buf, size_t count)
580 {
581         int nr = to_sensor_dev_attr(devattr)->index;
582         struct w83627hf_data *data = dev_get_drvdata(dev);
583         u32 val = simple_strtoul(buf, NULL, 10);
584
585         mutex_lock(&data->update_lock);
586         data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
587         w83627hf_write_value(data, W83627HF_REG_FAN_MIN(nr),
588                              data->fan_min[nr]);
589
590         mutex_unlock(&data->update_lock);
591         return count;
592 }
593 #define sysfs_fan_decl(offset)  \
594 static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO,                 \
595                           show_fan_input, NULL, offset - 1);            \
596 static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR,         \
597                           show_fan_min, store_fan_min, offset - 1);
598
599 sysfs_fan_decl(1);
600 sysfs_fan_decl(2);
601 sysfs_fan_decl(3);
602
603 static ssize_t
604 show_temp(struct device *dev, struct device_attribute *devattr, char *buf)
605 {
606         int nr = to_sensor_dev_attr(devattr)->index;
607         struct w83627hf_data *data = w83627hf_update_device(dev);
608
609         u16 tmp = data->temp[nr];
610         return sprintf(buf, "%ld\n", (nr) ? (long) LM75_TEMP_FROM_REG(tmp)
611                                           : (long) TEMP_FROM_REG(tmp));
612 }
613
614 static ssize_t
615 show_temp_max(struct device *dev, struct device_attribute *devattr,
616               char *buf)
617 {
618         int nr = to_sensor_dev_attr(devattr)->index;
619         struct w83627hf_data *data = w83627hf_update_device(dev);
620
621         u16 tmp = data->temp_max[nr];
622         return sprintf(buf, "%ld\n", (nr) ? (long) LM75_TEMP_FROM_REG(tmp)
623                                           : (long) TEMP_FROM_REG(tmp));
624 }
625
626 static ssize_t
627 show_temp_max_hyst(struct device *dev, struct device_attribute *devattr,
628                    char *buf)
629 {
630         int nr = to_sensor_dev_attr(devattr)->index;
631         struct w83627hf_data *data = w83627hf_update_device(dev);
632
633         u16 tmp = data->temp_max_hyst[nr];
634         return sprintf(buf, "%ld\n", (nr) ? (long) LM75_TEMP_FROM_REG(tmp)
635                                           : (long) TEMP_FROM_REG(tmp));
636 }
637
638 static ssize_t
639 store_temp_max(struct device *dev, struct device_attribute *devattr,
640                const char *buf, size_t count)
641 {
642         int nr = to_sensor_dev_attr(devattr)->index;
643         struct w83627hf_data *data = dev_get_drvdata(dev);
644         long val = simple_strtol(buf, NULL, 10);
645         u16 tmp = (nr) ? LM75_TEMP_TO_REG(val) : TEMP_TO_REG(val);
646
647         mutex_lock(&data->update_lock);
648         data->temp_max[nr] = tmp;
649         w83627hf_write_value(data, w83627hf_reg_temp_over[nr], tmp);
650         mutex_unlock(&data->update_lock);
651         return count;
652 }
653
654 static ssize_t
655 store_temp_max_hyst(struct device *dev, struct device_attribute *devattr,
656                     const char *buf, size_t count)
657 {
658         int nr = to_sensor_dev_attr(devattr)->index;
659         struct w83627hf_data *data = dev_get_drvdata(dev);
660         long val = simple_strtol(buf, NULL, 10);
661         u16 tmp = (nr) ? LM75_TEMP_TO_REG(val) : TEMP_TO_REG(val);
662
663         mutex_lock(&data->update_lock);
664         data->temp_max_hyst[nr] = tmp;
665         w83627hf_write_value(data, w83627hf_reg_temp_hyst[nr], tmp);
666         mutex_unlock(&data->update_lock);
667         return count;
668 }
669
670 #define sysfs_temp_decl(offset) \
671 static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO,                \
672                           show_temp, NULL, offset - 1);                 \
673 static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IRUGO|S_IWUSR,          \
674                           show_temp_max, store_temp_max, offset - 1);   \
675 static SENSOR_DEVICE_ATTR(temp##offset##_max_hyst, S_IRUGO|S_IWUSR,     \
676                           show_temp_max_hyst, store_temp_max_hyst, offset - 1);
677
678 sysfs_temp_decl(1);
679 sysfs_temp_decl(2);
680 sysfs_temp_decl(3);
681
682 static ssize_t
683 show_vid_reg(struct device *dev, struct device_attribute *attr, char *buf)
684 {
685         struct w83627hf_data *data = w83627hf_update_device(dev);
686         return sprintf(buf, "%ld\n", (long) vid_from_reg(data->vid, data->vrm));
687 }
688 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
689
690 static ssize_t
691 show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf)
692 {
693         struct w83627hf_data *data = dev_get_drvdata(dev);
694         return sprintf(buf, "%ld\n", (long) data->vrm);
695 }
696 static ssize_t
697 store_vrm_reg(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
698 {
699         struct w83627hf_data *data = dev_get_drvdata(dev);
700         u32 val;
701
702         val = simple_strtoul(buf, NULL, 10);
703         data->vrm = val;
704
705         return count;
706 }
707 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
708
709 static ssize_t
710 show_alarms_reg(struct device *dev, struct device_attribute *attr, char *buf)
711 {
712         struct w83627hf_data *data = w83627hf_update_device(dev);
713         return sprintf(buf, "%ld\n", (long) data->alarms);
714 }
715 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL);
716
717 static ssize_t
718 show_alarm(struct device *dev, struct device_attribute *attr, char *buf)
719 {
720         struct w83627hf_data *data = w83627hf_update_device(dev);
721         int bitnr = to_sensor_dev_attr(attr)->index;
722         return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1);
723 }
724 static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0);
725 static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1);
726 static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2);
727 static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3);
728 static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8);
729 static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 9);
730 static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 10);
731 static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 16);
732 static SENSOR_DEVICE_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 17);
733 static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6);
734 static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7);
735 static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11);
736 static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4);
737 static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5);
738 static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13);
739
740 static ssize_t
741 show_beep_mask(struct device *dev, struct device_attribute *attr, char *buf)
742 {
743         struct w83627hf_data *data = w83627hf_update_device(dev);
744         return sprintf(buf, "%ld\n",
745                       (long)BEEP_MASK_FROM_REG(data->beep_mask));
746 }
747
748 static ssize_t
749 store_beep_mask(struct device *dev, struct device_attribute *attr,
750                 const char *buf, size_t count)
751 {
752         struct w83627hf_data *data = dev_get_drvdata(dev);
753         unsigned long val;
754
755         val = simple_strtoul(buf, NULL, 10);
756
757         mutex_lock(&data->update_lock);
758
759         /* preserve beep enable */
760         data->beep_mask = (data->beep_mask & 0x8000)
761                         | BEEP_MASK_TO_REG(val);
762         w83627hf_write_value(data, W83781D_REG_BEEP_INTS1,
763                             data->beep_mask & 0xff);
764         w83627hf_write_value(data, W83781D_REG_BEEP_INTS3,
765                             ((data->beep_mask) >> 16) & 0xff);
766         w83627hf_write_value(data, W83781D_REG_BEEP_INTS2,
767                             (data->beep_mask >> 8) & 0xff);
768
769         mutex_unlock(&data->update_lock);
770         return count;
771 }
772
773 static DEVICE_ATTR(beep_mask, S_IRUGO | S_IWUSR,
774                    show_beep_mask, store_beep_mask);
775
776 static ssize_t
777 show_beep(struct device *dev, struct device_attribute *attr, char *buf)
778 {
779         struct w83627hf_data *data = w83627hf_update_device(dev);
780         int bitnr = to_sensor_dev_attr(attr)->index;
781         return sprintf(buf, "%u\n", (data->beep_mask >> bitnr) & 1);
782 }
783
784 static ssize_t
785 store_beep(struct device *dev, struct device_attribute *attr,
786                 const char *buf, size_t count)
787 {
788         struct w83627hf_data *data = dev_get_drvdata(dev);
789         int bitnr = to_sensor_dev_attr(attr)->index;
790         unsigned long bit;
791         u8 reg;
792
793         bit = simple_strtoul(buf, NULL, 10);
794         if (bit & ~1)
795                 return -EINVAL;
796
797         mutex_lock(&data->update_lock);
798         if (bit)
799                 data->beep_mask |= (1 << bitnr);
800         else
801                 data->beep_mask &= ~(1 << bitnr);
802
803         if (bitnr < 8) {
804                 reg = w83627hf_read_value(data, W83781D_REG_BEEP_INTS1);
805                 if (bit)
806                         reg |= (1 << bitnr);
807                 else
808                         reg &= ~(1 << bitnr);
809                 w83627hf_write_value(data, W83781D_REG_BEEP_INTS1, reg);
810         } else if (bitnr < 16) {
811                 reg = w83627hf_read_value(data, W83781D_REG_BEEP_INTS2);
812                 if (bit)
813                         reg |= (1 << (bitnr - 8));
814                 else
815                         reg &= ~(1 << (bitnr - 8));
816                 w83627hf_write_value(data, W83781D_REG_BEEP_INTS2, reg);
817         } else {
818                 reg = w83627hf_read_value(data, W83781D_REG_BEEP_INTS3);
819                 if (bit)
820                         reg |= (1 << (bitnr - 16));
821                 else
822                         reg &= ~(1 << (bitnr - 16));
823                 w83627hf_write_value(data, W83781D_REG_BEEP_INTS3, reg);
824         }
825         mutex_unlock(&data->update_lock);
826
827         return count;
828 }
829
830 static SENSOR_DEVICE_ATTR(in0_beep, S_IRUGO | S_IWUSR,
831                         show_beep, store_beep, 0);
832 static SENSOR_DEVICE_ATTR(in1_beep, S_IRUGO | S_IWUSR,
833                         show_beep, store_beep, 1);
834 static SENSOR_DEVICE_ATTR(in2_beep, S_IRUGO | S_IWUSR,
835                         show_beep, store_beep, 2);
836 static SENSOR_DEVICE_ATTR(in3_beep, S_IRUGO | S_IWUSR,
837                         show_beep, store_beep, 3);
838 static SENSOR_DEVICE_ATTR(in4_beep, S_IRUGO | S_IWUSR,
839                         show_beep, store_beep, 8);
840 static SENSOR_DEVICE_ATTR(in5_beep, S_IRUGO | S_IWUSR,
841                         show_beep, store_beep, 9);
842 static SENSOR_DEVICE_ATTR(in6_beep, S_IRUGO | S_IWUSR,
843                         show_beep, store_beep, 10);
844 static SENSOR_DEVICE_ATTR(in7_beep, S_IRUGO | S_IWUSR,
845                         show_beep, store_beep, 16);
846 static SENSOR_DEVICE_ATTR(in8_beep, S_IRUGO | S_IWUSR,
847                         show_beep, store_beep, 17);
848 static SENSOR_DEVICE_ATTR(fan1_beep, S_IRUGO | S_IWUSR,
849                         show_beep, store_beep, 6);
850 static SENSOR_DEVICE_ATTR(fan2_beep, S_IRUGO | S_IWUSR,
851                         show_beep, store_beep, 7);
852 static SENSOR_DEVICE_ATTR(fan3_beep, S_IRUGO | S_IWUSR,
853                         show_beep, store_beep, 11);
854 static SENSOR_DEVICE_ATTR(temp1_beep, S_IRUGO | S_IWUSR,
855                         show_beep, store_beep, 4);
856 static SENSOR_DEVICE_ATTR(temp2_beep, S_IRUGO | S_IWUSR,
857                         show_beep, store_beep, 5);
858 static SENSOR_DEVICE_ATTR(temp3_beep, S_IRUGO | S_IWUSR,
859                         show_beep, store_beep, 13);
860 static SENSOR_DEVICE_ATTR(beep_enable, S_IRUGO | S_IWUSR,
861                         show_beep, store_beep, 15);
862
863 static ssize_t
864 show_fan_div(struct device *dev, struct device_attribute *devattr, char *buf)
865 {
866         int nr = to_sensor_dev_attr(devattr)->index;
867         struct w83627hf_data *data = w83627hf_update_device(dev);
868         return sprintf(buf, "%ld\n",
869                        (long) DIV_FROM_REG(data->fan_div[nr]));
870 }
871 /* Note: we save and restore the fan minimum here, because its value is
872    determined in part by the fan divisor.  This follows the principle of
873    least surprise; the user doesn't expect the fan minimum to change just
874    because the divisor changed. */
875 static ssize_t
876 store_fan_div(struct device *dev, struct device_attribute *devattr,
877               const char *buf, size_t count)
878 {
879         int nr = to_sensor_dev_attr(devattr)->index;
880         struct w83627hf_data *data = dev_get_drvdata(dev);
881         unsigned long min;
882         u8 reg;
883         unsigned long val = simple_strtoul(buf, NULL, 10);
884
885         mutex_lock(&data->update_lock);
886
887         /* Save fan_min */
888         min = FAN_FROM_REG(data->fan_min[nr],
889                            DIV_FROM_REG(data->fan_div[nr]));
890
891         data->fan_div[nr] = DIV_TO_REG(val);
892
893         reg = (w83627hf_read_value(data, nr==2 ? W83781D_REG_PIN : W83781D_REG_VID_FANDIV)
894                & (nr==0 ? 0xcf : 0x3f))
895             | ((data->fan_div[nr] & 0x03) << (nr==0 ? 4 : 6));
896         w83627hf_write_value(data, nr==2 ? W83781D_REG_PIN : W83781D_REG_VID_FANDIV, reg);
897
898         reg = (w83627hf_read_value(data, W83781D_REG_VBAT)
899                & ~(1 << (5 + nr)))
900             | ((data->fan_div[nr] & 0x04) << (3 + nr));
901         w83627hf_write_value(data, W83781D_REG_VBAT, reg);
902
903         /* Restore fan_min */
904         data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
905         w83627hf_write_value(data, W83627HF_REG_FAN_MIN(nr), data->fan_min[nr]);
906
907         mutex_unlock(&data->update_lock);
908         return count;
909 }
910
911 static SENSOR_DEVICE_ATTR(fan1_div, S_IRUGO|S_IWUSR,
912                           show_fan_div, store_fan_div, 0);
913 static SENSOR_DEVICE_ATTR(fan2_div, S_IRUGO|S_IWUSR,
914                           show_fan_div, store_fan_div, 1);
915 static SENSOR_DEVICE_ATTR(fan3_div, S_IRUGO|S_IWUSR,
916                           show_fan_div, store_fan_div, 2);
917
918 static ssize_t
919 show_pwm(struct device *dev, struct device_attribute *devattr, char *buf)
920 {
921         int nr = to_sensor_dev_attr(devattr)->index;
922         struct w83627hf_data *data = w83627hf_update_device(dev);
923         return sprintf(buf, "%ld\n", (long) data->pwm[nr]);
924 }
925
926 static ssize_t
927 store_pwm(struct device *dev, struct device_attribute *devattr,
928           const char *buf, size_t count)
929 {
930         int nr = to_sensor_dev_attr(devattr)->index;
931         struct w83627hf_data *data = dev_get_drvdata(dev);
932         u32 val = simple_strtoul(buf, NULL, 10);
933
934         mutex_lock(&data->update_lock);
935
936         if (data->type == w83627thf) {
937                 /* bits 0-3 are reserved  in 627THF */
938                 data->pwm[nr] = PWM_TO_REG(val) & 0xf0;
939                 w83627hf_write_value(data,
940                                      W836X7HF_REG_PWM(data->type, nr),
941                                      data->pwm[nr] |
942                                      (w83627hf_read_value(data,
943                                      W836X7HF_REG_PWM(data->type, nr)) & 0x0f));
944         } else {
945                 data->pwm[nr] = PWM_TO_REG(val);
946                 w83627hf_write_value(data,
947                                      W836X7HF_REG_PWM(data->type, nr),
948                                      data->pwm[nr]);
949         }
950
951         mutex_unlock(&data->update_lock);
952         return count;
953 }
954
955 static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO|S_IWUSR, show_pwm, store_pwm, 0);
956 static SENSOR_DEVICE_ATTR(pwm2, S_IRUGO|S_IWUSR, show_pwm, store_pwm, 1);
957 static SENSOR_DEVICE_ATTR(pwm3, S_IRUGO|S_IWUSR, show_pwm, store_pwm, 2);
958
959 static ssize_t
960 show_pwm_freq(struct device *dev, struct device_attribute *devattr, char *buf)
961 {
962         int nr = to_sensor_dev_attr(devattr)->index;
963         struct w83627hf_data *data = w83627hf_update_device(dev);
964         if (data->type == w83627hf)
965                 return sprintf(buf, "%ld\n",
966                         pwm_freq_from_reg_627hf(data->pwm_freq[nr]));
967         else
968                 return sprintf(buf, "%ld\n",
969                         pwm_freq_from_reg(data->pwm_freq[nr]));
970 }
971
972 static ssize_t
973 store_pwm_freq(struct device *dev, struct device_attribute *devattr,
974                const char *buf, size_t count)
975 {
976         int nr = to_sensor_dev_attr(devattr)->index;
977         struct w83627hf_data *data = dev_get_drvdata(dev);
978         static const u8 mask[]={0xF8, 0x8F};
979         u32 val;
980
981         val = simple_strtoul(buf, NULL, 10);
982
983         mutex_lock(&data->update_lock);
984
985         if (data->type == w83627hf) {
986                 data->pwm_freq[nr] = pwm_freq_to_reg_627hf(val);
987                 w83627hf_write_value(data, W83627HF_REG_PWM_FREQ,
988                                 (data->pwm_freq[nr] << (nr*4)) |
989                                 (w83627hf_read_value(data,
990                                 W83627HF_REG_PWM_FREQ) & mask[nr]));
991         } else {
992                 data->pwm_freq[nr] = pwm_freq_to_reg(val);
993                 w83627hf_write_value(data, W83637HF_REG_PWM_FREQ[nr],
994                                 data->pwm_freq[nr]);
995         }
996
997         mutex_unlock(&data->update_lock);
998         return count;
999 }
1000
1001 static SENSOR_DEVICE_ATTR(pwm1_freq, S_IRUGO|S_IWUSR,
1002                           show_pwm_freq, store_pwm_freq, 0);
1003 static SENSOR_DEVICE_ATTR(pwm2_freq, S_IRUGO|S_IWUSR,
1004                           show_pwm_freq, store_pwm_freq, 1);
1005 static SENSOR_DEVICE_ATTR(pwm3_freq, S_IRUGO|S_IWUSR,
1006                           show_pwm_freq, store_pwm_freq, 2);
1007
1008 static ssize_t
1009 show_temp_type(struct device *dev, struct device_attribute *devattr,
1010                char *buf)
1011 {
1012         int nr = to_sensor_dev_attr(devattr)->index;
1013         struct w83627hf_data *data = w83627hf_update_device(dev);
1014         return sprintf(buf, "%ld\n", (long) data->sens[nr]);
1015 }
1016
1017 static ssize_t
1018 store_temp_type(struct device *dev, struct device_attribute *devattr,
1019                 const char *buf, size_t count)
1020 {
1021         int nr = to_sensor_dev_attr(devattr)->index;
1022         struct w83627hf_data *data = dev_get_drvdata(dev);
1023         u32 val, tmp;
1024
1025         val = simple_strtoul(buf, NULL, 10);
1026
1027         mutex_lock(&data->update_lock);
1028
1029         switch (val) {
1030         case 1:         /* PII/Celeron diode */
1031                 tmp = w83627hf_read_value(data, W83781D_REG_SCFG1);
1032                 w83627hf_write_value(data, W83781D_REG_SCFG1,
1033                                     tmp | BIT_SCFG1[nr]);
1034                 tmp = w83627hf_read_value(data, W83781D_REG_SCFG2);
1035                 w83627hf_write_value(data, W83781D_REG_SCFG2,
1036                                     tmp | BIT_SCFG2[nr]);
1037                 data->sens[nr] = val;
1038                 break;
1039         case 2:         /* 3904 */
1040                 tmp = w83627hf_read_value(data, W83781D_REG_SCFG1);
1041                 w83627hf_write_value(data, W83781D_REG_SCFG1,
1042                                     tmp | BIT_SCFG1[nr]);
1043                 tmp = w83627hf_read_value(data, W83781D_REG_SCFG2);
1044                 w83627hf_write_value(data, W83781D_REG_SCFG2,
1045                                     tmp & ~BIT_SCFG2[nr]);
1046                 data->sens[nr] = val;
1047                 break;
1048         case W83781D_DEFAULT_BETA:
1049                 dev_warn(dev, "Sensor type %d is deprecated, please use 4 "
1050                          "instead\n", W83781D_DEFAULT_BETA);
1051                 /* fall through */
1052         case 4:         /* thermistor */
1053                 tmp = w83627hf_read_value(data, W83781D_REG_SCFG1);
1054                 w83627hf_write_value(data, W83781D_REG_SCFG1,
1055                                     tmp & ~BIT_SCFG1[nr]);
1056                 data->sens[nr] = val;
1057                 break;
1058         default:
1059                 dev_err(dev,
1060                        "Invalid sensor type %ld; must be 1, 2, or 4\n",
1061                        (long) val);
1062                 break;
1063         }
1064
1065         mutex_unlock(&data->update_lock);
1066         return count;
1067 }
1068
1069 #define sysfs_temp_type(offset) \
1070 static SENSOR_DEVICE_ATTR(temp##offset##_type, S_IRUGO | S_IWUSR, \
1071                           show_temp_type, store_temp_type, offset - 1);
1072
1073 sysfs_temp_type(1);
1074 sysfs_temp_type(2);
1075 sysfs_temp_type(3);
1076
1077 static ssize_t
1078 show_name(struct device *dev, struct device_attribute *devattr, char *buf)
1079 {
1080         struct w83627hf_data *data = dev_get_drvdata(dev);
1081
1082         return sprintf(buf, "%s\n", data->name);
1083 }
1084 static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
1085
1086 static int __init w83627hf_find(int sioaddr, unsigned short *addr,
1087                                 struct w83627hf_sio_data *sio_data)
1088 {
1089         int err = -ENODEV;
1090         u16 val;
1091
1092         static const __initdata char *names[] = {
1093                 "W83627HF",
1094                 "W83627THF",
1095                 "W83697HF",
1096                 "W83637HF",
1097                 "W83687THF",
1098         };
1099
1100         REG = sioaddr;
1101         VAL = sioaddr + 1;
1102
1103         superio_enter();
1104         val = force_id ? force_id : superio_inb(DEVID);
1105         switch (val) {
1106         case W627_DEVID:
1107                 sio_data->type = w83627hf;
1108                 break;
1109         case W627THF_DEVID:
1110                 sio_data->type = w83627thf;
1111                 break;
1112         case W697_DEVID:
1113                 sio_data->type = w83697hf;
1114                 break;
1115         case W637_DEVID:
1116                 sio_data->type = w83637hf;
1117                 break;
1118         case W687THF_DEVID:
1119                 sio_data->type = w83687thf;
1120                 break;
1121         case 0xff:      /* No device at all */
1122                 goto exit;
1123         default:
1124                 pr_debug(DRVNAME ": Unsupported chip (DEVID=0x%02x)\n", val);
1125                 goto exit;
1126         }
1127
1128         superio_select(W83627HF_LD_HWM);
1129         force_addr &= WINB_ALIGNMENT;
1130         if (force_addr) {
1131                 printk(KERN_WARNING DRVNAME ": Forcing address 0x%x\n",
1132                        force_addr);
1133                 superio_outb(WINB_BASE_REG, force_addr >> 8);
1134                 superio_outb(WINB_BASE_REG + 1, force_addr & 0xff);
1135         }
1136         val = (superio_inb(WINB_BASE_REG) << 8) |
1137                superio_inb(WINB_BASE_REG + 1);
1138         *addr = val & WINB_ALIGNMENT;
1139         if (*addr == 0) {
1140                 printk(KERN_WARNING DRVNAME ": Base address not set, "
1141                        "skipping\n");
1142                 goto exit;
1143         }
1144
1145         val = superio_inb(WINB_ACT_REG);
1146         if (!(val & 0x01)) {
1147                 printk(KERN_WARNING DRVNAME ": Enabling HWM logical device\n");
1148                 superio_outb(WINB_ACT_REG, val | 0x01);
1149         }
1150
1151         err = 0;
1152         pr_info(DRVNAME ": Found %s chip at %#x\n",
1153                 names[sio_data->type], *addr);
1154
1155  exit:
1156         superio_exit();
1157         return err;
1158 }
1159
1160 #define VIN_UNIT_ATTRS(_X_)     \
1161         &sensor_dev_attr_in##_X_##_input.dev_attr.attr,         \
1162         &sensor_dev_attr_in##_X_##_min.dev_attr.attr,           \
1163         &sensor_dev_attr_in##_X_##_max.dev_attr.attr,           \
1164         &sensor_dev_attr_in##_X_##_alarm.dev_attr.attr,         \
1165         &sensor_dev_attr_in##_X_##_beep.dev_attr.attr
1166
1167 #define FAN_UNIT_ATTRS(_X_)     \
1168         &sensor_dev_attr_fan##_X_##_input.dev_attr.attr,        \
1169         &sensor_dev_attr_fan##_X_##_min.dev_attr.attr,          \
1170         &sensor_dev_attr_fan##_X_##_div.dev_attr.attr,          \
1171         &sensor_dev_attr_fan##_X_##_alarm.dev_attr.attr,        \
1172         &sensor_dev_attr_fan##_X_##_beep.dev_attr.attr
1173
1174 #define TEMP_UNIT_ATTRS(_X_)    \
1175         &sensor_dev_attr_temp##_X_##_input.dev_attr.attr,       \
1176         &sensor_dev_attr_temp##_X_##_max.dev_attr.attr,         \
1177         &sensor_dev_attr_temp##_X_##_max_hyst.dev_attr.attr,    \
1178         &sensor_dev_attr_temp##_X_##_type.dev_attr.attr,        \
1179         &sensor_dev_attr_temp##_X_##_alarm.dev_attr.attr,       \
1180         &sensor_dev_attr_temp##_X_##_beep.dev_attr.attr
1181
1182 static struct attribute *w83627hf_attributes[] = {
1183         &dev_attr_in0_input.attr,
1184         &dev_attr_in0_min.attr,
1185         &dev_attr_in0_max.attr,
1186         &sensor_dev_attr_in0_alarm.dev_attr.attr,
1187         &sensor_dev_attr_in0_beep.dev_attr.attr,
1188         VIN_UNIT_ATTRS(2),
1189         VIN_UNIT_ATTRS(3),
1190         VIN_UNIT_ATTRS(4),
1191         VIN_UNIT_ATTRS(7),
1192         VIN_UNIT_ATTRS(8),
1193
1194         FAN_UNIT_ATTRS(1),
1195         FAN_UNIT_ATTRS(2),
1196
1197         TEMP_UNIT_ATTRS(1),
1198         TEMP_UNIT_ATTRS(2),
1199
1200         &dev_attr_alarms.attr,
1201         &sensor_dev_attr_beep_enable.dev_attr.attr,
1202         &dev_attr_beep_mask.attr,
1203
1204         &sensor_dev_attr_pwm1.dev_attr.attr,
1205         &sensor_dev_attr_pwm2.dev_attr.attr,
1206         &dev_attr_name.attr,
1207         NULL
1208 };
1209
1210 static const struct attribute_group w83627hf_group = {
1211         .attrs = w83627hf_attributes,
1212 };
1213
1214 static struct attribute *w83627hf_attributes_opt[] = {
1215         VIN_UNIT_ATTRS(1),
1216         VIN_UNIT_ATTRS(5),
1217         VIN_UNIT_ATTRS(6),
1218
1219         FAN_UNIT_ATTRS(3),
1220         TEMP_UNIT_ATTRS(3),
1221         &sensor_dev_attr_pwm3.dev_attr.attr,
1222
1223         &sensor_dev_attr_pwm1_freq.dev_attr.attr,
1224         &sensor_dev_attr_pwm2_freq.dev_attr.attr,
1225         &sensor_dev_attr_pwm3_freq.dev_attr.attr,
1226         NULL
1227 };
1228
1229 static const struct attribute_group w83627hf_group_opt = {
1230         .attrs = w83627hf_attributes_opt,
1231 };
1232
1233 static int __devinit w83627hf_probe(struct platform_device *pdev)
1234 {
1235         struct device *dev = &pdev->dev;
1236         struct w83627hf_sio_data *sio_data = dev->platform_data;
1237         struct w83627hf_data *data;
1238         struct resource *res;
1239         int err, i;
1240
1241         static const char *names[] = {
1242                 "w83627hf",
1243                 "w83627thf",
1244                 "w83697hf",
1245                 "w83637hf",
1246                 "w83687thf",
1247         };
1248
1249         res = platform_get_resource(pdev, IORESOURCE_IO, 0);
1250         if (!request_region(res->start, WINB_REGION_SIZE, DRVNAME)) {
1251                 dev_err(dev, "Failed to request region 0x%lx-0x%lx\n",
1252                         (unsigned long)res->start,
1253                         (unsigned long)(res->start + WINB_REGION_SIZE - 1));
1254                 err = -EBUSY;
1255                 goto ERROR0;
1256         }
1257
1258         if (!(data = kzalloc(sizeof(struct w83627hf_data), GFP_KERNEL))) {
1259                 err = -ENOMEM;
1260                 goto ERROR1;
1261         }
1262         data->addr = res->start;
1263         data->type = sio_data->type;
1264         data->name = names[sio_data->type];
1265         mutex_init(&data->lock);
1266         mutex_init(&data->update_lock);
1267         platform_set_drvdata(pdev, data);
1268
1269         /* Initialize the chip */
1270         w83627hf_init_device(pdev);
1271
1272         /* A few vars need to be filled upon startup */
1273         for (i = 0; i <= 2; i++)
1274                 data->fan_min[i] = w83627hf_read_value(
1275                                         data, W83627HF_REG_FAN_MIN(i));
1276         w83627hf_update_fan_div(data);
1277
1278         /* Register common device attributes */
1279         if ((err = sysfs_create_group(&dev->kobj, &w83627hf_group)))
1280                 goto ERROR3;
1281
1282         /* Register chip-specific device attributes */
1283         if (data->type == w83627hf || data->type == w83697hf)
1284                 if ((err = device_create_file(dev,
1285                                 &sensor_dev_attr_in5_input.dev_attr))
1286                  || (err = device_create_file(dev,
1287                                 &sensor_dev_attr_in5_min.dev_attr))
1288                  || (err = device_create_file(dev,
1289                                 &sensor_dev_attr_in5_max.dev_attr))
1290                  || (err = device_create_file(dev,
1291                                 &sensor_dev_attr_in5_alarm.dev_attr))
1292                  || (err = device_create_file(dev,
1293                                 &sensor_dev_attr_in5_beep.dev_attr))
1294                  || (err = device_create_file(dev,
1295                                 &sensor_dev_attr_in6_input.dev_attr))
1296                  || (err = device_create_file(dev,
1297                                 &sensor_dev_attr_in6_min.dev_attr))
1298                  || (err = device_create_file(dev,
1299                                 &sensor_dev_attr_in6_max.dev_attr))
1300                  || (err = device_create_file(dev,
1301                                 &sensor_dev_attr_in6_alarm.dev_attr))
1302                  || (err = device_create_file(dev,
1303                                 &sensor_dev_attr_in6_beep.dev_attr))
1304                  || (err = device_create_file(dev,
1305                                 &sensor_dev_attr_pwm1_freq.dev_attr))
1306                  || (err = device_create_file(dev,
1307                                 &sensor_dev_attr_pwm2_freq.dev_attr)))
1308                         goto ERROR4;
1309
1310         if (data->type != w83697hf)
1311                 if ((err = device_create_file(dev,
1312                                 &sensor_dev_attr_in1_input.dev_attr))
1313                  || (err = device_create_file(dev,
1314                                 &sensor_dev_attr_in1_min.dev_attr))
1315                  || (err = device_create_file(dev,
1316                                 &sensor_dev_attr_in1_max.dev_attr))
1317                  || (err = device_create_file(dev,
1318                                 &sensor_dev_attr_in1_alarm.dev_attr))
1319                  || (err = device_create_file(dev,
1320                                 &sensor_dev_attr_in1_beep.dev_attr))
1321                  || (err = device_create_file(dev,
1322                                 &sensor_dev_attr_fan3_input.dev_attr))
1323                  || (err = device_create_file(dev,
1324                                 &sensor_dev_attr_fan3_min.dev_attr))
1325                  || (err = device_create_file(dev,
1326                                 &sensor_dev_attr_fan3_div.dev_attr))
1327                  || (err = device_create_file(dev,
1328                                 &sensor_dev_attr_fan3_alarm.dev_attr))
1329                  || (err = device_create_file(dev,
1330                                 &sensor_dev_attr_fan3_beep.dev_attr))
1331                  || (err = device_create_file(dev,
1332                                 &sensor_dev_attr_temp3_input.dev_attr))
1333                  || (err = device_create_file(dev,
1334                                 &sensor_dev_attr_temp3_max.dev_attr))
1335                  || (err = device_create_file(dev,
1336                                 &sensor_dev_attr_temp3_max_hyst.dev_attr))
1337                  || (err = device_create_file(dev,
1338                                 &sensor_dev_attr_temp3_alarm.dev_attr))
1339                  || (err = device_create_file(dev,
1340                                 &sensor_dev_attr_temp3_beep.dev_attr))
1341                  || (err = device_create_file(dev,
1342                                 &sensor_dev_attr_temp3_type.dev_attr)))
1343                         goto ERROR4;
1344
1345         if (data->type != w83697hf && data->vid != 0xff) {
1346                 /* Convert VID to voltage based on VRM */
1347                 data->vrm = vid_which_vrm();
1348
1349                 if ((err = device_create_file(dev, &dev_attr_cpu0_vid))
1350                  || (err = device_create_file(dev, &dev_attr_vrm)))
1351                         goto ERROR4;
1352         }
1353
1354         if (data->type == w83627thf || data->type == w83637hf
1355          || data->type == w83687thf)
1356                 if ((err = device_create_file(dev,
1357                                 &sensor_dev_attr_pwm3.dev_attr)))
1358                         goto ERROR4;
1359
1360         if (data->type == w83637hf || data->type == w83687thf)
1361                 if ((err = device_create_file(dev,
1362                                 &sensor_dev_attr_pwm1_freq.dev_attr))
1363                  || (err = device_create_file(dev,
1364                                 &sensor_dev_attr_pwm2_freq.dev_attr))
1365                  || (err = device_create_file(dev,
1366                                 &sensor_dev_attr_pwm3_freq.dev_attr)))
1367                         goto ERROR4;
1368
1369         data->hwmon_dev = hwmon_device_register(dev);
1370         if (IS_ERR(data->hwmon_dev)) {
1371                 err = PTR_ERR(data->hwmon_dev);
1372                 goto ERROR4;
1373         }
1374
1375         return 0;
1376
1377       ERROR4:
1378         sysfs_remove_group(&dev->kobj, &w83627hf_group);
1379         sysfs_remove_group(&dev->kobj, &w83627hf_group_opt);
1380       ERROR3:
1381         platform_set_drvdata(pdev, NULL);
1382         kfree(data);
1383       ERROR1:
1384         release_region(res->start, WINB_REGION_SIZE);
1385       ERROR0:
1386         return err;
1387 }
1388
1389 static int __devexit w83627hf_remove(struct platform_device *pdev)
1390 {
1391         struct w83627hf_data *data = platform_get_drvdata(pdev);
1392         struct resource *res;
1393
1394         hwmon_device_unregister(data->hwmon_dev);
1395
1396         sysfs_remove_group(&pdev->dev.kobj, &w83627hf_group);
1397         sysfs_remove_group(&pdev->dev.kobj, &w83627hf_group_opt);
1398         platform_set_drvdata(pdev, NULL);
1399         kfree(data);
1400
1401         res = platform_get_resource(pdev, IORESOURCE_IO, 0);
1402         release_region(res->start, WINB_REGION_SIZE);
1403
1404         return 0;
1405 }
1406
1407
1408 /* Registers 0x50-0x5f are banked */
1409 static inline void w83627hf_set_bank(struct w83627hf_data *data, u16 reg)
1410 {
1411         if ((reg & 0x00f0) == 0x50) {
1412                 outb_p(W83781D_REG_BANK, data->addr + W83781D_ADDR_REG_OFFSET);
1413                 outb_p(reg >> 8, data->addr + W83781D_DATA_REG_OFFSET);
1414         }
1415 }
1416
1417 /* Not strictly necessary, but play it safe for now */
1418 static inline void w83627hf_reset_bank(struct w83627hf_data *data, u16 reg)
1419 {
1420         if (reg & 0xff00) {
1421                 outb_p(W83781D_REG_BANK, data->addr + W83781D_ADDR_REG_OFFSET);
1422                 outb_p(0, data->addr + W83781D_DATA_REG_OFFSET);
1423         }
1424 }
1425
1426 static int w83627hf_read_value(struct w83627hf_data *data, u16 reg)
1427 {
1428         int res, word_sized;
1429
1430         mutex_lock(&data->lock);
1431         word_sized = (((reg & 0xff00) == 0x100)
1432                    || ((reg & 0xff00) == 0x200))
1433                   && (((reg & 0x00ff) == 0x50)
1434                    || ((reg & 0x00ff) == 0x53)
1435                    || ((reg & 0x00ff) == 0x55));
1436         w83627hf_set_bank(data, reg);
1437         outb_p(reg & 0xff, data->addr + W83781D_ADDR_REG_OFFSET);
1438         res = inb_p(data->addr + W83781D_DATA_REG_OFFSET);
1439         if (word_sized) {
1440                 outb_p((reg & 0xff) + 1,
1441                        data->addr + W83781D_ADDR_REG_OFFSET);
1442                 res =
1443                     (res << 8) + inb_p(data->addr +
1444                                        W83781D_DATA_REG_OFFSET);
1445         }
1446         w83627hf_reset_bank(data, reg);
1447         mutex_unlock(&data->lock);
1448         return res;
1449 }
1450
1451 static int __devinit w83627thf_read_gpio5(struct platform_device *pdev)
1452 {
1453         int res = 0xff, sel;
1454
1455         superio_enter();
1456         superio_select(W83627HF_LD_GPIO5);
1457
1458         /* Make sure these GPIO pins are enabled */
1459         if (!(superio_inb(W83627THF_GPIO5_EN) & (1<<3))) {
1460                 dev_dbg(&pdev->dev, "GPIO5 disabled, no VID function\n");
1461                 goto exit;
1462         }
1463
1464         /* Make sure the pins are configured for input
1465            There must be at least five (VRM 9), and possibly 6 (VRM 10) */
1466         sel = superio_inb(W83627THF_GPIO5_IOSR) & 0x3f;
1467         if ((sel & 0x1f) != 0x1f) {
1468                 dev_dbg(&pdev->dev, "GPIO5 not configured for VID "
1469                         "function\n");
1470                 goto exit;
1471         }
1472
1473         dev_info(&pdev->dev, "Reading VID from GPIO5\n");
1474         res = superio_inb(W83627THF_GPIO5_DR) & sel;
1475
1476 exit:
1477         superio_exit();
1478         return res;
1479 }
1480
1481 static int __devinit w83687thf_read_vid(struct platform_device *pdev)
1482 {
1483         int res = 0xff;
1484
1485         superio_enter();
1486         superio_select(W83627HF_LD_HWM);
1487
1488         /* Make sure these GPIO pins are enabled */
1489         if (!(superio_inb(W83687THF_VID_EN) & (1 << 2))) {
1490                 dev_dbg(&pdev->dev, "VID disabled, no VID function\n");
1491                 goto exit;
1492         }
1493
1494         /* Make sure the pins are configured for input */
1495         if (!(superio_inb(W83687THF_VID_CFG) & (1 << 4))) {
1496                 dev_dbg(&pdev->dev, "VID configured as output, "
1497                         "no VID function\n");
1498                 goto exit;
1499         }
1500
1501         res = superio_inb(W83687THF_VID_DATA) & 0x3f;
1502
1503 exit:
1504         superio_exit();
1505         return res;
1506 }
1507
1508 static int w83627hf_write_value(struct w83627hf_data *data, u16 reg, u16 value)
1509 {
1510         int word_sized;
1511
1512         mutex_lock(&data->lock);
1513         word_sized = (((reg & 0xff00) == 0x100)
1514                    || ((reg & 0xff00) == 0x200))
1515                   && (((reg & 0x00ff) == 0x53)
1516                    || ((reg & 0x00ff) == 0x55));
1517         w83627hf_set_bank(data, reg);
1518         outb_p(reg & 0xff, data->addr + W83781D_ADDR_REG_OFFSET);
1519         if (word_sized) {
1520                 outb_p(value >> 8,
1521                        data->addr + W83781D_DATA_REG_OFFSET);
1522                 outb_p((reg & 0xff) + 1,
1523                        data->addr + W83781D_ADDR_REG_OFFSET);
1524         }
1525         outb_p(value & 0xff,
1526                data->addr + W83781D_DATA_REG_OFFSET);
1527         w83627hf_reset_bank(data, reg);
1528         mutex_unlock(&data->lock);
1529         return 0;
1530 }
1531
1532 static void __devinit w83627hf_init_device(struct platform_device *pdev)
1533 {
1534         struct w83627hf_data *data = platform_get_drvdata(pdev);
1535         int i;
1536         enum chips type = data->type;
1537         u8 tmp;
1538
1539         if (reset) {
1540                 /* Resetting the chip has been the default for a long time,
1541                    but repeatedly caused problems (fans going to full
1542                    speed...) so it is now optional. It might even go away if
1543                    nobody reports it as being useful, as I see very little
1544                    reason why this would be needed at all. */
1545                 dev_info(&pdev->dev, "If reset=1 solved a problem you were "
1546                          "having, please report!\n");
1547
1548                 /* save this register */
1549                 i = w83627hf_read_value(data, W83781D_REG_BEEP_CONFIG);
1550                 /* Reset all except Watchdog values and last conversion values
1551                    This sets fan-divs to 2, among others */
1552                 w83627hf_write_value(data, W83781D_REG_CONFIG, 0x80);
1553                 /* Restore the register and disable power-on abnormal beep.
1554                    This saves FAN 1/2/3 input/output values set by BIOS. */
1555                 w83627hf_write_value(data, W83781D_REG_BEEP_CONFIG, i | 0x80);
1556                 /* Disable master beep-enable (reset turns it on).
1557                    Individual beeps should be reset to off but for some reason
1558                    disabling this bit helps some people not get beeped */
1559                 w83627hf_write_value(data, W83781D_REG_BEEP_INTS2, 0);
1560         }
1561
1562         /* Minimize conflicts with other winbond i2c-only clients...  */
1563         /* disable i2c subclients... how to disable main i2c client?? */
1564         /* force i2c address to relatively uncommon address */
1565         w83627hf_write_value(data, W83781D_REG_I2C_SUBADDR, 0x89);
1566         w83627hf_write_value(data, W83781D_REG_I2C_ADDR, force_i2c);
1567
1568         /* Read VID only once */
1569         if (type == w83627hf || type == w83637hf) {
1570                 int lo = w83627hf_read_value(data, W83781D_REG_VID_FANDIV);
1571                 int hi = w83627hf_read_value(data, W83781D_REG_CHIPID);
1572                 data->vid = (lo & 0x0f) | ((hi & 0x01) << 4);
1573         } else if (type == w83627thf) {
1574                 data->vid = w83627thf_read_gpio5(pdev);
1575         } else if (type == w83687thf) {
1576                 data->vid = w83687thf_read_vid(pdev);
1577         }
1578
1579         /* Read VRM & OVT Config only once */
1580         if (type == w83627thf || type == w83637hf || type == w83687thf) {
1581                 data->vrm_ovt = 
1582                         w83627hf_read_value(data, W83627THF_REG_VRM_OVT_CFG);
1583         }
1584
1585         tmp = w83627hf_read_value(data, W83781D_REG_SCFG1);
1586         for (i = 1; i <= 3; i++) {
1587                 if (!(tmp & BIT_SCFG1[i - 1])) {
1588                         data->sens[i - 1] = 4;
1589                 } else {
1590                         if (w83627hf_read_value
1591                             (data,
1592                              W83781D_REG_SCFG2) & BIT_SCFG2[i - 1])
1593                                 data->sens[i - 1] = 1;
1594                         else
1595                                 data->sens[i - 1] = 2;
1596                 }
1597                 if ((type == w83697hf) && (i == 2))
1598                         break;
1599         }
1600
1601         if(init) {
1602                 /* Enable temp2 */
1603                 tmp = w83627hf_read_value(data, W83627HF_REG_TEMP2_CONFIG);
1604                 if (tmp & 0x01) {
1605                         dev_warn(&pdev->dev, "Enabling temp2, readings "
1606                                  "might not make sense\n");
1607                         w83627hf_write_value(data, W83627HF_REG_TEMP2_CONFIG,
1608                                 tmp & 0xfe);
1609                 }
1610
1611                 /* Enable temp3 */
1612                 if (type != w83697hf) {
1613                         tmp = w83627hf_read_value(data,
1614                                 W83627HF_REG_TEMP3_CONFIG);
1615                         if (tmp & 0x01) {
1616                                 dev_warn(&pdev->dev, "Enabling temp3, "
1617                                          "readings might not make sense\n");
1618                                 w83627hf_write_value(data,
1619                                         W83627HF_REG_TEMP3_CONFIG, tmp & 0xfe);
1620                         }
1621                 }
1622         }
1623
1624         /* Start monitoring */
1625         w83627hf_write_value(data, W83781D_REG_CONFIG,
1626                             (w83627hf_read_value(data,
1627                                                 W83781D_REG_CONFIG) & 0xf7)
1628                             | 0x01);
1629
1630         /* Enable VBAT monitoring if needed */
1631         tmp = w83627hf_read_value(data, W83781D_REG_VBAT);
1632         if (!(tmp & 0x01))
1633                 w83627hf_write_value(data, W83781D_REG_VBAT, tmp | 0x01);
1634 }
1635
1636 static void w83627hf_update_fan_div(struct w83627hf_data *data)
1637 {
1638         int reg;
1639
1640         reg = w83627hf_read_value(data, W83781D_REG_VID_FANDIV);
1641         data->fan_div[0] = (reg >> 4) & 0x03;
1642         data->fan_div[1] = (reg >> 6) & 0x03;
1643         if (data->type != w83697hf) {
1644                 data->fan_div[2] = (w83627hf_read_value(data,
1645                                        W83781D_REG_PIN) >> 6) & 0x03;
1646         }
1647         reg = w83627hf_read_value(data, W83781D_REG_VBAT);
1648         data->fan_div[0] |= (reg >> 3) & 0x04;
1649         data->fan_div[1] |= (reg >> 4) & 0x04;
1650         if (data->type != w83697hf)
1651                 data->fan_div[2] |= (reg >> 5) & 0x04;
1652 }
1653
1654 static struct w83627hf_data *w83627hf_update_device(struct device *dev)
1655 {
1656         struct w83627hf_data *data = dev_get_drvdata(dev);
1657         int i, num_temps = (data->type == w83697hf) ? 2 : 3;
1658
1659         mutex_lock(&data->update_lock);
1660
1661         if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
1662             || !data->valid) {
1663                 for (i = 0; i <= 8; i++) {
1664                         /* skip missing sensors */
1665                         if (((data->type == w83697hf) && (i == 1)) ||
1666                             ((data->type != w83627hf && data->type != w83697hf)
1667                             && (i == 5 || i == 6)))
1668                                 continue;
1669                         data->in[i] =
1670                             w83627hf_read_value(data, W83781D_REG_IN(i));
1671                         data->in_min[i] =
1672                             w83627hf_read_value(data,
1673                                                W83781D_REG_IN_MIN(i));
1674                         data->in_max[i] =
1675                             w83627hf_read_value(data,
1676                                                W83781D_REG_IN_MAX(i));
1677                 }
1678                 for (i = 0; i <= 2; i++) {
1679                         data->fan[i] =
1680                             w83627hf_read_value(data, W83627HF_REG_FAN(i));
1681                         data->fan_min[i] =
1682                             w83627hf_read_value(data,
1683                                                W83627HF_REG_FAN_MIN(i));
1684                 }
1685                 for (i = 0; i <= 2; i++) {
1686                         u8 tmp = w83627hf_read_value(data,
1687                                 W836X7HF_REG_PWM(data->type, i));
1688                         /* bits 0-3 are reserved  in 627THF */
1689                         if (data->type == w83627thf)
1690                                 tmp &= 0xf0;
1691                         data->pwm[i] = tmp;
1692                         if (i == 1 &&
1693                             (data->type == w83627hf || data->type == w83697hf))
1694                                 break;
1695                 }
1696                 if (data->type == w83627hf) {
1697                                 u8 tmp = w83627hf_read_value(data,
1698                                                 W83627HF_REG_PWM_FREQ);
1699                                 data->pwm_freq[0] = tmp & 0x07;
1700                                 data->pwm_freq[1] = (tmp >> 4) & 0x07;
1701                 } else if (data->type != w83627thf) {
1702                         for (i = 1; i <= 3; i++) {
1703                                 data->pwm_freq[i - 1] =
1704                                         w83627hf_read_value(data,
1705                                                 W83637HF_REG_PWM_FREQ[i - 1]);
1706                                 if (i == 2 && (data->type == w83697hf))
1707                                         break;
1708                         }
1709                 }
1710                 for (i = 0; i < num_temps; i++) {
1711                         data->temp[i] = w83627hf_read_value(
1712                                                 data, w83627hf_reg_temp[i]);
1713                         data->temp_max[i] = w83627hf_read_value(
1714                                                 data, w83627hf_reg_temp_over[i]);
1715                         data->temp_max_hyst[i] = w83627hf_read_value(
1716                                                 data, w83627hf_reg_temp_hyst[i]);
1717                 }
1718
1719                 w83627hf_update_fan_div(data);
1720
1721                 data->alarms =
1722                     w83627hf_read_value(data, W83781D_REG_ALARM1) |
1723                     (w83627hf_read_value(data, W83781D_REG_ALARM2) << 8) |
1724                     (w83627hf_read_value(data, W83781D_REG_ALARM3) << 16);
1725                 i = w83627hf_read_value(data, W83781D_REG_BEEP_INTS2);
1726                 data->beep_mask = (i << 8) |
1727                     w83627hf_read_value(data, W83781D_REG_BEEP_INTS1) |
1728                     w83627hf_read_value(data, W83781D_REG_BEEP_INTS3) << 16;
1729                 data->last_updated = jiffies;
1730                 data->valid = 1;
1731         }
1732
1733         mutex_unlock(&data->update_lock);
1734
1735         return data;
1736 }
1737
1738 static int __init w83627hf_device_add(unsigned short address,
1739                                       const struct w83627hf_sio_data *sio_data)
1740 {
1741         struct resource res = {
1742                 .start  = address + WINB_REGION_OFFSET,
1743                 .end    = address + WINB_REGION_OFFSET + WINB_REGION_SIZE - 1,
1744                 .name   = DRVNAME,
1745                 .flags  = IORESOURCE_IO,
1746         };
1747         int err;
1748
1749         pdev = platform_device_alloc(DRVNAME, address);
1750         if (!pdev) {
1751                 err = -ENOMEM;
1752                 printk(KERN_ERR DRVNAME ": Device allocation failed\n");
1753                 goto exit;
1754         }
1755
1756         err = platform_device_add_resources(pdev, &res, 1);
1757         if (err) {
1758                 printk(KERN_ERR DRVNAME ": Device resource addition failed "
1759                        "(%d)\n", err);
1760                 goto exit_device_put;
1761         }
1762
1763         err = platform_device_add_data(pdev, sio_data,
1764                                        sizeof(struct w83627hf_sio_data));
1765         if (err) {
1766                 printk(KERN_ERR DRVNAME ": Platform data allocation failed\n");
1767                 goto exit_device_put;
1768         }
1769
1770         err = platform_device_add(pdev);
1771         if (err) {
1772                 printk(KERN_ERR DRVNAME ": Device addition failed (%d)\n",
1773                        err);
1774                 goto exit_device_put;
1775         }
1776
1777         return 0;
1778
1779 exit_device_put:
1780         platform_device_put(pdev);
1781 exit:
1782         return err;
1783 }
1784
1785 static int __init sensors_w83627hf_init(void)
1786 {
1787         int err;
1788         unsigned short address;
1789         struct w83627hf_sio_data sio_data;
1790
1791         if (w83627hf_find(0x2e, &address, &sio_data)
1792          && w83627hf_find(0x4e, &address, &sio_data))
1793                 return -ENODEV;
1794
1795         err = platform_driver_register(&w83627hf_driver);
1796         if (err)
1797                 goto exit;
1798
1799         /* Sets global pdev as a side effect */
1800         err = w83627hf_device_add(address, &sio_data);
1801         if (err)
1802                 goto exit_driver;
1803
1804         return 0;
1805
1806 exit_driver:
1807         platform_driver_unregister(&w83627hf_driver);
1808 exit:
1809         return err;
1810 }
1811
1812 static void __exit sensors_w83627hf_exit(void)
1813 {
1814         platform_device_unregister(pdev);
1815         platform_driver_unregister(&w83627hf_driver);
1816 }
1817
1818 MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>, "
1819               "Philip Edelbrock <phil@netroedge.com>, "
1820               "and Mark Studebaker <mdsxyz123@yahoo.com>");
1821 MODULE_DESCRIPTION("W83627HF driver");
1822 MODULE_LICENSE("GPL");
1823
1824 module_init(sensors_w83627hf_init);
1825 module_exit(sensors_w83627hf_exit);