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:
Guenter Roeck 2012-01-19 11:02:13 -08:00 committed by Guenter Roeck
parent ec1c319417
commit 562fca2f7a

View File

@ -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 @@ LEAVE_UPDATE:
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) {