Two patches headed for -stable.

nct7802: Fix integer overflow seen when writing voltage limits
 nct7904: Rename pwm attributes to match hwmon ABI
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJVuZTpAAoJEMsfJm/On5mBlNIP/0olmsXqXiAwaUfksLbv9nMF
 fBriG9J39VHconorUhaMK5ugKxLTHoYP1AFSYGAIlgb10x5xEN3IsjtQ7NZCfwMf
 JD4V1fBF+2Vgec8662+dNkvbIAaXJnO+CLMy9OU9nTiRC8wNHG0UiDGRXAZSuCuu
 uDayrXXj05XSfs3xobZ58WXXcQNbkK7q6h1C2yP7N6k1xcWtu7mwK2dcQu0ZeUgf
 wn8vdSKLcdofnfvt0ckm0joObyzWeyzINS2BMyJh7yr/cZyPHuPVOCZaD1Kjy0ts
 +PVoibDmtN9l/KlZ3y7a6XHd45JmNbLkFUxnAkPmoLlNUpleNTGjW0c+ffwsn53P
 HzS5Qqc5X/A59J2a539KHsvE0QHAhmA2m+XjVsq5Kx4qcl7suRE/7GbwqWzMt2OP
 fPzMXcWd+G75oix9vC5SAFdm88vPVTs27j7qSnr+Cte3k49XYegCB3GPFrQHqAzP
 dTkri7sWFhOQByl0kwIbl1oa5lazcN1nd1YjPfszPFyErG8b7FtE8XktpQfSZ6/d
 QPzwXyHE2GgTxW4d3eMYpeslLBimSQSe51S/zL+Zvg263JHIpIH/j7/K7Fk5uRh6
 WXhnmmFrBVVOztOXvskL7AJ8hgghOHDAkrz6RmMG8KpHcpFnzYz7/O313SzotLNc
 HfLwctCm8hEwCzA09495
 =KC6y
 -----END PGP SIGNATURE-----

Merge tag 'hwmon-for-linus-v4.2-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging

Pull hwmon fixes from Guenter Roeck:
 "Two patches headed for -stable.

  nct7802: Fix integer overflow seen when writing voltage limits
  nct7904: Rename pwm attributes to match hwmon ABI"

* tag 'hwmon-for-linus-v4.2-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
  hwmon: (nct7802) Fix integer overflow seen when writing voltage limits
  hwmon: (nct7904) Rename pwm attributes to match hwmon ABI
This commit is contained in:
Linus Torvalds 2015-07-30 08:04:19 -07:00
commit 0a552051a4
3 changed files with 32 additions and 31 deletions

View file

@ -35,11 +35,11 @@ temp1_input Local temperature (1/1000 degree,
temp[2-9]_input CPU temperatures (1/1000 degree, temp[2-9]_input CPU temperatures (1/1000 degree,
0.125 degree resolution) 0.125 degree resolution)
fan[1-4]_mode R/W, 0/1 for manual or SmartFan mode pwm[1-4]_enable R/W, 1/2 for manual or SmartFan mode
Setting SmartFan mode is supported only if it has been Setting SmartFan mode is supported only if it has been
previously configured by BIOS (or configuration EEPROM) previously configured by BIOS (or configuration EEPROM)
fan[1-4]_pwm R/O in SmartFan mode, R/W in manual control mode pwm[1-4] R/O in SmartFan mode, R/W in manual control mode
The driver checks sensor control registers and does not export the sensors The driver checks sensor control registers and does not export the sensors
that are not enabled. Anyway, a sensor that is enabled may actually be not that are not enabled. Anyway, a sensor that is enabled may actually be not

View file

@ -195,7 +195,7 @@ static int nct7802_read_voltage(struct nct7802_data *data, int nr, int index)
} }
static int nct7802_write_voltage(struct nct7802_data *data, int nr, int index, static int nct7802_write_voltage(struct nct7802_data *data, int nr, int index,
unsigned int voltage) unsigned long voltage)
{ {
int shift = 8 - REG_VOLTAGE_LIMIT_MSB_SHIFT[index - 1][nr]; int shift = 8 - REG_VOLTAGE_LIMIT_MSB_SHIFT[index - 1][nr];
int err; int err;

View file

@ -412,8 +412,9 @@ static ssize_t show_pwm(struct device *dev,
return sprintf(buf, "%d\n", val); return sprintf(buf, "%d\n", val);
} }
static ssize_t store_mode(struct device *dev, struct device_attribute *devattr, static ssize_t store_enable(struct device *dev,
const char *buf, size_t count) struct device_attribute *devattr,
const char *buf, size_t count)
{ {
int index = to_sensor_dev_attr(devattr)->index; int index = to_sensor_dev_attr(devattr)->index;
struct nct7904_data *data = dev_get_drvdata(dev); struct nct7904_data *data = dev_get_drvdata(dev);
@ -422,18 +423,18 @@ static ssize_t store_mode(struct device *dev, struct device_attribute *devattr,
if (kstrtoul(buf, 10, &val) < 0) if (kstrtoul(buf, 10, &val) < 0)
return -EINVAL; return -EINVAL;
if (val > 1 || (val && !data->fan_mode[index])) if (val < 1 || val > 2 || (val == 2 && !data->fan_mode[index]))
return -EINVAL; return -EINVAL;
ret = nct7904_write_reg(data, BANK_3, FANCTL1_FMR_REG + index, ret = nct7904_write_reg(data, BANK_3, FANCTL1_FMR_REG + index,
val ? data->fan_mode[index] : 0); val == 2 ? data->fan_mode[index] : 0);
return ret ? ret : count; return ret ? ret : count;
} }
/* Return 0 for manual mode or 1 for SmartFan mode */ /* Return 1 for manual mode or 2 for SmartFan mode */
static ssize_t show_mode(struct device *dev, static ssize_t show_enable(struct device *dev,
struct device_attribute *devattr, char *buf) struct device_attribute *devattr, char *buf)
{ {
int index = to_sensor_dev_attr(devattr)->index; int index = to_sensor_dev_attr(devattr)->index;
struct nct7904_data *data = dev_get_drvdata(dev); struct nct7904_data *data = dev_get_drvdata(dev);
@ -443,36 +444,36 @@ static ssize_t show_mode(struct device *dev,
if (val < 0) if (val < 0)
return val; return val;
return sprintf(buf, "%d\n", val ? 1 : 0); return sprintf(buf, "%d\n", val ? 2 : 1);
} }
/* 2 attributes per channel: pwm and mode */ /* 2 attributes per channel: pwm and mode */
static SENSOR_DEVICE_ATTR(fan1_pwm, S_IRUGO | S_IWUSR, static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR,
show_pwm, store_pwm, 0); show_pwm, store_pwm, 0);
static SENSOR_DEVICE_ATTR(fan1_mode, S_IRUGO | S_IWUSR, static SENSOR_DEVICE_ATTR(pwm1_enable, S_IRUGO | S_IWUSR,
show_mode, store_mode, 0); show_enable, store_enable, 0);
static SENSOR_DEVICE_ATTR(fan2_pwm, S_IRUGO | S_IWUSR, static SENSOR_DEVICE_ATTR(pwm2, S_IRUGO | S_IWUSR,
show_pwm, store_pwm, 1); show_pwm, store_pwm, 1);
static SENSOR_DEVICE_ATTR(fan2_mode, S_IRUGO | S_IWUSR, static SENSOR_DEVICE_ATTR(pwm2_enable, S_IRUGO | S_IWUSR,
show_mode, store_mode, 1); show_enable, store_enable, 1);
static SENSOR_DEVICE_ATTR(fan3_pwm, S_IRUGO | S_IWUSR, static SENSOR_DEVICE_ATTR(pwm3, S_IRUGO | S_IWUSR,
show_pwm, store_pwm, 2); show_pwm, store_pwm, 2);
static SENSOR_DEVICE_ATTR(fan3_mode, S_IRUGO | S_IWUSR, static SENSOR_DEVICE_ATTR(pwm3_enable, S_IRUGO | S_IWUSR,
show_mode, store_mode, 2); show_enable, store_enable, 2);
static SENSOR_DEVICE_ATTR(fan4_pwm, S_IRUGO | S_IWUSR, static SENSOR_DEVICE_ATTR(pwm4, S_IRUGO | S_IWUSR,
show_pwm, store_pwm, 3); show_pwm, store_pwm, 3);
static SENSOR_DEVICE_ATTR(fan4_mode, S_IRUGO | S_IWUSR, static SENSOR_DEVICE_ATTR(pwm4_enable, S_IRUGO | S_IWUSR,
show_mode, store_mode, 3); show_enable, store_enable, 3);
static struct attribute *nct7904_fanctl_attrs[] = { static struct attribute *nct7904_fanctl_attrs[] = {
&sensor_dev_attr_fan1_pwm.dev_attr.attr, &sensor_dev_attr_pwm1.dev_attr.attr,
&sensor_dev_attr_fan1_mode.dev_attr.attr, &sensor_dev_attr_pwm1_enable.dev_attr.attr,
&sensor_dev_attr_fan2_pwm.dev_attr.attr, &sensor_dev_attr_pwm2.dev_attr.attr,
&sensor_dev_attr_fan2_mode.dev_attr.attr, &sensor_dev_attr_pwm2_enable.dev_attr.attr,
&sensor_dev_attr_fan3_pwm.dev_attr.attr, &sensor_dev_attr_pwm3.dev_attr.attr,
&sensor_dev_attr_fan3_mode.dev_attr.attr, &sensor_dev_attr_pwm3_enable.dev_attr.attr,
&sensor_dev_attr_fan4_pwm.dev_attr.attr, &sensor_dev_attr_pwm4.dev_attr.attr,
&sensor_dev_attr_fan4_mode.dev_attr.attr, &sensor_dev_attr_pwm4_enable.dev_attr.attr,
NULL NULL
}; };