1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * lm78.c - Part of lm_sensors, Linux kernel modules for hardware
5 * Copyright (c) 1998, 1999 Frodo Looijaard <frodol@dds.nl>
6 * Copyright (c) 2007, 2011 Jean Delvare <jdelvare@suse.de>
9 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
11 #include <linux/module.h>
12 #include <linux/init.h>
13 #include <linux/slab.h>
14 #include <linux/jiffies.h>
15 #include <linux/i2c.h>
16 #include <linux/hwmon.h>
17 #include <linux/hwmon-vid.h>
18 #include <linux/hwmon-sysfs.h>
19 #include <linux/err.h>
20 #include <linux/mutex.h>
23 #include <linux/platform_device.h>
24 #include <linux/ioport.h>
28 /* Addresses to scan */
29 static const unsigned short normal_i2c
[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
30 0x2e, 0x2f, I2C_CLIENT_END
};
31 enum chips
{ lm78
, lm79
};
33 /* Many LM78 constants specified below */
35 /* Length of ISA address segment */
38 /* Where are the ISA address/data registers relative to the base address */
39 #define LM78_ADDR_REG_OFFSET 5
40 #define LM78_DATA_REG_OFFSET 6
42 /* The LM78 registers */
43 #define LM78_REG_IN_MAX(nr) (0x2b + (nr) * 2)
44 #define LM78_REG_IN_MIN(nr) (0x2c + (nr) * 2)
45 #define LM78_REG_IN(nr) (0x20 + (nr))
47 #define LM78_REG_FAN_MIN(nr) (0x3b + (nr))
48 #define LM78_REG_FAN(nr) (0x28 + (nr))
50 #define LM78_REG_TEMP 0x27
51 #define LM78_REG_TEMP_OVER 0x39
52 #define LM78_REG_TEMP_HYST 0x3a
54 #define LM78_REG_ALARM1 0x41
55 #define LM78_REG_ALARM2 0x42
57 #define LM78_REG_VID_FANDIV 0x47
59 #define LM78_REG_CONFIG 0x40
60 #define LM78_REG_CHIPID 0x49
61 #define LM78_REG_I2C_ADDR 0x48
64 * Conversions. Rounding and limit checking is only done on the TO_REG
69 * IN: mV (0V to 4.08V)
72 static inline u8
IN_TO_REG(unsigned long val
)
74 unsigned long nval
= clamp_val(val
, 0, 4080);
75 return (nval
+ 8) / 16;
77 #define IN_FROM_REG(val) ((val) * 16)
79 static inline u8
FAN_TO_REG(long rpm
, int div
)
85 return clamp_val((1350000 + rpm
* div
/ 2) / (rpm
* div
), 1, 254);
88 static inline int FAN_FROM_REG(u8 val
, int div
)
90 return val
== 0 ? -1 : val
== 255 ? 0 : 1350000 / (val
* div
);
94 * TEMP: mC (-128C to +127C)
95 * REG: 1C/bit, two's complement
97 static inline s8
TEMP_TO_REG(long val
)
99 int nval
= clamp_val(val
, -128000, 127000) ;
100 return nval
< 0 ? (nval
- 500) / 1000 : (nval
+ 500) / 1000;
103 static inline int TEMP_FROM_REG(s8 val
)
108 #define DIV_FROM_REG(val) (1 << (val))
111 struct i2c_client
*client
;
115 /* For ISA device only */
119 struct mutex update_lock
;
120 char valid
; /* !=0 if following fields are valid */
121 unsigned long last_updated
; /* In jiffies */
123 u8 in
[7]; /* Register value */
124 u8 in_max
[7]; /* Register value */
125 u8 in_min
[7]; /* Register value */
126 u8 fan
[3]; /* Register value */
127 u8 fan_min
[3]; /* Register value */
128 s8 temp
; /* Register value */
129 s8 temp_over
; /* Register value */
130 s8 temp_hyst
; /* Register value */
131 u8 fan_div
[3]; /* Register encoding, shifted right */
132 u8 vid
; /* Register encoding, combined */
133 u16 alarms
; /* Register encoding, combined */
136 static int lm78_read_value(struct lm78_data
*data
, u8 reg
);
137 static int lm78_write_value(struct lm78_data
*data
, u8 reg
, u8 value
);
138 static struct lm78_data
*lm78_update_device(struct device
*dev
);
139 static void lm78_init_device(struct lm78_data
*data
);
142 static ssize_t
in_show(struct device
*dev
, struct device_attribute
*da
,
145 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(da
);
146 struct lm78_data
*data
= lm78_update_device(dev
);
147 return sprintf(buf
, "%d\n", IN_FROM_REG(data
->in
[attr
->index
]));
150 static ssize_t
in_min_show(struct device
*dev
, struct device_attribute
*da
,
153 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(da
);
154 struct lm78_data
*data
= lm78_update_device(dev
);
155 return sprintf(buf
, "%d\n", IN_FROM_REG(data
->in_min
[attr
->index
]));
158 static ssize_t
in_max_show(struct device
*dev
, struct device_attribute
*da
,
161 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(da
);
162 struct lm78_data
*data
= lm78_update_device(dev
);
163 return sprintf(buf
, "%d\n", IN_FROM_REG(data
->in_max
[attr
->index
]));
166 static ssize_t
in_min_store(struct device
*dev
, struct device_attribute
*da
,
167 const char *buf
, size_t count
)
169 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(da
);
170 struct lm78_data
*data
= dev_get_drvdata(dev
);
171 int nr
= attr
->index
;
175 err
= kstrtoul(buf
, 10, &val
);
179 mutex_lock(&data
->update_lock
);
180 data
->in_min
[nr
] = IN_TO_REG(val
);
181 lm78_write_value(data
, LM78_REG_IN_MIN(nr
), data
->in_min
[nr
]);
182 mutex_unlock(&data
->update_lock
);
186 static ssize_t
in_max_store(struct device
*dev
, struct device_attribute
*da
,
187 const char *buf
, size_t count
)
189 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(da
);
190 struct lm78_data
*data
= dev_get_drvdata(dev
);
191 int nr
= attr
->index
;
195 err
= kstrtoul(buf
, 10, &val
);
199 mutex_lock(&data
->update_lock
);
200 data
->in_max
[nr
] = IN_TO_REG(val
);
201 lm78_write_value(data
, LM78_REG_IN_MAX(nr
), data
->in_max
[nr
]);
202 mutex_unlock(&data
->update_lock
);
206 static SENSOR_DEVICE_ATTR_RO(in0_input
, in
, 0);
207 static SENSOR_DEVICE_ATTR_RW(in0_min
, in_min
, 0);
208 static SENSOR_DEVICE_ATTR_RW(in0_max
, in_max
, 0);
209 static SENSOR_DEVICE_ATTR_RO(in1_input
, in
, 1);
210 static SENSOR_DEVICE_ATTR_RW(in1_min
, in_min
, 1);
211 static SENSOR_DEVICE_ATTR_RW(in1_max
, in_max
, 1);
212 static SENSOR_DEVICE_ATTR_RO(in2_input
, in
, 2);
213 static SENSOR_DEVICE_ATTR_RW(in2_min
, in_min
, 2);
214 static SENSOR_DEVICE_ATTR_RW(in2_max
, in_max
, 2);
215 static SENSOR_DEVICE_ATTR_RO(in3_input
, in
, 3);
216 static SENSOR_DEVICE_ATTR_RW(in3_min
, in_min
, 3);
217 static SENSOR_DEVICE_ATTR_RW(in3_max
, in_max
, 3);
218 static SENSOR_DEVICE_ATTR_RO(in4_input
, in
, 4);
219 static SENSOR_DEVICE_ATTR_RW(in4_min
, in_min
, 4);
220 static SENSOR_DEVICE_ATTR_RW(in4_max
, in_max
, 4);
221 static SENSOR_DEVICE_ATTR_RO(in5_input
, in
, 5);
222 static SENSOR_DEVICE_ATTR_RW(in5_min
, in_min
, 5);
223 static SENSOR_DEVICE_ATTR_RW(in5_max
, in_max
, 5);
224 static SENSOR_DEVICE_ATTR_RO(in6_input
, in
, 6);
225 static SENSOR_DEVICE_ATTR_RW(in6_min
, in_min
, 6);
226 static SENSOR_DEVICE_ATTR_RW(in6_max
, in_max
, 6);
229 static ssize_t
temp1_input_show(struct device
*dev
,
230 struct device_attribute
*da
, char *buf
)
232 struct lm78_data
*data
= lm78_update_device(dev
);
233 return sprintf(buf
, "%d\n", TEMP_FROM_REG(data
->temp
));
236 static ssize_t
temp1_max_show(struct device
*dev
, struct device_attribute
*da
,
239 struct lm78_data
*data
= lm78_update_device(dev
);
240 return sprintf(buf
, "%d\n", TEMP_FROM_REG(data
->temp_over
));
243 static ssize_t
temp1_max_store(struct device
*dev
,
244 struct device_attribute
*da
, const char *buf
,
247 struct lm78_data
*data
= dev_get_drvdata(dev
);
251 err
= kstrtol(buf
, 10, &val
);
255 mutex_lock(&data
->update_lock
);
256 data
->temp_over
= TEMP_TO_REG(val
);
257 lm78_write_value(data
, LM78_REG_TEMP_OVER
, data
->temp_over
);
258 mutex_unlock(&data
->update_lock
);
262 static ssize_t
temp1_max_hyst_show(struct device
*dev
,
263 struct device_attribute
*da
, char *buf
)
265 struct lm78_data
*data
= lm78_update_device(dev
);
266 return sprintf(buf
, "%d\n", TEMP_FROM_REG(data
->temp_hyst
));
269 static ssize_t
temp1_max_hyst_store(struct device
*dev
,
270 struct device_attribute
*da
,
271 const char *buf
, size_t count
)
273 struct lm78_data
*data
= dev_get_drvdata(dev
);
277 err
= kstrtol(buf
, 10, &val
);
281 mutex_lock(&data
->update_lock
);
282 data
->temp_hyst
= TEMP_TO_REG(val
);
283 lm78_write_value(data
, LM78_REG_TEMP_HYST
, data
->temp_hyst
);
284 mutex_unlock(&data
->update_lock
);
288 static DEVICE_ATTR_RO(temp1_input
);
289 static DEVICE_ATTR_RW(temp1_max
);
290 static DEVICE_ATTR_RW(temp1_max_hyst
);
293 static ssize_t
fan_show(struct device
*dev
, struct device_attribute
*da
,
296 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(da
);
297 struct lm78_data
*data
= lm78_update_device(dev
);
298 int nr
= attr
->index
;
299 return sprintf(buf
, "%d\n", FAN_FROM_REG(data
->fan
[nr
],
300 DIV_FROM_REG(data
->fan_div
[nr
])));
303 static ssize_t
fan_min_show(struct device
*dev
, struct device_attribute
*da
,
306 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(da
);
307 struct lm78_data
*data
= lm78_update_device(dev
);
308 int nr
= attr
->index
;
309 return sprintf(buf
, "%d\n", FAN_FROM_REG(data
->fan_min
[nr
],
310 DIV_FROM_REG(data
->fan_div
[nr
])));
313 static ssize_t
fan_min_store(struct device
*dev
, struct device_attribute
*da
,
314 const char *buf
, size_t count
)
316 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(da
);
317 struct lm78_data
*data
= dev_get_drvdata(dev
);
318 int nr
= attr
->index
;
322 err
= kstrtoul(buf
, 10, &val
);
326 mutex_lock(&data
->update_lock
);
327 data
->fan_min
[nr
] = FAN_TO_REG(val
, DIV_FROM_REG(data
->fan_div
[nr
]));
328 lm78_write_value(data
, LM78_REG_FAN_MIN(nr
), data
->fan_min
[nr
]);
329 mutex_unlock(&data
->update_lock
);
333 static ssize_t
fan_div_show(struct device
*dev
, struct device_attribute
*da
,
336 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(da
);
337 struct lm78_data
*data
= lm78_update_device(dev
);
338 return sprintf(buf
, "%d\n", DIV_FROM_REG(data
->fan_div
[attr
->index
]));
342 * Note: we save and restore the fan minimum here, because its value is
343 * determined in part by the fan divisor. This follows the principle of
344 * least surprise; the user doesn't expect the fan minimum to change just
345 * because the divisor changed.
347 static ssize_t
fan_div_store(struct device
*dev
, struct device_attribute
*da
,
348 const char *buf
, size_t count
)
350 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(da
);
351 struct lm78_data
*data
= dev_get_drvdata(dev
);
352 int nr
= attr
->index
;
358 err
= kstrtoul(buf
, 10, &val
);
362 mutex_lock(&data
->update_lock
);
363 min
= FAN_FROM_REG(data
->fan_min
[nr
],
364 DIV_FROM_REG(data
->fan_div
[nr
]));
368 data
->fan_div
[nr
] = 0;
371 data
->fan_div
[nr
] = 1;
374 data
->fan_div
[nr
] = 2;
377 data
->fan_div
[nr
] = 3;
381 "fan_div value %ld not supported. Choose one of 1, 2, 4 or 8!\n",
383 mutex_unlock(&data
->update_lock
);
387 reg
= lm78_read_value(data
, LM78_REG_VID_FANDIV
);
390 reg
= (reg
& 0xcf) | (data
->fan_div
[nr
] << 4);
393 reg
= (reg
& 0x3f) | (data
->fan_div
[nr
] << 6);
396 lm78_write_value(data
, LM78_REG_VID_FANDIV
, reg
);
399 FAN_TO_REG(min
, DIV_FROM_REG(data
->fan_div
[nr
]));
400 lm78_write_value(data
, LM78_REG_FAN_MIN(nr
), data
->fan_min
[nr
]);
401 mutex_unlock(&data
->update_lock
);
406 static SENSOR_DEVICE_ATTR_RO(fan1_input
, fan
, 0);
407 static SENSOR_DEVICE_ATTR_RW(fan1_min
, fan_min
, 0);
408 static SENSOR_DEVICE_ATTR_RO(fan2_input
, fan
, 1);
409 static SENSOR_DEVICE_ATTR_RW(fan2_min
, fan_min
, 1);
410 static SENSOR_DEVICE_ATTR_RO(fan3_input
, fan
, 2);
411 static SENSOR_DEVICE_ATTR_RW(fan3_min
, fan_min
, 2);
413 /* Fan 3 divisor is locked in H/W */
414 static SENSOR_DEVICE_ATTR_RW(fan1_div
, fan_div
, 0);
415 static SENSOR_DEVICE_ATTR_RW(fan2_div
, fan_div
, 1);
416 static SENSOR_DEVICE_ATTR_RO(fan3_div
, fan_div
, 2);
419 static ssize_t
cpu0_vid_show(struct device
*dev
, struct device_attribute
*da
,
422 struct lm78_data
*data
= lm78_update_device(dev
);
423 return sprintf(buf
, "%d\n", vid_from_reg(data
->vid
, 82));
425 static DEVICE_ATTR_RO(cpu0_vid
);
428 static ssize_t
alarms_show(struct device
*dev
, struct device_attribute
*da
,
431 struct lm78_data
*data
= lm78_update_device(dev
);
432 return sprintf(buf
, "%u\n", data
->alarms
);
434 static DEVICE_ATTR_RO(alarms
);
436 static ssize_t
alarm_show(struct device
*dev
, struct device_attribute
*da
,
439 struct lm78_data
*data
= lm78_update_device(dev
);
440 int nr
= to_sensor_dev_attr(da
)->index
;
441 return sprintf(buf
, "%u\n", (data
->alarms
>> nr
) & 1);
443 static SENSOR_DEVICE_ATTR_RO(in0_alarm
, alarm
, 0);
444 static SENSOR_DEVICE_ATTR_RO(in1_alarm
, alarm
, 1);
445 static SENSOR_DEVICE_ATTR_RO(in2_alarm
, alarm
, 2);
446 static SENSOR_DEVICE_ATTR_RO(in3_alarm
, alarm
, 3);
447 static SENSOR_DEVICE_ATTR_RO(in4_alarm
, alarm
, 8);
448 static SENSOR_DEVICE_ATTR_RO(in5_alarm
, alarm
, 9);
449 static SENSOR_DEVICE_ATTR_RO(in6_alarm
, alarm
, 10);
450 static SENSOR_DEVICE_ATTR_RO(fan1_alarm
, alarm
, 6);
451 static SENSOR_DEVICE_ATTR_RO(fan2_alarm
, alarm
, 7);
452 static SENSOR_DEVICE_ATTR_RO(fan3_alarm
, alarm
, 11);
453 static SENSOR_DEVICE_ATTR_RO(temp1_alarm
, alarm
, 4);
455 static struct attribute
*lm78_attrs
[] = {
456 &sensor_dev_attr_in0_input
.dev_attr
.attr
,
457 &sensor_dev_attr_in0_min
.dev_attr
.attr
,
458 &sensor_dev_attr_in0_max
.dev_attr
.attr
,
459 &sensor_dev_attr_in0_alarm
.dev_attr
.attr
,
460 &sensor_dev_attr_in1_input
.dev_attr
.attr
,
461 &sensor_dev_attr_in1_min
.dev_attr
.attr
,
462 &sensor_dev_attr_in1_max
.dev_attr
.attr
,
463 &sensor_dev_attr_in1_alarm
.dev_attr
.attr
,
464 &sensor_dev_attr_in2_input
.dev_attr
.attr
,
465 &sensor_dev_attr_in2_min
.dev_attr
.attr
,
466 &sensor_dev_attr_in2_max
.dev_attr
.attr
,
467 &sensor_dev_attr_in2_alarm
.dev_attr
.attr
,
468 &sensor_dev_attr_in3_input
.dev_attr
.attr
,
469 &sensor_dev_attr_in3_min
.dev_attr
.attr
,
470 &sensor_dev_attr_in3_max
.dev_attr
.attr
,
471 &sensor_dev_attr_in3_alarm
.dev_attr
.attr
,
472 &sensor_dev_attr_in4_input
.dev_attr
.attr
,
473 &sensor_dev_attr_in4_min
.dev_attr
.attr
,
474 &sensor_dev_attr_in4_max
.dev_attr
.attr
,
475 &sensor_dev_attr_in4_alarm
.dev_attr
.attr
,
476 &sensor_dev_attr_in5_input
.dev_attr
.attr
,
477 &sensor_dev_attr_in5_min
.dev_attr
.attr
,
478 &sensor_dev_attr_in5_max
.dev_attr
.attr
,
479 &sensor_dev_attr_in5_alarm
.dev_attr
.attr
,
480 &sensor_dev_attr_in6_input
.dev_attr
.attr
,
481 &sensor_dev_attr_in6_min
.dev_attr
.attr
,
482 &sensor_dev_attr_in6_max
.dev_attr
.attr
,
483 &sensor_dev_attr_in6_alarm
.dev_attr
.attr
,
484 &dev_attr_temp1_input
.attr
,
485 &dev_attr_temp1_max
.attr
,
486 &dev_attr_temp1_max_hyst
.attr
,
487 &sensor_dev_attr_temp1_alarm
.dev_attr
.attr
,
488 &sensor_dev_attr_fan1_input
.dev_attr
.attr
,
489 &sensor_dev_attr_fan1_min
.dev_attr
.attr
,
490 &sensor_dev_attr_fan1_div
.dev_attr
.attr
,
491 &sensor_dev_attr_fan1_alarm
.dev_attr
.attr
,
492 &sensor_dev_attr_fan2_input
.dev_attr
.attr
,
493 &sensor_dev_attr_fan2_min
.dev_attr
.attr
,
494 &sensor_dev_attr_fan2_div
.dev_attr
.attr
,
495 &sensor_dev_attr_fan2_alarm
.dev_attr
.attr
,
496 &sensor_dev_attr_fan3_input
.dev_attr
.attr
,
497 &sensor_dev_attr_fan3_min
.dev_attr
.attr
,
498 &sensor_dev_attr_fan3_div
.dev_attr
.attr
,
499 &sensor_dev_attr_fan3_alarm
.dev_attr
.attr
,
500 &dev_attr_alarms
.attr
,
501 &dev_attr_cpu0_vid
.attr
,
506 ATTRIBUTE_GROUPS(lm78
);
513 /* ISA device, if found */
514 static struct platform_device
*pdev
;
516 static unsigned short isa_address
= 0x290;
518 static struct lm78_data
*lm78_data_if_isa(void)
520 return pdev
? platform_get_drvdata(pdev
) : NULL
;
523 /* Returns 1 if the I2C chip appears to be an alias of the ISA chip */
524 static int lm78_alias_detect(struct i2c_client
*client
, u8 chipid
)
526 struct lm78_data
*isa
;
529 if (!pdev
) /* No ISA chip */
531 isa
= platform_get_drvdata(pdev
);
533 if (lm78_read_value(isa
, LM78_REG_I2C_ADDR
) != client
->addr
)
534 return 0; /* Address doesn't match */
535 if ((lm78_read_value(isa
, LM78_REG_CHIPID
) & 0xfe) != (chipid
& 0xfe))
536 return 0; /* Chip type doesn't match */
539 * We compare all the limit registers, the config register and the
540 * interrupt mask registers
542 for (i
= 0x2b; i
<= 0x3d; i
++) {
543 if (lm78_read_value(isa
, i
) !=
544 i2c_smbus_read_byte_data(client
, i
))
547 if (lm78_read_value(isa
, LM78_REG_CONFIG
) !=
548 i2c_smbus_read_byte_data(client
, LM78_REG_CONFIG
))
550 for (i
= 0x43; i
<= 0x46; i
++) {
551 if (lm78_read_value(isa
, i
) !=
552 i2c_smbus_read_byte_data(client
, i
))
558 #else /* !CONFIG_ISA */
560 static int lm78_alias_detect(struct i2c_client
*client
, u8 chipid
)
565 static struct lm78_data
*lm78_data_if_isa(void)
569 #endif /* CONFIG_ISA */
571 static int lm78_i2c_detect(struct i2c_client
*client
,
572 struct i2c_board_info
*info
)
575 struct lm78_data
*isa
= lm78_data_if_isa();
576 const char *client_name
;
577 struct i2c_adapter
*adapter
= client
->adapter
;
578 int address
= client
->addr
;
580 if (!i2c_check_functionality(adapter
, I2C_FUNC_SMBUS_BYTE_DATA
))
584 * We block updates of the ISA device to minimize the risk of
585 * concurrent access to the same LM78 chip through different
589 mutex_lock(&isa
->update_lock
);
591 if ((i2c_smbus_read_byte_data(client
, LM78_REG_CONFIG
) & 0x80)
592 || i2c_smbus_read_byte_data(client
, LM78_REG_I2C_ADDR
) != address
)
595 /* Explicitly prevent the misdetection of Winbond chips */
596 i
= i2c_smbus_read_byte_data(client
, 0x4f);
597 if (i
== 0xa3 || i
== 0x5c)
600 /* Determine the chip type. */
601 i
= i2c_smbus_read_byte_data(client
, LM78_REG_CHIPID
);
602 if (i
== 0x00 || i
== 0x20 /* LM78 */
603 || i
== 0x40) /* LM78-J */
604 client_name
= "lm78";
605 else if ((i
& 0xfe) == 0xc0)
606 client_name
= "lm79";
610 if (lm78_alias_detect(client
, i
)) {
611 dev_dbg(&adapter
->dev
,
612 "Device at 0x%02x appears to be the same as ISA device\n",
618 mutex_unlock(&isa
->update_lock
);
620 strlcpy(info
->type
, client_name
, I2C_NAME_SIZE
);
626 mutex_unlock(&isa
->update_lock
);
630 static const struct i2c_device_id lm78_i2c_id
[];
632 static int lm78_i2c_probe(struct i2c_client
*client
)
634 struct device
*dev
= &client
->dev
;
635 struct device
*hwmon_dev
;
636 struct lm78_data
*data
;
638 data
= devm_kzalloc(dev
, sizeof(struct lm78_data
), GFP_KERNEL
);
642 data
->client
= client
;
643 data
->type
= i2c_match_id(lm78_i2c_id
, client
)->driver_data
;
645 /* Initialize the LM78 chip */
646 lm78_init_device(data
);
648 hwmon_dev
= devm_hwmon_device_register_with_groups(dev
, client
->name
,
650 return PTR_ERR_OR_ZERO(hwmon_dev
);
653 static const struct i2c_device_id lm78_i2c_id
[] = {
658 MODULE_DEVICE_TABLE(i2c
, lm78_i2c_id
);
660 static struct i2c_driver lm78_driver
= {
661 .class = I2C_CLASS_HWMON
,
665 .probe_new
= lm78_i2c_probe
,
666 .id_table
= lm78_i2c_id
,
667 .detect
= lm78_i2c_detect
,
668 .address_list
= normal_i2c
,
672 * The SMBus locks itself, but ISA access must be locked explicitly!
673 * We don't want to lock the whole ISA bus, so we lock each client
675 * We ignore the LM78 BUSY flag at this moment - it could lead to deadlocks,
676 * would slow down the LM78 access and should not be necessary.
678 static int lm78_read_value(struct lm78_data
*data
, u8 reg
)
680 struct i2c_client
*client
= data
->client
;
683 if (!client
) { /* ISA device */
685 mutex_lock(&data
->lock
);
686 outb_p(reg
, data
->isa_addr
+ LM78_ADDR_REG_OFFSET
);
687 res
= inb_p(data
->isa_addr
+ LM78_DATA_REG_OFFSET
);
688 mutex_unlock(&data
->lock
);
692 return i2c_smbus_read_byte_data(client
, reg
);
695 static int lm78_write_value(struct lm78_data
*data
, u8 reg
, u8 value
)
697 struct i2c_client
*client
= data
->client
;
700 if (!client
) { /* ISA device */
701 mutex_lock(&data
->lock
);
702 outb_p(reg
, data
->isa_addr
+ LM78_ADDR_REG_OFFSET
);
703 outb_p(value
, data
->isa_addr
+ LM78_DATA_REG_OFFSET
);
704 mutex_unlock(&data
->lock
);
708 return i2c_smbus_write_byte_data(client
, reg
, value
);
711 static void lm78_init_device(struct lm78_data
*data
)
716 /* Start monitoring */
717 config
= lm78_read_value(data
, LM78_REG_CONFIG
);
718 if ((config
& 0x09) != 0x01)
719 lm78_write_value(data
, LM78_REG_CONFIG
,
720 (config
& 0xf7) | 0x01);
722 /* A few vars need to be filled upon startup */
723 for (i
= 0; i
< 3; i
++) {
724 data
->fan_min
[i
] = lm78_read_value(data
,
725 LM78_REG_FAN_MIN(i
));
728 mutex_init(&data
->update_lock
);
731 static struct lm78_data
*lm78_update_device(struct device
*dev
)
733 struct lm78_data
*data
= dev_get_drvdata(dev
);
736 mutex_lock(&data
->update_lock
);
738 if (time_after(jiffies
, data
->last_updated
+ HZ
+ HZ
/ 2)
741 dev_dbg(dev
, "Starting lm78 update\n");
743 for (i
= 0; i
<= 6; i
++) {
745 lm78_read_value(data
, LM78_REG_IN(i
));
747 lm78_read_value(data
, LM78_REG_IN_MIN(i
));
749 lm78_read_value(data
, LM78_REG_IN_MAX(i
));
751 for (i
= 0; i
< 3; i
++) {
753 lm78_read_value(data
, LM78_REG_FAN(i
));
755 lm78_read_value(data
, LM78_REG_FAN_MIN(i
));
757 data
->temp
= lm78_read_value(data
, LM78_REG_TEMP
);
759 lm78_read_value(data
, LM78_REG_TEMP_OVER
);
761 lm78_read_value(data
, LM78_REG_TEMP_HYST
);
762 i
= lm78_read_value(data
, LM78_REG_VID_FANDIV
);
763 data
->vid
= i
& 0x0f;
764 if (data
->type
== lm79
)
766 (lm78_read_value(data
, LM78_REG_CHIPID
) &
770 data
->fan_div
[0] = (i
>> 4) & 0x03;
771 data
->fan_div
[1] = i
>> 6;
772 data
->alarms
= lm78_read_value(data
, LM78_REG_ALARM1
) +
773 (lm78_read_value(data
, LM78_REG_ALARM2
) << 8);
774 data
->last_updated
= jiffies
;
777 data
->fan_div
[2] = 1;
780 mutex_unlock(&data
->update_lock
);
786 static int lm78_isa_probe(struct platform_device
*pdev
)
788 struct device
*dev
= &pdev
->dev
;
789 struct device
*hwmon_dev
;
790 struct lm78_data
*data
;
791 struct resource
*res
;
793 /* Reserve the ISA region */
794 res
= platform_get_resource(pdev
, IORESOURCE_IO
, 0);
795 if (!devm_request_region(dev
, res
->start
+ LM78_ADDR_REG_OFFSET
,
799 data
= devm_kzalloc(dev
, sizeof(struct lm78_data
), GFP_KERNEL
);
803 mutex_init(&data
->lock
);
804 data
->isa_addr
= res
->start
;
805 platform_set_drvdata(pdev
, data
);
807 if (lm78_read_value(data
, LM78_REG_CHIPID
) & 0x80) {
815 /* Initialize the LM78 chip */
816 lm78_init_device(data
);
818 hwmon_dev
= devm_hwmon_device_register_with_groups(dev
, data
->name
,
820 return PTR_ERR_OR_ZERO(hwmon_dev
);
823 static struct platform_driver lm78_isa_driver
= {
827 .probe
= lm78_isa_probe
,
830 /* return 1 if a supported chip is found, 0 otherwise */
831 static int __init
lm78_isa_found(unsigned short address
)
833 int val
, save
, found
= 0;
837 * Some boards declare base+0 to base+7 as a PNP device, some base+4
838 * to base+7 and some base+5 to base+6. So we better request each port
839 * individually for the probing phase.
841 for (port
= address
; port
< address
+ LM78_EXTENT
; port
++) {
842 if (!request_region(port
, 1, "lm78")) {
843 pr_debug("Failed to request port 0x%x\n", port
);
848 #define REALLY_SLOW_IO
850 * We need the timeouts for at least some LM78-like
851 * chips. But only if we read 'undefined' registers.
853 val
= inb_p(address
+ 1);
854 if (inb_p(address
+ 2) != val
855 || inb_p(address
+ 3) != val
856 || inb_p(address
+ 7) != val
)
858 #undef REALLY_SLOW_IO
861 * We should be able to change the 7 LSB of the address port. The
862 * MSB (busy flag) should be clear initially, set after the write.
864 save
= inb_p(address
+ LM78_ADDR_REG_OFFSET
);
868 outb_p(val
, address
+ LM78_ADDR_REG_OFFSET
);
869 if (inb_p(address
+ LM78_ADDR_REG_OFFSET
) != (val
| 0x80)) {
870 outb_p(save
, address
+ LM78_ADDR_REG_OFFSET
);
874 /* We found a device, now see if it could be an LM78 */
875 outb_p(LM78_REG_CONFIG
, address
+ LM78_ADDR_REG_OFFSET
);
876 val
= inb_p(address
+ LM78_DATA_REG_OFFSET
);
879 outb_p(LM78_REG_I2C_ADDR
, address
+ LM78_ADDR_REG_OFFSET
);
880 val
= inb_p(address
+ LM78_DATA_REG_OFFSET
);
881 if (val
< 0x03 || val
> 0x77) /* Not a valid I2C address */
884 /* The busy flag should be clear again */
885 if (inb_p(address
+ LM78_ADDR_REG_OFFSET
) & 0x80)
888 /* Explicitly prevent the misdetection of Winbond chips */
889 outb_p(0x4f, address
+ LM78_ADDR_REG_OFFSET
);
890 val
= inb_p(address
+ LM78_DATA_REG_OFFSET
);
891 if (val
== 0xa3 || val
== 0x5c)
894 /* Explicitly prevent the misdetection of ITE chips */
895 outb_p(0x58, address
+ LM78_ADDR_REG_OFFSET
);
896 val
= inb_p(address
+ LM78_DATA_REG_OFFSET
);
900 /* Determine the chip type */
901 outb_p(LM78_REG_CHIPID
, address
+ LM78_ADDR_REG_OFFSET
);
902 val
= inb_p(address
+ LM78_DATA_REG_OFFSET
);
903 if (val
== 0x00 || val
== 0x20 /* LM78 */
904 || val
== 0x40 /* LM78-J */
905 || (val
& 0xfe) == 0xc0) /* LM79 */
909 pr_info("Found an %s chip at %#x\n",
910 val
& 0x80 ? "LM79" : "LM78", (int)address
);
913 for (port
--; port
>= address
; port
--)
914 release_region(port
, 1);
918 static int __init
lm78_isa_device_add(unsigned short address
)
920 struct resource res
= {
922 .end
= address
+ LM78_EXTENT
- 1,
924 .flags
= IORESOURCE_IO
,
928 pdev
= platform_device_alloc("lm78", address
);
931 pr_err("Device allocation failed\n");
935 err
= platform_device_add_resources(pdev
, &res
, 1);
937 pr_err("Device resource addition failed (%d)\n", err
);
938 goto exit_device_put
;
941 err
= platform_device_add(pdev
);
943 pr_err("Device addition failed (%d)\n", err
);
944 goto exit_device_put
;
950 platform_device_put(pdev
);
956 static int __init
lm78_isa_register(void)
960 if (lm78_isa_found(isa_address
)) {
961 res
= platform_driver_register(&lm78_isa_driver
);
965 /* Sets global pdev as a side effect */
966 res
= lm78_isa_device_add(isa_address
);
968 goto exit_unreg_isa_driver
;
973 exit_unreg_isa_driver
:
974 platform_driver_unregister(&lm78_isa_driver
);
979 static void lm78_isa_unregister(void)
982 platform_device_unregister(pdev
);
983 platform_driver_unregister(&lm78_isa_driver
);
986 #else /* !CONFIG_ISA */
988 static int __init
lm78_isa_register(void)
993 static void lm78_isa_unregister(void)
996 #endif /* CONFIG_ISA */
998 static int __init
sm_lm78_init(void)
1003 * We register the ISA device first, so that we can skip the
1004 * registration of an I2C interface to the same device.
1006 res
= lm78_isa_register();
1010 res
= i2c_add_driver(&lm78_driver
);
1012 goto exit_unreg_isa_device
;
1016 exit_unreg_isa_device
:
1017 lm78_isa_unregister();
1022 static void __exit
sm_lm78_exit(void)
1024 lm78_isa_unregister();
1025 i2c_del_driver(&lm78_driver
);
1028 MODULE_AUTHOR("Frodo Looijaard, Jean Delvare <jdelvare@suse.de>");
1029 MODULE_DESCRIPTION("LM78/LM79 driver");
1030 MODULE_LICENSE("GPL");
1032 module_init(sm_lm78_init
);
1033 module_exit(sm_lm78_exit
);