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:
Коммит
0a552051a4
|
@ -35,11 +35,11 @@ temp1_input Local temperature (1/1000 degree,
|
|||
temp[2-9]_input CPU temperatures (1/1000 degree,
|
||||
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
|
||||
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
|
||||
that are not enabled. Anyway, a sensor that is enabled may actually be not
|
||||
|
|
|
@ -195,7 +195,7 @@ abort:
|
|||
}
|
||||
|
||||
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 err;
|
||||
|
|
|
@ -412,8 +412,9 @@ static ssize_t show_pwm(struct device *dev,
|
|||
return sprintf(buf, "%d\n", val);
|
||||
}
|
||||
|
||||
static ssize_t store_mode(struct device *dev, struct device_attribute *devattr,
|
||||
const char *buf, size_t count)
|
||||
static ssize_t store_enable(struct device *dev,
|
||||
struct device_attribute *devattr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
int index = to_sensor_dev_attr(devattr)->index;
|
||||
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)
|
||||
return -EINVAL;
|
||||
if (val > 1 || (val && !data->fan_mode[index]))
|
||||
if (val < 1 || val > 2 || (val == 2 && !data->fan_mode[index]))
|
||||
return -EINVAL;
|
||||
|
||||
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 0 for manual mode or 1 for SmartFan mode */
|
||||
static ssize_t show_mode(struct device *dev,
|
||||
struct device_attribute *devattr, char *buf)
|
||||
/* Return 1 for manual mode or 2 for SmartFan mode */
|
||||
static ssize_t show_enable(struct device *dev,
|
||||
struct device_attribute *devattr, char *buf)
|
||||
{
|
||||
int index = to_sensor_dev_attr(devattr)->index;
|
||||
struct nct7904_data *data = dev_get_drvdata(dev);
|
||||
|
@ -443,36 +444,36 @@ static ssize_t show_mode(struct device *dev,
|
|||
if (val < 0)
|
||||
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 */
|
||||
static SENSOR_DEVICE_ATTR(fan1_pwm, S_IRUGO | S_IWUSR,
|
||||
static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR,
|
||||
show_pwm, store_pwm, 0);
|
||||
static SENSOR_DEVICE_ATTR(fan1_mode, S_IRUGO | S_IWUSR,
|
||||
show_mode, store_mode, 0);
|
||||
static SENSOR_DEVICE_ATTR(fan2_pwm, S_IRUGO | S_IWUSR,
|
||||
static SENSOR_DEVICE_ATTR(pwm1_enable, S_IRUGO | S_IWUSR,
|
||||
show_enable, store_enable, 0);
|
||||
static SENSOR_DEVICE_ATTR(pwm2, S_IRUGO | S_IWUSR,
|
||||
show_pwm, store_pwm, 1);
|
||||
static SENSOR_DEVICE_ATTR(fan2_mode, S_IRUGO | S_IWUSR,
|
||||
show_mode, store_mode, 1);
|
||||
static SENSOR_DEVICE_ATTR(fan3_pwm, S_IRUGO | S_IWUSR,
|
||||
static SENSOR_DEVICE_ATTR(pwm2_enable, S_IRUGO | S_IWUSR,
|
||||
show_enable, store_enable, 1);
|
||||
static SENSOR_DEVICE_ATTR(pwm3, S_IRUGO | S_IWUSR,
|
||||
show_pwm, store_pwm, 2);
|
||||
static SENSOR_DEVICE_ATTR(fan3_mode, S_IRUGO | S_IWUSR,
|
||||
show_mode, store_mode, 2);
|
||||
static SENSOR_DEVICE_ATTR(fan4_pwm, S_IRUGO | S_IWUSR,
|
||||
static SENSOR_DEVICE_ATTR(pwm3_enable, S_IRUGO | S_IWUSR,
|
||||
show_enable, store_enable, 2);
|
||||
static SENSOR_DEVICE_ATTR(pwm4, S_IRUGO | S_IWUSR,
|
||||
show_pwm, store_pwm, 3);
|
||||
static SENSOR_DEVICE_ATTR(fan4_mode, S_IRUGO | S_IWUSR,
|
||||
show_mode, store_mode, 3);
|
||||
static SENSOR_DEVICE_ATTR(pwm4_enable, S_IRUGO | S_IWUSR,
|
||||
show_enable, store_enable, 3);
|
||||
|
||||
static struct attribute *nct7904_fanctl_attrs[] = {
|
||||
&sensor_dev_attr_fan1_pwm.dev_attr.attr,
|
||||
&sensor_dev_attr_fan1_mode.dev_attr.attr,
|
||||
&sensor_dev_attr_fan2_pwm.dev_attr.attr,
|
||||
&sensor_dev_attr_fan2_mode.dev_attr.attr,
|
||||
&sensor_dev_attr_fan3_pwm.dev_attr.attr,
|
||||
&sensor_dev_attr_fan3_mode.dev_attr.attr,
|
||||
&sensor_dev_attr_fan4_pwm.dev_attr.attr,
|
||||
&sensor_dev_attr_fan4_mode.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm1.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm1_enable.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm2.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm2_enable.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm3.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm3_enable.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm4.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm4_enable.dev_attr.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче