Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 82f05a08 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull hwmon fixes from Guenter Roeck:
 "Several bug fixes in various drivers, plus a minor cleanup in the
  tmp103 driver"

* tag 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
  hwmon: (tmp103) Remove duplicate test for I2C_FUNC_SMBUS_BYTE_DATA functionality
  hwmon: (w83793) Fix vrm write operation
  hwmon: (w83791d) Fix vrm write operation
  hwmon: (w83627hf) Fix vrm write operation
  hwmon: (vt1211) Fix vrm write operation
  hwmon: (pc87360) Fix vrm write operation
  hwmon: (lm87) Fix vrm write operation
  hwmon: (asb100) Fix vrm write operation
  hwmon: (adm1026) Fix vrm write operation
  hwmon: (adm1025) Fix vrm write operation
  hwmon: (hih6130) Fix missing hih6130->write_length setting
  hwmon: (dme1737) Prevent overflow problem when writing large limits
  hwmon: (emc6w201) Fix temperature limit range
  hwmon: (ads1015) Fix out-of-bounds array access
  hwmon: (lm92) Prevent overflow problem when writing large limits
parents ae36e95c 6ddd855c
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -382,6 +382,9 @@ static ssize_t set_vrm(struct device *dev, struct device_attribute *attr,
	if (err)
		return err;

	if (val > 255)
		return -EINVAL;

	data->vrm = val;
	return count;
}
+3 −0
Original line number Diff line number Diff line
@@ -1085,6 +1085,9 @@ static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr,
	if (err)
		return err;

	if (val > 255)
		return -EINVAL;

	data->vrm = val;
	return count;
}
+2 −0
Original line number Diff line number Diff line
@@ -212,6 +212,7 @@ static int ads1015_get_channels_config_of(struct i2c_client *client)
				dev_err(&client->dev,
					"invalid gain on %s\n",
					node->full_name);
				return -EINVAL;
			}
		}

@@ -222,6 +223,7 @@ static int ads1015_get_channels_config_of(struct i2c_client *client)
				dev_err(&client->dev,
					"invalid data_rate on %s\n",
					node->full_name);
				return -EINVAL;
			}
		}

+4 −0
Original line number Diff line number Diff line
@@ -510,6 +510,10 @@ static ssize_t set_vrm(struct device *dev, struct device_attribute *attr,
	err = kstrtoul(buf, 10, &val);
	if (err)
		return err;

	if (val > 255)
		return -EINVAL;

	data->vrm = val;
	return count;
}
+18 −15
Original line number Diff line number Diff line
@@ -247,8 +247,8 @@ struct dme1737_data {
	u8  pwm_acz[3];
	u8  pwm_freq[6];
	u8  pwm_rr[2];
	u8  zone_low[3];
	u8  zone_abs[3];
	s8  zone_low[3];
	s8  zone_abs[3];
	u8  zone_hyst[2];
	u32 alarms;
};
@@ -277,7 +277,7 @@ static inline int IN_FROM_REG(int reg, int nominal, int res)
	return (reg * nominal + (3 << (res - 3))) / (3 << (res - 2));
}

static inline int IN_TO_REG(int val, int nominal)
static inline int IN_TO_REG(long val, int nominal)
{
	return clamp_val((val * 192 + nominal / 2) / nominal, 0, 255);
}
@@ -293,7 +293,7 @@ static inline int TEMP_FROM_REG(int reg, int res)
	return (reg * 1000) >> (res - 8);
}

static inline int TEMP_TO_REG(int val)
static inline int TEMP_TO_REG(long val)
{
	return clamp_val((val < 0 ? val - 500 : val + 500) / 1000, -128, 127);
}
@@ -308,7 +308,7 @@ static inline int TEMP_RANGE_FROM_REG(int reg)
	return TEMP_RANGE[(reg >> 4) & 0x0f];
}

static int TEMP_RANGE_TO_REG(int val, int reg)
static int TEMP_RANGE_TO_REG(long val, int reg)
{
	int i;

@@ -331,7 +331,7 @@ static inline int TEMP_HYST_FROM_REG(int reg, int ix)
	return (((ix == 1) ? reg : reg >> 4) & 0x0f) * 1000;
}

static inline int TEMP_HYST_TO_REG(int val, int ix, int reg)
static inline int TEMP_HYST_TO_REG(long val, int ix, int reg)
{
	int hyst = clamp_val((val + 500) / 1000, 0, 15);

@@ -347,7 +347,7 @@ static inline int FAN_FROM_REG(int reg, int tpc)
		return (reg == 0 || reg == 0xffff) ? 0 : 90000 * 60 / reg;
}

static inline int FAN_TO_REG(int val, int tpc)
static inline int FAN_TO_REG(long val, int tpc)
{
	if (tpc) {
		return clamp_val(val / tpc, 0, 0xffff);
@@ -379,7 +379,7 @@ static inline int FAN_TYPE_FROM_REG(int reg)
	return (edge > 0) ? 1 << (edge - 1) : 0;
}

static inline int FAN_TYPE_TO_REG(int val, int reg)
static inline int FAN_TYPE_TO_REG(long val, int reg)
{
	int edge = (val == 4) ? 3 : val;

@@ -402,7 +402,7 @@ static int FAN_MAX_FROM_REG(int reg)
	return 1000 + i * 500;
}

static int FAN_MAX_TO_REG(int val)
static int FAN_MAX_TO_REG(long val)
{
	int i;

@@ -460,7 +460,7 @@ static inline int PWM_ACZ_FROM_REG(int reg)
	return acz[(reg >> 5) & 0x07];
}

static inline int PWM_ACZ_TO_REG(int val, int reg)
static inline int PWM_ACZ_TO_REG(long val, int reg)
{
	int acz = (val == 4) ? 2 : val - 1;

@@ -476,7 +476,7 @@ static inline int PWM_FREQ_FROM_REG(int reg)
	return PWM_FREQ[reg & 0x0f];
}

static int PWM_FREQ_TO_REG(int val, int reg)
static int PWM_FREQ_TO_REG(long val, int reg)
{
	int i;

@@ -510,7 +510,7 @@ static inline int PWM_RR_FROM_REG(int reg, int ix)
	return (rr & 0x08) ? PWM_RR[rr & 0x07] : 0;
}

static int PWM_RR_TO_REG(int val, int ix, int reg)
static int PWM_RR_TO_REG(long val, int ix, int reg)
{
	int i;

@@ -528,7 +528,7 @@ static inline int PWM_RR_EN_FROM_REG(int reg, int ix)
	return PWM_RR_FROM_REG(reg, ix) ? 1 : 0;
}

static inline int PWM_RR_EN_TO_REG(int val, int ix, int reg)
static inline int PWM_RR_EN_TO_REG(long val, int ix, int reg)
{
	int en = (ix == 1) ? 0x80 : 0x08;

@@ -1481,13 +1481,16 @@ static ssize_t set_vrm(struct device *dev, struct device_attribute *attr,
		       const char *buf, size_t count)
{
	struct dme1737_data *data = dev_get_drvdata(dev);
	long val;
	unsigned long val;
	int err;

	err = kstrtol(buf, 10, &val);
	err = kstrtoul(buf, 10, &val);
	if (err)
		return err;

	if (val > 255)
		return -EINVAL;

	data->vrm = val;
	return count;
}
Loading