xref: /openbmc/linux/drivers/hwmon/lm85.c (revision 11650cf0)
1 /*
2  * lm85.c - Part of lm_sensors, Linux kernel modules for hardware
3  *	    monitoring
4  * Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl>
5  * Copyright (c) 2002, 2003  Philip Pokorny <ppokorny@penguincomputing.com>
6  * Copyright (c) 2003        Margit Schubert-While <margitsw@t-online.de>
7  * Copyright (c) 2004        Justin Thiessen <jthiessen@penguincomputing.com>
8  * Copyright (C) 2007--2014  Jean Delvare <jdelvare@suse.de>
9  *
10  * Chip details at	      <http://www.national.com/ds/LM/LM85.pdf>
11  *
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU General Public License as published by
14  * the Free Software Foundation; either version 2 of the License, or
15  * (at your option) any later version.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program; if not, write to the Free Software
24  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25  */
26 
27 #include <linux/module.h>
28 #include <linux/of_device.h>
29 #include <linux/init.h>
30 #include <linux/slab.h>
31 #include <linux/jiffies.h>
32 #include <linux/i2c.h>
33 #include <linux/hwmon.h>
34 #include <linux/hwmon-vid.h>
35 #include <linux/hwmon-sysfs.h>
36 #include <linux/err.h>
37 #include <linux/mutex.h>
38 #include <linux/util_macros.h>
39 
40 /* Addresses to scan */
41 static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
42 
43 enum chips {
44 	lm85, lm96000,
45 	adm1027, adt7463, adt7468,
46 	emc6d100, emc6d102, emc6d103, emc6d103s
47 };
48 
49 /* The LM85 registers */
50 
51 #define LM85_REG_IN(nr)			(0x20 + (nr))
52 #define LM85_REG_IN_MIN(nr)		(0x44 + (nr) * 2)
53 #define LM85_REG_IN_MAX(nr)		(0x45 + (nr) * 2)
54 
55 #define LM85_REG_TEMP(nr)		(0x25 + (nr))
56 #define LM85_REG_TEMP_MIN(nr)		(0x4e + (nr) * 2)
57 #define LM85_REG_TEMP_MAX(nr)		(0x4f + (nr) * 2)
58 
59 /* Fan speeds are LSB, MSB (2 bytes) */
60 #define LM85_REG_FAN(nr)		(0x28 + (nr) * 2)
61 #define LM85_REG_FAN_MIN(nr)		(0x54 + (nr) * 2)
62 
63 #define LM85_REG_PWM(nr)		(0x30 + (nr))
64 
65 #define LM85_REG_COMPANY		0x3e
66 #define LM85_REG_VERSTEP		0x3f
67 
68 #define ADT7468_REG_CFG5		0x7c
69 #define ADT7468_OFF64			(1 << 0)
70 #define ADT7468_HFPWM			(1 << 1)
71 #define IS_ADT7468_OFF64(data)		\
72 	((data)->type == adt7468 && !((data)->cfg5 & ADT7468_OFF64))
73 #define IS_ADT7468_HFPWM(data)		\
74 	((data)->type == adt7468 && !((data)->cfg5 & ADT7468_HFPWM))
75 
76 /* These are the recognized values for the above regs */
77 #define LM85_COMPANY_NATIONAL		0x01
78 #define LM85_COMPANY_ANALOG_DEV		0x41
79 #define LM85_COMPANY_SMSC		0x5c
80 #define LM85_VERSTEP_LM85C		0x60
81 #define LM85_VERSTEP_LM85B		0x62
82 #define LM85_VERSTEP_LM96000_1		0x68
83 #define LM85_VERSTEP_LM96000_2		0x69
84 #define LM85_VERSTEP_ADM1027		0x60
85 #define LM85_VERSTEP_ADT7463		0x62
86 #define LM85_VERSTEP_ADT7463C		0x6A
87 #define LM85_VERSTEP_ADT7468_1		0x71
88 #define LM85_VERSTEP_ADT7468_2		0x72
89 #define LM85_VERSTEP_EMC6D100_A0        0x60
90 #define LM85_VERSTEP_EMC6D100_A1        0x61
91 #define LM85_VERSTEP_EMC6D102		0x65
92 #define LM85_VERSTEP_EMC6D103_A0	0x68
93 #define LM85_VERSTEP_EMC6D103_A1	0x69
94 #define LM85_VERSTEP_EMC6D103S		0x6A	/* Also known as EMC6D103:A2 */
95 
96 #define LM85_REG_CONFIG			0x40
97 
98 #define LM85_REG_ALARM1			0x41
99 #define LM85_REG_ALARM2			0x42
100 
101 #define LM85_REG_VID			0x43
102 
103 /* Automated FAN control */
104 #define LM85_REG_AFAN_CONFIG(nr)	(0x5c + (nr))
105 #define LM85_REG_AFAN_RANGE(nr)		(0x5f + (nr))
106 #define LM85_REG_AFAN_SPIKE1		0x62
107 #define LM85_REG_AFAN_MINPWM(nr)	(0x64 + (nr))
108 #define LM85_REG_AFAN_LIMIT(nr)		(0x67 + (nr))
109 #define LM85_REG_AFAN_CRITICAL(nr)	(0x6a + (nr))
110 #define LM85_REG_AFAN_HYST1		0x6d
111 #define LM85_REG_AFAN_HYST2		0x6e
112 
113 #define ADM1027_REG_EXTEND_ADC1		0x76
114 #define ADM1027_REG_EXTEND_ADC2		0x77
115 
116 #define EMC6D100_REG_ALARM3             0x7d
117 /* IN5, IN6 and IN7 */
118 #define EMC6D100_REG_IN(nr)             (0x70 + ((nr) - 5))
119 #define EMC6D100_REG_IN_MIN(nr)         (0x73 + ((nr) - 5) * 2)
120 #define EMC6D100_REG_IN_MAX(nr)         (0x74 + ((nr) - 5) * 2)
121 #define EMC6D102_REG_EXTEND_ADC1	0x85
122 #define EMC6D102_REG_EXTEND_ADC2	0x86
123 #define EMC6D102_REG_EXTEND_ADC3	0x87
124 #define EMC6D102_REG_EXTEND_ADC4	0x88
125 
126 /*
127  * Conversions. Rounding and limit checking is only done on the TO_REG
128  * variants. Note that you should be a bit careful with which arguments
129  * these macros are called: arguments may be evaluated more than once.
130  */
131 
132 /* IN are scaled according to built-in resistors */
133 static const int lm85_scaling[] = {  /* .001 Volts */
134 	2500, 2250, 3300, 5000, 12000,
135 	3300, 1500, 1800 /*EMC6D100*/
136 };
137 #define SCALE(val, from, to)	(((val) * (to) + ((from) / 2)) / (from))
138 
139 #define INS_TO_REG(n, val)	\
140 		SCALE(clamp_val(val, 0, 255 * lm85_scaling[n] / 192), \
141 		      lm85_scaling[n], 192)
142 
143 #define INSEXT_FROM_REG(n, val, ext)	\
144 		SCALE(((val) << 4) + (ext), 192 << 4, lm85_scaling[n])
145 
146 #define INS_FROM_REG(n, val)	SCALE((val), 192, lm85_scaling[n])
147 
148 /* FAN speed is measured using 90kHz clock */
149 static inline u16 FAN_TO_REG(unsigned long val)
150 {
151 	if (!val)
152 		return 0xffff;
153 	return clamp_val(5400000 / val, 1, 0xfffe);
154 }
155 #define FAN_FROM_REG(val)	((val) == 0 ? -1 : (val) == 0xffff ? 0 : \
156 				 5400000 / (val))
157 
158 /* Temperature is reported in .001 degC increments */
159 #define TEMP_TO_REG(val)	\
160 		DIV_ROUND_CLOSEST(clamp_val((val), -127000, 127000), 1000)
161 #define TEMPEXT_FROM_REG(val, ext)	\
162 		SCALE(((val) << 4) + (ext), 16, 1000)
163 #define TEMP_FROM_REG(val)	((val) * 1000)
164 
165 #define PWM_TO_REG(val)			clamp_val(val, 0, 255)
166 #define PWM_FROM_REG(val)		(val)
167 
168 
169 /*
170  * ZONEs have the following parameters:
171  *    Limit (low) temp,           1. degC
172  *    Hysteresis (below limit),   1. degC (0-15)
173  *    Range of speed control,     .1 degC (2-80)
174  *    Critical (high) temp,       1. degC
175  *
176  * FAN PWMs have the following parameters:
177  *    Reference Zone,                 1, 2, 3, etc.
178  *    Spinup time,                    .05 sec
179  *    PWM value at limit/low temp,    1 count
180  *    PWM Frequency,                  1. Hz
181  *    PWM is Min or OFF below limit,  flag
182  *    Invert PWM output,              flag
183  *
184  * Some chips filter the temp, others the fan.
185  *    Filter constant (or disabled)   .1 seconds
186  */
187 
188 /* These are the zone temperature range encodings in .001 degree C */
189 static const int lm85_range_map[] = {
190 	2000, 2500, 3300, 4000, 5000, 6600, 8000, 10000,
191 	13300, 16000, 20000, 26600, 32000, 40000, 53300, 80000
192 };
193 
194 static int RANGE_TO_REG(long range)
195 {
196 	return find_closest(range, lm85_range_map, ARRAY_SIZE(lm85_range_map));
197 }
198 #define RANGE_FROM_REG(val)	lm85_range_map[(val) & 0x0f]
199 
200 /* These are the PWM frequency encodings */
201 static const int lm85_freq_map[] = { /* 1 Hz */
202 	10, 15, 23, 30, 38, 47, 61, 94
203 };
204 
205 static const int adm1027_freq_map[] = { /* 1 Hz */
206 	11, 15, 22, 29, 35, 44, 59, 88
207 };
208 
209 static int FREQ_TO_REG(const int *map,
210 		       unsigned int map_size, unsigned long freq)
211 {
212 	return find_closest(freq, map, map_size);
213 }
214 
215 static int FREQ_FROM_REG(const int *map, unsigned int map_size, u8 reg)
216 {
217 	return map[reg % map_size];
218 }
219 
220 /*
221  * Since we can't use strings, I'm abusing these numbers
222  *   to stand in for the following meanings:
223  *      1 -- PWM responds to Zone 1
224  *      2 -- PWM responds to Zone 2
225  *      3 -- PWM responds to Zone 3
226  *     23 -- PWM responds to the higher temp of Zone 2 or 3
227  *    123 -- PWM responds to highest of Zone 1, 2, or 3
228  *      0 -- PWM is always at 0% (ie, off)
229  *     -1 -- PWM is always at 100%
230  *     -2 -- PWM responds to manual control
231  */
232 
233 static const int lm85_zone_map[] = { 1, 2, 3, -1, 0, 23, 123, -2 };
234 #define ZONE_FROM_REG(val)	lm85_zone_map[(val) >> 5]
235 
236 static int ZONE_TO_REG(int zone)
237 {
238 	int i;
239 
240 	for (i = 0; i <= 7; ++i)
241 		if (zone == lm85_zone_map[i])
242 			break;
243 	if (i > 7)   /* Not found. */
244 		i = 3;  /* Always 100% */
245 	return i << 5;
246 }
247 
248 #define HYST_TO_REG(val)	clamp_val(((val) + 500) / 1000, 0, 15)
249 #define HYST_FROM_REG(val)	((val) * 1000)
250 
251 /*
252  * Chip sampling rates
253  *
254  * Some sensors are not updated more frequently than once per second
255  *    so it doesn't make sense to read them more often than that.
256  *    We cache the results and return the saved data if the driver
257  *    is called again before a second has elapsed.
258  *
259  * Also, there is significant configuration data for this chip
260  *    given the automatic PWM fan control that is possible.  There
261  *    are about 47 bytes of config data to only 22 bytes of actual
262  *    readings.  So, we keep the config data up to date in the cache
263  *    when it is written and only sample it once every 1 *minute*
264  */
265 #define LM85_DATA_INTERVAL  (HZ + HZ / 2)
266 #define LM85_CONFIG_INTERVAL  (1 * 60 * HZ)
267 
268 /*
269  * LM85 can automatically adjust fan speeds based on temperature
270  * This structure encapsulates an entire Zone config.  There are
271  * three zones (one for each temperature input) on the lm85
272  */
273 struct lm85_zone {
274 	s8 limit;	/* Low temp limit */
275 	u8 hyst;	/* Low limit hysteresis. (0-15) */
276 	u8 range;	/* Temp range, encoded */
277 	s8 critical;	/* "All fans ON" temp limit */
278 	u8 max_desired; /*
279 			 * Actual "max" temperature specified.  Preserved
280 			 * to prevent "drift" as other autofan control
281 			 * values change.
282 			 */
283 };
284 
285 struct lm85_autofan {
286 	u8 config;	/* Register value */
287 	u8 min_pwm;	/* Minimum PWM value, encoded */
288 	u8 min_off;	/* Min PWM or OFF below "limit", flag */
289 };
290 
291 /*
292  * For each registered chip, we need to keep some data in memory.
293  * The structure is dynamically allocated.
294  */
295 struct lm85_data {
296 	struct i2c_client *client;
297 	const struct attribute_group *groups[6];
298 	const int *freq_map;
299 	unsigned int freq_map_size;
300 
301 	enum chips type;
302 
303 	bool has_vid5;	/* true if VID5 is configured for ADT7463 or ADT7468 */
304 
305 	struct mutex update_lock;
306 	int valid;		/* !=0 if following fields are valid */
307 	unsigned long last_reading;	/* In jiffies */
308 	unsigned long last_config;	/* In jiffies */
309 
310 	u8 in[8];		/* Register value */
311 	u8 in_max[8];		/* Register value */
312 	u8 in_min[8];		/* Register value */
313 	s8 temp[3];		/* Register value */
314 	s8 temp_min[3];		/* Register value */
315 	s8 temp_max[3];		/* Register value */
316 	u16 fan[4];		/* Register value */
317 	u16 fan_min[4];		/* Register value */
318 	u8 pwm[3];		/* Register value */
319 	u8 pwm_freq[3];		/* Register encoding */
320 	u8 temp_ext[3];		/* Decoded values */
321 	u8 in_ext[8];		/* Decoded values */
322 	u8 vid;			/* Register value */
323 	u8 vrm;			/* VRM version */
324 	u32 alarms;		/* Register encoding, combined */
325 	u8 cfg5;		/* Config Register 5 on ADT7468 */
326 	struct lm85_autofan autofan[3];
327 	struct lm85_zone zone[3];
328 };
329 
330 static int lm85_read_value(struct i2c_client *client, u8 reg)
331 {
332 	int res;
333 
334 	/* What size location is it? */
335 	switch (reg) {
336 	case LM85_REG_FAN(0):  /* Read WORD data */
337 	case LM85_REG_FAN(1):
338 	case LM85_REG_FAN(2):
339 	case LM85_REG_FAN(3):
340 	case LM85_REG_FAN_MIN(0):
341 	case LM85_REG_FAN_MIN(1):
342 	case LM85_REG_FAN_MIN(2):
343 	case LM85_REG_FAN_MIN(3):
344 	case LM85_REG_ALARM1:	/* Read both bytes at once */
345 		res = i2c_smbus_read_byte_data(client, reg) & 0xff;
346 		res |= i2c_smbus_read_byte_data(client, reg + 1) << 8;
347 		break;
348 	default:	/* Read BYTE data */
349 		res = i2c_smbus_read_byte_data(client, reg);
350 		break;
351 	}
352 
353 	return res;
354 }
355 
356 static void lm85_write_value(struct i2c_client *client, u8 reg, int value)
357 {
358 	switch (reg) {
359 	case LM85_REG_FAN(0):  /* Write WORD data */
360 	case LM85_REG_FAN(1):
361 	case LM85_REG_FAN(2):
362 	case LM85_REG_FAN(3):
363 	case LM85_REG_FAN_MIN(0):
364 	case LM85_REG_FAN_MIN(1):
365 	case LM85_REG_FAN_MIN(2):
366 	case LM85_REG_FAN_MIN(3):
367 	/* NOTE: ALARM is read only, so not included here */
368 		i2c_smbus_write_byte_data(client, reg, value & 0xff);
369 		i2c_smbus_write_byte_data(client, reg + 1, value >> 8);
370 		break;
371 	default:	/* Write BYTE data */
372 		i2c_smbus_write_byte_data(client, reg, value);
373 		break;
374 	}
375 }
376 
377 static struct lm85_data *lm85_update_device(struct device *dev)
378 {
379 	struct lm85_data *data = dev_get_drvdata(dev);
380 	struct i2c_client *client = data->client;
381 	int i;
382 
383 	mutex_lock(&data->update_lock);
384 
385 	if (!data->valid ||
386 	     time_after(jiffies, data->last_reading + LM85_DATA_INTERVAL)) {
387 		/* Things that change quickly */
388 		dev_dbg(&client->dev, "Reading sensor values\n");
389 
390 		/*
391 		 * Have to read extended bits first to "freeze" the
392 		 * more significant bits that are read later.
393 		 * There are 2 additional resolution bits per channel and we
394 		 * have room for 4, so we shift them to the left.
395 		 */
396 		if (data->type == adm1027 || data->type == adt7463 ||
397 		    data->type == adt7468) {
398 			int ext1 = lm85_read_value(client,
399 						   ADM1027_REG_EXTEND_ADC1);
400 			int ext2 =  lm85_read_value(client,
401 						    ADM1027_REG_EXTEND_ADC2);
402 			int val = (ext1 << 8) + ext2;
403 
404 			for (i = 0; i <= 4; i++)
405 				data->in_ext[i] =
406 					((val >> (i * 2)) & 0x03) << 2;
407 
408 			for (i = 0; i <= 2; i++)
409 				data->temp_ext[i] =
410 					(val >> ((i + 4) * 2)) & 0x0c;
411 		}
412 
413 		data->vid = lm85_read_value(client, LM85_REG_VID);
414 
415 		for (i = 0; i <= 3; ++i) {
416 			data->in[i] =
417 			    lm85_read_value(client, LM85_REG_IN(i));
418 			data->fan[i] =
419 			    lm85_read_value(client, LM85_REG_FAN(i));
420 		}
421 
422 		if (!data->has_vid5)
423 			data->in[4] = lm85_read_value(client, LM85_REG_IN(4));
424 
425 		if (data->type == adt7468)
426 			data->cfg5 = lm85_read_value(client, ADT7468_REG_CFG5);
427 
428 		for (i = 0; i <= 2; ++i) {
429 			data->temp[i] =
430 			    lm85_read_value(client, LM85_REG_TEMP(i));
431 			data->pwm[i] =
432 			    lm85_read_value(client, LM85_REG_PWM(i));
433 
434 			if (IS_ADT7468_OFF64(data))
435 				data->temp[i] -= 64;
436 		}
437 
438 		data->alarms = lm85_read_value(client, LM85_REG_ALARM1);
439 
440 		if (data->type == emc6d100) {
441 			/* Three more voltage sensors */
442 			for (i = 5; i <= 7; ++i) {
443 				data->in[i] = lm85_read_value(client,
444 							EMC6D100_REG_IN(i));
445 			}
446 			/* More alarm bits */
447 			data->alarms |= lm85_read_value(client,
448 						EMC6D100_REG_ALARM3) << 16;
449 		} else if (data->type == emc6d102 || data->type == emc6d103 ||
450 			   data->type == emc6d103s) {
451 			/*
452 			 * Have to read LSB bits after the MSB ones because
453 			 * the reading of the MSB bits has frozen the
454 			 * LSBs (backward from the ADM1027).
455 			 */
456 			int ext1 = lm85_read_value(client,
457 						   EMC6D102_REG_EXTEND_ADC1);
458 			int ext2 = lm85_read_value(client,
459 						   EMC6D102_REG_EXTEND_ADC2);
460 			int ext3 = lm85_read_value(client,
461 						   EMC6D102_REG_EXTEND_ADC3);
462 			int ext4 = lm85_read_value(client,
463 						   EMC6D102_REG_EXTEND_ADC4);
464 			data->in_ext[0] = ext3 & 0x0f;
465 			data->in_ext[1] = ext4 & 0x0f;
466 			data->in_ext[2] = ext4 >> 4;
467 			data->in_ext[3] = ext3 >> 4;
468 			data->in_ext[4] = ext2 >> 4;
469 
470 			data->temp_ext[0] = ext1 & 0x0f;
471 			data->temp_ext[1] = ext2 & 0x0f;
472 			data->temp_ext[2] = ext1 >> 4;
473 		}
474 
475 		data->last_reading = jiffies;
476 	}  /* last_reading */
477 
478 	if (!data->valid ||
479 	     time_after(jiffies, data->last_config + LM85_CONFIG_INTERVAL)) {
480 		/* Things that don't change often */
481 		dev_dbg(&client->dev, "Reading config values\n");
482 
483 		for (i = 0; i <= 3; ++i) {
484 			data->in_min[i] =
485 			    lm85_read_value(client, LM85_REG_IN_MIN(i));
486 			data->in_max[i] =
487 			    lm85_read_value(client, LM85_REG_IN_MAX(i));
488 			data->fan_min[i] =
489 			    lm85_read_value(client, LM85_REG_FAN_MIN(i));
490 		}
491 
492 		if (!data->has_vid5)  {
493 			data->in_min[4] = lm85_read_value(client,
494 					  LM85_REG_IN_MIN(4));
495 			data->in_max[4] = lm85_read_value(client,
496 					  LM85_REG_IN_MAX(4));
497 		}
498 
499 		if (data->type == emc6d100) {
500 			for (i = 5; i <= 7; ++i) {
501 				data->in_min[i] = lm85_read_value(client,
502 						EMC6D100_REG_IN_MIN(i));
503 				data->in_max[i] = lm85_read_value(client,
504 						EMC6D100_REG_IN_MAX(i));
505 			}
506 		}
507 
508 		for (i = 0; i <= 2; ++i) {
509 			int val;
510 
511 			data->temp_min[i] =
512 			    lm85_read_value(client, LM85_REG_TEMP_MIN(i));
513 			data->temp_max[i] =
514 			    lm85_read_value(client, LM85_REG_TEMP_MAX(i));
515 
516 			data->autofan[i].config =
517 			    lm85_read_value(client, LM85_REG_AFAN_CONFIG(i));
518 			val = lm85_read_value(client, LM85_REG_AFAN_RANGE(i));
519 			data->pwm_freq[i] = val % data->freq_map_size;
520 			data->zone[i].range = val >> 4;
521 			data->autofan[i].min_pwm =
522 			    lm85_read_value(client, LM85_REG_AFAN_MINPWM(i));
523 			data->zone[i].limit =
524 			    lm85_read_value(client, LM85_REG_AFAN_LIMIT(i));
525 			data->zone[i].critical =
526 			    lm85_read_value(client, LM85_REG_AFAN_CRITICAL(i));
527 
528 			if (IS_ADT7468_OFF64(data)) {
529 				data->temp_min[i] -= 64;
530 				data->temp_max[i] -= 64;
531 				data->zone[i].limit -= 64;
532 				data->zone[i].critical -= 64;
533 			}
534 		}
535 
536 		if (data->type != emc6d103s) {
537 			i = lm85_read_value(client, LM85_REG_AFAN_SPIKE1);
538 			data->autofan[0].min_off = (i & 0x20) != 0;
539 			data->autofan[1].min_off = (i & 0x40) != 0;
540 			data->autofan[2].min_off = (i & 0x80) != 0;
541 
542 			i = lm85_read_value(client, LM85_REG_AFAN_HYST1);
543 			data->zone[0].hyst = i >> 4;
544 			data->zone[1].hyst = i & 0x0f;
545 
546 			i = lm85_read_value(client, LM85_REG_AFAN_HYST2);
547 			data->zone[2].hyst = i >> 4;
548 		}
549 
550 		data->last_config = jiffies;
551 	}  /* last_config */
552 
553 	data->valid = 1;
554 
555 	mutex_unlock(&data->update_lock);
556 
557 	return data;
558 }
559 
560 /* 4 Fans */
561 static ssize_t show_fan(struct device *dev, struct device_attribute *attr,
562 		char *buf)
563 {
564 	int nr = to_sensor_dev_attr(attr)->index;
565 	struct lm85_data *data = lm85_update_device(dev);
566 	return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr]));
567 }
568 
569 static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr,
570 		char *buf)
571 {
572 	int nr = to_sensor_dev_attr(attr)->index;
573 	struct lm85_data *data = lm85_update_device(dev);
574 	return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr]));
575 }
576 
577 static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
578 		const char *buf, size_t count)
579 {
580 	int nr = to_sensor_dev_attr(attr)->index;
581 	struct lm85_data *data = dev_get_drvdata(dev);
582 	struct i2c_client *client = data->client;
583 	unsigned long val;
584 	int err;
585 
586 	err = kstrtoul(buf, 10, &val);
587 	if (err)
588 		return err;
589 
590 	mutex_lock(&data->update_lock);
591 	data->fan_min[nr] = FAN_TO_REG(val);
592 	lm85_write_value(client, LM85_REG_FAN_MIN(nr), data->fan_min[nr]);
593 	mutex_unlock(&data->update_lock);
594 	return count;
595 }
596 
597 #define show_fan_offset(offset)						\
598 static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO,			\
599 		show_fan, NULL, offset - 1);				\
600 static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR,		\
601 		show_fan_min, set_fan_min, offset - 1)
602 
603 show_fan_offset(1);
604 show_fan_offset(2);
605 show_fan_offset(3);
606 show_fan_offset(4);
607 
608 /* vid, vrm, alarms */
609 
610 static ssize_t cpu0_vid_show(struct device *dev,
611 			     struct device_attribute *attr, char *buf)
612 {
613 	struct lm85_data *data = lm85_update_device(dev);
614 	int vid;
615 
616 	if (data->has_vid5) {
617 		/* 6-pin VID (VRM 10) */
618 		vid = vid_from_reg(data->vid & 0x3f, data->vrm);
619 	} else {
620 		/* 5-pin VID (VRM 9) */
621 		vid = vid_from_reg(data->vid & 0x1f, data->vrm);
622 	}
623 
624 	return sprintf(buf, "%d\n", vid);
625 }
626 
627 static DEVICE_ATTR_RO(cpu0_vid);
628 
629 static ssize_t vrm_show(struct device *dev, struct device_attribute *attr,
630 			char *buf)
631 {
632 	struct lm85_data *data = dev_get_drvdata(dev);
633 	return sprintf(buf, "%ld\n", (long) data->vrm);
634 }
635 
636 static ssize_t vrm_store(struct device *dev, struct device_attribute *attr,
637 			 const char *buf, size_t count)
638 {
639 	struct lm85_data *data = dev_get_drvdata(dev);
640 	unsigned long val;
641 	int err;
642 
643 	err = kstrtoul(buf, 10, &val);
644 	if (err)
645 		return err;
646 
647 	if (val > 255)
648 		return -EINVAL;
649 
650 	data->vrm = val;
651 	return count;
652 }
653 
654 static DEVICE_ATTR_RW(vrm);
655 
656 static ssize_t alarms_show(struct device *dev, struct device_attribute *attr,
657 			   char *buf)
658 {
659 	struct lm85_data *data = lm85_update_device(dev);
660 	return sprintf(buf, "%u\n", data->alarms);
661 }
662 
663 static DEVICE_ATTR_RO(alarms);
664 
665 static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
666 		char *buf)
667 {
668 	int nr = to_sensor_dev_attr(attr)->index;
669 	struct lm85_data *data = lm85_update_device(dev);
670 	return sprintf(buf, "%u\n", (data->alarms >> nr) & 1);
671 }
672 
673 static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0);
674 static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1);
675 static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2);
676 static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3);
677 static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8);
678 static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 18);
679 static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 16);
680 static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 17);
681 static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4);
682 static SENSOR_DEVICE_ATTR(temp1_fault, S_IRUGO, show_alarm, NULL, 14);
683 static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5);
684 static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 6);
685 static SENSOR_DEVICE_ATTR(temp3_fault, S_IRUGO, show_alarm, NULL, 15);
686 static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 10);
687 static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 11);
688 static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 12);
689 static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 13);
690 
691 /* pwm */
692 
693 static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,
694 		char *buf)
695 {
696 	int nr = to_sensor_dev_attr(attr)->index;
697 	struct lm85_data *data = lm85_update_device(dev);
698 	return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm[nr]));
699 }
700 
701 static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
702 		const char *buf, size_t count)
703 {
704 	int nr = to_sensor_dev_attr(attr)->index;
705 	struct lm85_data *data = dev_get_drvdata(dev);
706 	struct i2c_client *client = data->client;
707 	unsigned long val;
708 	int err;
709 
710 	err = kstrtoul(buf, 10, &val);
711 	if (err)
712 		return err;
713 
714 	mutex_lock(&data->update_lock);
715 	data->pwm[nr] = PWM_TO_REG(val);
716 	lm85_write_value(client, LM85_REG_PWM(nr), data->pwm[nr]);
717 	mutex_unlock(&data->update_lock);
718 	return count;
719 }
720 
721 static ssize_t show_pwm_enable(struct device *dev, struct device_attribute
722 		*attr, char *buf)
723 {
724 	int nr = to_sensor_dev_attr(attr)->index;
725 	struct lm85_data *data = lm85_update_device(dev);
726 	int pwm_zone, enable;
727 
728 	pwm_zone = ZONE_FROM_REG(data->autofan[nr].config);
729 	switch (pwm_zone) {
730 	case -1:	/* PWM is always at 100% */
731 		enable = 0;
732 		break;
733 	case 0:		/* PWM is always at 0% */
734 	case -2:	/* PWM responds to manual control */
735 		enable = 1;
736 		break;
737 	default:	/* PWM in automatic mode */
738 		enable = 2;
739 	}
740 	return sprintf(buf, "%d\n", enable);
741 }
742 
743 static ssize_t set_pwm_enable(struct device *dev, struct device_attribute
744 		*attr, const char *buf, size_t count)
745 {
746 	int nr = to_sensor_dev_attr(attr)->index;
747 	struct lm85_data *data = dev_get_drvdata(dev);
748 	struct i2c_client *client = data->client;
749 	u8 config;
750 	unsigned long val;
751 	int err;
752 
753 	err = kstrtoul(buf, 10, &val);
754 	if (err)
755 		return err;
756 
757 	switch (val) {
758 	case 0:
759 		config = 3;
760 		break;
761 	case 1:
762 		config = 7;
763 		break;
764 	case 2:
765 		/*
766 		 * Here we have to choose arbitrarily one of the 5 possible
767 		 * configurations; I go for the safest
768 		 */
769 		config = 6;
770 		break;
771 	default:
772 		return -EINVAL;
773 	}
774 
775 	mutex_lock(&data->update_lock);
776 	data->autofan[nr].config = lm85_read_value(client,
777 		LM85_REG_AFAN_CONFIG(nr));
778 	data->autofan[nr].config = (data->autofan[nr].config & ~0xe0)
779 		| (config << 5);
780 	lm85_write_value(client, LM85_REG_AFAN_CONFIG(nr),
781 		data->autofan[nr].config);
782 	mutex_unlock(&data->update_lock);
783 	return count;
784 }
785 
786 static ssize_t show_pwm_freq(struct device *dev,
787 		struct device_attribute *attr, char *buf)
788 {
789 	int nr = to_sensor_dev_attr(attr)->index;
790 	struct lm85_data *data = lm85_update_device(dev);
791 	int freq;
792 
793 	if (IS_ADT7468_HFPWM(data))
794 		freq = 22500;
795 	else
796 		freq = FREQ_FROM_REG(data->freq_map, data->freq_map_size,
797 				     data->pwm_freq[nr]);
798 
799 	return sprintf(buf, "%d\n", freq);
800 }
801 
802 static ssize_t set_pwm_freq(struct device *dev,
803 		struct device_attribute *attr, const char *buf, size_t count)
804 {
805 	int nr = to_sensor_dev_attr(attr)->index;
806 	struct lm85_data *data = dev_get_drvdata(dev);
807 	struct i2c_client *client = data->client;
808 	unsigned long val;
809 	int err;
810 
811 	err = kstrtoul(buf, 10, &val);
812 	if (err)
813 		return err;
814 
815 	mutex_lock(&data->update_lock);
816 	/*
817 	 * The ADT7468 has a special high-frequency PWM output mode,
818 	 * where all PWM outputs are driven by a 22.5 kHz clock.
819 	 * This might confuse the user, but there's not much we can do.
820 	 */
821 	if (data->type == adt7468 && val >= 11300) {	/* High freq. mode */
822 		data->cfg5 &= ~ADT7468_HFPWM;
823 		lm85_write_value(client, ADT7468_REG_CFG5, data->cfg5);
824 	} else {					/* Low freq. mode */
825 		data->pwm_freq[nr] = FREQ_TO_REG(data->freq_map,
826 						 data->freq_map_size, val);
827 		lm85_write_value(client, LM85_REG_AFAN_RANGE(nr),
828 				 (data->zone[nr].range << 4)
829 				 | data->pwm_freq[nr]);
830 		if (data->type == adt7468) {
831 			data->cfg5 |= ADT7468_HFPWM;
832 			lm85_write_value(client, ADT7468_REG_CFG5, data->cfg5);
833 		}
834 	}
835 	mutex_unlock(&data->update_lock);
836 	return count;
837 }
838 
839 #define show_pwm_reg(offset)						\
840 static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR,		\
841 		show_pwm, set_pwm, offset - 1);				\
842 static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR,	\
843 		show_pwm_enable, set_pwm_enable, offset - 1);		\
844 static SENSOR_DEVICE_ATTR(pwm##offset##_freq, S_IRUGO | S_IWUSR,	\
845 		show_pwm_freq, set_pwm_freq, offset - 1)
846 
847 show_pwm_reg(1);
848 show_pwm_reg(2);
849 show_pwm_reg(3);
850 
851 /* Voltages */
852 
853 static ssize_t show_in(struct device *dev, struct device_attribute *attr,
854 		char *buf)
855 {
856 	int nr = to_sensor_dev_attr(attr)->index;
857 	struct lm85_data *data = lm85_update_device(dev);
858 	return sprintf(buf, "%d\n", INSEXT_FROM_REG(nr, data->in[nr],
859 						    data->in_ext[nr]));
860 }
861 
862 static ssize_t show_in_min(struct device *dev, struct device_attribute *attr,
863 		char *buf)
864 {
865 	int nr = to_sensor_dev_attr(attr)->index;
866 	struct lm85_data *data = lm85_update_device(dev);
867 	return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in_min[nr]));
868 }
869 
870 static ssize_t set_in_min(struct device *dev, struct device_attribute *attr,
871 		const char *buf, size_t count)
872 {
873 	int nr = to_sensor_dev_attr(attr)->index;
874 	struct lm85_data *data = dev_get_drvdata(dev);
875 	struct i2c_client *client = data->client;
876 	long val;
877 	int err;
878 
879 	err = kstrtol(buf, 10, &val);
880 	if (err)
881 		return err;
882 
883 	mutex_lock(&data->update_lock);
884 	data->in_min[nr] = INS_TO_REG(nr, val);
885 	lm85_write_value(client, LM85_REG_IN_MIN(nr), data->in_min[nr]);
886 	mutex_unlock(&data->update_lock);
887 	return count;
888 }
889 
890 static ssize_t show_in_max(struct device *dev, struct device_attribute *attr,
891 		char *buf)
892 {
893 	int nr = to_sensor_dev_attr(attr)->index;
894 	struct lm85_data *data = lm85_update_device(dev);
895 	return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in_max[nr]));
896 }
897 
898 static ssize_t set_in_max(struct device *dev, struct device_attribute *attr,
899 		const char *buf, size_t count)
900 {
901 	int nr = to_sensor_dev_attr(attr)->index;
902 	struct lm85_data *data = dev_get_drvdata(dev);
903 	struct i2c_client *client = data->client;
904 	long val;
905 	int err;
906 
907 	err = kstrtol(buf, 10, &val);
908 	if (err)
909 		return err;
910 
911 	mutex_lock(&data->update_lock);
912 	data->in_max[nr] = INS_TO_REG(nr, val);
913 	lm85_write_value(client, LM85_REG_IN_MAX(nr), data->in_max[nr]);
914 	mutex_unlock(&data->update_lock);
915 	return count;
916 }
917 
918 #define show_in_reg(offset)						\
919 static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO,			\
920 		show_in, NULL, offset);					\
921 static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR,		\
922 		show_in_min, set_in_min, offset);			\
923 static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR,		\
924 		show_in_max, set_in_max, offset)
925 
926 show_in_reg(0);
927 show_in_reg(1);
928 show_in_reg(2);
929 show_in_reg(3);
930 show_in_reg(4);
931 show_in_reg(5);
932 show_in_reg(6);
933 show_in_reg(7);
934 
935 /* Temps */
936 
937 static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
938 		char *buf)
939 {
940 	int nr = to_sensor_dev_attr(attr)->index;
941 	struct lm85_data *data = lm85_update_device(dev);
942 	return sprintf(buf, "%d\n", TEMPEXT_FROM_REG(data->temp[nr],
943 						     data->temp_ext[nr]));
944 }
945 
946 static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr,
947 		char *buf)
948 {
949 	int nr = to_sensor_dev_attr(attr)->index;
950 	struct lm85_data *data = lm85_update_device(dev);
951 	return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr]));
952 }
953 
954 static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
955 		const char *buf, size_t count)
956 {
957 	int nr = to_sensor_dev_attr(attr)->index;
958 	struct lm85_data *data = dev_get_drvdata(dev);
959 	struct i2c_client *client = data->client;
960 	long val;
961 	int err;
962 
963 	err = kstrtol(buf, 10, &val);
964 	if (err)
965 		return err;
966 
967 	if (IS_ADT7468_OFF64(data))
968 		val += 64;
969 
970 	mutex_lock(&data->update_lock);
971 	data->temp_min[nr] = TEMP_TO_REG(val);
972 	lm85_write_value(client, LM85_REG_TEMP_MIN(nr), data->temp_min[nr]);
973 	mutex_unlock(&data->update_lock);
974 	return count;
975 }
976 
977 static ssize_t show_temp_max(struct device *dev, struct device_attribute *attr,
978 		char *buf)
979 {
980 	int nr = to_sensor_dev_attr(attr)->index;
981 	struct lm85_data *data = lm85_update_device(dev);
982 	return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr]));
983 }
984 
985 static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
986 		const char *buf, size_t count)
987 {
988 	int nr = to_sensor_dev_attr(attr)->index;
989 	struct lm85_data *data = dev_get_drvdata(dev);
990 	struct i2c_client *client = data->client;
991 	long val;
992 	int err;
993 
994 	err = kstrtol(buf, 10, &val);
995 	if (err)
996 		return err;
997 
998 	if (IS_ADT7468_OFF64(data))
999 		val += 64;
1000 
1001 	mutex_lock(&data->update_lock);
1002 	data->temp_max[nr] = TEMP_TO_REG(val);
1003 	lm85_write_value(client, LM85_REG_TEMP_MAX(nr), data->temp_max[nr]);
1004 	mutex_unlock(&data->update_lock);
1005 	return count;
1006 }
1007 
1008 #define show_temp_reg(offset)						\
1009 static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO,		\
1010 		show_temp, NULL, offset - 1);				\
1011 static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR,	\
1012 		show_temp_min, set_temp_min, offset - 1);		\
1013 static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR,	\
1014 		show_temp_max, set_temp_max, offset - 1);
1015 
1016 show_temp_reg(1);
1017 show_temp_reg(2);
1018 show_temp_reg(3);
1019 
1020 
1021 /* Automatic PWM control */
1022 
1023 static ssize_t show_pwm_auto_channels(struct device *dev,
1024 		struct device_attribute *attr, char *buf)
1025 {
1026 	int nr = to_sensor_dev_attr(attr)->index;
1027 	struct lm85_data *data = lm85_update_device(dev);
1028 	return sprintf(buf, "%d\n", ZONE_FROM_REG(data->autofan[nr].config));
1029 }
1030 
1031 static ssize_t set_pwm_auto_channels(struct device *dev,
1032 		struct device_attribute *attr, const char *buf, size_t count)
1033 {
1034 	int nr = to_sensor_dev_attr(attr)->index;
1035 	struct lm85_data *data = dev_get_drvdata(dev);
1036 	struct i2c_client *client = data->client;
1037 	long val;
1038 	int err;
1039 
1040 	err = kstrtol(buf, 10, &val);
1041 	if (err)
1042 		return err;
1043 
1044 	mutex_lock(&data->update_lock);
1045 	data->autofan[nr].config = (data->autofan[nr].config & (~0xe0))
1046 		| ZONE_TO_REG(val);
1047 	lm85_write_value(client, LM85_REG_AFAN_CONFIG(nr),
1048 		data->autofan[nr].config);
1049 	mutex_unlock(&data->update_lock);
1050 	return count;
1051 }
1052 
1053 static ssize_t show_pwm_auto_pwm_min(struct device *dev,
1054 		struct device_attribute *attr, char *buf)
1055 {
1056 	int nr = to_sensor_dev_attr(attr)->index;
1057 	struct lm85_data *data = lm85_update_device(dev);
1058 	return sprintf(buf, "%d\n", PWM_FROM_REG(data->autofan[nr].min_pwm));
1059 }
1060 
1061 static ssize_t set_pwm_auto_pwm_min(struct device *dev,
1062 		struct device_attribute *attr, const char *buf, size_t count)
1063 {
1064 	int nr = to_sensor_dev_attr(attr)->index;
1065 	struct lm85_data *data = dev_get_drvdata(dev);
1066 	struct i2c_client *client = data->client;
1067 	unsigned long val;
1068 	int err;
1069 
1070 	err = kstrtoul(buf, 10, &val);
1071 	if (err)
1072 		return err;
1073 
1074 	mutex_lock(&data->update_lock);
1075 	data->autofan[nr].min_pwm = PWM_TO_REG(val);
1076 	lm85_write_value(client, LM85_REG_AFAN_MINPWM(nr),
1077 		data->autofan[nr].min_pwm);
1078 	mutex_unlock(&data->update_lock);
1079 	return count;
1080 }
1081 
1082 static ssize_t show_pwm_auto_pwm_minctl(struct device *dev,
1083 		struct device_attribute *attr, char *buf)
1084 {
1085 	int nr = to_sensor_dev_attr(attr)->index;
1086 	struct lm85_data *data = lm85_update_device(dev);
1087 	return sprintf(buf, "%d\n", data->autofan[nr].min_off);
1088 }
1089 
1090 static ssize_t set_pwm_auto_pwm_minctl(struct device *dev,
1091 		struct device_attribute *attr, const char *buf, size_t count)
1092 {
1093 	int nr = to_sensor_dev_attr(attr)->index;
1094 	struct lm85_data *data = dev_get_drvdata(dev);
1095 	struct i2c_client *client = data->client;
1096 	u8 tmp;
1097 	long val;
1098 	int err;
1099 
1100 	err = kstrtol(buf, 10, &val);
1101 	if (err)
1102 		return err;
1103 
1104 	mutex_lock(&data->update_lock);
1105 	data->autofan[nr].min_off = val;
1106 	tmp = lm85_read_value(client, LM85_REG_AFAN_SPIKE1);
1107 	tmp &= ~(0x20 << nr);
1108 	if (data->autofan[nr].min_off)
1109 		tmp |= 0x20 << nr;
1110 	lm85_write_value(client, LM85_REG_AFAN_SPIKE1, tmp);
1111 	mutex_unlock(&data->update_lock);
1112 	return count;
1113 }
1114 
1115 #define pwm_auto(offset)						\
1116 static SENSOR_DEVICE_ATTR(pwm##offset##_auto_channels,			\
1117 		S_IRUGO | S_IWUSR, show_pwm_auto_channels,		\
1118 		set_pwm_auto_channels, offset - 1);			\
1119 static SENSOR_DEVICE_ATTR(pwm##offset##_auto_pwm_min,			\
1120 		S_IRUGO | S_IWUSR, show_pwm_auto_pwm_min,		\
1121 		set_pwm_auto_pwm_min, offset - 1);			\
1122 static SENSOR_DEVICE_ATTR(pwm##offset##_auto_pwm_minctl,		\
1123 		S_IRUGO | S_IWUSR, show_pwm_auto_pwm_minctl,		\
1124 		set_pwm_auto_pwm_minctl, offset - 1)
1125 
1126 pwm_auto(1);
1127 pwm_auto(2);
1128 pwm_auto(3);
1129 
1130 /* Temperature settings for automatic PWM control */
1131 
1132 static ssize_t show_temp_auto_temp_off(struct device *dev,
1133 		struct device_attribute *attr, char *buf)
1134 {
1135 	int nr = to_sensor_dev_attr(attr)->index;
1136 	struct lm85_data *data = lm85_update_device(dev);
1137 	return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].limit) -
1138 		HYST_FROM_REG(data->zone[nr].hyst));
1139 }
1140 
1141 static ssize_t set_temp_auto_temp_off(struct device *dev,
1142 		struct device_attribute *attr, const char *buf, size_t count)
1143 {
1144 	int nr = to_sensor_dev_attr(attr)->index;
1145 	struct lm85_data *data = dev_get_drvdata(dev);
1146 	struct i2c_client *client = data->client;
1147 	int min;
1148 	long val;
1149 	int err;
1150 
1151 	err = kstrtol(buf, 10, &val);
1152 	if (err)
1153 		return err;
1154 
1155 	mutex_lock(&data->update_lock);
1156 	min = TEMP_FROM_REG(data->zone[nr].limit);
1157 	data->zone[nr].hyst = HYST_TO_REG(min - val);
1158 	if (nr == 0 || nr == 1) {
1159 		lm85_write_value(client, LM85_REG_AFAN_HYST1,
1160 			(data->zone[0].hyst << 4)
1161 			| data->zone[1].hyst);
1162 	} else {
1163 		lm85_write_value(client, LM85_REG_AFAN_HYST2,
1164 			(data->zone[2].hyst << 4));
1165 	}
1166 	mutex_unlock(&data->update_lock);
1167 	return count;
1168 }
1169 
1170 static ssize_t show_temp_auto_temp_min(struct device *dev,
1171 		struct device_attribute *attr, char *buf)
1172 {
1173 	int nr = to_sensor_dev_attr(attr)->index;
1174 	struct lm85_data *data = lm85_update_device(dev);
1175 	return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].limit));
1176 }
1177 
1178 static ssize_t set_temp_auto_temp_min(struct device *dev,
1179 		struct device_attribute *attr, const char *buf, size_t count)
1180 {
1181 	int nr = to_sensor_dev_attr(attr)->index;
1182 	struct lm85_data *data = dev_get_drvdata(dev);
1183 	struct i2c_client *client = data->client;
1184 	long val;
1185 	int err;
1186 
1187 	err = kstrtol(buf, 10, &val);
1188 	if (err)
1189 		return err;
1190 
1191 	mutex_lock(&data->update_lock);
1192 	data->zone[nr].limit = TEMP_TO_REG(val);
1193 	lm85_write_value(client, LM85_REG_AFAN_LIMIT(nr),
1194 		data->zone[nr].limit);
1195 
1196 /* Update temp_auto_max and temp_auto_range */
1197 	data->zone[nr].range = RANGE_TO_REG(
1198 		TEMP_FROM_REG(data->zone[nr].max_desired) -
1199 		TEMP_FROM_REG(data->zone[nr].limit));
1200 	lm85_write_value(client, LM85_REG_AFAN_RANGE(nr),
1201 		((data->zone[nr].range & 0x0f) << 4)
1202 		| data->pwm_freq[nr]);
1203 
1204 	mutex_unlock(&data->update_lock);
1205 	return count;
1206 }
1207 
1208 static ssize_t show_temp_auto_temp_max(struct device *dev,
1209 		struct device_attribute *attr, char *buf)
1210 {
1211 	int nr = to_sensor_dev_attr(attr)->index;
1212 	struct lm85_data *data = lm85_update_device(dev);
1213 	return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].limit) +
1214 		RANGE_FROM_REG(data->zone[nr].range));
1215 }
1216 
1217 static ssize_t set_temp_auto_temp_max(struct device *dev,
1218 		struct device_attribute *attr, const char *buf, size_t count)
1219 {
1220 	int nr = to_sensor_dev_attr(attr)->index;
1221 	struct lm85_data *data = dev_get_drvdata(dev);
1222 	struct i2c_client *client = data->client;
1223 	int min;
1224 	long val;
1225 	int err;
1226 
1227 	err = kstrtol(buf, 10, &val);
1228 	if (err)
1229 		return err;
1230 
1231 	mutex_lock(&data->update_lock);
1232 	min = TEMP_FROM_REG(data->zone[nr].limit);
1233 	data->zone[nr].max_desired = TEMP_TO_REG(val);
1234 	data->zone[nr].range = RANGE_TO_REG(
1235 		val - min);
1236 	lm85_write_value(client, LM85_REG_AFAN_RANGE(nr),
1237 		((data->zone[nr].range & 0x0f) << 4)
1238 		| data->pwm_freq[nr]);
1239 	mutex_unlock(&data->update_lock);
1240 	return count;
1241 }
1242 
1243 static ssize_t show_temp_auto_temp_crit(struct device *dev,
1244 		struct device_attribute *attr, char *buf)
1245 {
1246 	int nr = to_sensor_dev_attr(attr)->index;
1247 	struct lm85_data *data = lm85_update_device(dev);
1248 	return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].critical));
1249 }
1250 
1251 static ssize_t set_temp_auto_temp_crit(struct device *dev,
1252 		struct device_attribute *attr, const char *buf, size_t count)
1253 {
1254 	int nr = to_sensor_dev_attr(attr)->index;
1255 	struct lm85_data *data = dev_get_drvdata(dev);
1256 	struct i2c_client *client = data->client;
1257 	long val;
1258 	int err;
1259 
1260 	err = kstrtol(buf, 10, &val);
1261 	if (err)
1262 		return err;
1263 
1264 	mutex_lock(&data->update_lock);
1265 	data->zone[nr].critical = TEMP_TO_REG(val);
1266 	lm85_write_value(client, LM85_REG_AFAN_CRITICAL(nr),
1267 		data->zone[nr].critical);
1268 	mutex_unlock(&data->update_lock);
1269 	return count;
1270 }
1271 
1272 #define temp_auto(offset)						\
1273 static SENSOR_DEVICE_ATTR(temp##offset##_auto_temp_off,			\
1274 		S_IRUGO | S_IWUSR, show_temp_auto_temp_off,		\
1275 		set_temp_auto_temp_off, offset - 1);			\
1276 static SENSOR_DEVICE_ATTR(temp##offset##_auto_temp_min,			\
1277 		S_IRUGO | S_IWUSR, show_temp_auto_temp_min,		\
1278 		set_temp_auto_temp_min, offset - 1);			\
1279 static SENSOR_DEVICE_ATTR(temp##offset##_auto_temp_max,			\
1280 		S_IRUGO | S_IWUSR, show_temp_auto_temp_max,		\
1281 		set_temp_auto_temp_max, offset - 1);			\
1282 static SENSOR_DEVICE_ATTR(temp##offset##_auto_temp_crit,		\
1283 		S_IRUGO | S_IWUSR, show_temp_auto_temp_crit,		\
1284 		set_temp_auto_temp_crit, offset - 1);
1285 
1286 temp_auto(1);
1287 temp_auto(2);
1288 temp_auto(3);
1289 
1290 static struct attribute *lm85_attributes[] = {
1291 	&sensor_dev_attr_fan1_input.dev_attr.attr,
1292 	&sensor_dev_attr_fan2_input.dev_attr.attr,
1293 	&sensor_dev_attr_fan3_input.dev_attr.attr,
1294 	&sensor_dev_attr_fan4_input.dev_attr.attr,
1295 	&sensor_dev_attr_fan1_min.dev_attr.attr,
1296 	&sensor_dev_attr_fan2_min.dev_attr.attr,
1297 	&sensor_dev_attr_fan3_min.dev_attr.attr,
1298 	&sensor_dev_attr_fan4_min.dev_attr.attr,
1299 	&sensor_dev_attr_fan1_alarm.dev_attr.attr,
1300 	&sensor_dev_attr_fan2_alarm.dev_attr.attr,
1301 	&sensor_dev_attr_fan3_alarm.dev_attr.attr,
1302 	&sensor_dev_attr_fan4_alarm.dev_attr.attr,
1303 
1304 	&sensor_dev_attr_pwm1.dev_attr.attr,
1305 	&sensor_dev_attr_pwm2.dev_attr.attr,
1306 	&sensor_dev_attr_pwm3.dev_attr.attr,
1307 	&sensor_dev_attr_pwm1_enable.dev_attr.attr,
1308 	&sensor_dev_attr_pwm2_enable.dev_attr.attr,
1309 	&sensor_dev_attr_pwm3_enable.dev_attr.attr,
1310 	&sensor_dev_attr_pwm1_freq.dev_attr.attr,
1311 	&sensor_dev_attr_pwm2_freq.dev_attr.attr,
1312 	&sensor_dev_attr_pwm3_freq.dev_attr.attr,
1313 
1314 	&sensor_dev_attr_in0_input.dev_attr.attr,
1315 	&sensor_dev_attr_in1_input.dev_attr.attr,
1316 	&sensor_dev_attr_in2_input.dev_attr.attr,
1317 	&sensor_dev_attr_in3_input.dev_attr.attr,
1318 	&sensor_dev_attr_in0_min.dev_attr.attr,
1319 	&sensor_dev_attr_in1_min.dev_attr.attr,
1320 	&sensor_dev_attr_in2_min.dev_attr.attr,
1321 	&sensor_dev_attr_in3_min.dev_attr.attr,
1322 	&sensor_dev_attr_in0_max.dev_attr.attr,
1323 	&sensor_dev_attr_in1_max.dev_attr.attr,
1324 	&sensor_dev_attr_in2_max.dev_attr.attr,
1325 	&sensor_dev_attr_in3_max.dev_attr.attr,
1326 	&sensor_dev_attr_in0_alarm.dev_attr.attr,
1327 	&sensor_dev_attr_in1_alarm.dev_attr.attr,
1328 	&sensor_dev_attr_in2_alarm.dev_attr.attr,
1329 	&sensor_dev_attr_in3_alarm.dev_attr.attr,
1330 
1331 	&sensor_dev_attr_temp1_input.dev_attr.attr,
1332 	&sensor_dev_attr_temp2_input.dev_attr.attr,
1333 	&sensor_dev_attr_temp3_input.dev_attr.attr,
1334 	&sensor_dev_attr_temp1_min.dev_attr.attr,
1335 	&sensor_dev_attr_temp2_min.dev_attr.attr,
1336 	&sensor_dev_attr_temp3_min.dev_attr.attr,
1337 	&sensor_dev_attr_temp1_max.dev_attr.attr,
1338 	&sensor_dev_attr_temp2_max.dev_attr.attr,
1339 	&sensor_dev_attr_temp3_max.dev_attr.attr,
1340 	&sensor_dev_attr_temp1_alarm.dev_attr.attr,
1341 	&sensor_dev_attr_temp2_alarm.dev_attr.attr,
1342 	&sensor_dev_attr_temp3_alarm.dev_attr.attr,
1343 	&sensor_dev_attr_temp1_fault.dev_attr.attr,
1344 	&sensor_dev_attr_temp3_fault.dev_attr.attr,
1345 
1346 	&sensor_dev_attr_pwm1_auto_channels.dev_attr.attr,
1347 	&sensor_dev_attr_pwm2_auto_channels.dev_attr.attr,
1348 	&sensor_dev_attr_pwm3_auto_channels.dev_attr.attr,
1349 	&sensor_dev_attr_pwm1_auto_pwm_min.dev_attr.attr,
1350 	&sensor_dev_attr_pwm2_auto_pwm_min.dev_attr.attr,
1351 	&sensor_dev_attr_pwm3_auto_pwm_min.dev_attr.attr,
1352 
1353 	&sensor_dev_attr_temp1_auto_temp_min.dev_attr.attr,
1354 	&sensor_dev_attr_temp2_auto_temp_min.dev_attr.attr,
1355 	&sensor_dev_attr_temp3_auto_temp_min.dev_attr.attr,
1356 	&sensor_dev_attr_temp1_auto_temp_max.dev_attr.attr,
1357 	&sensor_dev_attr_temp2_auto_temp_max.dev_attr.attr,
1358 	&sensor_dev_attr_temp3_auto_temp_max.dev_attr.attr,
1359 	&sensor_dev_attr_temp1_auto_temp_crit.dev_attr.attr,
1360 	&sensor_dev_attr_temp2_auto_temp_crit.dev_attr.attr,
1361 	&sensor_dev_attr_temp3_auto_temp_crit.dev_attr.attr,
1362 
1363 	&dev_attr_vrm.attr,
1364 	&dev_attr_cpu0_vid.attr,
1365 	&dev_attr_alarms.attr,
1366 	NULL
1367 };
1368 
1369 static const struct attribute_group lm85_group = {
1370 	.attrs = lm85_attributes,
1371 };
1372 
1373 static struct attribute *lm85_attributes_minctl[] = {
1374 	&sensor_dev_attr_pwm1_auto_pwm_minctl.dev_attr.attr,
1375 	&sensor_dev_attr_pwm2_auto_pwm_minctl.dev_attr.attr,
1376 	&sensor_dev_attr_pwm3_auto_pwm_minctl.dev_attr.attr,
1377 	NULL
1378 };
1379 
1380 static const struct attribute_group lm85_group_minctl = {
1381 	.attrs = lm85_attributes_minctl,
1382 };
1383 
1384 static struct attribute *lm85_attributes_temp_off[] = {
1385 	&sensor_dev_attr_temp1_auto_temp_off.dev_attr.attr,
1386 	&sensor_dev_attr_temp2_auto_temp_off.dev_attr.attr,
1387 	&sensor_dev_attr_temp3_auto_temp_off.dev_attr.attr,
1388 	NULL
1389 };
1390 
1391 static const struct attribute_group lm85_group_temp_off = {
1392 	.attrs = lm85_attributes_temp_off,
1393 };
1394 
1395 static struct attribute *lm85_attributes_in4[] = {
1396 	&sensor_dev_attr_in4_input.dev_attr.attr,
1397 	&sensor_dev_attr_in4_min.dev_attr.attr,
1398 	&sensor_dev_attr_in4_max.dev_attr.attr,
1399 	&sensor_dev_attr_in4_alarm.dev_attr.attr,
1400 	NULL
1401 };
1402 
1403 static const struct attribute_group lm85_group_in4 = {
1404 	.attrs = lm85_attributes_in4,
1405 };
1406 
1407 static struct attribute *lm85_attributes_in567[] = {
1408 	&sensor_dev_attr_in5_input.dev_attr.attr,
1409 	&sensor_dev_attr_in6_input.dev_attr.attr,
1410 	&sensor_dev_attr_in7_input.dev_attr.attr,
1411 	&sensor_dev_attr_in5_min.dev_attr.attr,
1412 	&sensor_dev_attr_in6_min.dev_attr.attr,
1413 	&sensor_dev_attr_in7_min.dev_attr.attr,
1414 	&sensor_dev_attr_in5_max.dev_attr.attr,
1415 	&sensor_dev_attr_in6_max.dev_attr.attr,
1416 	&sensor_dev_attr_in7_max.dev_attr.attr,
1417 	&sensor_dev_attr_in5_alarm.dev_attr.attr,
1418 	&sensor_dev_attr_in6_alarm.dev_attr.attr,
1419 	&sensor_dev_attr_in7_alarm.dev_attr.attr,
1420 	NULL
1421 };
1422 
1423 static const struct attribute_group lm85_group_in567 = {
1424 	.attrs = lm85_attributes_in567,
1425 };
1426 
1427 static void lm85_init_client(struct i2c_client *client)
1428 {
1429 	int value;
1430 
1431 	/* Start monitoring if needed */
1432 	value = lm85_read_value(client, LM85_REG_CONFIG);
1433 	if (!(value & 0x01)) {
1434 		dev_info(&client->dev, "Starting monitoring\n");
1435 		lm85_write_value(client, LM85_REG_CONFIG, value | 0x01);
1436 	}
1437 
1438 	/* Warn about unusual configuration bits */
1439 	if (value & 0x02)
1440 		dev_warn(&client->dev, "Device configuration is locked\n");
1441 	if (!(value & 0x04))
1442 		dev_warn(&client->dev, "Device is not ready\n");
1443 }
1444 
1445 static int lm85_is_fake(struct i2c_client *client)
1446 {
1447 	/*
1448 	 * Differenciate between real LM96000 and Winbond WPCD377I. The latter
1449 	 * emulate the former except that it has no hardware monitoring function
1450 	 * so the readings are always 0.
1451 	 */
1452 	int i;
1453 	u8 in_temp, fan;
1454 
1455 	for (i = 0; i < 8; i++) {
1456 		in_temp = i2c_smbus_read_byte_data(client, 0x20 + i);
1457 		fan = i2c_smbus_read_byte_data(client, 0x28 + i);
1458 		if (in_temp != 0x00 || fan != 0xff)
1459 			return 0;
1460 	}
1461 
1462 	return 1;
1463 }
1464 
1465 /* Return 0 if detection is successful, -ENODEV otherwise */
1466 static int lm85_detect(struct i2c_client *client, struct i2c_board_info *info)
1467 {
1468 	struct i2c_adapter *adapter = client->adapter;
1469 	int address = client->addr;
1470 	const char *type_name = NULL;
1471 	int company, verstep;
1472 
1473 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
1474 		/* We need to be able to do byte I/O */
1475 		return -ENODEV;
1476 	}
1477 
1478 	/* Determine the chip type */
1479 	company = lm85_read_value(client, LM85_REG_COMPANY);
1480 	verstep = lm85_read_value(client, LM85_REG_VERSTEP);
1481 
1482 	dev_dbg(&adapter->dev,
1483 		"Detecting device at 0x%02x with COMPANY: 0x%02x and VERSTEP: 0x%02x\n",
1484 		address, company, verstep);
1485 
1486 	if (company == LM85_COMPANY_NATIONAL) {
1487 		switch (verstep) {
1488 		case LM85_VERSTEP_LM85C:
1489 			type_name = "lm85c";
1490 			break;
1491 		case LM85_VERSTEP_LM85B:
1492 			type_name = "lm85b";
1493 			break;
1494 		case LM85_VERSTEP_LM96000_1:
1495 		case LM85_VERSTEP_LM96000_2:
1496 			/* Check for Winbond WPCD377I */
1497 			if (lm85_is_fake(client)) {
1498 				dev_dbg(&adapter->dev,
1499 					"Found Winbond WPCD377I, ignoring\n");
1500 				return -ENODEV;
1501 			}
1502 			type_name = "lm96000";
1503 			break;
1504 		}
1505 	} else if (company == LM85_COMPANY_ANALOG_DEV) {
1506 		switch (verstep) {
1507 		case LM85_VERSTEP_ADM1027:
1508 			type_name = "adm1027";
1509 			break;
1510 		case LM85_VERSTEP_ADT7463:
1511 		case LM85_VERSTEP_ADT7463C:
1512 			type_name = "adt7463";
1513 			break;
1514 		case LM85_VERSTEP_ADT7468_1:
1515 		case LM85_VERSTEP_ADT7468_2:
1516 			type_name = "adt7468";
1517 			break;
1518 		}
1519 	} else if (company == LM85_COMPANY_SMSC) {
1520 		switch (verstep) {
1521 		case LM85_VERSTEP_EMC6D100_A0:
1522 		case LM85_VERSTEP_EMC6D100_A1:
1523 			/* Note: we can't tell a '100 from a '101 */
1524 			type_name = "emc6d100";
1525 			break;
1526 		case LM85_VERSTEP_EMC6D102:
1527 			type_name = "emc6d102";
1528 			break;
1529 		case LM85_VERSTEP_EMC6D103_A0:
1530 		case LM85_VERSTEP_EMC6D103_A1:
1531 			type_name = "emc6d103";
1532 			break;
1533 		case LM85_VERSTEP_EMC6D103S:
1534 			type_name = "emc6d103s";
1535 			break;
1536 		}
1537 	}
1538 
1539 	if (!type_name)
1540 		return -ENODEV;
1541 
1542 	strlcpy(info->type, type_name, I2C_NAME_SIZE);
1543 
1544 	return 0;
1545 }
1546 
1547 static int lm85_probe(struct i2c_client *client, const struct i2c_device_id *id)
1548 {
1549 	struct device *dev = &client->dev;
1550 	struct device *hwmon_dev;
1551 	struct lm85_data *data;
1552 	int idx = 0;
1553 
1554 	data = devm_kzalloc(dev, sizeof(struct lm85_data), GFP_KERNEL);
1555 	if (!data)
1556 		return -ENOMEM;
1557 
1558 	data->client = client;
1559 	if (client->dev.of_node)
1560 		data->type = (enum chips)of_device_get_match_data(&client->dev);
1561 	else
1562 		data->type = id->driver_data;
1563 	mutex_init(&data->update_lock);
1564 
1565 	/* Fill in the chip specific driver values */
1566 	switch (data->type) {
1567 	case adm1027:
1568 	case adt7463:
1569 	case adt7468:
1570 	case emc6d100:
1571 	case emc6d102:
1572 	case emc6d103:
1573 	case emc6d103s:
1574 		data->freq_map = adm1027_freq_map;
1575 		data->freq_map_size = ARRAY_SIZE(adm1027_freq_map);
1576 		break;
1577 	default:
1578 		data->freq_map = lm85_freq_map;
1579 		data->freq_map_size = ARRAY_SIZE(lm85_freq_map);
1580 	}
1581 
1582 	/* Set the VRM version */
1583 	data->vrm = vid_which_vrm();
1584 
1585 	/* Initialize the LM85 chip */
1586 	lm85_init_client(client);
1587 
1588 	/* sysfs hooks */
1589 	data->groups[idx++] = &lm85_group;
1590 
1591 	/* minctl and temp_off exist on all chips except emc6d103s */
1592 	if (data->type != emc6d103s) {
1593 		data->groups[idx++] = &lm85_group_minctl;
1594 		data->groups[idx++] = &lm85_group_temp_off;
1595 	}
1596 
1597 	/*
1598 	 * The ADT7463/68 have an optional VRM 10 mode where pin 21 is used
1599 	 * as a sixth digital VID input rather than an analog input.
1600 	 */
1601 	if (data->type == adt7463 || data->type == adt7468) {
1602 		u8 vid = lm85_read_value(client, LM85_REG_VID);
1603 		if (vid & 0x80)
1604 			data->has_vid5 = true;
1605 	}
1606 
1607 	if (!data->has_vid5)
1608 		data->groups[idx++] = &lm85_group_in4;
1609 
1610 	/* The EMC6D100 has 3 additional voltage inputs */
1611 	if (data->type == emc6d100)
1612 		data->groups[idx++] = &lm85_group_in567;
1613 
1614 	hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
1615 							   data, data->groups);
1616 	return PTR_ERR_OR_ZERO(hwmon_dev);
1617 }
1618 
1619 static const struct i2c_device_id lm85_id[] = {
1620 	{ "adm1027", adm1027 },
1621 	{ "adt7463", adt7463 },
1622 	{ "adt7468", adt7468 },
1623 	{ "lm85", lm85 },
1624 	{ "lm85b", lm85 },
1625 	{ "lm85c", lm85 },
1626 	{ "lm96000", lm96000 },
1627 	{ "emc6d100", emc6d100 },
1628 	{ "emc6d101", emc6d100 },
1629 	{ "emc6d102", emc6d102 },
1630 	{ "emc6d103", emc6d103 },
1631 	{ "emc6d103s", emc6d103s },
1632 	{ }
1633 };
1634 MODULE_DEVICE_TABLE(i2c, lm85_id);
1635 
1636 static const struct of_device_id lm85_of_match[] = {
1637 	{
1638 		.compatible = "adi,adm1027",
1639 		.data = (void *)adm1027
1640 	},
1641 	{
1642 		.compatible = "adi,adt7463",
1643 		.data = (void *)adt7463
1644 	},
1645 	{
1646 		.compatible = "adi,adt7468",
1647 		.data = (void *)adt7468
1648 	},
1649 	{
1650 		.compatible = "national,lm85",
1651 		.data = (void *)lm85
1652 	},
1653 	{
1654 		.compatible = "national,lm85b",
1655 		.data = (void *)lm85
1656 	},
1657 	{
1658 		.compatible = "national,lm85c",
1659 		.data = (void *)lm85
1660 	},
1661 	{
1662 		.compatible = "ti,lm96000",
1663 		.data = (void *)lm96000
1664 	},
1665 	{
1666 		.compatible = "smsc,emc6d100",
1667 		.data = (void *)emc6d100
1668 	},
1669 	{
1670 		.compatible = "smsc,emc6d101",
1671 		.data = (void *)emc6d100
1672 	},
1673 	{
1674 		.compatible = "smsc,emc6d102",
1675 		.data = (void *)emc6d102
1676 	},
1677 	{
1678 		.compatible = "smsc,emc6d103",
1679 		.data = (void *)emc6d103
1680 	},
1681 	{
1682 		.compatible = "smsc,emc6d103s",
1683 		.data = (void *)emc6d103s
1684 	},
1685 	{ },
1686 };
1687 MODULE_DEVICE_TABLE(of, lm85_of_match);
1688 
1689 static struct i2c_driver lm85_driver = {
1690 	.class		= I2C_CLASS_HWMON,
1691 	.driver = {
1692 		.name   = "lm85",
1693 		.of_match_table = of_match_ptr(lm85_of_match),
1694 	},
1695 	.probe		= lm85_probe,
1696 	.id_table	= lm85_id,
1697 	.detect		= lm85_detect,
1698 	.address_list	= normal_i2c,
1699 };
1700 
1701 module_i2c_driver(lm85_driver);
1702 
1703 MODULE_LICENSE("GPL");
1704 MODULE_AUTHOR("Philip Pokorny <ppokorny@penguincomputing.com>, "
1705 	"Margit Schubert-While <margitsw@t-online.de>, "
1706 	"Justin Thiessen <jthiessen@penguincomputing.com>");
1707 MODULE_DESCRIPTION("LM85-B, LM85-C driver");
1708