Linux Audio

Check our new training course

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