[PATCH] paravirt: fix missing pte update
[linux-2.6/x86.git] / drivers / hwmon / w83627ehf.c
blob2257806d0102b203bff43aa3e3c73530c7ef49dc
1 /*
2 w83627ehf - Driver for the hardware monitoring functionality of
3 the Winbond W83627EHF Super-I/O chip
4 Copyright (C) 2005 Jean Delvare <khali@linux-fr.org>
5 Copyright (C) 2006 Yuan Mu (Winbond),
6 Rudolf Marek <r.marek@sh.cvut.cz>
7 David Hubbard <david.c.hubbard@gmail.com>
9 Shamelessly ripped from the w83627hf driver
10 Copyright (C) 2003 Mark Studebaker
12 Thanks to Leon Moonen, Steve Cliffe and Grant Coady for their help
13 in testing and debugging this driver.
15 This driver also supports the W83627EHG, which is the lead-free
16 version of the W83627EHF.
18 This program is free software; you can redistribute it and/or modify
19 it under the terms of the GNU General Public License as published by
20 the Free Software Foundation; either version 2 of the License, or
21 (at your option) any later version.
23 This program is distributed in the hope that it will be useful,
24 but WITHOUT ANY WARRANTY; without even the implied warranty of
25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 GNU General Public License for more details.
28 You should have received a copy of the GNU General Public License
29 along with this program; if not, write to the Free Software
30 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
33 Supports the following chips:
35 Chip #vin #fan #pwm #temp chip_id man_id
36 w83627ehf 10 5 4 3 0x88,0xa1 0x5ca3
39 #include <linux/module.h>
40 #include <linux/init.h>
41 #include <linux/slab.h>
42 #include <linux/i2c.h>
43 #include <linux/i2c-isa.h>
44 #include <linux/hwmon.h>
45 #include <linux/hwmon-sysfs.h>
46 #include <linux/err.h>
47 #include <linux/mutex.h>
48 #include <asm/io.h>
49 #include "lm75.h"
51 /* The actual ISA address is read from Super-I/O configuration space */
52 static unsigned short address;
55 * Super-I/O constants and functions
58 static int REG; /* The register to read/write */
59 static int VAL; /* The value to read/write */
61 #define W83627EHF_LD_HWM 0x0b
63 #define SIO_REG_LDSEL 0x07 /* Logical device select */
64 #define SIO_REG_DEVID 0x20 /* Device ID (2 bytes) */
65 #define SIO_REG_ENABLE 0x30 /* Logical device enable */
66 #define SIO_REG_ADDR 0x60 /* Logical device address (2 bytes) */
68 #define SIO_W83627EHF_ID 0x8840
69 #define SIO_ID_MASK 0xFFC0
71 static inline void
72 superio_outb(int reg, int val)
74 outb(reg, REG);
75 outb(val, VAL);
78 static inline int
79 superio_inb(int reg)
81 outb(reg, REG);
82 return inb(VAL);
85 static inline void
86 superio_select(int ld)
88 outb(SIO_REG_LDSEL, REG);
89 outb(ld, VAL);
92 static inline void
93 superio_enter(void)
95 outb(0x87, REG);
96 outb(0x87, REG);
99 static inline void
100 superio_exit(void)
102 outb(0x02, REG);
103 outb(0x02, VAL);
107 * ISA constants
110 #define REGION_ALIGNMENT ~7
111 #define REGION_OFFSET 5
112 #define REGION_LENGTH 2
113 #define ADDR_REG_OFFSET 5
114 #define DATA_REG_OFFSET 6
116 #define W83627EHF_REG_BANK 0x4E
117 #define W83627EHF_REG_CONFIG 0x40
118 #define W83627EHF_REG_CHIP_ID 0x49
119 #define W83627EHF_REG_MAN_ID 0x4F
121 static const u16 W83627EHF_REG_FAN[] = { 0x28, 0x29, 0x2a, 0x3f, 0x553 };
122 static const u16 W83627EHF_REG_FAN_MIN[] = { 0x3b, 0x3c, 0x3d, 0x3e, 0x55c };
124 /* The W83627EHF registers for nr=7,8,9 are in bank 5 */
125 #define W83627EHF_REG_IN_MAX(nr) ((nr < 7) ? (0x2b + (nr) * 2) : \
126 (0x554 + (((nr) - 7) * 2)))
127 #define W83627EHF_REG_IN_MIN(nr) ((nr < 7) ? (0x2c + (nr) * 2) : \
128 (0x555 + (((nr) - 7) * 2)))
129 #define W83627EHF_REG_IN(nr) ((nr < 7) ? (0x20 + (nr)) : \
130 (0x550 + (nr) - 7))
132 #define W83627EHF_REG_TEMP1 0x27
133 #define W83627EHF_REG_TEMP1_HYST 0x3a
134 #define W83627EHF_REG_TEMP1_OVER 0x39
135 static const u16 W83627EHF_REG_TEMP[] = { 0x150, 0x250 };
136 static const u16 W83627EHF_REG_TEMP_HYST[] = { 0x153, 0x253 };
137 static const u16 W83627EHF_REG_TEMP_OVER[] = { 0x155, 0x255 };
138 static const u16 W83627EHF_REG_TEMP_CONFIG[] = { 0x152, 0x252 };
140 /* Fan clock dividers are spread over the following five registers */
141 #define W83627EHF_REG_FANDIV1 0x47
142 #define W83627EHF_REG_FANDIV2 0x4B
143 #define W83627EHF_REG_VBAT 0x5D
144 #define W83627EHF_REG_DIODE 0x59
145 #define W83627EHF_REG_SMI_OVT 0x4C
147 #define W83627EHF_REG_ALARM1 0x459
148 #define W83627EHF_REG_ALARM2 0x45A
149 #define W83627EHF_REG_ALARM3 0x45B
151 /* SmartFan registers */
152 /* DC or PWM output fan configuration */
153 static const u8 W83627EHF_REG_PWM_ENABLE[] = {
154 0x04, /* SYS FAN0 output mode and PWM mode */
155 0x04, /* CPU FAN0 output mode and PWM mode */
156 0x12, /* AUX FAN mode */
157 0x62, /* CPU fan1 mode */
160 static const u8 W83627EHF_PWM_MODE_SHIFT[] = { 0, 1, 0, 6 };
161 static const u8 W83627EHF_PWM_ENABLE_SHIFT[] = { 2, 4, 1, 4 };
163 /* FAN Duty Cycle, be used to control */
164 static const u8 W83627EHF_REG_PWM[] = { 0x01, 0x03, 0x11, 0x61 };
165 static const u8 W83627EHF_REG_TARGET[] = { 0x05, 0x06, 0x13, 0x63 };
166 static const u8 W83627EHF_REG_TOLERANCE[] = { 0x07, 0x07, 0x14, 0x62 };
169 /* Advanced Fan control, some values are common for all fans */
170 static const u8 W83627EHF_REG_FAN_MIN_OUTPUT[] = { 0x08, 0x09, 0x15, 0x64 };
171 static const u8 W83627EHF_REG_FAN_STOP_TIME[] = { 0x0C, 0x0D, 0x17, 0x66 };
174 * Conversions
177 /* 1 is PWM mode, output in ms */
178 static inline unsigned int step_time_from_reg(u8 reg, u8 mode)
180 return mode ? 100 * reg : 400 * reg;
183 static inline u8 step_time_to_reg(unsigned int msec, u8 mode)
185 return SENSORS_LIMIT((mode ? (msec + 50) / 100 :
186 (msec + 200) / 400), 1, 255);
189 static inline unsigned int
190 fan_from_reg(u8 reg, unsigned int div)
192 if (reg == 0 || reg == 255)
193 return 0;
194 return 1350000U / (reg * div);
197 static inline unsigned int
198 div_from_reg(u8 reg)
200 return 1 << reg;
203 static inline int
204 temp1_from_reg(s8 reg)
206 return reg * 1000;
209 static inline s8
210 temp1_to_reg(int temp, int min, int max)
212 if (temp <= min)
213 return min / 1000;
214 if (temp >= max)
215 return max / 1000;
216 if (temp < 0)
217 return (temp - 500) / 1000;
218 return (temp + 500) / 1000;
221 /* Some of analog inputs have internal scaling (2x), 8mV is ADC LSB */
223 static u8 scale_in[10] = { 8, 8, 16, 16, 8, 8, 8, 16, 16, 8 };
225 static inline long in_from_reg(u8 reg, u8 nr)
227 return reg * scale_in[nr];
230 static inline u8 in_to_reg(u32 val, u8 nr)
232 return SENSORS_LIMIT(((val + (scale_in[nr] / 2)) / scale_in[nr]), 0, 255);
236 * Data structures and manipulation thereof
239 struct w83627ehf_data {
240 struct i2c_client client;
241 struct class_device *class_dev;
242 struct mutex lock;
244 struct mutex update_lock;
245 char valid; /* !=0 if following fields are valid */
246 unsigned long last_updated; /* In jiffies */
248 /* Register values */
249 u8 in[10]; /* Register value */
250 u8 in_max[10]; /* Register value */
251 u8 in_min[10]; /* Register value */
252 u8 fan[5];
253 u8 fan_min[5];
254 u8 fan_div[5];
255 u8 has_fan; /* some fan inputs can be disabled */
256 s8 temp1;
257 s8 temp1_max;
258 s8 temp1_max_hyst;
259 s16 temp[2];
260 s16 temp_max[2];
261 s16 temp_max_hyst[2];
262 u32 alarms;
264 u8 pwm_mode[4]; /* 0->DC variable voltage, 1->PWM variable duty cycle */
265 u8 pwm_enable[4]; /* 1->manual
266 2->thermal cruise (also called SmartFan I) */
267 u8 pwm[4];
268 u8 target_temp[4];
269 u8 tolerance[4];
271 u8 fan_min_output[4]; /* minimum fan speed */
272 u8 fan_stop_time[4];
275 static inline int is_word_sized(u16 reg)
277 return (((reg & 0xff00) == 0x100
278 || (reg & 0xff00) == 0x200)
279 && ((reg & 0x00ff) == 0x50
280 || (reg & 0x00ff) == 0x53
281 || (reg & 0x00ff) == 0x55));
284 /* We assume that the default bank is 0, thus the following two functions do
285 nothing for registers which live in bank 0. For others, they respectively
286 set the bank register to the correct value (before the register is
287 accessed), and back to 0 (afterwards). */
288 static inline void w83627ehf_set_bank(struct i2c_client *client, u16 reg)
290 if (reg & 0xff00) {
291 outb_p(W83627EHF_REG_BANK, client->addr + ADDR_REG_OFFSET);
292 outb_p(reg >> 8, client->addr + DATA_REG_OFFSET);
296 static inline void w83627ehf_reset_bank(struct i2c_client *client, u16 reg)
298 if (reg & 0xff00) {
299 outb_p(W83627EHF_REG_BANK, client->addr + ADDR_REG_OFFSET);
300 outb_p(0, client->addr + DATA_REG_OFFSET);
304 static u16 w83627ehf_read_value(struct i2c_client *client, u16 reg)
306 struct w83627ehf_data *data = i2c_get_clientdata(client);
307 int res, word_sized = is_word_sized(reg);
309 mutex_lock(&data->lock);
311 w83627ehf_set_bank(client, reg);
312 outb_p(reg & 0xff, client->addr + ADDR_REG_OFFSET);
313 res = inb_p(client->addr + DATA_REG_OFFSET);
314 if (word_sized) {
315 outb_p((reg & 0xff) + 1,
316 client->addr + ADDR_REG_OFFSET);
317 res = (res << 8) + inb_p(client->addr + DATA_REG_OFFSET);
319 w83627ehf_reset_bank(client, reg);
321 mutex_unlock(&data->lock);
323 return res;
326 static int w83627ehf_write_value(struct i2c_client *client, u16 reg, u16 value)
328 struct w83627ehf_data *data = i2c_get_clientdata(client);
329 int word_sized = is_word_sized(reg);
331 mutex_lock(&data->lock);
333 w83627ehf_set_bank(client, reg);
334 outb_p(reg & 0xff, client->addr + ADDR_REG_OFFSET);
335 if (word_sized) {
336 outb_p(value >> 8, client->addr + DATA_REG_OFFSET);
337 outb_p((reg & 0xff) + 1,
338 client->addr + ADDR_REG_OFFSET);
340 outb_p(value & 0xff, client->addr + DATA_REG_OFFSET);
341 w83627ehf_reset_bank(client, reg);
343 mutex_unlock(&data->lock);
344 return 0;
347 /* This function assumes that the caller holds data->update_lock */
348 static void w83627ehf_write_fan_div(struct i2c_client *client, int nr)
350 struct w83627ehf_data *data = i2c_get_clientdata(client);
351 u8 reg;
353 switch (nr) {
354 case 0:
355 reg = (w83627ehf_read_value(client, W83627EHF_REG_FANDIV1) & 0xcf)
356 | ((data->fan_div[0] & 0x03) << 4);
357 /* fan5 input control bit is write only, compute the value */
358 reg |= (data->has_fan & (1 << 4)) ? 1 : 0;
359 w83627ehf_write_value(client, W83627EHF_REG_FANDIV1, reg);
360 reg = (w83627ehf_read_value(client, W83627EHF_REG_VBAT) & 0xdf)
361 | ((data->fan_div[0] & 0x04) << 3);
362 w83627ehf_write_value(client, W83627EHF_REG_VBAT, reg);
363 break;
364 case 1:
365 reg = (w83627ehf_read_value(client, W83627EHF_REG_FANDIV1) & 0x3f)
366 | ((data->fan_div[1] & 0x03) << 6);
367 /* fan5 input control bit is write only, compute the value */
368 reg |= (data->has_fan & (1 << 4)) ? 1 : 0;
369 w83627ehf_write_value(client, W83627EHF_REG_FANDIV1, reg);
370 reg = (w83627ehf_read_value(client, W83627EHF_REG_VBAT) & 0xbf)
371 | ((data->fan_div[1] & 0x04) << 4);
372 w83627ehf_write_value(client, W83627EHF_REG_VBAT, reg);
373 break;
374 case 2:
375 reg = (w83627ehf_read_value(client, W83627EHF_REG_FANDIV2) & 0x3f)
376 | ((data->fan_div[2] & 0x03) << 6);
377 w83627ehf_write_value(client, W83627EHF_REG_FANDIV2, reg);
378 reg = (w83627ehf_read_value(client, W83627EHF_REG_VBAT) & 0x7f)
379 | ((data->fan_div[2] & 0x04) << 5);
380 w83627ehf_write_value(client, W83627EHF_REG_VBAT, reg);
381 break;
382 case 3:
383 reg = (w83627ehf_read_value(client, W83627EHF_REG_DIODE) & 0xfc)
384 | (data->fan_div[3] & 0x03);
385 w83627ehf_write_value(client, W83627EHF_REG_DIODE, reg);
386 reg = (w83627ehf_read_value(client, W83627EHF_REG_SMI_OVT) & 0x7f)
387 | ((data->fan_div[3] & 0x04) << 5);
388 w83627ehf_write_value(client, W83627EHF_REG_SMI_OVT, reg);
389 break;
390 case 4:
391 reg = (w83627ehf_read_value(client, W83627EHF_REG_DIODE) & 0x73)
392 | ((data->fan_div[4] & 0x03) << 3)
393 | ((data->fan_div[4] & 0x04) << 5);
394 w83627ehf_write_value(client, W83627EHF_REG_DIODE, reg);
395 break;
399 static struct w83627ehf_data *w83627ehf_update_device(struct device *dev)
401 struct i2c_client *client = to_i2c_client(dev);
402 struct w83627ehf_data *data = i2c_get_clientdata(client);
403 int pwmcfg = 0, tolerance = 0; /* shut up the compiler */
404 int i;
406 mutex_lock(&data->update_lock);
408 if (time_after(jiffies, data->last_updated + HZ)
409 || !data->valid) {
410 /* Fan clock dividers */
411 i = w83627ehf_read_value(client, W83627EHF_REG_FANDIV1);
412 data->fan_div[0] = (i >> 4) & 0x03;
413 data->fan_div[1] = (i >> 6) & 0x03;
414 i = w83627ehf_read_value(client, W83627EHF_REG_FANDIV2);
415 data->fan_div[2] = (i >> 6) & 0x03;
416 i = w83627ehf_read_value(client, W83627EHF_REG_VBAT);
417 data->fan_div[0] |= (i >> 3) & 0x04;
418 data->fan_div[1] |= (i >> 4) & 0x04;
419 data->fan_div[2] |= (i >> 5) & 0x04;
420 if (data->has_fan & ((1 << 3) | (1 << 4))) {
421 i = w83627ehf_read_value(client, W83627EHF_REG_DIODE);
422 data->fan_div[3] = i & 0x03;
423 data->fan_div[4] = ((i >> 2) & 0x03)
424 | ((i >> 5) & 0x04);
426 if (data->has_fan & (1 << 3)) {
427 i = w83627ehf_read_value(client, W83627EHF_REG_SMI_OVT);
428 data->fan_div[3] |= (i >> 5) & 0x04;
431 /* Measured voltages and limits */
432 for (i = 0; i < 10; i++) {
433 data->in[i] = w83627ehf_read_value(client,
434 W83627EHF_REG_IN(i));
435 data->in_min[i] = w83627ehf_read_value(client,
436 W83627EHF_REG_IN_MIN(i));
437 data->in_max[i] = w83627ehf_read_value(client,
438 W83627EHF_REG_IN_MAX(i));
441 /* Measured fan speeds and limits */
442 for (i = 0; i < 5; i++) {
443 if (!(data->has_fan & (1 << i)))
444 continue;
446 data->fan[i] = w83627ehf_read_value(client,
447 W83627EHF_REG_FAN[i]);
448 data->fan_min[i] = w83627ehf_read_value(client,
449 W83627EHF_REG_FAN_MIN[i]);
451 /* If we failed to measure the fan speed and clock
452 divider can be increased, let's try that for next
453 time */
454 if (data->fan[i] == 0xff
455 && data->fan_div[i] < 0x07) {
456 dev_dbg(&client->dev, "Increasing fan %d "
457 "clock divider from %u to %u\n",
458 i, div_from_reg(data->fan_div[i]),
459 div_from_reg(data->fan_div[i] + 1));
460 data->fan_div[i]++;
461 w83627ehf_write_fan_div(client, i);
462 /* Preserve min limit if possible */
463 if (data->fan_min[i] >= 2
464 && data->fan_min[i] != 255)
465 w83627ehf_write_value(client,
466 W83627EHF_REG_FAN_MIN[i],
467 (data->fan_min[i] /= 2));
471 for (i = 0; i < 4; i++) {
472 /* pwmcfg, tolarance mapped for i=0, i=1 to same reg */
473 if (i != 1) {
474 pwmcfg = w83627ehf_read_value(client,
475 W83627EHF_REG_PWM_ENABLE[i]);
476 tolerance = w83627ehf_read_value(client,
477 W83627EHF_REG_TOLERANCE[i]);
479 data->pwm_mode[i] =
480 ((pwmcfg >> W83627EHF_PWM_MODE_SHIFT[i]) & 1)
481 ? 0 : 1;
482 data->pwm_enable[i] =
483 ((pwmcfg >> W83627EHF_PWM_ENABLE_SHIFT[i])
484 & 3) + 1;
485 data->pwm[i] = w83627ehf_read_value(client,
486 W83627EHF_REG_PWM[i]);
487 data->fan_min_output[i] = w83627ehf_read_value(client,
488 W83627EHF_REG_FAN_MIN_OUTPUT[i]);
489 data->fan_stop_time[i] = w83627ehf_read_value(client,
490 W83627EHF_REG_FAN_STOP_TIME[i]);
491 data->target_temp[i] =
492 w83627ehf_read_value(client,
493 W83627EHF_REG_TARGET[i]) &
494 (data->pwm_mode[i] == 1 ? 0x7f : 0xff);
495 data->tolerance[i] = (tolerance >> (i == 1 ? 4 : 0))
496 & 0x0f;
499 /* Measured temperatures and limits */
500 data->temp1 = w83627ehf_read_value(client,
501 W83627EHF_REG_TEMP1);
502 data->temp1_max = w83627ehf_read_value(client,
503 W83627EHF_REG_TEMP1_OVER);
504 data->temp1_max_hyst = w83627ehf_read_value(client,
505 W83627EHF_REG_TEMP1_HYST);
506 for (i = 0; i < 2; i++) {
507 data->temp[i] = w83627ehf_read_value(client,
508 W83627EHF_REG_TEMP[i]);
509 data->temp_max[i] = w83627ehf_read_value(client,
510 W83627EHF_REG_TEMP_OVER[i]);
511 data->temp_max_hyst[i] = w83627ehf_read_value(client,
512 W83627EHF_REG_TEMP_HYST[i]);
515 data->alarms = w83627ehf_read_value(client,
516 W83627EHF_REG_ALARM1) |
517 (w83627ehf_read_value(client,
518 W83627EHF_REG_ALARM2) << 8) |
519 (w83627ehf_read_value(client,
520 W83627EHF_REG_ALARM3) << 16);
522 data->last_updated = jiffies;
523 data->valid = 1;
526 mutex_unlock(&data->update_lock);
527 return data;
531 * Sysfs callback functions
533 #define show_in_reg(reg) \
534 static ssize_t \
535 show_##reg(struct device *dev, struct device_attribute *attr, \
536 char *buf) \
538 struct w83627ehf_data *data = w83627ehf_update_device(dev); \
539 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
540 int nr = sensor_attr->index; \
541 return sprintf(buf, "%ld\n", in_from_reg(data->reg[nr], nr)); \
543 show_in_reg(in)
544 show_in_reg(in_min)
545 show_in_reg(in_max)
547 #define store_in_reg(REG, reg) \
548 static ssize_t \
549 store_in_##reg (struct device *dev, struct device_attribute *attr, \
550 const char *buf, size_t count) \
552 struct i2c_client *client = to_i2c_client(dev); \
553 struct w83627ehf_data *data = i2c_get_clientdata(client); \
554 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
555 int nr = sensor_attr->index; \
556 u32 val = simple_strtoul(buf, NULL, 10); \
558 mutex_lock(&data->update_lock); \
559 data->in_##reg[nr] = in_to_reg(val, nr); \
560 w83627ehf_write_value(client, W83627EHF_REG_IN_##REG(nr), \
561 data->in_##reg[nr]); \
562 mutex_unlock(&data->update_lock); \
563 return count; \
566 store_in_reg(MIN, min)
567 store_in_reg(MAX, max)
569 static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, char *buf)
571 struct w83627ehf_data *data = w83627ehf_update_device(dev);
572 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
573 int nr = sensor_attr->index;
574 return sprintf(buf, "%u\n", (data->alarms >> nr) & 0x01);
577 static struct sensor_device_attribute sda_in_input[] = {
578 SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
579 SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
580 SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
581 SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
582 SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
583 SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
584 SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
585 SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
586 SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
587 SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
590 static struct sensor_device_attribute sda_in_alarm[] = {
591 SENSOR_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0),
592 SENSOR_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1),
593 SENSOR_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2),
594 SENSOR_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3),
595 SENSOR_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8),
596 SENSOR_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 21),
597 SENSOR_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 20),
598 SENSOR_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 16),
599 SENSOR_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 17),
600 SENSOR_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL, 19),
603 static struct sensor_device_attribute sda_in_min[] = {
604 SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
605 SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
606 SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
607 SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
608 SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
609 SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
610 SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
611 SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
612 SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
613 SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
616 static struct sensor_device_attribute sda_in_max[] = {
617 SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
618 SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
619 SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
620 SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
621 SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
622 SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
623 SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
624 SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
625 SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
626 SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
629 #define show_fan_reg(reg) \
630 static ssize_t \
631 show_##reg(struct device *dev, struct device_attribute *attr, \
632 char *buf) \
634 struct w83627ehf_data *data = w83627ehf_update_device(dev); \
635 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
636 int nr = sensor_attr->index; \
637 return sprintf(buf, "%d\n", \
638 fan_from_reg(data->reg[nr], \
639 div_from_reg(data->fan_div[nr]))); \
641 show_fan_reg(fan);
642 show_fan_reg(fan_min);
644 static ssize_t
645 show_fan_div(struct device *dev, struct device_attribute *attr,
646 char *buf)
648 struct w83627ehf_data *data = w83627ehf_update_device(dev);
649 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
650 int nr = sensor_attr->index;
651 return sprintf(buf, "%u\n", div_from_reg(data->fan_div[nr]));
654 static ssize_t
655 store_fan_min(struct device *dev, struct device_attribute *attr,
656 const char *buf, size_t count)
658 struct i2c_client *client = to_i2c_client(dev);
659 struct w83627ehf_data *data = i2c_get_clientdata(client);
660 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
661 int nr = sensor_attr->index;
662 unsigned int val = simple_strtoul(buf, NULL, 10);
663 unsigned int reg;
664 u8 new_div;
666 mutex_lock(&data->update_lock);
667 if (!val) {
668 /* No min limit, alarm disabled */
669 data->fan_min[nr] = 255;
670 new_div = data->fan_div[nr]; /* No change */
671 dev_info(dev, "fan%u low limit and alarm disabled\n", nr + 1);
672 } else if ((reg = 1350000U / val) >= 128 * 255) {
673 /* Speed below this value cannot possibly be represented,
674 even with the highest divider (128) */
675 data->fan_min[nr] = 254;
676 new_div = 7; /* 128 == (1 << 7) */
677 dev_warn(dev, "fan%u low limit %u below minimum %u, set to "
678 "minimum\n", nr + 1, val, fan_from_reg(254, 128));
679 } else if (!reg) {
680 /* Speed above this value cannot possibly be represented,
681 even with the lowest divider (1) */
682 data->fan_min[nr] = 1;
683 new_div = 0; /* 1 == (1 << 0) */
684 dev_warn(dev, "fan%u low limit %u above maximum %u, set to "
685 "maximum\n", nr + 1, val, fan_from_reg(1, 1));
686 } else {
687 /* Automatically pick the best divider, i.e. the one such
688 that the min limit will correspond to a register value
689 in the 96..192 range */
690 new_div = 0;
691 while (reg > 192 && new_div < 7) {
692 reg >>= 1;
693 new_div++;
695 data->fan_min[nr] = reg;
698 /* Write both the fan clock divider (if it changed) and the new
699 fan min (unconditionally) */
700 if (new_div != data->fan_div[nr]) {
701 if (new_div > data->fan_div[nr])
702 data->fan[nr] >>= (data->fan_div[nr] - new_div);
703 else
704 data->fan[nr] <<= (new_div - data->fan_div[nr]);
706 dev_dbg(dev, "fan%u clock divider changed from %u to %u\n",
707 nr + 1, div_from_reg(data->fan_div[nr]),
708 div_from_reg(new_div));
709 data->fan_div[nr] = new_div;
710 w83627ehf_write_fan_div(client, nr);
712 w83627ehf_write_value(client, W83627EHF_REG_FAN_MIN[nr],
713 data->fan_min[nr]);
714 mutex_unlock(&data->update_lock);
716 return count;
719 static struct sensor_device_attribute sda_fan_input[] = {
720 SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
721 SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
722 SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
723 SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3),
724 SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
727 static struct sensor_device_attribute sda_fan_alarm[] = {
728 SENSOR_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6),
729 SENSOR_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7),
730 SENSOR_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11),
731 SENSOR_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 10),
732 SENSOR_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 23),
735 static struct sensor_device_attribute sda_fan_min[] = {
736 SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
737 store_fan_min, 0),
738 SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
739 store_fan_min, 1),
740 SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
741 store_fan_min, 2),
742 SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
743 store_fan_min, 3),
744 SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO, show_fan_min,
745 store_fan_min, 4),
748 static struct sensor_device_attribute sda_fan_div[] = {
749 SENSOR_ATTR(fan1_div, S_IRUGO, show_fan_div, NULL, 0),
750 SENSOR_ATTR(fan2_div, S_IRUGO, show_fan_div, NULL, 1),
751 SENSOR_ATTR(fan3_div, S_IRUGO, show_fan_div, NULL, 2),
752 SENSOR_ATTR(fan4_div, S_IRUGO, show_fan_div, NULL, 3),
753 SENSOR_ATTR(fan5_div, S_IRUGO, show_fan_div, NULL, 4),
756 #define show_temp1_reg(reg) \
757 static ssize_t \
758 show_##reg(struct device *dev, struct device_attribute *attr, \
759 char *buf) \
761 struct w83627ehf_data *data = w83627ehf_update_device(dev); \
762 return sprintf(buf, "%d\n", temp1_from_reg(data->reg)); \
764 show_temp1_reg(temp1);
765 show_temp1_reg(temp1_max);
766 show_temp1_reg(temp1_max_hyst);
768 #define store_temp1_reg(REG, reg) \
769 static ssize_t \
770 store_temp1_##reg(struct device *dev, struct device_attribute *attr, \
771 const char *buf, size_t count) \
773 struct i2c_client *client = to_i2c_client(dev); \
774 struct w83627ehf_data *data = i2c_get_clientdata(client); \
775 u32 val = simple_strtoul(buf, NULL, 10); \
777 mutex_lock(&data->update_lock); \
778 data->temp1_##reg = temp1_to_reg(val, -128000, 127000); \
779 w83627ehf_write_value(client, W83627EHF_REG_TEMP1_##REG, \
780 data->temp1_##reg); \
781 mutex_unlock(&data->update_lock); \
782 return count; \
784 store_temp1_reg(OVER, max);
785 store_temp1_reg(HYST, max_hyst);
787 #define show_temp_reg(reg) \
788 static ssize_t \
789 show_##reg(struct device *dev, struct device_attribute *attr, \
790 char *buf) \
792 struct w83627ehf_data *data = w83627ehf_update_device(dev); \
793 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
794 int nr = sensor_attr->index; \
795 return sprintf(buf, "%d\n", \
796 LM75_TEMP_FROM_REG(data->reg[nr])); \
798 show_temp_reg(temp);
799 show_temp_reg(temp_max);
800 show_temp_reg(temp_max_hyst);
802 #define store_temp_reg(REG, reg) \
803 static ssize_t \
804 store_##reg(struct device *dev, struct device_attribute *attr, \
805 const char *buf, size_t count) \
807 struct i2c_client *client = to_i2c_client(dev); \
808 struct w83627ehf_data *data = i2c_get_clientdata(client); \
809 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
810 int nr = sensor_attr->index; \
811 u32 val = simple_strtoul(buf, NULL, 10); \
813 mutex_lock(&data->update_lock); \
814 data->reg[nr] = LM75_TEMP_TO_REG(val); \
815 w83627ehf_write_value(client, W83627EHF_REG_TEMP_##REG[nr], \
816 data->reg[nr]); \
817 mutex_unlock(&data->update_lock); \
818 return count; \
820 store_temp_reg(OVER, temp_max);
821 store_temp_reg(HYST, temp_max_hyst);
823 static struct sensor_device_attribute sda_temp[] = {
824 SENSOR_ATTR(temp1_input, S_IRUGO, show_temp1, NULL, 0),
825 SENSOR_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 0),
826 SENSOR_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 1),
827 SENSOR_ATTR(temp1_max, S_IRUGO | S_IWUSR, show_temp1_max,
828 store_temp1_max, 0),
829 SENSOR_ATTR(temp2_max, S_IRUGO | S_IWUSR, show_temp_max,
830 store_temp_max, 0),
831 SENSOR_ATTR(temp3_max, S_IRUGO | S_IWUSR, show_temp_max,
832 store_temp_max, 1),
833 SENSOR_ATTR(temp1_max_hyst, S_IRUGO | S_IWUSR, show_temp1_max_hyst,
834 store_temp1_max_hyst, 0),
835 SENSOR_ATTR(temp2_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
836 store_temp_max_hyst, 0),
837 SENSOR_ATTR(temp3_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
838 store_temp_max_hyst, 1),
839 SENSOR_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4),
840 SENSOR_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5),
841 SENSOR_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13),
844 #define show_pwm_reg(reg) \
845 static ssize_t show_##reg (struct device *dev, struct device_attribute *attr, \
846 char *buf) \
848 struct w83627ehf_data *data = w83627ehf_update_device(dev); \
849 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
850 int nr = sensor_attr->index; \
851 return sprintf(buf, "%d\n", data->reg[nr]); \
854 show_pwm_reg(pwm_mode)
855 show_pwm_reg(pwm_enable)
856 show_pwm_reg(pwm)
858 static ssize_t
859 store_pwm_mode(struct device *dev, struct device_attribute *attr,
860 const char *buf, size_t count)
862 struct i2c_client *client = to_i2c_client(dev);
863 struct w83627ehf_data *data = i2c_get_clientdata(client);
864 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
865 int nr = sensor_attr->index;
866 u32 val = simple_strtoul(buf, NULL, 10);
867 u16 reg;
869 if (val > 1)
870 return -EINVAL;
871 mutex_lock(&data->update_lock);
872 reg = w83627ehf_read_value(client, W83627EHF_REG_PWM_ENABLE[nr]);
873 data->pwm_mode[nr] = val;
874 reg &= ~(1 << W83627EHF_PWM_MODE_SHIFT[nr]);
875 if (!val)
876 reg |= 1 << W83627EHF_PWM_MODE_SHIFT[nr];
877 w83627ehf_write_value(client, W83627EHF_REG_PWM_ENABLE[nr], reg);
878 mutex_unlock(&data->update_lock);
879 return count;
882 static ssize_t
883 store_pwm(struct device *dev, struct device_attribute *attr,
884 const char *buf, size_t count)
886 struct i2c_client *client = to_i2c_client(dev);
887 struct w83627ehf_data *data = i2c_get_clientdata(client);
888 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
889 int nr = sensor_attr->index;
890 u32 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 255);
892 mutex_lock(&data->update_lock);
893 data->pwm[nr] = val;
894 w83627ehf_write_value(client, W83627EHF_REG_PWM[nr], val);
895 mutex_unlock(&data->update_lock);
896 return count;
899 static ssize_t
900 store_pwm_enable(struct device *dev, struct device_attribute *attr,
901 const char *buf, size_t count)
903 struct i2c_client *client = to_i2c_client(dev);
904 struct w83627ehf_data *data = i2c_get_clientdata(client);
905 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
906 int nr = sensor_attr->index;
907 u32 val = simple_strtoul(buf, NULL, 10);
908 u16 reg;
910 if (!val || (val > 2)) /* only modes 1 and 2 are supported */
911 return -EINVAL;
912 mutex_lock(&data->update_lock);
913 reg = w83627ehf_read_value(client, W83627EHF_REG_PWM_ENABLE[nr]);
914 data->pwm_enable[nr] = val;
915 reg &= ~(0x03 << W83627EHF_PWM_ENABLE_SHIFT[nr]);
916 reg |= (val - 1) << W83627EHF_PWM_ENABLE_SHIFT[nr];
917 w83627ehf_write_value(client, W83627EHF_REG_PWM_ENABLE[nr], reg);
918 mutex_unlock(&data->update_lock);
919 return count;
923 #define show_tol_temp(reg) \
924 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
925 char *buf) \
927 struct w83627ehf_data *data = w83627ehf_update_device(dev); \
928 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
929 int nr = sensor_attr->index; \
930 return sprintf(buf, "%d\n", temp1_from_reg(data->reg[nr])); \
933 show_tol_temp(tolerance)
934 show_tol_temp(target_temp)
936 static ssize_t
937 store_target_temp(struct device *dev, struct device_attribute *attr,
938 const char *buf, size_t count)
940 struct i2c_client *client = to_i2c_client(dev);
941 struct w83627ehf_data *data = i2c_get_clientdata(client);
942 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
943 int nr = sensor_attr->index;
944 u8 val = temp1_to_reg(simple_strtoul(buf, NULL, 10), 0, 127000);
946 mutex_lock(&data->update_lock);
947 data->target_temp[nr] = val;
948 w83627ehf_write_value(client, W83627EHF_REG_TARGET[nr], val);
949 mutex_unlock(&data->update_lock);
950 return count;
953 static ssize_t
954 store_tolerance(struct device *dev, struct device_attribute *attr,
955 const char *buf, size_t count)
957 struct i2c_client *client = to_i2c_client(dev);
958 struct w83627ehf_data *data = i2c_get_clientdata(client);
959 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
960 int nr = sensor_attr->index;
961 u16 reg;
962 /* Limit the temp to 0C - 15C */
963 u8 val = temp1_to_reg(simple_strtoul(buf, NULL, 10), 0, 15000);
965 mutex_lock(&data->update_lock);
966 reg = w83627ehf_read_value(client, W83627EHF_REG_TOLERANCE[nr]);
967 data->tolerance[nr] = val;
968 if (nr == 1)
969 reg = (reg & 0x0f) | (val << 4);
970 else
971 reg = (reg & 0xf0) | val;
972 w83627ehf_write_value(client, W83627EHF_REG_TOLERANCE[nr], reg);
973 mutex_unlock(&data->update_lock);
974 return count;
977 static struct sensor_device_attribute sda_pwm[] = {
978 SENSOR_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 0),
979 SENSOR_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 1),
980 SENSOR_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 2),
981 SENSOR_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 3),
984 static struct sensor_device_attribute sda_pwm_mode[] = {
985 SENSOR_ATTR(pwm1_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
986 store_pwm_mode, 0),
987 SENSOR_ATTR(pwm2_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
988 store_pwm_mode, 1),
989 SENSOR_ATTR(pwm3_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
990 store_pwm_mode, 2),
991 SENSOR_ATTR(pwm4_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
992 store_pwm_mode, 3),
995 static struct sensor_device_attribute sda_pwm_enable[] = {
996 SENSOR_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
997 store_pwm_enable, 0),
998 SENSOR_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
999 store_pwm_enable, 1),
1000 SENSOR_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1001 store_pwm_enable, 2),
1002 SENSOR_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1003 store_pwm_enable, 3),
1006 static struct sensor_device_attribute sda_target_temp[] = {
1007 SENSOR_ATTR(pwm1_target, S_IWUSR | S_IRUGO, show_target_temp,
1008 store_target_temp, 0),
1009 SENSOR_ATTR(pwm2_target, S_IWUSR | S_IRUGO, show_target_temp,
1010 store_target_temp, 1),
1011 SENSOR_ATTR(pwm3_target, S_IWUSR | S_IRUGO, show_target_temp,
1012 store_target_temp, 2),
1013 SENSOR_ATTR(pwm4_target, S_IWUSR | S_IRUGO, show_target_temp,
1014 store_target_temp, 3),
1017 static struct sensor_device_attribute sda_tolerance[] = {
1018 SENSOR_ATTR(pwm1_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1019 store_tolerance, 0),
1020 SENSOR_ATTR(pwm2_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1021 store_tolerance, 1),
1022 SENSOR_ATTR(pwm3_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1023 store_tolerance, 2),
1024 SENSOR_ATTR(pwm4_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1025 store_tolerance, 3),
1028 /* Smart Fan registers */
1030 #define fan_functions(reg, REG) \
1031 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1032 char *buf) \
1034 struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1035 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
1036 int nr = sensor_attr->index; \
1037 return sprintf(buf, "%d\n", data->reg[nr]); \
1039 static ssize_t \
1040 store_##reg(struct device *dev, struct device_attribute *attr, \
1041 const char *buf, size_t count) \
1043 struct i2c_client *client = to_i2c_client(dev); \
1044 struct w83627ehf_data *data = i2c_get_clientdata(client); \
1045 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
1046 int nr = sensor_attr->index; \
1047 u32 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 1, 255); \
1048 mutex_lock(&data->update_lock); \
1049 data->reg[nr] = val; \
1050 w83627ehf_write_value(client, W83627EHF_REG_##REG[nr], val); \
1051 mutex_unlock(&data->update_lock); \
1052 return count; \
1055 fan_functions(fan_min_output, FAN_MIN_OUTPUT)
1057 #define fan_time_functions(reg, REG) \
1058 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1059 char *buf) \
1061 struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1062 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
1063 int nr = sensor_attr->index; \
1064 return sprintf(buf, "%d\n", \
1065 step_time_from_reg(data->reg[nr], data->pwm_mode[nr])); \
1068 static ssize_t \
1069 store_##reg(struct device *dev, struct device_attribute *attr, \
1070 const char *buf, size_t count) \
1072 struct i2c_client *client = to_i2c_client(dev); \
1073 struct w83627ehf_data *data = i2c_get_clientdata(client); \
1074 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
1075 int nr = sensor_attr->index; \
1076 u8 val = step_time_to_reg(simple_strtoul(buf, NULL, 10), \
1077 data->pwm_mode[nr]); \
1078 mutex_lock(&data->update_lock); \
1079 data->reg[nr] = val; \
1080 w83627ehf_write_value(client, W83627EHF_REG_##REG[nr], val); \
1081 mutex_unlock(&data->update_lock); \
1082 return count; \
1085 fan_time_functions(fan_stop_time, FAN_STOP_TIME)
1088 static struct sensor_device_attribute sda_sf3_arrays_fan4[] = {
1089 SENSOR_ATTR(pwm4_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1090 store_fan_stop_time, 3),
1091 SENSOR_ATTR(pwm4_min_output, S_IWUSR | S_IRUGO, show_fan_min_output,
1092 store_fan_min_output, 3),
1095 static struct sensor_device_attribute sda_sf3_arrays[] = {
1096 SENSOR_ATTR(pwm1_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1097 store_fan_stop_time, 0),
1098 SENSOR_ATTR(pwm2_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1099 store_fan_stop_time, 1),
1100 SENSOR_ATTR(pwm3_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1101 store_fan_stop_time, 2),
1102 SENSOR_ATTR(pwm1_min_output, S_IWUSR | S_IRUGO, show_fan_min_output,
1103 store_fan_min_output, 0),
1104 SENSOR_ATTR(pwm2_min_output, S_IWUSR | S_IRUGO, show_fan_min_output,
1105 store_fan_min_output, 1),
1106 SENSOR_ATTR(pwm3_min_output, S_IWUSR | S_IRUGO, show_fan_min_output,
1107 store_fan_min_output, 2),
1111 * Driver and client management
1114 static void w83627ehf_device_remove_files(struct device *dev)
1116 /* some entries in the following arrays may not have been used in
1117 * device_create_file(), but device_remove_file() will ignore them */
1118 int i;
1120 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays); i++)
1121 device_remove_file(dev, &sda_sf3_arrays[i].dev_attr);
1122 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays_fan4); i++)
1123 device_remove_file(dev, &sda_sf3_arrays_fan4[i].dev_attr);
1124 for (i = 0; i < 10; i++) {
1125 device_remove_file(dev, &sda_in_input[i].dev_attr);
1126 device_remove_file(dev, &sda_in_alarm[i].dev_attr);
1127 device_remove_file(dev, &sda_in_min[i].dev_attr);
1128 device_remove_file(dev, &sda_in_max[i].dev_attr);
1130 for (i = 0; i < 5; i++) {
1131 device_remove_file(dev, &sda_fan_input[i].dev_attr);
1132 device_remove_file(dev, &sda_fan_alarm[i].dev_attr);
1133 device_remove_file(dev, &sda_fan_div[i].dev_attr);
1134 device_remove_file(dev, &sda_fan_min[i].dev_attr);
1136 for (i = 0; i < 4; i++) {
1137 device_remove_file(dev, &sda_pwm[i].dev_attr);
1138 device_remove_file(dev, &sda_pwm_mode[i].dev_attr);
1139 device_remove_file(dev, &sda_pwm_enable[i].dev_attr);
1140 device_remove_file(dev, &sda_target_temp[i].dev_attr);
1141 device_remove_file(dev, &sda_tolerance[i].dev_attr);
1143 for (i = 0; i < ARRAY_SIZE(sda_temp); i++)
1144 device_remove_file(dev, &sda_temp[i].dev_attr);
1147 static struct i2c_driver w83627ehf_driver;
1149 static void w83627ehf_init_client(struct i2c_client *client)
1151 int i;
1152 u8 tmp;
1154 /* Start monitoring is needed */
1155 tmp = w83627ehf_read_value(client, W83627EHF_REG_CONFIG);
1156 if (!(tmp & 0x01))
1157 w83627ehf_write_value(client, W83627EHF_REG_CONFIG,
1158 tmp | 0x01);
1160 /* Enable temp2 and temp3 if needed */
1161 for (i = 0; i < 2; i++) {
1162 tmp = w83627ehf_read_value(client,
1163 W83627EHF_REG_TEMP_CONFIG[i]);
1164 if (tmp & 0x01)
1165 w83627ehf_write_value(client,
1166 W83627EHF_REG_TEMP_CONFIG[i],
1167 tmp & 0xfe);
1171 static int w83627ehf_detect(struct i2c_adapter *adapter)
1173 struct i2c_client *client;
1174 struct w83627ehf_data *data;
1175 struct device *dev;
1176 u8 fan4pin, fan5pin;
1177 int i, err = 0;
1179 if (!request_region(address + REGION_OFFSET, REGION_LENGTH,
1180 w83627ehf_driver.driver.name)) {
1181 err = -EBUSY;
1182 goto exit;
1185 if (!(data = kzalloc(sizeof(struct w83627ehf_data), GFP_KERNEL))) {
1186 err = -ENOMEM;
1187 goto exit_release;
1190 client = &data->client;
1191 i2c_set_clientdata(client, data);
1192 client->addr = address;
1193 mutex_init(&data->lock);
1194 client->adapter = adapter;
1195 client->driver = &w83627ehf_driver;
1196 client->flags = 0;
1197 dev = &client->dev;
1199 strlcpy(client->name, "w83627ehf", I2C_NAME_SIZE);
1200 data->valid = 0;
1201 mutex_init(&data->update_lock);
1203 /* Tell the i2c layer a new client has arrived */
1204 if ((err = i2c_attach_client(client)))
1205 goto exit_free;
1207 /* Initialize the chip */
1208 w83627ehf_init_client(client);
1210 /* A few vars need to be filled upon startup */
1211 for (i = 0; i < 5; i++)
1212 data->fan_min[i] = w83627ehf_read_value(client,
1213 W83627EHF_REG_FAN_MIN[i]);
1215 /* fan4 and fan5 share some pins with the GPIO and serial flash */
1217 superio_enter();
1218 fan5pin = superio_inb(0x24) & 0x2;
1219 fan4pin = superio_inb(0x29) & 0x6;
1220 superio_exit();
1222 /* It looks like fan4 and fan5 pins can be alternatively used
1223 as fan on/off switches, but fan5 control is write only :/
1224 We assume that if the serial interface is disabled, designers
1225 connected fan5 as input unless they are emitting log 1, which
1226 is not the default. */
1228 data->has_fan = 0x07; /* fan1, fan2 and fan3 */
1229 i = w83627ehf_read_value(client, W83627EHF_REG_FANDIV1);
1230 if ((i & (1 << 2)) && (!fan4pin))
1231 data->has_fan |= (1 << 3);
1232 if (!(i & (1 << 1)) && (!fan5pin))
1233 data->has_fan |= (1 << 4);
1235 /* Register sysfs hooks */
1236 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays); i++)
1237 if ((err = device_create_file(dev,
1238 &sda_sf3_arrays[i].dev_attr)))
1239 goto exit_remove;
1241 /* if fan4 is enabled create the sf3 files for it */
1242 if (data->has_fan & (1 << 3))
1243 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays_fan4); i++) {
1244 if ((err = device_create_file(dev,
1245 &sda_sf3_arrays_fan4[i].dev_attr)))
1246 goto exit_remove;
1249 for (i = 0; i < 10; i++)
1250 if ((err = device_create_file(dev, &sda_in_input[i].dev_attr))
1251 || (err = device_create_file(dev,
1252 &sda_in_alarm[i].dev_attr))
1253 || (err = device_create_file(dev,
1254 &sda_in_min[i].dev_attr))
1255 || (err = device_create_file(dev,
1256 &sda_in_max[i].dev_attr)))
1257 goto exit_remove;
1259 for (i = 0; i < 5; i++) {
1260 if (data->has_fan & (1 << i)) {
1261 if ((err = device_create_file(dev,
1262 &sda_fan_input[i].dev_attr))
1263 || (err = device_create_file(dev,
1264 &sda_fan_alarm[i].dev_attr))
1265 || (err = device_create_file(dev,
1266 &sda_fan_div[i].dev_attr))
1267 || (err = device_create_file(dev,
1268 &sda_fan_min[i].dev_attr)))
1269 goto exit_remove;
1270 if (i < 4 && /* w83627ehf only has 4 pwm */
1271 ((err = device_create_file(dev,
1272 &sda_pwm[i].dev_attr))
1273 || (err = device_create_file(dev,
1274 &sda_pwm_mode[i].dev_attr))
1275 || (err = device_create_file(dev,
1276 &sda_pwm_enable[i].dev_attr))
1277 || (err = device_create_file(dev,
1278 &sda_target_temp[i].dev_attr))
1279 || (err = device_create_file(dev,
1280 &sda_tolerance[i].dev_attr))))
1281 goto exit_remove;
1285 for (i = 0; i < ARRAY_SIZE(sda_temp); i++)
1286 if ((err = device_create_file(dev, &sda_temp[i].dev_attr)))
1287 goto exit_remove;
1289 data->class_dev = hwmon_device_register(dev);
1290 if (IS_ERR(data->class_dev)) {
1291 err = PTR_ERR(data->class_dev);
1292 goto exit_remove;
1295 return 0;
1297 exit_remove:
1298 w83627ehf_device_remove_files(dev);
1299 i2c_detach_client(client);
1300 exit_free:
1301 kfree(data);
1302 exit_release:
1303 release_region(address + REGION_OFFSET, REGION_LENGTH);
1304 exit:
1305 return err;
1308 static int w83627ehf_detach_client(struct i2c_client *client)
1310 struct w83627ehf_data *data = i2c_get_clientdata(client);
1311 int err;
1313 hwmon_device_unregister(data->class_dev);
1314 w83627ehf_device_remove_files(&client->dev);
1316 if ((err = i2c_detach_client(client)))
1317 return err;
1318 release_region(client->addr + REGION_OFFSET, REGION_LENGTH);
1319 kfree(data);
1321 return 0;
1324 static struct i2c_driver w83627ehf_driver = {
1325 .driver = {
1326 .owner = THIS_MODULE,
1327 .name = "w83627ehf",
1329 .attach_adapter = w83627ehf_detect,
1330 .detach_client = w83627ehf_detach_client,
1333 static int __init w83627ehf_find(int sioaddr, unsigned short *addr)
1335 u16 val;
1337 REG = sioaddr;
1338 VAL = sioaddr + 1;
1339 superio_enter();
1341 val = (superio_inb(SIO_REG_DEVID) << 8)
1342 | superio_inb(SIO_REG_DEVID + 1);
1343 if ((val & SIO_ID_MASK) != SIO_W83627EHF_ID) {
1344 superio_exit();
1345 return -ENODEV;
1348 superio_select(W83627EHF_LD_HWM);
1349 val = (superio_inb(SIO_REG_ADDR) << 8)
1350 | superio_inb(SIO_REG_ADDR + 1);
1351 *addr = val & REGION_ALIGNMENT;
1352 if (*addr == 0) {
1353 superio_exit();
1354 return -ENODEV;
1357 /* Activate logical device if needed */
1358 val = superio_inb(SIO_REG_ENABLE);
1359 if (!(val & 0x01))
1360 superio_outb(SIO_REG_ENABLE, val | 0x01);
1362 superio_exit();
1363 return 0;
1366 static int __init sensors_w83627ehf_init(void)
1368 if (w83627ehf_find(0x2e, &address)
1369 && w83627ehf_find(0x4e, &address))
1370 return -ENODEV;
1372 return i2c_isa_add_driver(&w83627ehf_driver);
1375 static void __exit sensors_w83627ehf_exit(void)
1377 i2c_isa_del_driver(&w83627ehf_driver);
1380 MODULE_AUTHOR("Jean Delvare <khali@linux-fr.org>");
1381 MODULE_DESCRIPTION("W83627EHF driver");
1382 MODULE_LICENSE("GPL");
1384 module_init(sensors_w83627ehf_init);
1385 module_exit(sensors_w83627ehf_exit);