hwmon: (smsc47m1) Fix checkpatch issues
Fixed: ERROR: code indent should use tabs where possible ERROR: do not use assignment in if condition ERROR: space required after that ',' (ctx:VxV) ERROR: spaces required around that '<=' (ctx:VxV) ERROR: spaces required around that '==' (ctx:VxV) ERROR: spaces required around that '>=' (ctx:VxV) ERROR: trailing statements should be on next line ERROR: trailing whitespace WARNING: simple_strtol is obsolete, use kstrtol instead WARNING: static const char * array should probably be static const char * const Modify multi-line comments to follow Documentation/CodingStyle. Also: s/#define^I/#define / Not fixed (false positive): ERROR: Macros with multiple statements should be enclosed in a do - while loop Cc: Jean Delvare <khali@linux-fr.org> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
7e612685a3
commit
85a0c0d1a1
1 changed files with 104 additions and 62 deletions
|
@ -1,30 +1,30 @@
|
|||
/*
|
||||
smsc47m1.c - Part of lm_sensors, Linux kernel modules
|
||||
for hardware monitoring
|
||||
|
||||
Supports the SMSC LPC47B27x, LPC47M10x, LPC47M112, LPC47M13x,
|
||||
LPC47M14x, LPC47M15x, LPC47M192, LPC47M292 and LPC47M997
|
||||
Super-I/O chips.
|
||||
|
||||
Copyright (C) 2002 Mark D. Studebaker <mdsxyz123@yahoo.com>
|
||||
Copyright (C) 2004-2007 Jean Delvare <khali@linux-fr.org>
|
||||
Ported to Linux 2.6 by Gabriele Gorla <gorlik@yahoo.com>
|
||||
and Jean Delvare
|
||||
|
||||
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
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
* smsc47m1.c - Part of lm_sensors, Linux kernel modules
|
||||
* for hardware monitoring
|
||||
*
|
||||
* Supports the SMSC LPC47B27x, LPC47M10x, LPC47M112, LPC47M13x,
|
||||
* LPC47M14x, LPC47M15x, LPC47M192, LPC47M292 and LPC47M997
|
||||
* Super-I/O chips.
|
||||
*
|
||||
* Copyright (C) 2002 Mark D. Studebaker <mdsxyz123@yahoo.com>
|
||||
* Copyright (C) 2004-2007 Jean Delvare <khali@linux-fr.org>
|
||||
* Ported to Linux 2.6 by Gabriele Gorla <gorlik@yahoo.com>
|
||||
* and Jean Delvare
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
|
@ -53,8 +53,8 @@ enum chips { smsc47m1, smsc47m2 };
|
|||
|
||||
/* Super-I/0 registers and commands */
|
||||
|
||||
#define REG 0x2e /* The register to read/write */
|
||||
#define VAL 0x2f /* The value to read/write */
|
||||
#define REG 0x2e /* The register to read/write */
|
||||
#define VAL 0x2f /* The value to read/write */
|
||||
|
||||
static inline void
|
||||
superio_outb(int reg, int val)
|
||||
|
@ -111,10 +111,11 @@ static const u8 SMSC47M1_REG_PWM[3] = { 0x56, 0x57, 0x69 };
|
|||
#define SMSC47M2_REG_PPIN3 0x2c
|
||||
#define SMSC47M2_REG_FANDIV3 0x6a
|
||||
|
||||
#define MIN_FROM_REG(reg,div) ((reg)>=192 ? 0 : \
|
||||
983040/((192-(reg))*(div)))
|
||||
#define FAN_FROM_REG(reg,div,preload) ((reg)<=(preload) || (reg)==255 ? 0 : \
|
||||
983040/(((reg)-(preload))*(div)))
|
||||
#define MIN_FROM_REG(reg, div) ((reg) >= 192 ? 0 : \
|
||||
983040 / ((192 - (reg)) * (div)))
|
||||
#define FAN_FROM_REG(reg, div, preload) ((reg) <= (preload) || (reg) == 255 ? \
|
||||
0 : \
|
||||
983040 / (((reg) - (preload)) * (div)))
|
||||
#define DIV_FROM_REG(reg) (1 << (reg))
|
||||
#define PWM_FROM_REG(reg) (((reg) & 0x7E) << 1)
|
||||
#define PWM_EN_FROM_REG(reg) ((~(reg)) & 0x01)
|
||||
|
@ -171,10 +172,12 @@ static ssize_t get_fan(struct device *dev, struct device_attribute
|
|||
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
|
||||
struct smsc47m1_data *data = smsc47m1_update_device(dev, 0);
|
||||
int nr = attr->index;
|
||||
/* This chip (stupidly) stops monitoring fan speed if PWM is
|
||||
enabled and duty cycle is 0%. This is fine if the monitoring
|
||||
and control concern the same fan, but troublesome if they are
|
||||
not (which could as well happen). */
|
||||
/*
|
||||
* This chip (stupidly) stops monitoring fan speed if PWM is
|
||||
* enabled and duty cycle is 0%. This is fine if the monitoring
|
||||
* and control concern the same fan, but troublesome if they are
|
||||
* not (which could as well happen).
|
||||
*/
|
||||
int rpm = (data->pwm[nr] & 0x7F) == 0x00 ? 0 :
|
||||
FAN_FROM_REG(data->fan[nr],
|
||||
DIV_FROM_REG(data->fan_div[nr]),
|
||||
|
@ -238,7 +241,13 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute
|
|||
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
|
||||
struct smsc47m1_data *data = dev_get_drvdata(dev);
|
||||
int nr = attr->index;
|
||||
long rpmdiv, val = simple_strtol(buf, NULL, 10);
|
||||
long rpmdiv;
|
||||
long val;
|
||||
int err;
|
||||
|
||||
err = kstrtol(buf, 10, &val);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
mutex_lock(&data->update_lock);
|
||||
rpmdiv = val * DIV_FROM_REG(data->fan_div[nr]);
|
||||
|
@ -256,28 +265,44 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute
|
|||
return count;
|
||||
}
|
||||
|
||||
/* Note: we save and restore the fan minimum here, because its value is
|
||||
determined in part by the fan clock divider. This follows the principle
|
||||
of least surprise; the user doesn't expect the fan minimum to change just
|
||||
because the divider changed. */
|
||||
/*
|
||||
* Note: we save and restore the fan minimum here, because its value is
|
||||
* determined in part by the fan clock divider. This follows the principle
|
||||
* of least surprise; the user doesn't expect the fan minimum to change just
|
||||
* because the divider changed.
|
||||
*/
|
||||
static ssize_t set_fan_div(struct device *dev, struct device_attribute
|
||||
*devattr, const char *buf, size_t count)
|
||||
{
|
||||
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
|
||||
struct smsc47m1_data *data = dev_get_drvdata(dev);
|
||||
int nr = attr->index;
|
||||
long new_div = simple_strtol(buf, NULL, 10), tmp;
|
||||
long new_div;
|
||||
int err;
|
||||
long tmp;
|
||||
u8 old_div = DIV_FROM_REG(data->fan_div[nr]);
|
||||
|
||||
err = kstrtol(buf, 10, &new_div);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (new_div == old_div) /* No change */
|
||||
return count;
|
||||
|
||||
mutex_lock(&data->update_lock);
|
||||
switch (new_div) {
|
||||
case 1: data->fan_div[nr] = 0; break;
|
||||
case 2: data->fan_div[nr] = 1; break;
|
||||
case 4: data->fan_div[nr] = 2; break;
|
||||
case 8: data->fan_div[nr] = 3; break;
|
||||
case 1:
|
||||
data->fan_div[nr] = 0;
|
||||
break;
|
||||
case 2:
|
||||
data->fan_div[nr] = 1;
|
||||
break;
|
||||
case 4:
|
||||
data->fan_div[nr] = 2;
|
||||
break;
|
||||
case 8:
|
||||
data->fan_div[nr] = 3;
|
||||
break;
|
||||
default:
|
||||
mutex_unlock(&data->update_lock);
|
||||
return -EINVAL;
|
||||
|
@ -315,7 +340,12 @@ static ssize_t set_pwm(struct device *dev, struct device_attribute
|
|||
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
|
||||
struct smsc47m1_data *data = dev_get_drvdata(dev);
|
||||
int nr = attr->index;
|
||||
long val = simple_strtol(buf, NULL, 10);
|
||||
long val;
|
||||
int err;
|
||||
|
||||
err = kstrtol(buf, 10, &val);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (val < 0 || val > 255)
|
||||
return -EINVAL;
|
||||
|
@ -336,9 +366,14 @@ static ssize_t set_pwm_en(struct device *dev, struct device_attribute
|
|||
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
|
||||
struct smsc47m1_data *data = dev_get_drvdata(dev);
|
||||
int nr = attr->index;
|
||||
long val = simple_strtol(buf, NULL, 10);
|
||||
|
||||
if (val != 0 && val != 1)
|
||||
unsigned long val;
|
||||
int err;
|
||||
|
||||
err = kstrtoul(buf, 10, &val);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (val > 1)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&data->update_lock);
|
||||
|
@ -519,8 +554,10 @@ static int __init smsc47m1_find(unsigned short *addr,
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* Enable only if address is set (needed at least on the
|
||||
* Compaq Presario S4000NX) */
|
||||
/*
|
||||
* Enable only if address is set (needed at least on the
|
||||
* Compaq Presario S4000NX)
|
||||
*/
|
||||
sio_data->activate = superio_inb(SUPERIO_REG_ACT);
|
||||
if ((sio_data->activate & 0x01) == 0) {
|
||||
pr_info("Enabling device\n");
|
||||
|
@ -646,7 +683,7 @@ static int __init smsc47m1_probe(struct platform_device *pdev)
|
|||
int err;
|
||||
int fan1, fan2, fan3, pwm1, pwm2, pwm3;
|
||||
|
||||
static const char *names[] = {
|
||||
static const char * const names[] = {
|
||||
"smsc47m1",
|
||||
"smsc47m2",
|
||||
};
|
||||
|
@ -657,7 +694,8 @@ static int __init smsc47m1_probe(struct platform_device *pdev)
|
|||
if (err < 0)
|
||||
return err;
|
||||
|
||||
if (!(data = kzalloc(sizeof(struct smsc47m1_data), GFP_KERNEL))) {
|
||||
data = kzalloc(sizeof(struct smsc47m1_data), GFP_KERNEL);
|
||||
if (!data) {
|
||||
err = -ENOMEM;
|
||||
goto error_release;
|
||||
}
|
||||
|
@ -668,8 +706,10 @@ static int __init smsc47m1_probe(struct platform_device *pdev)
|
|||
mutex_init(&data->update_lock);
|
||||
platform_set_drvdata(pdev, data);
|
||||
|
||||
/* If no function is properly configured, there's no point in
|
||||
actually registering the chip. */
|
||||
/*
|
||||
* If no function is properly configured, there's no point in
|
||||
* actually registering the chip.
|
||||
*/
|
||||
pwm1 = (smsc47m1_read_value(data, SMSC47M1_REG_PPIN(0)) & 0x05)
|
||||
== 0x04;
|
||||
pwm2 = (smsc47m1_read_value(data, SMSC47M1_REG_PPIN(1)) & 0x05)
|
||||
|
@ -697,12 +737,14 @@ static int __init smsc47m1_probe(struct platform_device *pdev)
|
|||
goto error_free;
|
||||
}
|
||||
|
||||
/* Some values (fan min, clock dividers, pwm registers) may be
|
||||
needed before any update is triggered, so we better read them
|
||||
at least once here. We don't usually do it that way, but in
|
||||
this particular case, manually reading 5 registers out of 8
|
||||
doesn't make much sense and we're better using the existing
|
||||
function. */
|
||||
/*
|
||||
* Some values (fan min, clock dividers, pwm registers) may be
|
||||
* needed before any update is triggered, so we better read them
|
||||
* at least once here. We don't usually do it that way, but in
|
||||
* this particular case, manually reading 5 registers out of 8
|
||||
* doesn't make much sense and we're better using the existing
|
||||
* function.
|
||||
*/
|
||||
smsc47m1_update_device(dev, 1);
|
||||
|
||||
/* Register sysfs hooks */
|
||||
|
|
Loading…
Reference in a new issue