xref: /openbmc/linux/drivers/hwmon/abituguru.c (revision 8fa5723aa7e053d498336b48448b292fc2e0458b)
1 /*
2     abituguru.c Copyright (c) 2005-2006 Hans de Goede <j.w.r.degoede@hhs.nl>
3 
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8 
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13 
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 */
18 /*
19     This driver supports the sensor part of the first and second revision of
20     the custom Abit uGuru chip found on Abit uGuru motherboards. Note: because
21     of lack of specs the CPU/RAM voltage & frequency control is not supported!
22 */
23 #include <linux/module.h>
24 #include <linux/sched.h>
25 #include <linux/init.h>
26 #include <linux/slab.h>
27 #include <linux/jiffies.h>
28 #include <linux/mutex.h>
29 #include <linux/err.h>
30 #include <linux/delay.h>
31 #include <linux/platform_device.h>
32 #include <linux/hwmon.h>
33 #include <linux/hwmon-sysfs.h>
34 #include <linux/dmi.h>
35 #include <asm/io.h>
36 
37 /* Banks */
38 #define ABIT_UGURU_ALARM_BANK			0x20 /* 1x 3 bytes */
39 #define ABIT_UGURU_SENSOR_BANK1			0x21 /* 16x volt and temp */
40 #define ABIT_UGURU_FAN_PWM			0x24 /* 3x 5 bytes */
41 #define ABIT_UGURU_SENSOR_BANK2			0x26 /* fans */
42 /* max nr of sensors in bank1, a bank1 sensor can be in, temp or nc */
43 #define ABIT_UGURU_MAX_BANK1_SENSORS		16
44 /* Warning if you increase one of the 2 MAX defines below to 10 or higher you
45    should adjust the belonging _NAMES_LENGTH macro for the 2 digit number! */
46 /* max nr of sensors in bank2, currently mb's with max 6 fans are known */
47 #define ABIT_UGURU_MAX_BANK2_SENSORS		6
48 /* max nr of pwm outputs, currently mb's with max 5 pwm outputs are known */
49 #define ABIT_UGURU_MAX_PWMS			5
50 /* uGuru sensor bank 1 flags */			     /* Alarm if: */
51 #define ABIT_UGURU_TEMP_HIGH_ALARM_ENABLE	0x01 /*  temp over warn */
52 #define ABIT_UGURU_VOLT_HIGH_ALARM_ENABLE	0x02 /*  volt over max */
53 #define ABIT_UGURU_VOLT_LOW_ALARM_ENABLE	0x04 /*  volt under min */
54 #define ABIT_UGURU_TEMP_HIGH_ALARM_FLAG		0x10 /* temp is over warn */
55 #define ABIT_UGURU_VOLT_HIGH_ALARM_FLAG		0x20 /* volt is over max */
56 #define ABIT_UGURU_VOLT_LOW_ALARM_FLAG		0x40 /* volt is under min */
57 /* uGuru sensor bank 2 flags */			     /* Alarm if: */
58 #define ABIT_UGURU_FAN_LOW_ALARM_ENABLE		0x01 /*   fan under min */
59 /* uGuru sensor bank common flags */
60 #define ABIT_UGURU_BEEP_ENABLE			0x08 /* beep if alarm */
61 #define ABIT_UGURU_SHUTDOWN_ENABLE		0x80 /* shutdown if alarm */
62 /* uGuru fan PWM (speed control) flags */
63 #define ABIT_UGURU_FAN_PWM_ENABLE		0x80 /* enable speed control */
64 /* Values used for conversion */
65 #define ABIT_UGURU_FAN_MAX			15300 /* RPM */
66 /* Bank1 sensor types */
67 #define ABIT_UGURU_IN_SENSOR			0
68 #define ABIT_UGURU_TEMP_SENSOR			1
69 #define ABIT_UGURU_NC				2
70 /* In many cases we need to wait for the uGuru to reach a certain status, most
71    of the time it will reach this status within 30 - 90 ISA reads, and thus we
72    can best busy wait. This define gives the total amount of reads to try. */
73 #define ABIT_UGURU_WAIT_TIMEOUT			125
74 /* However sometimes older versions of the uGuru seem to be distracted and they
75    do not respond for a long time. To handle this we sleep before each of the
76    last ABIT_UGURU_WAIT_TIMEOUT_SLEEP tries. */
77 #define ABIT_UGURU_WAIT_TIMEOUT_SLEEP		5
78 /* Normally all expected status in abituguru_ready, are reported after the
79    first read, but sometimes not and we need to poll. */
80 #define ABIT_UGURU_READY_TIMEOUT		5
81 /* Maximum 3 retries on timedout reads/writes, delay 200 ms before retrying */
82 #define ABIT_UGURU_MAX_RETRIES			3
83 #define ABIT_UGURU_RETRY_DELAY			(HZ/5)
84 /* Maximum 2 timeouts in abituguru_update_device, iow 3 in a row is an error */
85 #define ABIT_UGURU_MAX_TIMEOUTS			2
86 /* utility macros */
87 #define ABIT_UGURU_NAME				"abituguru"
88 #define ABIT_UGURU_DEBUG(level, format, arg...)				\
89 	if (level <= verbose)						\
90 		printk(KERN_DEBUG ABIT_UGURU_NAME ": "	format , ## arg)
91 /* Macros to help calculate the sysfs_names array length */
92 /* sum of strlen of: in??_input\0, in??_{min,max}\0, in??_{min,max}_alarm\0,
93    in??_{min,max}_alarm_enable\0, in??_beep\0, in??_shutdown\0 */
94 #define ABITUGURU_IN_NAMES_LENGTH	(11 + 2 * 9 + 2 * 15 + 2 * 22 + 10 + 14)
95 /* sum of strlen of: temp??_input\0, temp??_max\0, temp??_crit\0,
96    temp??_alarm\0, temp??_alarm_enable\0, temp??_beep\0, temp??_shutdown\0 */
97 #define ABITUGURU_TEMP_NAMES_LENGTH	(13 + 11 + 12 + 13 + 20 + 12 + 16)
98 /* sum of strlen of: fan?_input\0, fan?_min\0, fan?_alarm\0,
99    fan?_alarm_enable\0, fan?_beep\0, fan?_shutdown\0 */
100 #define ABITUGURU_FAN_NAMES_LENGTH	(11 + 9 + 11 + 18 + 10 + 14)
101 /* sum of strlen of: pwm?_enable\0, pwm?_auto_channels_temp\0,
102    pwm?_auto_point{1,2}_pwm\0, pwm?_auto_point{1,2}_temp\0 */
103 #define ABITUGURU_PWM_NAMES_LENGTH	(12 + 24 + 2 * 21 + 2 * 22)
104 /* IN_NAMES_LENGTH > TEMP_NAMES_LENGTH so assume all bank1 sensors are in */
105 #define ABITUGURU_SYSFS_NAMES_LENGTH	( \
106 	ABIT_UGURU_MAX_BANK1_SENSORS * ABITUGURU_IN_NAMES_LENGTH + \
107 	ABIT_UGURU_MAX_BANK2_SENSORS * ABITUGURU_FAN_NAMES_LENGTH + \
108 	ABIT_UGURU_MAX_PWMS * ABITUGURU_PWM_NAMES_LENGTH)
109 
110 /* All the macros below are named identical to the oguru and oguru2 programs
111    reverse engineered by Olle Sandberg, hence the names might not be 100%
112    logical. I could come up with better names, but I prefer keeping the names
113    identical so that this driver can be compared with his work more easily. */
114 /* Two i/o-ports are used by uGuru */
115 #define ABIT_UGURU_BASE				0x00E0
116 /* Used to tell uGuru what to read and to read the actual data */
117 #define ABIT_UGURU_CMD				0x00
118 /* Mostly used to check if uGuru is busy */
119 #define ABIT_UGURU_DATA				0x04
120 #define ABIT_UGURU_REGION_LENGTH		5
121 /* uGuru status' */
122 #define ABIT_UGURU_STATUS_WRITE			0x00 /* Ready to be written */
123 #define ABIT_UGURU_STATUS_READ			0x01 /* Ready to be read */
124 #define ABIT_UGURU_STATUS_INPUT			0x08 /* More input */
125 #define ABIT_UGURU_STATUS_READY			0x09 /* Ready to be written */
126 
127 /* Constants */
128 /* in (Volt) sensors go up to 3494 mV, temp to 255000 millidegrees Celsius */
129 static const int abituguru_bank1_max_value[2] = { 3494, 255000 };
130 /* Min / Max allowed values for sensor2 (fan) alarm threshold, these values
131    correspond to 300-3000 RPM */
132 static const u8 abituguru_bank2_min_threshold = 5;
133 static const u8 abituguru_bank2_max_threshold = 50;
134 /* Register 0 is a bitfield, 1 and 2 are pwm settings (255 = 100%), 3 and 4
135    are temperature trip points. */
136 static const int abituguru_pwm_settings_multiplier[5] = { 0, 1, 1, 1000, 1000 };
137 /* Min / Max allowed values for pwm_settings. Note: pwm1 (CPU fan) is a
138    special case the minium allowed pwm% setting for this is 30% (77) on
139    some MB's this special case is handled in the code! */
140 static const u8 abituguru_pwm_min[5] = { 0, 170, 170, 25, 25 };
141 static const u8 abituguru_pwm_max[5] = { 0, 255, 255, 75, 75 };
142 
143 
144 /* Insmod parameters */
145 static int force;
146 module_param(force, bool, 0);
147 MODULE_PARM_DESC(force, "Set to one to force detection.");
148 static int bank1_types[ABIT_UGURU_MAX_BANK1_SENSORS] = { -1, -1, -1, -1, -1,
149 	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
150 module_param_array(bank1_types, int, NULL, 0);
151 MODULE_PARM_DESC(bank1_types, "Bank1 sensortype autodetection override:\n"
152 	"   -1 autodetect\n"
153 	"    0 volt sensor\n"
154 	"    1 temp sensor\n"
155 	"    2 not connected");
156 static int fan_sensors;
157 module_param(fan_sensors, int, 0);
158 MODULE_PARM_DESC(fan_sensors, "Number of fan sensors on the uGuru "
159 	"(0 = autodetect)");
160 static int pwms;
161 module_param(pwms, int, 0);
162 MODULE_PARM_DESC(pwms, "Number of PWMs on the uGuru "
163 	"(0 = autodetect)");
164 
165 /* Default verbose is 2, since this driver is still in the testing phase */
166 static int verbose = 2;
167 module_param(verbose, int, 0644);
168 MODULE_PARM_DESC(verbose, "How verbose should the driver be? (0-3):\n"
169 	"   0 normal output\n"
170 	"   1 + verbose error reporting\n"
171 	"   2 + sensors type probing info\n"
172 	"   3 + retryable error reporting");
173 
174 
175 /* For the Abit uGuru, we need to keep some data in memory.
176    The structure is dynamically allocated, at the same time when a new
177    abituguru device is allocated. */
178 struct abituguru_data {
179 	struct device *hwmon_dev;	/* hwmon registered device */
180 	struct mutex update_lock;	/* protect access to data and uGuru */
181 	unsigned long last_updated;	/* In jiffies */
182 	unsigned short addr;		/* uguru base address */
183 	char uguru_ready;		/* is the uguru in ready state? */
184 	unsigned char update_timeouts;	/* number of update timeouts since last
185 					   successful update */
186 
187 	/* The sysfs attr and their names are generated automatically, for bank1
188 	   we cannot use a predefined array because we don't know beforehand
189 	   of a sensor is a volt or a temp sensor, for bank2 and the pwms its
190 	   easier todo things the same way.  For in sensors we have 9 (temp 7)
191 	   sysfs entries per sensor, for bank2 and pwms 6. */
192 	struct sensor_device_attribute_2 sysfs_attr[
193 		ABIT_UGURU_MAX_BANK1_SENSORS * 9 +
194 		ABIT_UGURU_MAX_BANK2_SENSORS * 6 + ABIT_UGURU_MAX_PWMS * 6];
195 	/* Buffer to store the dynamically generated sysfs names */
196 	char sysfs_names[ABITUGURU_SYSFS_NAMES_LENGTH];
197 
198 	/* Bank 1 data */
199 	/* number of and addresses of [0] in, [1] temp sensors */
200 	u8 bank1_sensors[2];
201 	u8 bank1_address[2][ABIT_UGURU_MAX_BANK1_SENSORS];
202 	u8 bank1_value[ABIT_UGURU_MAX_BANK1_SENSORS];
203 	/* This array holds 3 entries per sensor for the bank 1 sensor settings
204 	   (flags, min, max for voltage / flags, warn, shutdown for temp). */
205 	u8 bank1_settings[ABIT_UGURU_MAX_BANK1_SENSORS][3];
206 	/* Maximum value for each sensor used for scaling in mV/millidegrees
207 	   Celsius. */
208 	int bank1_max_value[ABIT_UGURU_MAX_BANK1_SENSORS];
209 
210 	/* Bank 2 data, ABIT_UGURU_MAX_BANK2_SENSORS entries for bank2 */
211 	u8 bank2_sensors; /* actual number of bank2 sensors found */
212 	u8 bank2_value[ABIT_UGURU_MAX_BANK2_SENSORS];
213 	u8 bank2_settings[ABIT_UGURU_MAX_BANK2_SENSORS][2]; /* flags, min */
214 
215 	/* Alarms 2 bytes for bank1, 1 byte for bank2 */
216 	u8 alarms[3];
217 
218 	/* Fan PWM (speed control) 5 bytes per PWM */
219 	u8 pwms; /* actual number of pwms found */
220 	u8 pwm_settings[ABIT_UGURU_MAX_PWMS][5];
221 };
222 
223 /* wait till the uguru is in the specified state */
224 static int abituguru_wait(struct abituguru_data *data, u8 state)
225 {
226 	int timeout = ABIT_UGURU_WAIT_TIMEOUT;
227 
228 	while (inb_p(data->addr + ABIT_UGURU_DATA) != state) {
229 		timeout--;
230 		if (timeout == 0)
231 			return -EBUSY;
232 		/* sleep a bit before our last few tries, see the comment on
233 		   this where ABIT_UGURU_WAIT_TIMEOUT_SLEEP is defined. */
234 		if (timeout <= ABIT_UGURU_WAIT_TIMEOUT_SLEEP)
235 			msleep(0);
236 	}
237 	return 0;
238 }
239 
240 /* Put the uguru in ready for input state */
241 static int abituguru_ready(struct abituguru_data *data)
242 {
243 	int timeout = ABIT_UGURU_READY_TIMEOUT;
244 
245 	if (data->uguru_ready)
246 		return 0;
247 
248 	/* Reset? / Prepare for next read/write cycle */
249 	outb(0x00, data->addr + ABIT_UGURU_DATA);
250 
251 	/* Wait till the uguru is ready */
252 	if (abituguru_wait(data, ABIT_UGURU_STATUS_READY)) {
253 		ABIT_UGURU_DEBUG(1,
254 			"timeout exceeded waiting for ready state\n");
255 		return -EIO;
256 	}
257 
258 	/* Cmd port MUST be read now and should contain 0xAC */
259 	while (inb_p(data->addr + ABIT_UGURU_CMD) != 0xAC) {
260 		timeout--;
261 		if (timeout == 0) {
262 			ABIT_UGURU_DEBUG(1,
263 			   "CMD reg does not hold 0xAC after ready command\n");
264 			return -EIO;
265 		}
266 		msleep(0);
267 	}
268 
269 	/* After this the ABIT_UGURU_DATA port should contain
270 	   ABIT_UGURU_STATUS_INPUT */
271 	timeout = ABIT_UGURU_READY_TIMEOUT;
272 	while (inb_p(data->addr + ABIT_UGURU_DATA) != ABIT_UGURU_STATUS_INPUT) {
273 		timeout--;
274 		if (timeout == 0) {
275 			ABIT_UGURU_DEBUG(1,
276 				"state != more input after ready command\n");
277 			return -EIO;
278 		}
279 		msleep(0);
280 	}
281 
282 	data->uguru_ready = 1;
283 	return 0;
284 }
285 
286 /* Send the bank and then sensor address to the uGuru for the next read/write
287    cycle. This function gets called as the first part of a read/write by
288    abituguru_read and abituguru_write. This function should never be
289    called by any other function. */
290 static int abituguru_send_address(struct abituguru_data *data,
291 	u8 bank_addr, u8 sensor_addr, int retries)
292 {
293 	/* assume the caller does error handling itself if it has not requested
294 	   any retries, and thus be quiet. */
295 	int report_errors = retries;
296 
297 	for (;;) {
298 		/* Make sure the uguru is ready and then send the bank address,
299 		   after this the uguru is no longer "ready". */
300 		if (abituguru_ready(data) != 0)
301 			return -EIO;
302 		outb(bank_addr, data->addr + ABIT_UGURU_DATA);
303 		data->uguru_ready = 0;
304 
305 		/* Wait till the uguru is ABIT_UGURU_STATUS_INPUT state again
306 		   and send the sensor addr */
307 		if (abituguru_wait(data, ABIT_UGURU_STATUS_INPUT)) {
308 			if (retries) {
309 				ABIT_UGURU_DEBUG(3, "timeout exceeded "
310 					"waiting for more input state, %d "
311 					"tries remaining\n", retries);
312 				set_current_state(TASK_UNINTERRUPTIBLE);
313 				schedule_timeout(ABIT_UGURU_RETRY_DELAY);
314 				retries--;
315 				continue;
316 			}
317 			if (report_errors)
318 				ABIT_UGURU_DEBUG(1, "timeout exceeded "
319 					"waiting for more input state "
320 					"(bank: %d)\n", (int)bank_addr);
321 			return -EBUSY;
322 		}
323 		outb(sensor_addr, data->addr + ABIT_UGURU_CMD);
324 		return 0;
325 	}
326 }
327 
328 /* Read count bytes from sensor sensor_addr in bank bank_addr and store the
329    result in buf, retry the send address part of the read retries times. */
330 static int abituguru_read(struct abituguru_data *data,
331 	u8 bank_addr, u8 sensor_addr, u8 *buf, int count, int retries)
332 {
333 	int i;
334 
335 	/* Send the address */
336 	i = abituguru_send_address(data, bank_addr, sensor_addr, retries);
337 	if (i)
338 		return i;
339 
340 	/* And read the data */
341 	for (i = 0; i < count; i++) {
342 		if (abituguru_wait(data, ABIT_UGURU_STATUS_READ)) {
343 			ABIT_UGURU_DEBUG(retries ? 1 : 3,
344 				"timeout exceeded waiting for "
345 				"read state (bank: %d, sensor: %d)\n",
346 				(int)bank_addr, (int)sensor_addr);
347 			break;
348 		}
349 		buf[i] = inb(data->addr + ABIT_UGURU_CMD);
350 	}
351 
352 	/* Last put the chip back in ready state */
353 	abituguru_ready(data);
354 
355 	return i;
356 }
357 
358 /* Write count bytes from buf to sensor sensor_addr in bank bank_addr, the send
359    address part of the write is always retried ABIT_UGURU_MAX_RETRIES times. */
360 static int abituguru_write(struct abituguru_data *data,
361 	u8 bank_addr, u8 sensor_addr, u8 *buf, int count)
362 {
363 	/* We use the ready timeout as we have to wait for 0xAC just like the
364 	   ready function */
365 	int i, timeout = ABIT_UGURU_READY_TIMEOUT;
366 
367 	/* Send the address */
368 	i = abituguru_send_address(data, bank_addr, sensor_addr,
369 		ABIT_UGURU_MAX_RETRIES);
370 	if (i)
371 		return i;
372 
373 	/* And write the data */
374 	for (i = 0; i < count; i++) {
375 		if (abituguru_wait(data, ABIT_UGURU_STATUS_WRITE)) {
376 			ABIT_UGURU_DEBUG(1, "timeout exceeded waiting for "
377 				"write state (bank: %d, sensor: %d)\n",
378 				(int)bank_addr, (int)sensor_addr);
379 			break;
380 		}
381 		outb(buf[i], data->addr + ABIT_UGURU_CMD);
382 	}
383 
384 	/* Now we need to wait till the chip is ready to be read again,
385 	   so that we can read 0xAC as confirmation that our write has
386 	   succeeded. */
387 	if (abituguru_wait(data, ABIT_UGURU_STATUS_READ)) {
388 		ABIT_UGURU_DEBUG(1, "timeout exceeded waiting for read state "
389 			"after write (bank: %d, sensor: %d)\n", (int)bank_addr,
390 			(int)sensor_addr);
391 		return -EIO;
392 	}
393 
394 	/* Cmd port MUST be read now and should contain 0xAC */
395 	while (inb_p(data->addr + ABIT_UGURU_CMD) != 0xAC) {
396 		timeout--;
397 		if (timeout == 0) {
398 			ABIT_UGURU_DEBUG(1, "CMD reg does not hold 0xAC after "
399 				"write (bank: %d, sensor: %d)\n",
400 				(int)bank_addr, (int)sensor_addr);
401 			return -EIO;
402 		}
403 		msleep(0);
404 	}
405 
406 	/* Last put the chip back in ready state */
407 	abituguru_ready(data);
408 
409 	return i;
410 }
411 
412 /* Detect sensor type. Temp and Volt sensors are enabled with
413    different masks and will ignore enable masks not meant for them.
414    This enables us to test what kind of sensor we're dealing with.
415    By setting the alarm thresholds so that we will always get an
416    alarm for sensor type X and then enabling the sensor as sensor type
417    X, if we then get an alarm it is a sensor of type X. */
418 static int __devinit
419 abituguru_detect_bank1_sensor_type(struct abituguru_data *data,
420 				   u8 sensor_addr)
421 {
422 	u8 val, test_flag, buf[3];
423 	int i, ret = -ENODEV; /* error is the most common used retval :| */
424 
425 	/* If overriden by the user return the user selected type */
426 	if (bank1_types[sensor_addr] >= ABIT_UGURU_IN_SENSOR &&
427 			bank1_types[sensor_addr] <= ABIT_UGURU_NC) {
428 		ABIT_UGURU_DEBUG(2, "assuming sensor type %d for bank1 sensor "
429 			"%d because of \"bank1_types\" module param\n",
430 			bank1_types[sensor_addr], (int)sensor_addr);
431 		return bank1_types[sensor_addr];
432 	}
433 
434 	/* First read the sensor and the current settings */
435 	if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1, sensor_addr, &val,
436 			1, ABIT_UGURU_MAX_RETRIES) != 1)
437 		return -ENODEV;
438 
439 	/* Test val is sane / usable for sensor type detection. */
440 	if ((val < 10u) || (val > 250u)) {
441 		printk(KERN_WARNING ABIT_UGURU_NAME
442 			": bank1-sensor: %d reading (%d) too close to limits, "
443 			"unable to determine sensor type, skipping sensor\n",
444 			(int)sensor_addr, (int)val);
445 		/* assume no sensor is there for sensors for which we can't
446 		   determine the sensor type because their reading is too close
447 		   to their limits, this usually means no sensor is there. */
448 		return ABIT_UGURU_NC;
449 	}
450 
451 	ABIT_UGURU_DEBUG(2, "testing bank1 sensor %d\n", (int)sensor_addr);
452 	/* Volt sensor test, enable volt low alarm, set min value ridicously
453 	   high, or vica versa if the reading is very high. If its a volt
454 	   sensor this should always give us an alarm. */
455 	if (val <= 240u) {
456 		buf[0] = ABIT_UGURU_VOLT_LOW_ALARM_ENABLE;
457 		buf[1] = 245;
458 		buf[2] = 250;
459 		test_flag = ABIT_UGURU_VOLT_LOW_ALARM_FLAG;
460 	} else {
461 		buf[0] = ABIT_UGURU_VOLT_HIGH_ALARM_ENABLE;
462 		buf[1] = 5;
463 		buf[2] = 10;
464 		test_flag = ABIT_UGURU_VOLT_HIGH_ALARM_FLAG;
465 	}
466 
467 	if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2, sensor_addr,
468 			buf, 3) != 3)
469 		goto abituguru_detect_bank1_sensor_type_exit;
470 	/* Now we need 20 ms to give the uguru time to read the sensors
471 	   and raise a voltage alarm */
472 	set_current_state(TASK_UNINTERRUPTIBLE);
473 	schedule_timeout(HZ/50);
474 	/* Check for alarm and check the alarm is a volt low alarm. */
475 	if (abituguru_read(data, ABIT_UGURU_ALARM_BANK, 0, buf, 3,
476 			ABIT_UGURU_MAX_RETRIES) != 3)
477 		goto abituguru_detect_bank1_sensor_type_exit;
478 	if (buf[sensor_addr/8] & (0x01 << (sensor_addr % 8))) {
479 		if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1 + 1,
480 				sensor_addr, buf, 3,
481 				ABIT_UGURU_MAX_RETRIES) != 3)
482 			goto abituguru_detect_bank1_sensor_type_exit;
483 		if (buf[0] & test_flag) {
484 			ABIT_UGURU_DEBUG(2, "  found volt sensor\n");
485 			ret = ABIT_UGURU_IN_SENSOR;
486 			goto abituguru_detect_bank1_sensor_type_exit;
487 		} else
488 			ABIT_UGURU_DEBUG(2, "  alarm raised during volt "
489 				"sensor test, but volt range flag not set\n");
490 	} else
491 		ABIT_UGURU_DEBUG(2, "  alarm not raised during volt sensor "
492 			"test\n");
493 
494 	/* Temp sensor test, enable sensor as a temp sensor, set beep value
495 	   ridicously low (but not too low, otherwise uguru ignores it).
496 	   If its a temp sensor this should always give us an alarm. */
497 	buf[0] = ABIT_UGURU_TEMP_HIGH_ALARM_ENABLE;
498 	buf[1] = 5;
499 	buf[2] = 10;
500 	if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2, sensor_addr,
501 			buf, 3) != 3)
502 		goto abituguru_detect_bank1_sensor_type_exit;
503 	/* Now we need 50 ms to give the uguru time to read the sensors
504 	   and raise a temp alarm */
505 	set_current_state(TASK_UNINTERRUPTIBLE);
506 	schedule_timeout(HZ/20);
507 	/* Check for alarm and check the alarm is a temp high alarm. */
508 	if (abituguru_read(data, ABIT_UGURU_ALARM_BANK, 0, buf, 3,
509 			ABIT_UGURU_MAX_RETRIES) != 3)
510 		goto abituguru_detect_bank1_sensor_type_exit;
511 	if (buf[sensor_addr/8] & (0x01 << (sensor_addr % 8))) {
512 		if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1 + 1,
513 				sensor_addr, buf, 3,
514 				ABIT_UGURU_MAX_RETRIES) != 3)
515 			goto abituguru_detect_bank1_sensor_type_exit;
516 		if (buf[0] & ABIT_UGURU_TEMP_HIGH_ALARM_FLAG) {
517 			ABIT_UGURU_DEBUG(2, "  found temp sensor\n");
518 			ret = ABIT_UGURU_TEMP_SENSOR;
519 			goto abituguru_detect_bank1_sensor_type_exit;
520 		} else
521 			ABIT_UGURU_DEBUG(2, "  alarm raised during temp "
522 				"sensor test, but temp high flag not set\n");
523 	} else
524 		ABIT_UGURU_DEBUG(2, "  alarm not raised during temp sensor "
525 			"test\n");
526 
527 	ret = ABIT_UGURU_NC;
528 abituguru_detect_bank1_sensor_type_exit:
529 	/* Restore original settings, failing here is really BAD, it has been
530 	   reported that some BIOS-es hang when entering the uGuru menu with
531 	   invalid settings present in the uGuru, so we try this 3 times. */
532 	for (i = 0; i < 3; i++)
533 		if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2,
534 				sensor_addr, data->bank1_settings[sensor_addr],
535 				3) == 3)
536 			break;
537 	if (i == 3) {
538 		printk(KERN_ERR ABIT_UGURU_NAME
539 			": Fatal error could not restore original settings. "
540 			"This should never happen please report this to the "
541 			"abituguru maintainer (see MAINTAINERS)\n");
542 		return -ENODEV;
543 	}
544 	return ret;
545 }
546 
547 /* These functions try to find out how many sensors there are in bank2 and how
548    many pwms there are. The purpose of this is to make sure that we don't give
549    the user the possibility to change settings for non-existent sensors / pwm.
550    The uGuru will happily read / write whatever memory happens to be after the
551    memory storing the PWM settings when reading/writing to a PWM which is not
552    there. Notice even if we detect a PWM which doesn't exist we normally won't
553    write to it, unless the user tries to change the settings.
554 
555    Although the uGuru allows reading (settings) from non existing bank2
556    sensors, my version of the uGuru does seem to stop writing to them, the
557    write function above aborts in this case with:
558    "CMD reg does not hold 0xAC after write"
559 
560    Notice these 2 tests are non destructive iow read-only tests, otherwise
561    they would defeat their purpose. Although for the bank2_sensors detection a
562    read/write test would be feasible because of the reaction above, I've
563    however opted to stay on the safe side. */
564 static void __devinit
565 abituguru_detect_no_bank2_sensors(struct abituguru_data *data)
566 {
567 	int i;
568 
569 	if (fan_sensors > 0 && fan_sensors <= ABIT_UGURU_MAX_BANK2_SENSORS) {
570 		data->bank2_sensors = fan_sensors;
571 		ABIT_UGURU_DEBUG(2, "assuming %d fan sensors because of "
572 			"\"fan_sensors\" module param\n",
573 			(int)data->bank2_sensors);
574 		return;
575 	}
576 
577 	ABIT_UGURU_DEBUG(2, "detecting number of fan sensors\n");
578 	for (i = 0; i < ABIT_UGURU_MAX_BANK2_SENSORS; i++) {
579 		/* 0x89 are the known used bits:
580 		   -0x80 enable shutdown
581 		   -0x08 enable beep
582 		   -0x01 enable alarm
583 		   All other bits should be 0, but on some motherboards
584 		   0x40 (bit 6) is also high for some of the fans?? */
585 		if (data->bank2_settings[i][0] & ~0xC9) {
586 			ABIT_UGURU_DEBUG(2, "  bank2 sensor %d does not seem "
587 				"to be a fan sensor: settings[0] = %02X\n",
588 				i, (unsigned int)data->bank2_settings[i][0]);
589 			break;
590 		}
591 
592 		/* check if the threshold is within the allowed range */
593 		if (data->bank2_settings[i][1] <
594 				abituguru_bank2_min_threshold) {
595 			ABIT_UGURU_DEBUG(2, "  bank2 sensor %d does not seem "
596 				"to be a fan sensor: the threshold (%d) is "
597 				"below the minimum (%d)\n", i,
598 				(int)data->bank2_settings[i][1],
599 				(int)abituguru_bank2_min_threshold);
600 			break;
601 		}
602 		if (data->bank2_settings[i][1] >
603 				abituguru_bank2_max_threshold) {
604 			ABIT_UGURU_DEBUG(2, "  bank2 sensor %d does not seem "
605 				"to be a fan sensor: the threshold (%d) is "
606 				"above the maximum (%d)\n", i,
607 				(int)data->bank2_settings[i][1],
608 				(int)abituguru_bank2_max_threshold);
609 			break;
610 		}
611 	}
612 
613 	data->bank2_sensors = i;
614 	ABIT_UGURU_DEBUG(2, " found: %d fan sensors\n",
615 		(int)data->bank2_sensors);
616 }
617 
618 static void __devinit
619 abituguru_detect_no_pwms(struct abituguru_data *data)
620 {
621 	int i, j;
622 
623 	if (pwms > 0 && pwms <= ABIT_UGURU_MAX_PWMS) {
624 		data->pwms = pwms;
625 		ABIT_UGURU_DEBUG(2, "assuming %d PWM outputs because of "
626 			"\"pwms\" module param\n", (int)data->pwms);
627 		return;
628 	}
629 
630 	ABIT_UGURU_DEBUG(2, "detecting number of PWM outputs\n");
631 	for (i = 0; i < ABIT_UGURU_MAX_PWMS; i++) {
632 		/* 0x80 is the enable bit and the low
633 		   nibble is which temp sensor to use,
634 		   the other bits should be 0 */
635 		if (data->pwm_settings[i][0] & ~0x8F) {
636 			ABIT_UGURU_DEBUG(2, "  pwm channel %d does not seem "
637 				"to be a pwm channel: settings[0] = %02X\n",
638 				i, (unsigned int)data->pwm_settings[i][0]);
639 			break;
640 		}
641 
642 		/* the low nibble must correspond to one of the temp sensors
643 		   we've found */
644 		for (j = 0; j < data->bank1_sensors[ABIT_UGURU_TEMP_SENSOR];
645 				j++) {
646 			if (data->bank1_address[ABIT_UGURU_TEMP_SENSOR][j] ==
647 					(data->pwm_settings[i][0] & 0x0F))
648 				break;
649 		}
650 		if (j == data->bank1_sensors[ABIT_UGURU_TEMP_SENSOR]) {
651 			ABIT_UGURU_DEBUG(2, "  pwm channel %d does not seem "
652 				"to be a pwm channel: %d is not a valid temp "
653 				"sensor address\n", i,
654 				data->pwm_settings[i][0] & 0x0F);
655 			break;
656 		}
657 
658 		/* check if all other settings are within the allowed range */
659 		for (j = 1; j < 5; j++) {
660 			u8 min;
661 			/* special case pwm1 min pwm% */
662 			if ((i == 0) && ((j == 1) || (j == 2)))
663 				min = 77;
664 			else
665 				min = abituguru_pwm_min[j];
666 			if (data->pwm_settings[i][j] < min) {
667 				ABIT_UGURU_DEBUG(2, "  pwm channel %d does "
668 					"not seem to be a pwm channel: "
669 					"setting %d (%d) is below the minimum "
670 					"value (%d)\n", i, j,
671 					(int)data->pwm_settings[i][j],
672 					(int)min);
673 				goto abituguru_detect_no_pwms_exit;
674 			}
675 			if (data->pwm_settings[i][j] > abituguru_pwm_max[j]) {
676 				ABIT_UGURU_DEBUG(2, "  pwm channel %d does "
677 					"not seem to be a pwm channel: "
678 					"setting %d (%d) is above the maximum "
679 					"value (%d)\n", i, j,
680 					(int)data->pwm_settings[i][j],
681 					(int)abituguru_pwm_max[j]);
682 				goto abituguru_detect_no_pwms_exit;
683 			}
684 		}
685 
686 		/* check that min temp < max temp and min pwm < max pwm */
687 		if (data->pwm_settings[i][1] >= data->pwm_settings[i][2]) {
688 			ABIT_UGURU_DEBUG(2, "  pwm channel %d does not seem "
689 				"to be a pwm channel: min pwm (%d) >= "
690 				"max pwm (%d)\n", i,
691 				(int)data->pwm_settings[i][1],
692 				(int)data->pwm_settings[i][2]);
693 			break;
694 		}
695 		if (data->pwm_settings[i][3] >= data->pwm_settings[i][4]) {
696 			ABIT_UGURU_DEBUG(2, "  pwm channel %d does not seem "
697 				"to be a pwm channel: min temp (%d) >= "
698 				"max temp (%d)\n", i,
699 				(int)data->pwm_settings[i][3],
700 				(int)data->pwm_settings[i][4]);
701 			break;
702 		}
703 	}
704 
705 abituguru_detect_no_pwms_exit:
706 	data->pwms = i;
707 	ABIT_UGURU_DEBUG(2, " found: %d PWM outputs\n", (int)data->pwms);
708 }
709 
710 /* Following are the sysfs callback functions. These functions expect:
711    sensor_device_attribute_2->index:   sensor address/offset in the bank
712    sensor_device_attribute_2->nr:      register offset, bitmask or NA. */
713 static struct abituguru_data *abituguru_update_device(struct device *dev);
714 
715 static ssize_t show_bank1_value(struct device *dev,
716 	struct device_attribute *devattr, char *buf)
717 {
718 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
719 	struct abituguru_data *data = abituguru_update_device(dev);
720 	if (!data)
721 		return -EIO;
722 	return sprintf(buf, "%d\n", (data->bank1_value[attr->index] *
723 		data->bank1_max_value[attr->index] + 128) / 255);
724 }
725 
726 static ssize_t show_bank1_setting(struct device *dev,
727 	struct device_attribute *devattr, char *buf)
728 {
729 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
730 	struct abituguru_data *data = dev_get_drvdata(dev);
731 	return sprintf(buf, "%d\n",
732 		(data->bank1_settings[attr->index][attr->nr] *
733 		data->bank1_max_value[attr->index] + 128) / 255);
734 }
735 
736 static ssize_t show_bank2_value(struct device *dev,
737 	struct device_attribute *devattr, char *buf)
738 {
739 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
740 	struct abituguru_data *data = abituguru_update_device(dev);
741 	if (!data)
742 		return -EIO;
743 	return sprintf(buf, "%d\n", (data->bank2_value[attr->index] *
744 		ABIT_UGURU_FAN_MAX + 128) / 255);
745 }
746 
747 static ssize_t show_bank2_setting(struct device *dev,
748 	struct device_attribute *devattr, char *buf)
749 {
750 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
751 	struct abituguru_data *data = dev_get_drvdata(dev);
752 	return sprintf(buf, "%d\n",
753 		(data->bank2_settings[attr->index][attr->nr] *
754 		ABIT_UGURU_FAN_MAX + 128) / 255);
755 }
756 
757 static ssize_t store_bank1_setting(struct device *dev, struct device_attribute
758 	*devattr, const char *buf, size_t count)
759 {
760 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
761 	struct abituguru_data *data = dev_get_drvdata(dev);
762 	u8 val = (simple_strtoul(buf, NULL, 10) * 255 +
763 		data->bank1_max_value[attr->index]/2) /
764 		data->bank1_max_value[attr->index];
765 	ssize_t ret = count;
766 
767 	mutex_lock(&data->update_lock);
768 	if (data->bank1_settings[attr->index][attr->nr] != val) {
769 		u8 orig_val = data->bank1_settings[attr->index][attr->nr];
770 		data->bank1_settings[attr->index][attr->nr] = val;
771 		if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2,
772 				attr->index, data->bank1_settings[attr->index],
773 				3) <= attr->nr) {
774 			data->bank1_settings[attr->index][attr->nr] = orig_val;
775 			ret = -EIO;
776 		}
777 	}
778 	mutex_unlock(&data->update_lock);
779 	return ret;
780 }
781 
782 static ssize_t store_bank2_setting(struct device *dev, struct device_attribute
783 	*devattr, const char *buf, size_t count)
784 {
785 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
786 	struct abituguru_data *data = dev_get_drvdata(dev);
787 	u8 val = (simple_strtoul(buf, NULL, 10)*255 + ABIT_UGURU_FAN_MAX/2) /
788 		ABIT_UGURU_FAN_MAX;
789 	ssize_t ret = count;
790 
791 	/* this check can be done before taking the lock */
792 	if ((val < abituguru_bank2_min_threshold) ||
793 			(val > abituguru_bank2_max_threshold))
794 		return -EINVAL;
795 
796 	mutex_lock(&data->update_lock);
797 	if (data->bank2_settings[attr->index][attr->nr] != val) {
798 		u8 orig_val = data->bank2_settings[attr->index][attr->nr];
799 		data->bank2_settings[attr->index][attr->nr] = val;
800 		if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK2 + 2,
801 				attr->index, data->bank2_settings[attr->index],
802 				2) <= attr->nr) {
803 			data->bank2_settings[attr->index][attr->nr] = orig_val;
804 			ret = -EIO;
805 		}
806 	}
807 	mutex_unlock(&data->update_lock);
808 	return ret;
809 }
810 
811 static ssize_t show_bank1_alarm(struct device *dev,
812 	struct device_attribute *devattr, char *buf)
813 {
814 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
815 	struct abituguru_data *data = abituguru_update_device(dev);
816 	if (!data)
817 		return -EIO;
818 	/* See if the alarm bit for this sensor is set, and if the
819 	   alarm matches the type of alarm we're looking for (for volt
820 	   it can be either low or high). The type is stored in a few
821 	   readonly bits in the settings part of the relevant sensor.
822 	   The bitmask of the type is passed to us in attr->nr. */
823 	if ((data->alarms[attr->index / 8] & (0x01 << (attr->index % 8))) &&
824 			(data->bank1_settings[attr->index][0] & attr->nr))
825 		return sprintf(buf, "1\n");
826 	else
827 		return sprintf(buf, "0\n");
828 }
829 
830 static ssize_t show_bank2_alarm(struct device *dev,
831 	struct device_attribute *devattr, char *buf)
832 {
833 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
834 	struct abituguru_data *data = abituguru_update_device(dev);
835 	if (!data)
836 		return -EIO;
837 	if (data->alarms[2] & (0x01 << attr->index))
838 		return sprintf(buf, "1\n");
839 	else
840 		return sprintf(buf, "0\n");
841 }
842 
843 static ssize_t show_bank1_mask(struct device *dev,
844 	struct device_attribute *devattr, char *buf)
845 {
846 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
847 	struct abituguru_data *data = dev_get_drvdata(dev);
848 	if (data->bank1_settings[attr->index][0] & attr->nr)
849 		return sprintf(buf, "1\n");
850 	else
851 		return sprintf(buf, "0\n");
852 }
853 
854 static ssize_t show_bank2_mask(struct device *dev,
855 	struct device_attribute *devattr, char *buf)
856 {
857 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
858 	struct abituguru_data *data = dev_get_drvdata(dev);
859 	if (data->bank2_settings[attr->index][0] & attr->nr)
860 		return sprintf(buf, "1\n");
861 	else
862 		return sprintf(buf, "0\n");
863 }
864 
865 static ssize_t store_bank1_mask(struct device *dev,
866 	struct device_attribute *devattr, const char *buf, size_t count)
867 {
868 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
869 	struct abituguru_data *data = dev_get_drvdata(dev);
870 	int mask = simple_strtoul(buf, NULL, 10);
871 	ssize_t ret = count;
872 	u8 orig_val;
873 
874 	mutex_lock(&data->update_lock);
875 	orig_val = data->bank1_settings[attr->index][0];
876 
877 	if (mask)
878 		data->bank1_settings[attr->index][0] |= attr->nr;
879 	else
880 		data->bank1_settings[attr->index][0] &= ~attr->nr;
881 
882 	if ((data->bank1_settings[attr->index][0] != orig_val) &&
883 			(abituguru_write(data,
884 			ABIT_UGURU_SENSOR_BANK1 + 2, attr->index,
885 			data->bank1_settings[attr->index], 3) < 1)) {
886 		data->bank1_settings[attr->index][0] = orig_val;
887 		ret = -EIO;
888 	}
889 	mutex_unlock(&data->update_lock);
890 	return ret;
891 }
892 
893 static ssize_t store_bank2_mask(struct device *dev,
894 	struct device_attribute *devattr, const char *buf, size_t count)
895 {
896 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
897 	struct abituguru_data *data = dev_get_drvdata(dev);
898 	int mask = simple_strtoul(buf, NULL, 10);
899 	ssize_t ret = count;
900 	u8 orig_val;
901 
902 	mutex_lock(&data->update_lock);
903 	orig_val = data->bank2_settings[attr->index][0];
904 
905 	if (mask)
906 		data->bank2_settings[attr->index][0] |= attr->nr;
907 	else
908 		data->bank2_settings[attr->index][0] &= ~attr->nr;
909 
910 	if ((data->bank2_settings[attr->index][0] != orig_val) &&
911 			(abituguru_write(data,
912 			ABIT_UGURU_SENSOR_BANK2 + 2, attr->index,
913 			data->bank2_settings[attr->index], 2) < 1)) {
914 		data->bank2_settings[attr->index][0] = orig_val;
915 		ret = -EIO;
916 	}
917 	mutex_unlock(&data->update_lock);
918 	return ret;
919 }
920 
921 /* Fan PWM (speed control) */
922 static ssize_t show_pwm_setting(struct device *dev,
923 	struct device_attribute *devattr, char *buf)
924 {
925 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
926 	struct abituguru_data *data = dev_get_drvdata(dev);
927 	return sprintf(buf, "%d\n", data->pwm_settings[attr->index][attr->nr] *
928 		abituguru_pwm_settings_multiplier[attr->nr]);
929 }
930 
931 static ssize_t store_pwm_setting(struct device *dev, struct device_attribute
932 	*devattr, const char *buf, size_t count)
933 {
934 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
935 	struct abituguru_data *data = dev_get_drvdata(dev);
936 	u8 min, val = (simple_strtoul(buf, NULL, 10) +
937 		abituguru_pwm_settings_multiplier[attr->nr]/2) /
938 		abituguru_pwm_settings_multiplier[attr->nr];
939 	ssize_t ret = count;
940 
941 	/* special case pwm1 min pwm% */
942 	if ((attr->index == 0) && ((attr->nr == 1) || (attr->nr == 2)))
943 		min = 77;
944 	else
945 		min = abituguru_pwm_min[attr->nr];
946 
947 	/* this check can be done before taking the lock */
948 	if ((val < min) || (val > abituguru_pwm_max[attr->nr]))
949 		return -EINVAL;
950 
951 	mutex_lock(&data->update_lock);
952 	/* this check needs to be done after taking the lock */
953 	if ((attr->nr & 1) &&
954 			(val >= data->pwm_settings[attr->index][attr->nr + 1]))
955 		ret = -EINVAL;
956 	else if (!(attr->nr & 1) &&
957 			(val <= data->pwm_settings[attr->index][attr->nr - 1]))
958 		ret = -EINVAL;
959 	else if (data->pwm_settings[attr->index][attr->nr] != val) {
960 		u8 orig_val = data->pwm_settings[attr->index][attr->nr];
961 		data->pwm_settings[attr->index][attr->nr] = val;
962 		if (abituguru_write(data, ABIT_UGURU_FAN_PWM + 1,
963 				attr->index, data->pwm_settings[attr->index],
964 				5) <= attr->nr) {
965 			data->pwm_settings[attr->index][attr->nr] =
966 				orig_val;
967 			ret = -EIO;
968 		}
969 	}
970 	mutex_unlock(&data->update_lock);
971 	return ret;
972 }
973 
974 static ssize_t show_pwm_sensor(struct device *dev,
975 	struct device_attribute *devattr, char *buf)
976 {
977 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
978 	struct abituguru_data *data = dev_get_drvdata(dev);
979 	int i;
980 	/* We need to walk to the temp sensor addresses to find what
981 	   the userspace id of the configured temp sensor is. */
982 	for (i = 0; i < data->bank1_sensors[ABIT_UGURU_TEMP_SENSOR]; i++)
983 		if (data->bank1_address[ABIT_UGURU_TEMP_SENSOR][i] ==
984 				(data->pwm_settings[attr->index][0] & 0x0F))
985 			return sprintf(buf, "%d\n", i+1);
986 
987 	return -ENXIO;
988 }
989 
990 static ssize_t store_pwm_sensor(struct device *dev, struct device_attribute
991 	*devattr, const char *buf, size_t count)
992 {
993 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
994 	struct abituguru_data *data = dev_get_drvdata(dev);
995 	unsigned long val = simple_strtoul(buf, NULL, 10) - 1;
996 	ssize_t ret = count;
997 
998 	mutex_lock(&data->update_lock);
999 	if (val < data->bank1_sensors[ABIT_UGURU_TEMP_SENSOR]) {
1000 		u8 orig_val = data->pwm_settings[attr->index][0];
1001 		u8 address = data->bank1_address[ABIT_UGURU_TEMP_SENSOR][val];
1002 		data->pwm_settings[attr->index][0] &= 0xF0;
1003 		data->pwm_settings[attr->index][0] |= address;
1004 		if (data->pwm_settings[attr->index][0] != orig_val) {
1005 			if (abituguru_write(data, ABIT_UGURU_FAN_PWM + 1,
1006 					attr->index,
1007 					data->pwm_settings[attr->index],
1008 					5) < 1) {
1009 				data->pwm_settings[attr->index][0] = orig_val;
1010 				ret = -EIO;
1011 			}
1012 		}
1013 	}
1014 	else
1015 		ret = -EINVAL;
1016 	mutex_unlock(&data->update_lock);
1017 	return ret;
1018 }
1019 
1020 static ssize_t show_pwm_enable(struct device *dev,
1021 	struct device_attribute *devattr, char *buf)
1022 {
1023 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
1024 	struct abituguru_data *data = dev_get_drvdata(dev);
1025 	int res = 0;
1026 	if (data->pwm_settings[attr->index][0] & ABIT_UGURU_FAN_PWM_ENABLE)
1027 		res = 2;
1028 	return sprintf(buf, "%d\n", res);
1029 }
1030 
1031 static ssize_t store_pwm_enable(struct device *dev, struct device_attribute
1032 	*devattr, const char *buf, size_t count)
1033 {
1034 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
1035 	struct abituguru_data *data = dev_get_drvdata(dev);
1036 	u8 orig_val, user_val = simple_strtoul(buf, NULL, 10);
1037 	ssize_t ret = count;
1038 
1039 	mutex_lock(&data->update_lock);
1040 	orig_val = data->pwm_settings[attr->index][0];
1041 	switch (user_val) {
1042 		case 0:
1043 			data->pwm_settings[attr->index][0] &=
1044 				~ABIT_UGURU_FAN_PWM_ENABLE;
1045 			break;
1046 		case 2:
1047 			data->pwm_settings[attr->index][0] |=
1048 				ABIT_UGURU_FAN_PWM_ENABLE;
1049 			break;
1050 		default:
1051 			ret = -EINVAL;
1052 	}
1053 	if ((data->pwm_settings[attr->index][0] != orig_val) &&
1054 			(abituguru_write(data, ABIT_UGURU_FAN_PWM + 1,
1055 			attr->index, data->pwm_settings[attr->index],
1056 			5) < 1)) {
1057 		data->pwm_settings[attr->index][0] = orig_val;
1058 		ret = -EIO;
1059 	}
1060 	mutex_unlock(&data->update_lock);
1061 	return ret;
1062 }
1063 
1064 static ssize_t show_name(struct device *dev,
1065 	struct device_attribute *devattr, char *buf)
1066 {
1067 	return sprintf(buf, "%s\n", ABIT_UGURU_NAME);
1068 }
1069 
1070 /* Sysfs attr templates, the real entries are generated automatically. */
1071 static const
1072 struct sensor_device_attribute_2 abituguru_sysfs_bank1_templ[2][9] = {
1073 	{
1074 	SENSOR_ATTR_2(in%d_input, 0444, show_bank1_value, NULL, 0, 0),
1075 	SENSOR_ATTR_2(in%d_min, 0644, show_bank1_setting,
1076 		store_bank1_setting, 1, 0),
1077 	SENSOR_ATTR_2(in%d_min_alarm, 0444, show_bank1_alarm, NULL,
1078 		ABIT_UGURU_VOLT_LOW_ALARM_FLAG, 0),
1079 	SENSOR_ATTR_2(in%d_max, 0644, show_bank1_setting,
1080 		store_bank1_setting, 2, 0),
1081 	SENSOR_ATTR_2(in%d_max_alarm, 0444, show_bank1_alarm, NULL,
1082 		ABIT_UGURU_VOLT_HIGH_ALARM_FLAG, 0),
1083 	SENSOR_ATTR_2(in%d_beep, 0644, show_bank1_mask,
1084 		store_bank1_mask, ABIT_UGURU_BEEP_ENABLE, 0),
1085 	SENSOR_ATTR_2(in%d_shutdown, 0644, show_bank1_mask,
1086 		store_bank1_mask, ABIT_UGURU_SHUTDOWN_ENABLE, 0),
1087 	SENSOR_ATTR_2(in%d_min_alarm_enable, 0644, show_bank1_mask,
1088 		store_bank1_mask, ABIT_UGURU_VOLT_LOW_ALARM_ENABLE, 0),
1089 	SENSOR_ATTR_2(in%d_max_alarm_enable, 0644, show_bank1_mask,
1090 		store_bank1_mask, ABIT_UGURU_VOLT_HIGH_ALARM_ENABLE, 0),
1091 	}, {
1092 	SENSOR_ATTR_2(temp%d_input, 0444, show_bank1_value, NULL, 0, 0),
1093 	SENSOR_ATTR_2(temp%d_alarm, 0444, show_bank1_alarm, NULL,
1094 		ABIT_UGURU_TEMP_HIGH_ALARM_FLAG, 0),
1095 	SENSOR_ATTR_2(temp%d_max, 0644, show_bank1_setting,
1096 		store_bank1_setting, 1, 0),
1097 	SENSOR_ATTR_2(temp%d_crit, 0644, show_bank1_setting,
1098 		store_bank1_setting, 2, 0),
1099 	SENSOR_ATTR_2(temp%d_beep, 0644, show_bank1_mask,
1100 		store_bank1_mask, ABIT_UGURU_BEEP_ENABLE, 0),
1101 	SENSOR_ATTR_2(temp%d_shutdown, 0644, show_bank1_mask,
1102 		store_bank1_mask, ABIT_UGURU_SHUTDOWN_ENABLE, 0),
1103 	SENSOR_ATTR_2(temp%d_alarm_enable, 0644, show_bank1_mask,
1104 		store_bank1_mask, ABIT_UGURU_TEMP_HIGH_ALARM_ENABLE, 0),
1105 	}
1106 };
1107 
1108 static const struct sensor_device_attribute_2 abituguru_sysfs_fan_templ[6] = {
1109 	SENSOR_ATTR_2(fan%d_input, 0444, show_bank2_value, NULL, 0, 0),
1110 	SENSOR_ATTR_2(fan%d_alarm, 0444, show_bank2_alarm, NULL, 0, 0),
1111 	SENSOR_ATTR_2(fan%d_min, 0644, show_bank2_setting,
1112 		store_bank2_setting, 1, 0),
1113 	SENSOR_ATTR_2(fan%d_beep, 0644, show_bank2_mask,
1114 		store_bank2_mask, ABIT_UGURU_BEEP_ENABLE, 0),
1115 	SENSOR_ATTR_2(fan%d_shutdown, 0644, show_bank2_mask,
1116 		store_bank2_mask, ABIT_UGURU_SHUTDOWN_ENABLE, 0),
1117 	SENSOR_ATTR_2(fan%d_alarm_enable, 0644, show_bank2_mask,
1118 		store_bank2_mask, ABIT_UGURU_FAN_LOW_ALARM_ENABLE, 0),
1119 };
1120 
1121 static const struct sensor_device_attribute_2 abituguru_sysfs_pwm_templ[6] = {
1122 	SENSOR_ATTR_2(pwm%d_enable, 0644, show_pwm_enable,
1123 		store_pwm_enable, 0, 0),
1124 	SENSOR_ATTR_2(pwm%d_auto_channels_temp, 0644, show_pwm_sensor,
1125 		store_pwm_sensor, 0, 0),
1126 	SENSOR_ATTR_2(pwm%d_auto_point1_pwm, 0644, show_pwm_setting,
1127 		store_pwm_setting, 1, 0),
1128 	SENSOR_ATTR_2(pwm%d_auto_point2_pwm, 0644, show_pwm_setting,
1129 		store_pwm_setting, 2, 0),
1130 	SENSOR_ATTR_2(pwm%d_auto_point1_temp, 0644, show_pwm_setting,
1131 		store_pwm_setting, 3, 0),
1132 	SENSOR_ATTR_2(pwm%d_auto_point2_temp, 0644, show_pwm_setting,
1133 		store_pwm_setting, 4, 0),
1134 };
1135 
1136 static struct sensor_device_attribute_2 abituguru_sysfs_attr[] = {
1137 	SENSOR_ATTR_2(name, 0444, show_name, NULL, 0, 0),
1138 };
1139 
1140 static int __devinit abituguru_probe(struct platform_device *pdev)
1141 {
1142 	struct abituguru_data *data;
1143 	int i, j, used, sysfs_names_free, sysfs_attr_i, res = -ENODEV;
1144 	char *sysfs_filename;
1145 
1146 	/* El weirdo probe order, to keep the sysfs order identical to the
1147 	   BIOS and window-appliction listing order. */
1148 	const u8 probe_order[ABIT_UGURU_MAX_BANK1_SENSORS] = {
1149 		0x00, 0x01, 0x03, 0x04, 0x0A, 0x08, 0x0E, 0x02,
1150 		0x09, 0x06, 0x05, 0x0B, 0x0F, 0x0D, 0x07, 0x0C };
1151 
1152 	if (!(data = kzalloc(sizeof(struct abituguru_data), GFP_KERNEL)))
1153 		return -ENOMEM;
1154 
1155 	data->addr = platform_get_resource(pdev, IORESOURCE_IO, 0)->start;
1156 	mutex_init(&data->update_lock);
1157 	platform_set_drvdata(pdev, data);
1158 
1159 	/* See if the uGuru is ready */
1160 	if (inb_p(data->addr + ABIT_UGURU_DATA) == ABIT_UGURU_STATUS_INPUT)
1161 		data->uguru_ready = 1;
1162 
1163 	/* Completely read the uGuru this has 2 purposes:
1164 	   - testread / see if one really is there.
1165 	   - make an in memory copy of all the uguru settings for future use. */
1166 	if (abituguru_read(data, ABIT_UGURU_ALARM_BANK, 0,
1167 			data->alarms, 3, ABIT_UGURU_MAX_RETRIES) != 3)
1168 		goto abituguru_probe_error;
1169 
1170 	for (i = 0; i < ABIT_UGURU_MAX_BANK1_SENSORS; i++) {
1171 		if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1, i,
1172 				&data->bank1_value[i], 1,
1173 				ABIT_UGURU_MAX_RETRIES) != 1)
1174 			goto abituguru_probe_error;
1175 		if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1+1, i,
1176 				data->bank1_settings[i], 3,
1177 				ABIT_UGURU_MAX_RETRIES) != 3)
1178 			goto abituguru_probe_error;
1179 	}
1180 	/* Note: We don't know how many bank2 sensors / pwms there really are,
1181 	   but in order to "detect" this we need to read the maximum amount
1182 	   anyways. If we read sensors/pwms not there we'll just read crap
1183 	   this can't hurt. We need the detection because we don't want
1184 	   unwanted writes, which will hurt! */
1185 	for (i = 0; i < ABIT_UGURU_MAX_BANK2_SENSORS; i++) {
1186 		if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK2, i,
1187 				&data->bank2_value[i], 1,
1188 				ABIT_UGURU_MAX_RETRIES) != 1)
1189 			goto abituguru_probe_error;
1190 		if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK2+1, i,
1191 				data->bank2_settings[i], 2,
1192 				ABIT_UGURU_MAX_RETRIES) != 2)
1193 			goto abituguru_probe_error;
1194 	}
1195 	for (i = 0; i < ABIT_UGURU_MAX_PWMS; i++) {
1196 		if (abituguru_read(data, ABIT_UGURU_FAN_PWM, i,
1197 				data->pwm_settings[i], 5,
1198 				ABIT_UGURU_MAX_RETRIES) != 5)
1199 			goto abituguru_probe_error;
1200 	}
1201 	data->last_updated = jiffies;
1202 
1203 	/* Detect sensor types and fill the sysfs attr for bank1 */
1204 	sysfs_attr_i = 0;
1205 	sysfs_filename = data->sysfs_names;
1206 	sysfs_names_free = ABITUGURU_SYSFS_NAMES_LENGTH;
1207 	for (i = 0; i < ABIT_UGURU_MAX_BANK1_SENSORS; i++) {
1208 		res = abituguru_detect_bank1_sensor_type(data, probe_order[i]);
1209 		if (res < 0)
1210 			goto abituguru_probe_error;
1211 		if (res == ABIT_UGURU_NC)
1212 			continue;
1213 
1214 		/* res 1 (temp) sensors have 7 sysfs entries, 0 (in) 9 */
1215 		for (j = 0; j < (res ? 7 : 9); j++) {
1216 			used = snprintf(sysfs_filename, sysfs_names_free,
1217 				abituguru_sysfs_bank1_templ[res][j].dev_attr.
1218 				attr.name, data->bank1_sensors[res] + res)
1219 				+ 1;
1220 			data->sysfs_attr[sysfs_attr_i] =
1221 				abituguru_sysfs_bank1_templ[res][j];
1222 			data->sysfs_attr[sysfs_attr_i].dev_attr.attr.name =
1223 				sysfs_filename;
1224 			data->sysfs_attr[sysfs_attr_i].index = probe_order[i];
1225 			sysfs_filename += used;
1226 			sysfs_names_free -= used;
1227 			sysfs_attr_i++;
1228 		}
1229 		data->bank1_max_value[probe_order[i]] =
1230 			abituguru_bank1_max_value[res];
1231 		data->bank1_address[res][data->bank1_sensors[res]] =
1232 			probe_order[i];
1233 		data->bank1_sensors[res]++;
1234 	}
1235 	/* Detect number of sensors and fill the sysfs attr for bank2 (fans) */
1236 	abituguru_detect_no_bank2_sensors(data);
1237 	for (i = 0; i < data->bank2_sensors; i++) {
1238 		for (j = 0; j < ARRAY_SIZE(abituguru_sysfs_fan_templ); j++) {
1239 			used = snprintf(sysfs_filename, sysfs_names_free,
1240 				abituguru_sysfs_fan_templ[j].dev_attr.attr.name,
1241 				i + 1) + 1;
1242 			data->sysfs_attr[sysfs_attr_i] =
1243 				abituguru_sysfs_fan_templ[j];
1244 			data->sysfs_attr[sysfs_attr_i].dev_attr.attr.name =
1245 				sysfs_filename;
1246 			data->sysfs_attr[sysfs_attr_i].index = i;
1247 			sysfs_filename += used;
1248 			sysfs_names_free -= used;
1249 			sysfs_attr_i++;
1250 		}
1251 	}
1252 	/* Detect number of sensors and fill the sysfs attr for pwms */
1253 	abituguru_detect_no_pwms(data);
1254 	for (i = 0; i < data->pwms; i++) {
1255 		for (j = 0; j < ARRAY_SIZE(abituguru_sysfs_pwm_templ); j++) {
1256 			used = snprintf(sysfs_filename, sysfs_names_free,
1257 				abituguru_sysfs_pwm_templ[j].dev_attr.attr.name,
1258 				i + 1) + 1;
1259 			data->sysfs_attr[sysfs_attr_i] =
1260 				abituguru_sysfs_pwm_templ[j];
1261 			data->sysfs_attr[sysfs_attr_i].dev_attr.attr.name =
1262 				sysfs_filename;
1263 			data->sysfs_attr[sysfs_attr_i].index = i;
1264 			sysfs_filename += used;
1265 			sysfs_names_free -= used;
1266 			sysfs_attr_i++;
1267 		}
1268 	}
1269 	/* Fail safe check, this should never happen! */
1270 	if (sysfs_names_free < 0) {
1271 		printk(KERN_ERR ABIT_UGURU_NAME ": Fatal error ran out of "
1272 		       "space for sysfs attr names. This should never "
1273 		       "happen please report to the abituguru maintainer "
1274 		       "(see MAINTAINERS)\n");
1275 		res = -ENAMETOOLONG;
1276 		goto abituguru_probe_error;
1277 	}
1278 	printk(KERN_INFO ABIT_UGURU_NAME ": found Abit uGuru\n");
1279 
1280 	/* Register sysfs hooks */
1281 	for (i = 0; i < sysfs_attr_i; i++)
1282 		if (device_create_file(&pdev->dev,
1283 				&data->sysfs_attr[i].dev_attr))
1284 			goto abituguru_probe_error;
1285 	for (i = 0; i < ARRAY_SIZE(abituguru_sysfs_attr); i++)
1286 		if (device_create_file(&pdev->dev,
1287 				&abituguru_sysfs_attr[i].dev_attr))
1288 			goto abituguru_probe_error;
1289 
1290 	data->hwmon_dev = hwmon_device_register(&pdev->dev);
1291 	if (!IS_ERR(data->hwmon_dev))
1292 		return 0; /* success */
1293 
1294 	res = PTR_ERR(data->hwmon_dev);
1295 abituguru_probe_error:
1296 	for (i = 0; data->sysfs_attr[i].dev_attr.attr.name; i++)
1297 		device_remove_file(&pdev->dev, &data->sysfs_attr[i].dev_attr);
1298 	for (i = 0; i < ARRAY_SIZE(abituguru_sysfs_attr); i++)
1299 		device_remove_file(&pdev->dev,
1300 			&abituguru_sysfs_attr[i].dev_attr);
1301 	platform_set_drvdata(pdev, NULL);
1302 	kfree(data);
1303 	return res;
1304 }
1305 
1306 static int __devexit abituguru_remove(struct platform_device *pdev)
1307 {
1308 	int i;
1309 	struct abituguru_data *data = platform_get_drvdata(pdev);
1310 
1311 	hwmon_device_unregister(data->hwmon_dev);
1312 	for (i = 0; data->sysfs_attr[i].dev_attr.attr.name; i++)
1313 		device_remove_file(&pdev->dev, &data->sysfs_attr[i].dev_attr);
1314 	for (i = 0; i < ARRAY_SIZE(abituguru_sysfs_attr); i++)
1315 		device_remove_file(&pdev->dev,
1316 			&abituguru_sysfs_attr[i].dev_attr);
1317 	platform_set_drvdata(pdev, NULL);
1318 	kfree(data);
1319 
1320 	return 0;
1321 }
1322 
1323 static struct abituguru_data *abituguru_update_device(struct device *dev)
1324 {
1325 	int i, err;
1326 	struct abituguru_data *data = dev_get_drvdata(dev);
1327 	/* fake a complete successful read if no update necessary. */
1328 	char success = 1;
1329 
1330 	mutex_lock(&data->update_lock);
1331 	if (time_after(jiffies, data->last_updated + HZ)) {
1332 		success = 0;
1333 		if ((err = abituguru_read(data, ABIT_UGURU_ALARM_BANK, 0,
1334 				data->alarms, 3, 0)) != 3)
1335 			goto LEAVE_UPDATE;
1336 		for (i = 0; i < ABIT_UGURU_MAX_BANK1_SENSORS; i++) {
1337 			if ((err = abituguru_read(data,
1338 					ABIT_UGURU_SENSOR_BANK1, i,
1339 					&data->bank1_value[i], 1, 0)) != 1)
1340 				goto LEAVE_UPDATE;
1341 			if ((err = abituguru_read(data,
1342 					ABIT_UGURU_SENSOR_BANK1 + 1, i,
1343 					data->bank1_settings[i], 3, 0)) != 3)
1344 				goto LEAVE_UPDATE;
1345 		}
1346 		for (i = 0; i < data->bank2_sensors; i++)
1347 			if ((err = abituguru_read(data,
1348 					ABIT_UGURU_SENSOR_BANK2, i,
1349 					&data->bank2_value[i], 1, 0)) != 1)
1350 				goto LEAVE_UPDATE;
1351 		/* success! */
1352 		success = 1;
1353 		data->update_timeouts = 0;
1354 LEAVE_UPDATE:
1355 		/* handle timeout condition */
1356 		if (!success && (err == -EBUSY || err >= 0)) {
1357 			/* No overflow please */
1358 			if (data->update_timeouts < 255u)
1359 				data->update_timeouts++;
1360 			if (data->update_timeouts <= ABIT_UGURU_MAX_TIMEOUTS) {
1361 				ABIT_UGURU_DEBUG(3, "timeout exceeded, will "
1362 					"try again next update\n");
1363 				/* Just a timeout, fake a successful read */
1364 				success = 1;
1365 			} else
1366 				ABIT_UGURU_DEBUG(1, "timeout exceeded %d "
1367 					"times waiting for more input state\n",
1368 					(int)data->update_timeouts);
1369 		}
1370 		/* On success set last_updated */
1371 		if (success)
1372 			data->last_updated = jiffies;
1373 	}
1374 	mutex_unlock(&data->update_lock);
1375 
1376 	if (success)
1377 		return data;
1378 	else
1379 		return NULL;
1380 }
1381 
1382 #ifdef CONFIG_PM
1383 static int abituguru_suspend(struct platform_device *pdev, pm_message_t state)
1384 {
1385 	struct abituguru_data *data = platform_get_drvdata(pdev);
1386 	/* make sure all communications with the uguru are done and no new
1387 	   ones are started */
1388 	mutex_lock(&data->update_lock);
1389 	return 0;
1390 }
1391 
1392 static int abituguru_resume(struct platform_device *pdev)
1393 {
1394 	struct abituguru_data *data = platform_get_drvdata(pdev);
1395 	/* See if the uGuru is still ready */
1396 	if (inb_p(data->addr + ABIT_UGURU_DATA) != ABIT_UGURU_STATUS_INPUT)
1397 		data->uguru_ready = 0;
1398 	mutex_unlock(&data->update_lock);
1399 	return 0;
1400 }
1401 #else
1402 #define abituguru_suspend	NULL
1403 #define abituguru_resume	NULL
1404 #endif /* CONFIG_PM */
1405 
1406 static struct platform_driver abituguru_driver = {
1407 	.driver = {
1408 		.owner	= THIS_MODULE,
1409 		.name	= ABIT_UGURU_NAME,
1410 	},
1411 	.probe		= abituguru_probe,
1412 	.remove		= __devexit_p(abituguru_remove),
1413 	.suspend	= abituguru_suspend,
1414 	.resume		= abituguru_resume,
1415 };
1416 
1417 static int __init abituguru_detect(void)
1418 {
1419 	/* See if there is an uguru there. After a reboot uGuru will hold 0x00
1420 	   at DATA and 0xAC, when this driver has already been loaded once
1421 	   DATA will hold 0x08. For most uGuru's CMD will hold 0xAC in either
1422 	   scenario but some will hold 0x00.
1423 	   Some uGuru's initally hold 0x09 at DATA and will only hold 0x08
1424 	   after reading CMD first, so CMD must be read first! */
1425 	u8 cmd_val = inb_p(ABIT_UGURU_BASE + ABIT_UGURU_CMD);
1426 	u8 data_val = inb_p(ABIT_UGURU_BASE + ABIT_UGURU_DATA);
1427 	if (((data_val == 0x00) || (data_val == 0x08)) &&
1428 	    ((cmd_val == 0x00) || (cmd_val == 0xAC)))
1429 		return ABIT_UGURU_BASE;
1430 
1431 	ABIT_UGURU_DEBUG(2, "no Abit uGuru found, data = 0x%02X, cmd = "
1432 		"0x%02X\n", (unsigned int)data_val, (unsigned int)cmd_val);
1433 
1434 	if (force) {
1435 		printk(KERN_INFO ABIT_UGURU_NAME ": Assuming Abit uGuru is "
1436 				"present because of \"force\" parameter\n");
1437 		return ABIT_UGURU_BASE;
1438 	}
1439 
1440 	/* No uGuru found */
1441 	return -ENODEV;
1442 }
1443 
1444 static struct platform_device *abituguru_pdev;
1445 
1446 static int __init abituguru_init(void)
1447 {
1448 	int address, err;
1449 	struct resource res = { .flags = IORESOURCE_IO };
1450 
1451 #ifdef CONFIG_DMI
1452 	const char *board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
1453 
1454 	/* safety check, refuse to load on non Abit motherboards */
1455 	if (!force && (!board_vendor ||
1456 			strcmp(board_vendor, "http://www.abit.com.tw/")))
1457 		return -ENODEV;
1458 #endif
1459 
1460 	address = abituguru_detect();
1461 	if (address < 0)
1462 		return address;
1463 
1464 	err = platform_driver_register(&abituguru_driver);
1465 	if (err)
1466 		goto exit;
1467 
1468 	abituguru_pdev = platform_device_alloc(ABIT_UGURU_NAME, address);
1469 	if (!abituguru_pdev) {
1470 		printk(KERN_ERR ABIT_UGURU_NAME
1471 			": Device allocation failed\n");
1472 		err = -ENOMEM;
1473 		goto exit_driver_unregister;
1474 	}
1475 
1476 	res.start = address;
1477 	res.end = address + ABIT_UGURU_REGION_LENGTH - 1;
1478 	res.name = ABIT_UGURU_NAME;
1479 
1480 	err = platform_device_add_resources(abituguru_pdev, &res, 1);
1481 	if (err) {
1482 		printk(KERN_ERR ABIT_UGURU_NAME
1483 			": Device resource addition failed (%d)\n", err);
1484 		goto exit_device_put;
1485 	}
1486 
1487 	err = platform_device_add(abituguru_pdev);
1488 	if (err) {
1489 		printk(KERN_ERR ABIT_UGURU_NAME
1490 			": Device addition failed (%d)\n", err);
1491 		goto exit_device_put;
1492 	}
1493 
1494 	return 0;
1495 
1496 exit_device_put:
1497 	platform_device_put(abituguru_pdev);
1498 exit_driver_unregister:
1499 	platform_driver_unregister(&abituguru_driver);
1500 exit:
1501 	return err;
1502 }
1503 
1504 static void __exit abituguru_exit(void)
1505 {
1506 	platform_device_unregister(abituguru_pdev);
1507 	platform_driver_unregister(&abituguru_driver);
1508 }
1509 
1510 MODULE_AUTHOR("Hans de Goede <j.w.r.degoede@hhs.nl>");
1511 MODULE_DESCRIPTION("Abit uGuru Sensor device");
1512 MODULE_LICENSE("GPL");
1513 
1514 module_init(abituguru_init);
1515 module_exit(abituguru_exit);
1516