2 adm1031.c - Part of lm_sensors, Linux kernel modules for hardware
4 Based on lm75.c and lm85.c
5 Supports adm1030 / adm1031
6 Copyright (C) 2004 Alexandre d'Alton <alex@alexdalton.org>
7 Reworked by Jean Delvare <khali@linux-fr.org>
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 #include <linux/module.h>
25 #include <linux/init.h>
26 #include <linux/slab.h>
27 #include <linux/jiffies.h>
28 #include <linux/i2c.h>
29 #include <linux/i2c-sensor.h>
31 /* Following macros takes channel parameter starting from 0 to 2 */
32 #define ADM1031_REG_FAN_SPEED(nr) (0x08 + (nr))
33 #define ADM1031_REG_FAN_DIV(nr) (0x20 + (nr))
34 #define ADM1031_REG_PWM (0x22)
35 #define ADM1031_REG_FAN_MIN(nr) (0x10 + (nr))
37 #define ADM1031_REG_TEMP_MAX(nr) (0x14 + 4*(nr))
38 #define ADM1031_REG_TEMP_MIN(nr) (0x15 + 4*(nr))
39 #define ADM1031_REG_TEMP_CRIT(nr) (0x16 + 4*(nr))
41 #define ADM1031_REG_TEMP(nr) (0xa + (nr))
42 #define ADM1031_REG_AUTO_TEMP(nr) (0x24 + (nr))
44 #define ADM1031_REG_STATUS(nr) (0x2 + (nr))
46 #define ADM1031_REG_CONF1 0x0
47 #define ADM1031_REG_CONF2 0x1
48 #define ADM1031_REG_EXT_TEMP 0x6
50 #define ADM1031_CONF1_MONITOR_ENABLE 0x01 /* Monitoring enable */
51 #define ADM1031_CONF1_PWM_INVERT 0x08 /* PWM Invert */
52 #define ADM1031_CONF1_AUTO_MODE 0x80 /* Auto FAN */
54 #define ADM1031_CONF2_PWM1_ENABLE 0x01
55 #define ADM1031_CONF2_PWM2_ENABLE 0x02
56 #define ADM1031_CONF2_TACH1_ENABLE 0x04
57 #define ADM1031_CONF2_TACH2_ENABLE 0x08
58 #define ADM1031_CONF2_TEMP_ENABLE(chan) (0x10 << (chan))
60 /* Addresses to scan */
61 static unsigned short normal_i2c
[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END
};
62 static unsigned int normal_isa
[] = { I2C_CLIENT_ISA_END
};
64 /* Insmod parameters */
65 SENSORS_INSMOD_2(adm1030
, adm1031
);
67 typedef u8 auto_chan_table_t
[8][2];
69 /* Each client has this additional data */
71 struct i2c_client client
;
72 struct semaphore update_lock
;
74 char valid
; /* !=0 if following fields are valid */
75 unsigned long last_updated
; /* In jiffies */
76 /* The chan_select_table contains the possible configurations for
79 auto_chan_table_t
*chan_select_table
;
99 static int adm1031_attach_adapter(struct i2c_adapter
*adapter
);
100 static int adm1031_detect(struct i2c_adapter
*adapter
, int address
, int kind
);
101 static void adm1031_init_client(struct i2c_client
*client
);
102 static int adm1031_detach_client(struct i2c_client
*client
);
103 static struct adm1031_data
*adm1031_update_device(struct device
*dev
);
105 /* This is the driver that will be inserted */
106 static struct i2c_driver adm1031_driver
= {
107 .owner
= THIS_MODULE
,
109 .flags
= I2C_DF_NOTIFY
,
110 .attach_adapter
= adm1031_attach_adapter
,
111 .detach_client
= adm1031_detach_client
,
114 static inline u8
adm1031_read_value(struct i2c_client
*client
, u8 reg
)
116 return i2c_smbus_read_byte_data(client
, reg
);
120 adm1031_write_value(struct i2c_client
*client
, u8 reg
, unsigned int value
)
122 return i2c_smbus_write_byte_data(client
, reg
, value
);
126 #define TEMP_TO_REG(val) (((val) < 0 ? ((val - 500) / 1000) : \
127 ((val + 500) / 1000)))
129 #define TEMP_FROM_REG(val) ((val) * 1000)
131 #define TEMP_FROM_REG_EXT(val, ext) (TEMP_FROM_REG(val) + (ext) * 125)
133 #define FAN_FROM_REG(reg, div) ((reg) ? (11250 * 60) / ((reg) * (div)) : 0)
135 static int FAN_TO_REG(int reg
, int div
)
138 tmp
= FAN_FROM_REG(SENSORS_LIMIT(reg
, 0, 65535), div
);
139 return tmp
> 255 ? 255 : tmp
;
142 #define FAN_DIV_FROM_REG(reg) (1<<(((reg)&0xc0)>>6))
144 #define PWM_TO_REG(val) (SENSORS_LIMIT((val), 0, 255) >> 4)
145 #define PWM_FROM_REG(val) ((val) << 4)
147 #define FAN_CHAN_FROM_REG(reg) (((reg) >> 5) & 7)
148 #define FAN_CHAN_TO_REG(val, reg) \
149 (((reg) & 0x1F) | (((val) << 5) & 0xe0))
151 #define AUTO_TEMP_MIN_TO_REG(val, reg) \
152 ((((val)/500) & 0xf8)|((reg) & 0x7))
153 #define AUTO_TEMP_RANGE_FROM_REG(reg) (5000 * (1<< ((reg)&0x7)))
154 #define AUTO_TEMP_MIN_FROM_REG(reg) (1000 * ((((reg) >> 3) & 0x1f) << 2))
156 #define AUTO_TEMP_MIN_FROM_REG_DEG(reg) ((((reg) >> 3) & 0x1f) << 2)
158 #define AUTO_TEMP_OFF_FROM_REG(reg) \
159 (AUTO_TEMP_MIN_FROM_REG(reg) - 5000)
161 #define AUTO_TEMP_MAX_FROM_REG(reg) \
162 (AUTO_TEMP_RANGE_FROM_REG(reg) + \
163 AUTO_TEMP_MIN_FROM_REG(reg))
165 static int AUTO_TEMP_MAX_TO_REG(int val
, int reg
, int pwm
)
168 int range
= val
- AUTO_TEMP_MIN_FROM_REG(reg
);
170 range
= ((val
- AUTO_TEMP_MIN_FROM_REG(reg
))*10)/(16 - pwm
);
171 ret
= ((reg
& 0xf8) |
174 range
< 40000 ? 2 : range
< 80000 ? 3 : 4));
178 /* FAN auto control */
179 #define GET_FAN_AUTO_BITFIELD(data, idx) \
180 (*(data)->chan_select_table)[FAN_CHAN_FROM_REG((data)->conf1)][idx%2]
182 /* The tables below contains the possible values for the auto fan
183 * control bitfields. the index in the table is the register value.
184 * MSb is the auto fan control enable bit, so the four first entries
185 * in the table disables auto fan control when both bitfields are zero.
187 static auto_chan_table_t auto_channel_select_table_adm1031
= {
188 {0, 0}, {0, 0}, {0, 0}, {0, 0},
189 {2 /*0b010 */ , 4 /*0b100 */ },
190 {2 /*0b010 */ , 2 /*0b010 */ },
191 {4 /*0b100 */ , 4 /*0b100 */ },
192 {7 /*0b111 */ , 7 /*0b111 */ },
195 static auto_chan_table_t auto_channel_select_table_adm1030
= {
196 {0, 0}, {0, 0}, {0, 0}, {0, 0},
198 {0xff /*invalid */ , 0},
199 {0xff /*invalid */ , 0},
203 /* That function checks if a bitfield is valid and returns the other bitfield
204 * nearest match if no exact match where found.
207 get_fan_auto_nearest(struct adm1031_data
*data
,
208 int chan
, u8 val
, u8 reg
, u8
* new_reg
)
211 int first_match
= -1, exact_match
= -1;
213 (*data
->chan_select_table
)[FAN_CHAN_FROM_REG(reg
)][chan
? 0 : 1];
220 for (i
= 0; i
< 8; i
++) {
221 if ((val
== (*data
->chan_select_table
)[i
][chan
]) &&
222 ((*data
->chan_select_table
)[i
][chan
? 0 : 1] ==
224 /* We found an exact match */
227 } else if (val
== (*data
->chan_select_table
)[i
][chan
] &&
229 /* Save the first match in case of an exact match has not been
236 if (exact_match
>= 0) {
237 *new_reg
= exact_match
;
238 } else if (first_match
>= 0) {
239 *new_reg
= first_match
;
246 static ssize_t
show_fan_auto_channel(struct device
*dev
, char *buf
, int nr
)
248 struct adm1031_data
*data
= adm1031_update_device(dev
);
249 return sprintf(buf
, "%d\n", GET_FAN_AUTO_BITFIELD(data
, nr
));
253 set_fan_auto_channel(struct device
*dev
, const char *buf
, size_t count
, int nr
)
255 struct i2c_client
*client
= to_i2c_client(dev
);
256 struct adm1031_data
*data
= i2c_get_clientdata(client
);
257 int val
= simple_strtol(buf
, NULL
, 10);
262 old_fan_mode
= data
->conf1
;
264 down(&data
->update_lock
);
266 if ((ret
= get_fan_auto_nearest(data
, nr
, val
, data
->conf1
, ®
))) {
267 up(&data
->update_lock
);
270 if (((data
->conf1
= FAN_CHAN_TO_REG(reg
, data
->conf1
)) & ADM1031_CONF1_AUTO_MODE
) ^
271 (old_fan_mode
& ADM1031_CONF1_AUTO_MODE
)) {
272 if (data
->conf1
& ADM1031_CONF1_AUTO_MODE
){
273 /* Switch to Auto Fan Mode
275 * Set PWM registers to 33% Both */
276 data
->old_pwm
[0] = data
->pwm
[0];
277 data
->old_pwm
[1] = data
->pwm
[1];
278 adm1031_write_value(client
, ADM1031_REG_PWM
, 0x55);
280 /* Switch to Manual Mode */
281 data
->pwm
[0] = data
->old_pwm
[0];
282 data
->pwm
[1] = data
->old_pwm
[1];
283 /* Restore PWM registers */
284 adm1031_write_value(client
, ADM1031_REG_PWM
,
285 data
->pwm
[0] | (data
->pwm
[1] << 4));
288 data
->conf1
= FAN_CHAN_TO_REG(reg
, data
->conf1
);
289 adm1031_write_value(client
, ADM1031_REG_CONF1
, data
->conf1
);
290 up(&data
->update_lock
);
294 #define fan_auto_channel_offset(offset) \
295 static ssize_t show_fan_auto_channel_##offset (struct device *dev, char *buf) \
297 return show_fan_auto_channel(dev, buf, offset - 1); \
299 static ssize_t set_fan_auto_channel_##offset (struct device *dev, \
300 const char *buf, size_t count) \
302 return set_fan_auto_channel(dev, buf, count, offset - 1); \
304 static DEVICE_ATTR(auto_fan##offset##_channel, S_IRUGO | S_IWUSR, \
305 show_fan_auto_channel_##offset, \
306 set_fan_auto_channel_##offset)
308 fan_auto_channel_offset(1);
309 fan_auto_channel_offset(2);
312 static ssize_t
show_auto_temp_off(struct device
*dev
, char *buf
, int nr
)
314 struct adm1031_data
*data
= adm1031_update_device(dev
);
315 return sprintf(buf
, "%d\n",
316 AUTO_TEMP_OFF_FROM_REG(data
->auto_temp
[nr
]));
318 static ssize_t
show_auto_temp_min(struct device
*dev
, char *buf
, int nr
)
320 struct adm1031_data
*data
= adm1031_update_device(dev
);
321 return sprintf(buf
, "%d\n",
322 AUTO_TEMP_MIN_FROM_REG(data
->auto_temp
[nr
]));
325 set_auto_temp_min(struct device
*dev
, const char *buf
, size_t count
, int nr
)
327 struct i2c_client
*client
= to_i2c_client(dev
);
328 struct adm1031_data
*data
= i2c_get_clientdata(client
);
329 int val
= simple_strtol(buf
, NULL
, 10);
331 down(&data
->update_lock
);
332 data
->auto_temp
[nr
] = AUTO_TEMP_MIN_TO_REG(val
, data
->auto_temp
[nr
]);
333 adm1031_write_value(client
, ADM1031_REG_AUTO_TEMP(nr
),
334 data
->auto_temp
[nr
]);
335 up(&data
->update_lock
);
338 static ssize_t
show_auto_temp_max(struct device
*dev
, char *buf
, int nr
)
340 struct adm1031_data
*data
= adm1031_update_device(dev
);
341 return sprintf(buf
, "%d\n",
342 AUTO_TEMP_MAX_FROM_REG(data
->auto_temp
[nr
]));
345 set_auto_temp_max(struct device
*dev
, const char *buf
, size_t count
, int nr
)
347 struct i2c_client
*client
= to_i2c_client(dev
);
348 struct adm1031_data
*data
= i2c_get_clientdata(client
);
349 int val
= simple_strtol(buf
, NULL
, 10);
351 down(&data
->update_lock
);
352 data
->temp_max
[nr
] = AUTO_TEMP_MAX_TO_REG(val
, data
->auto_temp
[nr
], data
->pwm
[nr
]);
353 adm1031_write_value(client
, ADM1031_REG_AUTO_TEMP(nr
),
355 up(&data
->update_lock
);
359 #define auto_temp_reg(offset) \
360 static ssize_t show_auto_temp_##offset##_off (struct device *dev, char *buf) \
362 return show_auto_temp_off(dev, buf, offset - 1); \
364 static ssize_t show_auto_temp_##offset##_min (struct device *dev, char *buf) \
366 return show_auto_temp_min(dev, buf, offset - 1); \
368 static ssize_t show_auto_temp_##offset##_max (struct device *dev, char *buf) \
370 return show_auto_temp_max(dev, buf, offset - 1); \
372 static ssize_t set_auto_temp_##offset##_min (struct device *dev, \
373 const char *buf, size_t count) \
375 return set_auto_temp_min(dev, buf, count, offset - 1); \
377 static ssize_t set_auto_temp_##offset##_max (struct device *dev, \
378 const char *buf, size_t count) \
380 return set_auto_temp_max(dev, buf, count, offset - 1); \
382 static DEVICE_ATTR(auto_temp##offset##_off, S_IRUGO, \
383 show_auto_temp_##offset##_off, NULL); \
384 static DEVICE_ATTR(auto_temp##offset##_min, S_IRUGO | S_IWUSR, \
385 show_auto_temp_##offset##_min, set_auto_temp_##offset##_min);\
386 static DEVICE_ATTR(auto_temp##offset##_max, S_IRUGO | S_IWUSR, \
387 show_auto_temp_##offset##_max, set_auto_temp_##offset##_max)
394 static ssize_t
show_pwm(struct device
*dev
, char *buf
, int nr
)
396 struct adm1031_data
*data
= adm1031_update_device(dev
);
397 return sprintf(buf
, "%d\n", PWM_FROM_REG(data
->pwm
[nr
]));
400 set_pwm(struct device
*dev
, const char *buf
, size_t count
, int nr
)
402 struct i2c_client
*client
= to_i2c_client(dev
);
403 struct adm1031_data
*data
= i2c_get_clientdata(client
);
404 int val
= simple_strtol(buf
, NULL
, 10);
407 down(&data
->update_lock
);
408 if ((data
->conf1
& ADM1031_CONF1_AUTO_MODE
) &&
409 (((val
>>4) & 0xf) != 5)) {
410 /* In automatic mode, the only PWM accepted is 33% */
411 up(&data
->update_lock
);
414 data
->pwm
[nr
] = PWM_TO_REG(val
);
415 reg
= adm1031_read_value(client
, ADM1031_REG_PWM
);
416 adm1031_write_value(client
, ADM1031_REG_PWM
,
417 nr
? ((data
->pwm
[nr
] << 4) & 0xf0) | (reg
& 0xf)
418 : (data
->pwm
[nr
] & 0xf) | (reg
& 0xf0));
419 up(&data
->update_lock
);
423 #define pwm_reg(offset) \
424 static ssize_t show_pwm_##offset (struct device *dev, char *buf) \
426 return show_pwm(dev, buf, offset - 1); \
428 static ssize_t set_pwm_##offset (struct device *dev, \
429 const char *buf, size_t count) \
431 return set_pwm(dev, buf, count, offset - 1); \
433 static DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \
434 show_pwm_##offset, set_pwm_##offset)
442 * That function checks the cases where the fan reading is not
443 * relevent. It is used to provide 0 as fan reading when the fan is
444 * not supposed to run
446 static int trust_fan_readings(struct adm1031_data
*data
, int chan
)
450 if (data
->conf1
& ADM1031_CONF1_AUTO_MODE
) {
451 switch (data
->conf1
& 0x60) {
452 case 0x00: /* remote temp1 controls fan1 remote temp2 controls fan2 */
453 res
= data
->temp
[chan
+1] >=
454 AUTO_TEMP_MIN_FROM_REG_DEG(data
->auto_temp
[chan
+1]);
456 case 0x20: /* remote temp1 controls both fans */
459 AUTO_TEMP_MIN_FROM_REG_DEG(data
->auto_temp
[1]);
461 case 0x40: /* remote temp2 controls both fans */
464 AUTO_TEMP_MIN_FROM_REG_DEG(data
->auto_temp
[2]);
466 case 0x60: /* max controls both fans */
469 AUTO_TEMP_MIN_FROM_REG_DEG(data
->auto_temp
[0])
471 AUTO_TEMP_MIN_FROM_REG_DEG(data
->auto_temp
[1])
472 || (data
->chip_type
== adm1031
474 AUTO_TEMP_MIN_FROM_REG_DEG(data
->auto_temp
[2]));
478 res
= data
->pwm
[chan
] > 0;
484 static ssize_t
show_fan(struct device
*dev
, char *buf
, int nr
)
486 struct adm1031_data
*data
= adm1031_update_device(dev
);
489 value
= trust_fan_readings(data
, nr
) ? FAN_FROM_REG(data
->fan
[nr
],
490 FAN_DIV_FROM_REG(data
->fan_div
[nr
])) : 0;
491 return sprintf(buf
, "%d\n", value
);
494 static ssize_t
show_fan_div(struct device
*dev
, char *buf
, int nr
)
496 struct adm1031_data
*data
= adm1031_update_device(dev
);
497 return sprintf(buf
, "%d\n", FAN_DIV_FROM_REG(data
->fan_div
[nr
]));
499 static ssize_t
show_fan_min(struct device
*dev
, char *buf
, int nr
)
501 struct adm1031_data
*data
= adm1031_update_device(dev
);
502 return sprintf(buf
, "%d\n",
503 FAN_FROM_REG(data
->fan_min
[nr
],
504 FAN_DIV_FROM_REG(data
->fan_div
[nr
])));
507 set_fan_min(struct device
*dev
, const char *buf
, size_t count
, int nr
)
509 struct i2c_client
*client
= to_i2c_client(dev
);
510 struct adm1031_data
*data
= i2c_get_clientdata(client
);
511 int val
= simple_strtol(buf
, NULL
, 10);
513 down(&data
->update_lock
);
516 FAN_TO_REG(val
, FAN_DIV_FROM_REG(data
->fan_div
[nr
]));
518 data
->fan_min
[nr
] = 0xff;
520 adm1031_write_value(client
, ADM1031_REG_FAN_MIN(nr
), data
->fan_min
[nr
]);
521 up(&data
->update_lock
);
525 set_fan_div(struct device
*dev
, const char *buf
, size_t count
, int nr
)
527 struct i2c_client
*client
= to_i2c_client(dev
);
528 struct adm1031_data
*data
= i2c_get_clientdata(client
);
529 int val
= simple_strtol(buf
, NULL
, 10);
534 tmp
= val
== 8 ? 0xc0 :
542 down(&data
->update_lock
);
543 old_div
= FAN_DIV_FROM_REG(data
->fan_div
[nr
]);
544 data
->fan_div
[nr
] = (tmp
& 0xC0) | (0x3f & data
->fan_div
[nr
]);
545 new_min
= data
->fan_min
[nr
] * old_div
/
546 FAN_DIV_FROM_REG(data
->fan_div
[nr
]);
547 data
->fan_min
[nr
] = new_min
> 0xff ? 0xff : new_min
;
548 data
->fan
[nr
] = data
->fan
[nr
] * old_div
/
549 FAN_DIV_FROM_REG(data
->fan_div
[nr
]);
551 adm1031_write_value(client
, ADM1031_REG_FAN_DIV(nr
),
553 adm1031_write_value(client
, ADM1031_REG_FAN_MIN(nr
),
555 up(&data
->update_lock
);
559 #define fan_offset(offset) \
560 static ssize_t show_fan_##offset (struct device *dev, char *buf) \
562 return show_fan(dev, buf, offset - 1); \
564 static ssize_t show_fan_##offset##_min (struct device *dev, char *buf) \
566 return show_fan_min(dev, buf, offset - 1); \
568 static ssize_t show_fan_##offset##_div (struct device *dev, char *buf) \
570 return show_fan_div(dev, buf, offset - 1); \
572 static ssize_t set_fan_##offset##_min (struct device *dev, \
573 const char *buf, size_t count) \
575 return set_fan_min(dev, buf, count, offset - 1); \
577 static ssize_t set_fan_##offset##_div (struct device *dev, \
578 const char *buf, size_t count) \
580 return set_fan_div(dev, buf, count, offset - 1); \
582 static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_fan_##offset, \
584 static DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
585 show_fan_##offset##_min, set_fan_##offset##_min); \
586 static DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
587 show_fan_##offset##_div, set_fan_##offset##_div); \
588 static DEVICE_ATTR(auto_fan##offset##_min_pwm, S_IRUGO | S_IWUSR, \
589 show_pwm_##offset, set_pwm_##offset)
596 static ssize_t
show_temp(struct device
*dev
, char *buf
, int nr
)
598 struct adm1031_data
*data
= adm1031_update_device(dev
);
601 ((data
->ext_temp
[nr
] >> 6) & 0x3) * 2 :
602 (((data
->ext_temp
[nr
] >> ((nr
- 1) * 3)) & 7));
603 return sprintf(buf
, "%d\n", TEMP_FROM_REG_EXT(data
->temp
[nr
], ext
));
605 static ssize_t
show_temp_min(struct device
*dev
, char *buf
, int nr
)
607 struct adm1031_data
*data
= adm1031_update_device(dev
);
608 return sprintf(buf
, "%d\n", TEMP_FROM_REG(data
->temp_min
[nr
]));
610 static ssize_t
show_temp_max(struct device
*dev
, char *buf
, int nr
)
612 struct adm1031_data
*data
= adm1031_update_device(dev
);
613 return sprintf(buf
, "%d\n", TEMP_FROM_REG(data
->temp_max
[nr
]));
615 static ssize_t
show_temp_crit(struct device
*dev
, char *buf
, int nr
)
617 struct adm1031_data
*data
= adm1031_update_device(dev
);
618 return sprintf(buf
, "%d\n", TEMP_FROM_REG(data
->temp_crit
[nr
]));
621 set_temp_min(struct device
*dev
, const char *buf
, size_t count
, int nr
)
623 struct i2c_client
*client
= to_i2c_client(dev
);
624 struct adm1031_data
*data
= i2c_get_clientdata(client
);
627 val
= simple_strtol(buf
, NULL
, 10);
628 val
= SENSORS_LIMIT(val
, -55000, nr
== 0 ? 127750 : 127875);
629 down(&data
->update_lock
);
630 data
->temp_min
[nr
] = TEMP_TO_REG(val
);
631 adm1031_write_value(client
, ADM1031_REG_TEMP_MIN(nr
),
633 up(&data
->update_lock
);
637 set_temp_max(struct device
*dev
, const char *buf
, size_t count
, int nr
)
639 struct i2c_client
*client
= to_i2c_client(dev
);
640 struct adm1031_data
*data
= i2c_get_clientdata(client
);
643 val
= simple_strtol(buf
, NULL
, 10);
644 val
= SENSORS_LIMIT(val
, -55000, nr
== 0 ? 127750 : 127875);
645 down(&data
->update_lock
);
646 data
->temp_max
[nr
] = TEMP_TO_REG(val
);
647 adm1031_write_value(client
, ADM1031_REG_TEMP_MAX(nr
),
649 up(&data
->update_lock
);
653 set_temp_crit(struct device
*dev
, const char *buf
, size_t count
, int nr
)
655 struct i2c_client
*client
= to_i2c_client(dev
);
656 struct adm1031_data
*data
= i2c_get_clientdata(client
);
659 val
= simple_strtol(buf
, NULL
, 10);
660 val
= SENSORS_LIMIT(val
, -55000, nr
== 0 ? 127750 : 127875);
661 down(&data
->update_lock
);
662 data
->temp_crit
[nr
] = TEMP_TO_REG(val
);
663 adm1031_write_value(client
, ADM1031_REG_TEMP_CRIT(nr
),
664 data
->temp_crit
[nr
]);
665 up(&data
->update_lock
);
669 #define temp_reg(offset) \
670 static ssize_t show_temp_##offset (struct device *dev, char *buf) \
672 return show_temp(dev, buf, offset - 1); \
674 static ssize_t show_temp_##offset##_min (struct device *dev, char *buf) \
676 return show_temp_min(dev, buf, offset - 1); \
678 static ssize_t show_temp_##offset##_max (struct device *dev, char *buf) \
680 return show_temp_max(dev, buf, offset - 1); \
682 static ssize_t show_temp_##offset##_crit (struct device *dev, char *buf) \
684 return show_temp_crit(dev, buf, offset - 1); \
686 static ssize_t set_temp_##offset##_min (struct device *dev, \
687 const char *buf, size_t count) \
689 return set_temp_min(dev, buf, count, offset - 1); \
691 static ssize_t set_temp_##offset##_max (struct device *dev, \
692 const char *buf, size_t count) \
694 return set_temp_max(dev, buf, count, offset - 1); \
696 static ssize_t set_temp_##offset##_crit (struct device *dev, \
697 const char *buf, size_t count) \
699 return set_temp_crit(dev, buf, count, offset - 1); \
701 static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_temp_##offset, \
703 static DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR, \
704 show_temp_##offset##_min, set_temp_##offset##_min); \
705 static DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \
706 show_temp_##offset##_max, set_temp_##offset##_max); \
707 static DEVICE_ATTR(temp##offset##_crit, S_IRUGO | S_IWUSR, \
708 show_temp_##offset##_crit, set_temp_##offset##_crit)
715 static ssize_t
show_alarms(struct device
*dev
, char *buf
)
717 struct adm1031_data
*data
= adm1031_update_device(dev
);
718 return sprintf(buf
, "%d\n", data
->alarm
);
721 static DEVICE_ATTR(alarms
, S_IRUGO
, show_alarms
, NULL
);
724 static int adm1031_attach_adapter(struct i2c_adapter
*adapter
)
726 if (!(adapter
->class & I2C_CLASS_HWMON
))
728 return i2c_detect(adapter
, &addr_data
, adm1031_detect
);
731 /* This function is called by i2c_detect */
732 static int adm1031_detect(struct i2c_adapter
*adapter
, int address
, int kind
)
734 struct i2c_client
*new_client
;
735 struct adm1031_data
*data
;
737 const char *name
= "";
739 if (!i2c_check_functionality(adapter
, I2C_FUNC_SMBUS_BYTE_DATA
))
742 if (!(data
= kmalloc(sizeof(struct adm1031_data
), GFP_KERNEL
))) {
746 memset(data
, 0, sizeof(struct adm1031_data
));
748 new_client
= &data
->client
;
749 i2c_set_clientdata(new_client
, data
);
750 new_client
->addr
= address
;
751 new_client
->adapter
= adapter
;
752 new_client
->driver
= &adm1031_driver
;
753 new_client
->flags
= 0;
757 id
= i2c_smbus_read_byte_data(new_client
, 0x3d);
758 co
= i2c_smbus_read_byte_data(new_client
, 0x3e);
760 if (!((id
== 0x31 || id
== 0x30) && co
== 0x41))
762 kind
= (id
== 0x30) ? adm1030
: adm1031
;
768 /* Given the detected chip type, set the chip name and the
769 * auto fan control helper table. */
770 if (kind
== adm1030
) {
772 data
->chan_select_table
= &auto_channel_select_table_adm1030
;
773 } else if (kind
== adm1031
) {
775 data
->chan_select_table
= &auto_channel_select_table_adm1031
;
777 data
->chip_type
= kind
;
779 strlcpy(new_client
->name
, name
, I2C_NAME_SIZE
);
781 init_MUTEX(&data
->update_lock
);
783 /* Tell the I2C layer a new client has arrived */
784 if ((err
= i2c_attach_client(new_client
)))
787 /* Initialize the ADM1031 chip */
788 adm1031_init_client(new_client
);
790 /* Register sysfs hooks */
791 device_create_file(&new_client
->dev
, &dev_attr_fan1_input
);
792 device_create_file(&new_client
->dev
, &dev_attr_fan1_div
);
793 device_create_file(&new_client
->dev
, &dev_attr_fan1_min
);
794 device_create_file(&new_client
->dev
, &dev_attr_pwm1
);
795 device_create_file(&new_client
->dev
, &dev_attr_auto_fan1_channel
);
796 device_create_file(&new_client
->dev
, &dev_attr_temp1_input
);
797 device_create_file(&new_client
->dev
, &dev_attr_temp1_min
);
798 device_create_file(&new_client
->dev
, &dev_attr_temp1_max
);
799 device_create_file(&new_client
->dev
, &dev_attr_temp1_crit
);
800 device_create_file(&new_client
->dev
, &dev_attr_temp2_input
);
801 device_create_file(&new_client
->dev
, &dev_attr_temp2_min
);
802 device_create_file(&new_client
->dev
, &dev_attr_temp2_max
);
803 device_create_file(&new_client
->dev
, &dev_attr_temp2_crit
);
805 device_create_file(&new_client
->dev
, &dev_attr_auto_temp1_off
);
806 device_create_file(&new_client
->dev
, &dev_attr_auto_temp1_min
);
807 device_create_file(&new_client
->dev
, &dev_attr_auto_temp1_max
);
809 device_create_file(&new_client
->dev
, &dev_attr_auto_temp2_off
);
810 device_create_file(&new_client
->dev
, &dev_attr_auto_temp2_min
);
811 device_create_file(&new_client
->dev
, &dev_attr_auto_temp2_max
);
813 device_create_file(&new_client
->dev
, &dev_attr_auto_fan1_min_pwm
);
815 device_create_file(&new_client
->dev
, &dev_attr_alarms
);
817 if (kind
== adm1031
) {
818 device_create_file(&new_client
->dev
, &dev_attr_fan2_input
);
819 device_create_file(&new_client
->dev
, &dev_attr_fan2_div
);
820 device_create_file(&new_client
->dev
, &dev_attr_fan2_min
);
821 device_create_file(&new_client
->dev
, &dev_attr_pwm2
);
822 device_create_file(&new_client
->dev
,
823 &dev_attr_auto_fan2_channel
);
824 device_create_file(&new_client
->dev
, &dev_attr_temp3_input
);
825 device_create_file(&new_client
->dev
, &dev_attr_temp3_min
);
826 device_create_file(&new_client
->dev
, &dev_attr_temp3_max
);
827 device_create_file(&new_client
->dev
, &dev_attr_temp3_crit
);
828 device_create_file(&new_client
->dev
, &dev_attr_auto_temp3_off
);
829 device_create_file(&new_client
->dev
, &dev_attr_auto_temp3_min
);
830 device_create_file(&new_client
->dev
, &dev_attr_auto_temp3_max
);
831 device_create_file(&new_client
->dev
, &dev_attr_auto_fan2_min_pwm
);
842 static int adm1031_detach_client(struct i2c_client
*client
)
845 if ((ret
= i2c_detach_client(client
)) != 0) {
852 static void adm1031_init_client(struct i2c_client
*client
)
854 unsigned int read_val
;
856 struct adm1031_data
*data
= i2c_get_clientdata(client
);
858 mask
= (ADM1031_CONF2_PWM1_ENABLE
| ADM1031_CONF2_TACH1_ENABLE
);
859 if (data
->chip_type
== adm1031
) {
860 mask
|= (ADM1031_CONF2_PWM2_ENABLE
|
861 ADM1031_CONF2_TACH2_ENABLE
);
863 /* Initialize the ADM1031 chip (enables fan speed reading ) */
864 read_val
= adm1031_read_value(client
, ADM1031_REG_CONF2
);
865 if ((read_val
| mask
) != read_val
) {
866 adm1031_write_value(client
, ADM1031_REG_CONF2
, read_val
| mask
);
869 read_val
= adm1031_read_value(client
, ADM1031_REG_CONF1
);
870 if ((read_val
| ADM1031_CONF1_MONITOR_ENABLE
) != read_val
) {
871 adm1031_write_value(client
, ADM1031_REG_CONF1
, read_val
|
872 ADM1031_CONF1_MONITOR_ENABLE
);
877 static struct adm1031_data
*adm1031_update_device(struct device
*dev
)
879 struct i2c_client
*client
= to_i2c_client(dev
);
880 struct adm1031_data
*data
= i2c_get_clientdata(client
);
883 down(&data
->update_lock
);
885 if (time_after(jiffies
, data
->last_updated
+ HZ
+ HZ
/ 2)
888 dev_dbg(&client
->dev
, "Starting adm1031 update\n");
890 chan
< ((data
->chip_type
== adm1031
) ? 3 : 2); chan
++) {
894 adm1031_read_value(client
, ADM1031_REG_TEMP(chan
));
895 data
->ext_temp
[chan
] =
896 adm1031_read_value(client
, ADM1031_REG_EXT_TEMP
);
898 adm1031_read_value(client
, ADM1031_REG_TEMP(chan
));
900 data
->ext_temp
[chan
] =
901 adm1031_read_value(client
,
902 ADM1031_REG_EXT_TEMP
);
905 adm1031_read_value(client
,
906 ADM1031_REG_TEMP(chan
));
908 /* oldh is actually newer */
910 dev_warn(&client
->dev
,
911 "Remote temperature may be "
915 data
->temp
[chan
] = newh
;
917 data
->temp_min
[chan
] =
918 adm1031_read_value(client
,
919 ADM1031_REG_TEMP_MIN(chan
));
920 data
->temp_max
[chan
] =
921 adm1031_read_value(client
,
922 ADM1031_REG_TEMP_MAX(chan
));
923 data
->temp_crit
[chan
] =
924 adm1031_read_value(client
,
925 ADM1031_REG_TEMP_CRIT(chan
));
926 data
->auto_temp
[chan
] =
927 adm1031_read_value(client
,
928 ADM1031_REG_AUTO_TEMP(chan
));
932 data
->conf1
= adm1031_read_value(client
, ADM1031_REG_CONF1
);
933 data
->conf2
= adm1031_read_value(client
, ADM1031_REG_CONF2
);
935 data
->alarm
= adm1031_read_value(client
, ADM1031_REG_STATUS(0))
936 | (adm1031_read_value(client
, ADM1031_REG_STATUS(1))
938 if (data
->chip_type
== adm1030
) {
939 data
->alarm
&= 0xc0ff;
942 for (chan
=0; chan
<(data
->chip_type
== adm1030
? 1 : 2); chan
++) {
943 data
->fan_div
[chan
] =
944 adm1031_read_value(client
, ADM1031_REG_FAN_DIV(chan
));
945 data
->fan_min
[chan
] =
946 adm1031_read_value(client
, ADM1031_REG_FAN_MIN(chan
));
948 adm1031_read_value(client
, ADM1031_REG_FAN_SPEED(chan
));
950 0xf & (adm1031_read_value(client
, ADM1031_REG_PWM
) >>
953 data
->last_updated
= jiffies
;
957 up(&data
->update_lock
);
962 static int __init
sensors_adm1031_init(void)
964 return i2c_add_driver(&adm1031_driver
);
967 static void __exit
sensors_adm1031_exit(void)
969 i2c_del_driver(&adm1031_driver
);
972 MODULE_AUTHOR("Alexandre d'Alton <alex@alexdalton.org>");
973 MODULE_DESCRIPTION("ADM1031/ADM1030 driver");
974 MODULE_LICENSE("GPL");
976 module_init(sensors_adm1031_init
);
977 module_exit(sensors_adm1031_exit
);