hwmon: (fschmd) Fix checkpatch issues
Fixed: ERROR: that open brace { should be on the previous line ERROR: trailing statements should be on next line WARNING: line over 80 characters WARNING: simple_strtol is obsolete, use kstrtol instead WARNING: simple_strtoul is obsolete, use kstrtoul instead Modify multi-line comments to follow Documentation/CodingStyle. Cc: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
f24d548bf2
commit
525ad37319
@ -1,4 +1,5 @@
|
||||
/* fschmd.c
|
||||
/*
|
||||
* fschmd.c
|
||||
*
|
||||
* Copyright (C) 2007 - 2009 Hans de Goede <hdegoede@redhat.com>
|
||||
*
|
||||
@ -76,12 +77,12 @@ enum chips { fscpos, fscher, fscscy, fschrc, fschmd, fschds, fscsyl };
|
||||
#define FSCHMD_CONTROL_ALERT_LED 0x01
|
||||
|
||||
/* watchdog */
|
||||
static const u8 FSCHMD_REG_WDOG_CONTROL[7] =
|
||||
{ 0x21, 0x21, 0x21, 0x21, 0x21, 0x28, 0x28 };
|
||||
static const u8 FSCHMD_REG_WDOG_STATE[7] =
|
||||
{ 0x23, 0x23, 0x23, 0x23, 0x23, 0x29, 0x29 };
|
||||
static const u8 FSCHMD_REG_WDOG_PRESET[7] =
|
||||
{ 0x28, 0x28, 0x28, 0x28, 0x28, 0x2a, 0x2a };
|
||||
static const u8 FSCHMD_REG_WDOG_CONTROL[7] = {
|
||||
0x21, 0x21, 0x21, 0x21, 0x21, 0x28, 0x28 };
|
||||
static const u8 FSCHMD_REG_WDOG_STATE[7] = {
|
||||
0x23, 0x23, 0x23, 0x23, 0x23, 0x29, 0x29 };
|
||||
static const u8 FSCHMD_REG_WDOG_PRESET[7] = {
|
||||
0x28, 0x28, 0x28, 0x28, 0x28, 0x2a, 0x2a };
|
||||
|
||||
#define FSCHMD_WDOG_CONTROL_TRIGGER 0x10
|
||||
#define FSCHMD_WDOG_CONTROL_STARTED 0x10 /* the same as trigger */
|
||||
@ -103,10 +104,12 @@ static const u8 FSCHMD_REG_VOLT[7][6] = {
|
||||
|
||||
static const int FSCHMD_NO_VOLT_SENSORS[7] = { 3, 3, 3, 3, 3, 3, 6 };
|
||||
|
||||
/* minimum pwm at which the fan is driven (pwm can by increased depending on
|
||||
the temp. Notice that for the scy some fans share there minimum speed.
|
||||
Also notice that with the scy the sensor order is different than with the
|
||||
other chips, this order was in the 2.4 driver and kept for consistency. */
|
||||
/*
|
||||
* minimum pwm at which the fan is driven (pwm can by increased depending on
|
||||
* the temp. Notice that for the scy some fans share there minimum speed.
|
||||
* Also notice that with the scy the sensor order is different than with the
|
||||
* other chips, this order was in the 2.4 driver and kept for consistency.
|
||||
*/
|
||||
static const u8 FSCHMD_REG_FAN_MIN[7][7] = {
|
||||
{ 0x55, 0x65 }, /* pos */
|
||||
{ 0x55, 0x65, 0xb5 }, /* her */
|
||||
@ -182,11 +185,13 @@ static const u8 FSCHMD_REG_TEMP_STATE[7][11] = {
|
||||
0xb9, 0xc9, 0xd9, 0xe9, 0xf9 },
|
||||
};
|
||||
|
||||
/* temperature high limit registers, FSC does not document these. Proven to be
|
||||
there with field testing on the fscher and fschrc, already supported / used
|
||||
in the fscscy 2.4 driver. FSC has confirmed that the fschmd has registers
|
||||
at these addresses, but doesn't want to confirm they are the same as with
|
||||
the fscher?? */
|
||||
/*
|
||||
* temperature high limit registers, FSC does not document these. Proven to be
|
||||
* there with field testing on the fscher and fschrc, already supported / used
|
||||
* in the fscscy 2.4 driver. FSC has confirmed that the fschmd has registers
|
||||
* at these addresses, but doesn't want to confirm they are the same as with
|
||||
* the fscher??
|
||||
*/
|
||||
static const u8 FSCHMD_REG_TEMP_LIMIT[7][11] = {
|
||||
{ 0, 0, 0 }, /* pos */
|
||||
{ 0x76, 0x86, 0x96 }, /* her */
|
||||
@ -198,13 +203,15 @@ static const u8 FSCHMD_REG_TEMP_LIMIT[7][11] = {
|
||||
0xba, 0xca, 0xda, 0xea, 0xfa },
|
||||
};
|
||||
|
||||
/* These were found through experimenting with an fscher, currently they are
|
||||
not used, but we keep them around for future reference.
|
||||
On the fscsyl AUTOP1 lives at 0x#c (so 0x5c for fan1, 0x6c for fan2, etc),
|
||||
AUTOP2 lives at 0x#e, and 0x#1 is a bitmask defining which temps influence
|
||||
the fan speed.
|
||||
static const u8 FSCHER_REG_TEMP_AUTOP1[] = { 0x73, 0x83, 0x93 };
|
||||
static const u8 FSCHER_REG_TEMP_AUTOP2[] = { 0x75, 0x85, 0x95 }; */
|
||||
/*
|
||||
* These were found through experimenting with an fscher, currently they are
|
||||
* not used, but we keep them around for future reference.
|
||||
* On the fscsyl AUTOP1 lives at 0x#c (so 0x5c for fan1, 0x6c for fan2, etc),
|
||||
* AUTOP2 lives at 0x#e, and 0x#1 is a bitmask defining which temps influence
|
||||
* the fan speed.
|
||||
* static const u8 FSCHER_REG_TEMP_AUTOP1[] = { 0x73, 0x83, 0x93 };
|
||||
* static const u8 FSCHER_REG_TEMP_AUTOP2[] = { 0x75, 0x85, 0x95 };
|
||||
*/
|
||||
|
||||
static const int FSCHMD_NO_TEMP_SENSORS[7] = { 3, 3, 4, 3, 5, 5, 11 };
|
||||
|
||||
@ -290,24 +297,30 @@ struct fschmd_data {
|
||||
u8 fan_ripple[7]; /* divider for rps */
|
||||
};
|
||||
|
||||
/* Global variables to hold information read from special DMI tables, which are
|
||||
available on FSC machines with an fscher or later chip. There is no need to
|
||||
protect these with a lock as they are only modified from our attach function
|
||||
which always gets called with the i2c-core lock held and never accessed
|
||||
before the attach function is done with them. */
|
||||
/*
|
||||
* Global variables to hold information read from special DMI tables, which are
|
||||
* available on FSC machines with an fscher or later chip. There is no need to
|
||||
* protect these with a lock as they are only modified from our attach function
|
||||
* which always gets called with the i2c-core lock held and never accessed
|
||||
* before the attach function is done with them.
|
||||
*/
|
||||
static int dmi_mult[6] = { 490, 200, 100, 100, 200, 100 };
|
||||
static int dmi_offset[6] = { 0, 0, 0, 0, 0, 0 };
|
||||
static int dmi_vref = -1;
|
||||
|
||||
/* Somewhat ugly :( global data pointer list with all fschmd devices, so that
|
||||
we can find our device data as when using misc_register there is no other
|
||||
method to get to ones device data from the open fop. */
|
||||
/*
|
||||
* Somewhat ugly :( global data pointer list with all fschmd devices, so that
|
||||
* we can find our device data as when using misc_register there is no other
|
||||
* method to get to ones device data from the open fop.
|
||||
*/
|
||||
static LIST_HEAD(watchdog_data_list);
|
||||
/* Note this lock not only protect list access, but also data.kref access */
|
||||
static DEFINE_MUTEX(watchdog_data_mutex);
|
||||
|
||||
/* Release our data struct when we're detached from the i2c client *and* all
|
||||
references to our watchdog device are released */
|
||||
/*
|
||||
* Release our data struct when we're detached from the i2c client *and* all
|
||||
* references to our watchdog device are released
|
||||
*/
|
||||
static void fschmd_release_resources(struct kref *ref)
|
||||
{
|
||||
struct fschmd_data *data = container_of(ref, struct fschmd_data, kref);
|
||||
@ -359,9 +372,14 @@ static ssize_t store_temp_max(struct device *dev, struct device_attribute
|
||||
{
|
||||
int index = to_sensor_dev_attr(devattr)->index;
|
||||
struct fschmd_data *data = dev_get_drvdata(dev);
|
||||
long v = simple_strtol(buf, NULL, 10) / 1000;
|
||||
long v;
|
||||
int err;
|
||||
|
||||
v = SENSORS_LIMIT(v, -128, 127) + 128;
|
||||
err = kstrtol(buf, 10, &v);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
v = SENSORS_LIMIT(v / 1000, -128, 127) + 128;
|
||||
|
||||
mutex_lock(&data->update_lock);
|
||||
i2c_smbus_write_byte_data(to_i2c_client(dev),
|
||||
@ -427,12 +445,23 @@ static ssize_t store_fan_div(struct device *dev, struct device_attribute
|
||||
int index = to_sensor_dev_attr(devattr)->index;
|
||||
struct fschmd_data *data = dev_get_drvdata(dev);
|
||||
/* supported values: 2, 4, 8 */
|
||||
unsigned long v = simple_strtoul(buf, NULL, 10);
|
||||
unsigned long v;
|
||||
int err;
|
||||
|
||||
err = kstrtoul(buf, 10, &v);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
switch (v) {
|
||||
case 2: v = 1; break;
|
||||
case 4: v = 2; break;
|
||||
case 8: v = 3; break;
|
||||
case 2:
|
||||
v = 1;
|
||||
break;
|
||||
case 4:
|
||||
v = 2;
|
||||
break;
|
||||
case 8:
|
||||
v = 3;
|
||||
break;
|
||||
default:
|
||||
dev_err(dev, "fan_div value %lu not supported. "
|
||||
"Choose one of 2, 4 or 8!\n", v);
|
||||
@ -502,7 +531,12 @@ static ssize_t store_pwm_auto_point1_pwm(struct device *dev,
|
||||
{
|
||||
int index = to_sensor_dev_attr(devattr)->index;
|
||||
struct fschmd_data *data = dev_get_drvdata(dev);
|
||||
unsigned long v = simple_strtoul(buf, NULL, 10);
|
||||
unsigned long v;
|
||||
int err;
|
||||
|
||||
err = kstrtoul(buf, 10, &v);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
/* reg: 0 = allow turning off (except on the syl), 1-255 = 50-100% */
|
||||
if (v || data->kind == fscsyl) {
|
||||
@ -522,8 +556,10 @@ static ssize_t store_pwm_auto_point1_pwm(struct device *dev,
|
||||
}
|
||||
|
||||
|
||||
/* The FSC hwmon family has the ability to force an attached alert led to flash
|
||||
from software, we export this as an alert_led sysfs attr */
|
||||
/*
|
||||
* The FSC hwmon family has the ability to force an attached alert led to flash
|
||||
* from software, we export this as an alert_led sysfs attr
|
||||
*/
|
||||
static ssize_t show_alert_led(struct device *dev,
|
||||
struct device_attribute *devattr, char *buf)
|
||||
{
|
||||
@ -540,7 +576,12 @@ static ssize_t store_alert_led(struct device *dev,
|
||||
{
|
||||
u8 reg;
|
||||
struct fschmd_data *data = dev_get_drvdata(dev);
|
||||
unsigned long v = simple_strtoul(buf, NULL, 10);
|
||||
unsigned long v;
|
||||
int err;
|
||||
|
||||
err = kstrtoul(buf, 10, &v);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
mutex_lock(&data->update_lock);
|
||||
|
||||
@ -754,8 +795,10 @@ static int watchdog_stop(struct fschmd_data *data)
|
||||
}
|
||||
|
||||
data->watchdog_control &= ~FSCHMD_WDOG_CONTROL_STARTED;
|
||||
/* Don't store the stop flag in our watchdog control register copy, as
|
||||
its a write only bit (read always returns 0) */
|
||||
/*
|
||||
* Don't store the stop flag in our watchdog control register copy, as
|
||||
* its a write only bit (read always returns 0)
|
||||
*/
|
||||
i2c_smbus_write_byte_data(data->client,
|
||||
FSCHMD_REG_WDOG_CONTROL[data->kind],
|
||||
data->watchdog_control | FSCHMD_WDOG_CONTROL_STOP);
|
||||
@ -769,10 +812,12 @@ static int watchdog_open(struct inode *inode, struct file *filp)
|
||||
struct fschmd_data *pos, *data = NULL;
|
||||
int watchdog_is_open;
|
||||
|
||||
/* We get called from drivers/char/misc.c with misc_mtx hold, and we
|
||||
call misc_register() from fschmd_probe() with watchdog_data_mutex
|
||||
hold, as misc_register() takes the misc_mtx lock, this is a possible
|
||||
deadlock, so we use mutex_trylock here. */
|
||||
/*
|
||||
* We get called from drivers/char/misc.c with misc_mtx hold, and we
|
||||
* call misc_register() from fschmd_probe() with watchdog_data_mutex
|
||||
* hold, as misc_register() takes the misc_mtx lock, this is a possible
|
||||
* deadlock, so we use mutex_trylock here.
|
||||
*/
|
||||
if (!mutex_trylock(&watchdog_data_mutex))
|
||||
return -ERESTARTSYS;
|
||||
list_for_each_entry(pos, &watchdog_data_list, list) {
|
||||
@ -847,7 +892,8 @@ static ssize_t watchdog_write(struct file *filp, const char __user *buf,
|
||||
return count;
|
||||
}
|
||||
|
||||
static long watchdog_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
||||
static long watchdog_ioctl(struct file *filp, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct watchdog_info ident = {
|
||||
.options = WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT |
|
||||
@ -930,30 +976,38 @@ static const struct file_operations watchdog_fops = {
|
||||
* Detect, register, unregister and update device functions
|
||||
*/
|
||||
|
||||
/* DMI decode routine to read voltage scaling factors from special DMI tables,
|
||||
which are available on FSC machines with an fscher or later chip. */
|
||||
/*
|
||||
* DMI decode routine to read voltage scaling factors from special DMI tables,
|
||||
* which are available on FSC machines with an fscher or later chip.
|
||||
*/
|
||||
static void fschmd_dmi_decode(const struct dmi_header *header, void *dummy)
|
||||
{
|
||||
int i, mult[3] = { 0 }, offset[3] = { 0 }, vref = 0, found = 0;
|
||||
|
||||
/* dmi code ugliness, we get passed the address of the contents of
|
||||
a complete DMI record, but in the form of a dmi_header pointer, in
|
||||
reality this address holds header->length bytes of which the header
|
||||
are the first 4 bytes */
|
||||
/*
|
||||
* dmi code ugliness, we get passed the address of the contents of
|
||||
* a complete DMI record, but in the form of a dmi_header pointer, in
|
||||
* reality this address holds header->length bytes of which the header
|
||||
* are the first 4 bytes
|
||||
*/
|
||||
u8 *dmi_data = (u8 *)header;
|
||||
|
||||
/* We are looking for OEM-specific type 185 */
|
||||
if (header->type != 185)
|
||||
return;
|
||||
|
||||
/* we are looking for what Siemens calls "subtype" 19, the subtype
|
||||
is stored in byte 5 of the dmi block */
|
||||
/*
|
||||
* we are looking for what Siemens calls "subtype" 19, the subtype
|
||||
* is stored in byte 5 of the dmi block
|
||||
*/
|
||||
if (header->length < 5 || dmi_data[4] != 19)
|
||||
return;
|
||||
|
||||
/* After the subtype comes 1 unknown byte and then blocks of 5 bytes,
|
||||
consisting of what Siemens calls an "Entity" number, followed by
|
||||
2 16-bit words in LSB first order */
|
||||
/*
|
||||
* After the subtype comes 1 unknown byte and then blocks of 5 bytes,
|
||||
* consisting of what Siemens calls an "Entity" number, followed by
|
||||
* 2 16-bit words in LSB first order
|
||||
*/
|
||||
for (i = 6; (i + 4) < header->length; i += 5) {
|
||||
/* entity 1 - 3: voltage multiplier and offset */
|
||||
if (dmi_data[i] >= 1 && dmi_data[i] <= 3) {
|
||||
@ -988,9 +1042,11 @@ static void fschmd_dmi_decode(const struct dmi_header *header, void *dummy)
|
||||
dmi_mult[i] = mult[i] * 10;
|
||||
dmi_offset[i] = offset[i] * 10;
|
||||
}
|
||||
/* According to the docs there should be separate dmi entries
|
||||
for the mult's and offsets of in3-5 of the syl, but on
|
||||
my test machine these are not present */
|
||||
/*
|
||||
* According to the docs there should be separate dmi entries
|
||||
* for the mult's and offsets of in3-5 of the syl, but on
|
||||
* my test machine these are not present
|
||||
*/
|
||||
dmi_mult[3] = dmi_mult[2];
|
||||
dmi_mult[4] = dmi_mult[1];
|
||||
dmi_mult[5] = dmi_mult[2];
|
||||
@ -1058,15 +1114,19 @@ static int fschmd_probe(struct i2c_client *client,
|
||||
mutex_init(&data->watchdog_lock);
|
||||
INIT_LIST_HEAD(&data->list);
|
||||
kref_init(&data->kref);
|
||||
/* Store client pointer in our data struct for watchdog usage
|
||||
(where the client is found through a data ptr instead of the
|
||||
otherway around) */
|
||||
/*
|
||||
* Store client pointer in our data struct for watchdog usage
|
||||
* (where the client is found through a data ptr instead of the
|
||||
* otherway around)
|
||||
*/
|
||||
data->client = client;
|
||||
data->kind = kind;
|
||||
|
||||
if (kind == fscpos) {
|
||||
/* The Poseidon has hardwired temp limits, fill these
|
||||
in for the alarm resetting code */
|
||||
/*
|
||||
* The Poseidon has hardwired temp limits, fill these
|
||||
* in for the alarm resetting code
|
||||
*/
|
||||
data->temp_max[0] = 70 + 128;
|
||||
data->temp_max[1] = 50 + 128;
|
||||
data->temp_max[2] = 50 + 128;
|
||||
@ -1157,9 +1217,11 @@ static int fschmd_probe(struct i2c_client *client,
|
||||
goto exit_detach;
|
||||
}
|
||||
|
||||
/* We take the data_mutex lock early so that watchdog_open() cannot
|
||||
run when misc_register() has completed, but we've not yet added
|
||||
our data to the watchdog_data_list (and set the default timeout) */
|
||||
/*
|
||||
* We take the data_mutex lock early so that watchdog_open() cannot
|
||||
* run when misc_register() has completed, but we've not yet added
|
||||
* our data to the watchdog_data_list (and set the default timeout)
|
||||
*/
|
||||
mutex_lock(&watchdog_data_mutex);
|
||||
for (i = 0; i < ARRAY_SIZE(watchdog_minors); i++) {
|
||||
/* Register our watchdog part */
|
||||
@ -1225,8 +1287,10 @@ static int fschmd_remove(struct i2c_client *client)
|
||||
mutex_unlock(&data->watchdog_lock);
|
||||
}
|
||||
|
||||
/* Check if registered in case we're called from fschmd_detect
|
||||
to cleanup after an error */
|
||||
/*
|
||||
* Check if registered in case we're called from fschmd_detect
|
||||
* to cleanup after an error
|
||||
*/
|
||||
if (data->hwmon_dev)
|
||||
hwmon_device_unregister(data->hwmon_dev);
|
||||
|
||||
@ -1269,8 +1333,10 @@ static struct fschmd_data *fschmd_update_device(struct device *dev)
|
||||
client,
|
||||
FSCHMD_REG_TEMP_LIMIT[data->kind][i]);
|
||||
|
||||
/* reset alarm if the alarm condition is gone,
|
||||
the chip doesn't do this itself */
|
||||
/*
|
||||
* reset alarm if the alarm condition is gone,
|
||||
* the chip doesn't do this itself
|
||||
*/
|
||||
if ((data->temp_status[i] & FSCHMD_TEMP_ALARM_MASK) ==
|
||||
FSCHMD_TEMP_ALARM_MASK &&
|
||||
data->temp_act[i] < data->temp_max[i])
|
||||
|
Loading…
Reference in New Issue
Block a user