forked from mirrors/linux
		
	hwmon: (abituguru3) Fix multi-line comments
Cc: Hans de Goede <hdegoede@redhat.com> Cc: Alistair John Strachan <alistair@devzero.co.uk> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
		
							parent
							
								
									ec1c319417
								
							
						
					
					
						commit
						562fca2f7a
					
				
					 1 changed files with 129 additions and 82 deletions
				
			
		|  | @ -1,28 +1,28 @@ | ||||||
| /*
 | /*
 | ||||||
|     abituguru3.c |  * abituguru3.c | ||||||
| 
 |  * | ||||||
|     Copyright (c) 2006-2008 Hans de Goede <hdegoede@redhat.com> |  * Copyright (c) 2006-2008 Hans de Goede <hdegoede@redhat.com> | ||||||
|     Copyright (c) 2008 Alistair John Strachan <alistair@devzero.co.uk> |  * Copyright (c) 2008 Alistair John Strachan <alistair@devzero.co.uk> | ||||||
| 
 |  * | ||||||
|     This program is free software; you can redistribute it and/or modify |  * This program is free software; you can redistribute it and/or modify | ||||||
|     it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
|     the Free Software Foundation; either version 2 of the License, or |  * the Free Software Foundation; either version 2 of the License, or | ||||||
|     (at your option) any later version. |  * (at your option) any later version. | ||||||
| 
 |  * | ||||||
|     This program is distributed in the hope that it will be useful, |  * This program is distributed in the hope that it will be useful, | ||||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|     GNU General Public License for more details. |  * GNU General Public License for more details. | ||||||
| 
 |  * | ||||||
|     You should have received a copy of the GNU General Public License |  * You should have received a copy of the GNU General Public License | ||||||
|     along with this program; if not, write to the Free Software |  * along with this program; if not, write to the Free Software | ||||||
|     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||||
| */ |  */ | ||||||
| /*
 | /*
 | ||||||
|     This driver supports the sensor part of revision 3 of the custom Abit uGuru |  * This driver supports the sensor part of revision 3 of the custom Abit uGuru | ||||||
|     chip found on newer Abit uGuru motherboards. Note: because of lack of specs |  * chip found on newer Abit uGuru motherboards. Note: because of lack of specs | ||||||
|     only reading the sensors and their settings is supported. |  * only reading the sensors and their settings is supported. | ||||||
| */ |  */ | ||||||
| 
 | 
 | ||||||
| #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | ||||||
| 
 | 
 | ||||||
|  | @ -62,13 +62,17 @@ | ||||||
| #define ABIT_UGURU3_TEMP_SENSOR			1 | #define ABIT_UGURU3_TEMP_SENSOR			1 | ||||||
| #define ABIT_UGURU3_FAN_SENSOR			2 | #define ABIT_UGURU3_FAN_SENSOR			2 | ||||||
| 
 | 
 | ||||||
| /* Timeouts / Retries, if these turn out to need a lot of fiddling we could
 | /*
 | ||||||
|    convert them to params. Determined by trial and error. I assume this is |  * Timeouts / Retries, if these turn out to need a lot of fiddling we could | ||||||
|    cpu-speed independent, since the ISA-bus and not the CPU should be the |  * convert them to params. Determined by trial and error. I assume this is | ||||||
|    bottleneck. */ |  * cpu-speed independent, since the ISA-bus and not the CPU should be the | ||||||
|  |  * bottleneck. | ||||||
|  |  */ | ||||||
| #define ABIT_UGURU3_WAIT_TIMEOUT		250 | #define ABIT_UGURU3_WAIT_TIMEOUT		250 | ||||||
| /* Normally the 0xAC at the end of synchronize() is reported after the
 | /*
 | ||||||
|    first read, but sometimes not and we need to poll */ |  * Normally the 0xAC at the end of synchronize() is reported after the | ||||||
|  |  * first read, but sometimes not and we need to poll | ||||||
|  |  */ | ||||||
| #define ABIT_UGURU3_SYNCHRONIZE_TIMEOUT		5 | #define ABIT_UGURU3_SYNCHRONIZE_TIMEOUT		5 | ||||||
| /* utility macros */ | /* utility macros */ | ||||||
| #define ABIT_UGURU3_NAME			"abituguru3" | #define ABIT_UGURU3_NAME			"abituguru3" | ||||||
|  | @ -78,33 +82,45 @@ | ||||||
| 
 | 
 | ||||||
| /* Macros to help calculate the sysfs_names array length */ | /* Macros to help calculate the sysfs_names array length */ | ||||||
| #define ABIT_UGURU3_MAX_NO_SENSORS 26 | #define ABIT_UGURU3_MAX_NO_SENSORS 26 | ||||||
| /* sum of strlen +1 of: in??_input\0, in??_{min,max}\0, in??_{min,max}_alarm\0,
 | /*
 | ||||||
|    in??_{min,max}_alarm_enable\0, in??_beep\0, in??_shutdown\0, in??_label\0 */ |  * sum of strlen +1 of: in??_input\0, in??_{min,max}\0, in??_{min,max}_alarm\0, | ||||||
|  |  * in??_{min,max}_alarm_enable\0, in??_beep\0, in??_shutdown\0, in??_label\0 | ||||||
|  |  */ | ||||||
| #define ABIT_UGURU3_IN_NAMES_LENGTH \ | #define ABIT_UGURU3_IN_NAMES_LENGTH \ | ||||||
| 				(11 + 2 * 9 + 2 * 15 + 2 * 22 + 10 + 14 + 11) | 				(11 + 2 * 9 + 2 * 15 + 2 * 22 + 10 + 14 + 11) | ||||||
| /* sum of strlen +1 of: temp??_input\0, temp??_max\0, temp??_crit\0,
 | /*
 | ||||||
|    temp??_alarm\0, temp??_alarm_enable\0, temp??_beep\0, temp??_shutdown\0, |  * sum of strlen +1 of: temp??_input\0, temp??_max\0, temp??_crit\0, | ||||||
|    temp??_label\0 */ |  * temp??_alarm\0, temp??_alarm_enable\0, temp??_beep\0, temp??_shutdown\0, | ||||||
|  |  * temp??_label\0 | ||||||
|  |  */ | ||||||
| #define ABIT_UGURU3_TEMP_NAMES_LENGTH (13 + 11 + 12 + 13 + 20 + 12 + 16 + 13) | #define ABIT_UGURU3_TEMP_NAMES_LENGTH (13 + 11 + 12 + 13 + 20 + 12 + 16 + 13) | ||||||
| /* sum of strlen +1 of: fan??_input\0, fan??_min\0, fan??_alarm\0,
 | /*
 | ||||||
|    fan??_alarm_enable\0, fan??_beep\0, fan??_shutdown\0, fan??_label\0 */ |  * sum of strlen +1 of: fan??_input\0, fan??_min\0, fan??_alarm\0, | ||||||
|  |  * fan??_alarm_enable\0, fan??_beep\0, fan??_shutdown\0, fan??_label\0 | ||||||
|  |  */ | ||||||
| #define ABIT_UGURU3_FAN_NAMES_LENGTH (12 + 10 + 12 + 19 + 11 + 15 + 12) | #define ABIT_UGURU3_FAN_NAMES_LENGTH (12 + 10 + 12 + 19 + 11 + 15 + 12) | ||||||
| /* Worst case scenario 16 in sensors (longest names_length) and the rest
 | /*
 | ||||||
|    temp sensors (second longest names_length). */ |  * Worst case scenario 16 in sensors (longest names_length) and the rest | ||||||
|  |  * temp sensors (second longest names_length). | ||||||
|  |  */ | ||||||
| #define ABIT_UGURU3_SYSFS_NAMES_LENGTH (16 * ABIT_UGURU3_IN_NAMES_LENGTH + \ | #define ABIT_UGURU3_SYSFS_NAMES_LENGTH (16 * ABIT_UGURU3_IN_NAMES_LENGTH + \ | ||||||
| 	(ABIT_UGURU3_MAX_NO_SENSORS - 16) * ABIT_UGURU3_TEMP_NAMES_LENGTH) | 	(ABIT_UGURU3_MAX_NO_SENSORS - 16) * ABIT_UGURU3_TEMP_NAMES_LENGTH) | ||||||
| 
 | 
 | ||||||
| /* All the macros below are named identical to the openguru2 program
 | /*
 | ||||||
|    reverse engineered by Louis Kruger, hence the names might not be 100% |  * All the macros below are named identical to the openguru2 program | ||||||
|    logical. I could come up with better names, but I prefer keeping the names |  * reverse engineered by Louis Kruger, hence the names might not be 100% | ||||||
|    identical so that this driver can be compared with his work more easily. */ |  * logical. I could come up with better names, but I prefer keeping the names | ||||||
|  |  * identical so that this driver can be compared with his work more easily. | ||||||
|  |  */ | ||||||
| /* Two i/o-ports are used by uGuru */ | /* Two i/o-ports are used by uGuru */ | ||||||
| #define ABIT_UGURU3_BASE			0x00E0 | #define ABIT_UGURU3_BASE			0x00E0 | ||||||
| #define ABIT_UGURU3_CMD				0x00 | #define ABIT_UGURU3_CMD				0x00 | ||||||
| #define ABIT_UGURU3_DATA			0x04 | #define ABIT_UGURU3_DATA			0x04 | ||||||
| #define ABIT_UGURU3_REGION_LENGTH		5 | #define ABIT_UGURU3_REGION_LENGTH		5 | ||||||
| /* The wait_xxx functions return this on success and the last contents
 | /*
 | ||||||
|    of the DATA register (0-255) on failure. */ |  * The wait_xxx functions return this on success and the last contents | ||||||
|  |  * of the DATA register (0-255) on failure. | ||||||
|  |  */ | ||||||
| #define ABIT_UGURU3_SUCCESS			-1 | #define ABIT_UGURU3_SUCCESS			-1 | ||||||
| /* uGuru status flags */ | /* uGuru status flags */ | ||||||
| #define ABIT_UGURU3_STATUS_READY_FOR_READ	0x01 | #define ABIT_UGURU3_STATUS_READY_FOR_READ	0x01 | ||||||
|  | @ -131,9 +147,11 @@ struct abituguru3_motherboard_info { | ||||||
| 	struct abituguru3_sensor_info sensors[ABIT_UGURU3_MAX_NO_SENSORS + 1]; | 	struct abituguru3_sensor_info sensors[ABIT_UGURU3_MAX_NO_SENSORS + 1]; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* For the Abit uGuru, we need to keep some data in memory.
 | /*
 | ||||||
|    The structure is dynamically allocated, at the same time when a new |  * For the Abit uGuru, we need to keep some data in memory. | ||||||
|    abituguru3 device is allocated. */ |  * The structure is dynamically allocated, at the same time when a new | ||||||
|  |  * abituguru3 device is allocated. | ||||||
|  |  */ | ||||||
| struct abituguru3_data { | struct abituguru3_data { | ||||||
| 	struct device *hwmon_dev;	/* hwmon registered device */ | 	struct device *hwmon_dev;	/* hwmon registered device */ | ||||||
| 	struct mutex update_lock;	/* protect access to data and uGuru */ | 	struct mutex update_lock;	/* protect access to data and uGuru */ | ||||||
|  | @ -141,8 +159,10 @@ struct abituguru3_data { | ||||||
| 	char valid;			/* !=0 if following fields are valid */ | 	char valid;			/* !=0 if following fields are valid */ | ||||||
| 	unsigned long last_updated;	/* In jiffies */ | 	unsigned long last_updated;	/* In jiffies */ | ||||||
| 
 | 
 | ||||||
| 	/* For convenience the sysfs attr and their names are generated
 | 	/*
 | ||||||
| 	   automatically. We have max 10 entries per sensor (for in sensors) */ | 	 * For convenience the sysfs attr and their names are generated | ||||||
|  | 	 * automatically. We have max 10 entries per sensor (for in sensors) | ||||||
|  | 	 */ | ||||||
| 	struct sensor_device_attribute_2 sysfs_attr[ABIT_UGURU3_MAX_NO_SENSORS | 	struct sensor_device_attribute_2 sysfs_attr[ABIT_UGURU3_MAX_NO_SENSORS | ||||||
| 		* 10]; | 		* 10]; | ||||||
| 
 | 
 | ||||||
|  | @ -152,9 +172,11 @@ struct abituguru3_data { | ||||||
| 	/* Pointer to the sensors info for the detected motherboard */ | 	/* Pointer to the sensors info for the detected motherboard */ | ||||||
| 	const struct abituguru3_sensor_info *sensors; | 	const struct abituguru3_sensor_info *sensors; | ||||||
| 
 | 
 | ||||||
| 	/* The abituguru3 supports up to 48 sensors, and thus has registers
 | 	/*
 | ||||||
| 	   sets for 48 sensors, for convienence reasons / simplicity of the | 	 * The abituguru3 supports up to 48 sensors, and thus has registers | ||||||
| 	   code we always read and store all registers for all 48 sensors */ | 	 * sets for 48 sensors, for convienence reasons / simplicity of the | ||||||
|  | 	 * code we always read and store all registers for all 48 sensors | ||||||
|  | 	 */ | ||||||
| 
 | 
 | ||||||
| 	/* Alarms for all 48 sensors (1 bit per sensor) */ | 	/* Alarms for all 48 sensors (1 bit per sensor) */ | ||||||
| 	u8 alarms[48/8]; | 	u8 alarms[48/8]; | ||||||
|  | @ -162,9 +184,11 @@ struct abituguru3_data { | ||||||
| 	/* Value of all 48 sensors */ | 	/* Value of all 48 sensors */ | ||||||
| 	u8 value[48]; | 	u8 value[48]; | ||||||
| 
 | 
 | ||||||
| 	/* Settings of all 48 sensors, note in and temp sensors (the first 32
 | 	/*
 | ||||||
| 	   sensors) have 3 bytes of settings, while fans only have 2 bytes, | 	 * Settings of all 48 sensors, note in and temp sensors (the first 32 | ||||||
| 	   for convenience we use 3 bytes for all sensors */ | 	 * sensors) have 3 bytes of settings, while fans only have 2 bytes, | ||||||
|  | 	 * for convenience we use 3 bytes for all sensors | ||||||
|  | 	 */ | ||||||
| 	u8 settings[48][3]; | 	u8 settings[48][3]; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -627,8 +651,10 @@ static int abituguru3_wait_while_busy(struct abituguru3_data *data) | ||||||
| 		timeout--; | 		timeout--; | ||||||
| 		if (timeout == 0) | 		if (timeout == 0) | ||||||
| 			return x; | 			return x; | ||||||
| 		/* sleep a bit before our last try, to give the uGuru3 one
 | 		/*
 | ||||||
| 		   last chance to respond. */ | 		 * sleep a bit before our last try, to give the uGuru3 one | ||||||
|  | 		 * last chance to respond. | ||||||
|  | 		 */ | ||||||
| 		if (timeout == 1) | 		if (timeout == 1) | ||||||
| 			msleep(1); | 			msleep(1); | ||||||
| 	} | 	} | ||||||
|  | @ -646,16 +672,20 @@ static int abituguru3_wait_for_read(struct abituguru3_data *data) | ||||||
| 		timeout--; | 		timeout--; | ||||||
| 		if (timeout == 0) | 		if (timeout == 0) | ||||||
| 			return x; | 			return x; | ||||||
| 		/* sleep a bit before our last try, to give the uGuru3 one
 | 		/*
 | ||||||
| 		   last chance to respond. */ | 		 * sleep a bit before our last try, to give the uGuru3 one | ||||||
|  | 		 * last chance to respond. | ||||||
|  | 		 */ | ||||||
| 		if (timeout == 1) | 		if (timeout == 1) | ||||||
| 			msleep(1); | 			msleep(1); | ||||||
| 	} | 	} | ||||||
| 	return ABIT_UGURU3_SUCCESS; | 	return ABIT_UGURU3_SUCCESS; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* This synchronizes us with the uGuru3's protocol state machine, this
 | /*
 | ||||||
|    must be done before each command. */ |  * This synchronizes us with the uGuru3's protocol state machine, this | ||||||
|  |  * must be done before each command. | ||||||
|  |  */ | ||||||
| static int abituguru3_synchronize(struct abituguru3_data *data) | static int abituguru3_synchronize(struct abituguru3_data *data) | ||||||
| { | { | ||||||
| 	int x, timeout = ABIT_UGURU3_SYNCHRONIZE_TIMEOUT; | 	int x, timeout = ABIT_UGURU3_SYNCHRONIZE_TIMEOUT; | ||||||
|  | @ -711,8 +741,10 @@ static int abituguru3_synchronize(struct abituguru3_data *data) | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Read count bytes from sensor sensor_addr in bank bank_addr and store the
 | /*
 | ||||||
|    result in buf */ |  * Read count bytes from sensor sensor_addr in bank bank_addr and store the | ||||||
|  |  * result in buf | ||||||
|  |  */ | ||||||
| static int abituguru3_read(struct abituguru3_data *data, u8 bank, u8 offset, | static int abituguru3_read(struct abituguru3_data *data, u8 bank, u8 offset, | ||||||
| 	u8 count, u8 *buf) | 	u8 count, u8 *buf) | ||||||
| { | { | ||||||
|  | @ -771,8 +803,10 @@ static int abituguru3_read(struct abituguru3_data *data, u8 bank, u8 offset, | ||||||
| 	return i; | 	return i; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Sensor settings are stored 1 byte per offset with the bytes
 | /*
 | ||||||
|    placed add consecutive offsets. */ |  * Sensor settings are stored 1 byte per offset with the bytes | ||||||
|  |  * placed add consecutive offsets. | ||||||
|  |  */ | ||||||
| static int abituguru3_read_increment_offset(struct abituguru3_data *data, | static int abituguru3_read_increment_offset(struct abituguru3_data *data, | ||||||
| 					    u8 bank, u8 offset, u8 count, | 					    u8 bank, u8 offset, u8 count, | ||||||
| 					    u8 *buf, int offset_count) | 					    u8 *buf, int offset_count) | ||||||
|  | @ -792,9 +826,11 @@ static int abituguru3_read_increment_offset(struct abituguru3_data *data, | ||||||
| 	return i * count; | 	return i * count; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Following are the sysfs callback functions. These functions expect:
 | /*
 | ||||||
|    sensor_device_attribute_2->index:   index into the data->sensors array |  * Following are the sysfs callback functions. These functions expect: | ||||||
|    sensor_device_attribute_2->nr:      register offset, bitmask or NA. */ |  * sensor_device_attribute_2->index:   index into the data->sensors array | ||||||
|  |  * sensor_device_attribute_2->nr:      register offset, bitmask or NA. | ||||||
|  |  */ | ||||||
| static struct abituguru3_data *abituguru3_update_device(struct device *dev); | static struct abituguru3_data *abituguru3_update_device(struct device *dev); | ||||||
| 
 | 
 | ||||||
| static ssize_t show_value(struct device *dev, | static ssize_t show_value(struct device *dev, | ||||||
|  | @ -820,8 +856,10 @@ static ssize_t show_value(struct device *dev, | ||||||
| 	value = (value * sensor->multiplier) / sensor->divisor + | 	value = (value * sensor->multiplier) / sensor->divisor + | ||||||
| 		sensor->offset; | 		sensor->offset; | ||||||
| 
 | 
 | ||||||
| 	/* alternatively we could update the sensors settings struct for this,
 | 	/*
 | ||||||
| 	   but then its contents would differ from the windows sw ini files */ | 	 * alternatively we could update the sensors settings struct for this, | ||||||
|  | 	 * but then its contents would differ from the windows sw ini files | ||||||
|  | 	 */ | ||||||
| 	if (sensor->type == ABIT_UGURU3_TEMP_SENSOR) | 	if (sensor->type == ABIT_UGURU3_TEMP_SENSOR) | ||||||
| 		value *= 1000; | 		value *= 1000; | ||||||
| 
 | 
 | ||||||
|  | @ -840,10 +878,12 @@ static ssize_t show_alarm(struct device *dev, | ||||||
| 
 | 
 | ||||||
| 	port = data->sensors[attr->index].port; | 	port = data->sensors[attr->index].port; | ||||||
| 
 | 
 | ||||||
| 	/* See if the alarm bit for this sensor is set and if a bitmask is
 | 	/*
 | ||||||
| 	   given in attr->nr also check if the alarm matches the type of alarm | 	 * See if the alarm bit for this sensor is set and if a bitmask is | ||||||
| 	   we're looking for (for volt it can be either low or high). The type | 	 * given in attr->nr also check if the alarm matches the type of alarm | ||||||
| 	   is stored in a few readonly bits in the settings of the sensor. */ | 	 * we're looking for (for volt it can be either low or high). The type | ||||||
|  | 	 * is stored in a few readonly bits in the settings of the sensor. | ||||||
|  | 	 */ | ||||||
| 	if ((data->alarms[port / 8] & (0x01 << (port % 8))) && | 	if ((data->alarms[port / 8] & (0x01 << (port % 8))) && | ||||||
| 			(!attr->nr || (data->settings[port][0] & attr->nr))) | 			(!attr->nr || (data->settings[port][0] & attr->nr))) | ||||||
| 		return sprintf(buf, "1\n"); | 		return sprintf(buf, "1\n"); | ||||||
|  | @ -1105,8 +1145,10 @@ static struct abituguru3_data *abituguru3_update_device(struct device *dev) | ||||||
| static int abituguru3_suspend(struct platform_device *pdev, pm_message_t state) | static int abituguru3_suspend(struct platform_device *pdev, pm_message_t state) | ||||||
| { | { | ||||||
| 	struct abituguru3_data *data = platform_get_drvdata(pdev); | 	struct abituguru3_data *data = platform_get_drvdata(pdev); | ||||||
| 	/* make sure all communications with the uguru3 are done and no new
 | 	/*
 | ||||||
| 	   ones are started */ | 	 * make sure all communications with the uguru3 are done and no new | ||||||
|  | 	 * ones are started | ||||||
|  | 	 */ | ||||||
| 	mutex_lock(&data->update_lock); | 	mutex_lock(&data->update_lock); | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  | @ -1148,7 +1190,8 @@ static int __init abituguru3_dmi_detect(void) | ||||||
| 	if (!board_name) | 	if (!board_name) | ||||||
| 		return err; | 		return err; | ||||||
| 
 | 
 | ||||||
| 	/* At the moment, we don't care about the part of the vendor
 | 	/*
 | ||||||
|  | 	 * At the moment, we don't care about the part of the vendor | ||||||
| 	 * DMI string contained in brackets. Truncate the string at | 	 * DMI string contained in brackets. Truncate the string at | ||||||
| 	 * the first occurrence of a bracket. Trim any trailing space | 	 * the first occurrence of a bracket. Trim any trailing space | ||||||
| 	 * from the substring. | 	 * from the substring. | ||||||
|  | @ -1171,15 +1214,18 @@ static int __init abituguru3_dmi_detect(void) | ||||||
| 	return 1; | 	return 1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* FIXME: Manual detection should die eventually; we need to collect stable
 | /*
 | ||||||
|  |  * FIXME: Manual detection should die eventually; we need to collect stable | ||||||
|  *        DMI model names first before we can rely entirely on CONFIG_DMI. |  *        DMI model names first before we can rely entirely on CONFIG_DMI. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| static int __init abituguru3_detect(void) | static int __init abituguru3_detect(void) | ||||||
| { | { | ||||||
| 	/* See if there is an uguru3 there. An idle uGuru3 will hold 0x00 or
 | 	/*
 | ||||||
| 	   0x08 at DATA and 0xAC at CMD. Sometimes the uGuru3 will hold 0x05 | 	 * See if there is an uguru3 there. An idle uGuru3 will hold 0x00 or | ||||||
| 	   or 0x55 at CMD instead, why is unknown. */ | 	 * 0x08 at DATA and 0xAC at CMD. Sometimes the uGuru3 will hold 0x05 | ||||||
|  | 	 * or 0x55 at CMD instead, why is unknown. | ||||||
|  | 	 */ | ||||||
| 	u8 data_val = inb_p(ABIT_UGURU3_BASE + ABIT_UGURU3_DATA); | 	u8 data_val = inb_p(ABIT_UGURU3_BASE + ABIT_UGURU3_DATA); | ||||||
| 	u8 cmd_val = inb_p(ABIT_UGURU3_BASE + ABIT_UGURU3_CMD); | 	u8 cmd_val = inb_p(ABIT_UGURU3_BASE + ABIT_UGURU3_CMD); | ||||||
| 	if (((data_val == 0x00) || (data_val == 0x08)) && | 	if (((data_val == 0x00) || (data_val == 0x08)) && | ||||||
|  | @ -1211,7 +1257,8 @@ static int __init abituguru3_init(void) | ||||||
| 	if (err < 0) | 	if (err < 0) | ||||||
| 		return err; | 		return err; | ||||||
| 
 | 
 | ||||||
| 	/* Fall back to manual detection if there was no exact
 | 	/*
 | ||||||
|  | 	 * Fall back to manual detection if there was no exact | ||||||
| 	 * board name match, or force was specified. | 	 * board name match, or force was specified. | ||||||
| 	 */ | 	 */ | ||||||
| 	if (err > 0) { | 	if (err > 0) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Guenter Roeck
						Guenter Roeck