diff options
Diffstat (limited to 'drivers/hwmon/emc2103.c')
| -rw-r--r-- | drivers/hwmon/emc2103.c | 17 | 
1 files changed, 6 insertions, 11 deletions
diff --git a/drivers/hwmon/emc2103.c b/drivers/hwmon/emc2103.c index 2c137b26acb..78002de46cb 100644 --- a/drivers/hwmon/emc2103.c +++ b/drivers/hwmon/emc2103.c @@ -250,9 +250,7 @@ static ssize_t set_temp_min(struct device *dev, struct device_attribute *da,  	if (result < 0)  		return result; -	val = DIV_ROUND_CLOSEST(val, 1000); -	if ((val < -63) || (val > 127)) -		return -EINVAL; +	val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), -63, 127);  	mutex_lock(&data->update_lock);  	data->temp_min[nr] = val; @@ -274,9 +272,7 @@ static ssize_t set_temp_max(struct device *dev, struct device_attribute *da,  	if (result < 0)  		return result; -	val = DIV_ROUND_CLOSEST(val, 1000); -	if ((val < -63) || (val > 127)) -		return -EINVAL; +	val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), -63, 127);  	mutex_lock(&data->update_lock);  	data->temp_max[nr] = val; @@ -349,7 +345,7 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *da,  		dev_dbg(&client->dev, "reg 0x%02x, err %d\n",  			REG_FAN_CONF1, status);  		mutex_unlock(&data->update_lock); -		return -EIO; +		return status;  	}  	status &= 0x9F;  	status |= (new_range_bits << 5); @@ -390,15 +386,14 @@ static ssize_t set_fan_target(struct device *dev, struct device_attribute *da,  {  	struct emc2103_data *data = emc2103_update_device(dev);  	struct i2c_client *client = to_i2c_client(dev); -	long rpm_target; +	unsigned long rpm_target; -	int result = kstrtol(buf, 10, &rpm_target); +	int result = kstrtoul(buf, 10, &rpm_target);  	if (result < 0)  		return result;  	/* Datasheet states 16384 as maximum RPM target (table 3.2) */ -	if ((rpm_target < 0) || (rpm_target > 16384)) -		return -EINVAL; +	rpm_target = clamp_val(rpm_target, 0, 16384);  	mutex_lock(&data->update_lock);  | 
