Skip to content

Commit 260aa8d

Browse files
committed
Merge tag 'hwmon-for-v6.17-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging
Pull hwmon fixes from Guenter Roeck: - ina238: Various value range fixes when writing limit attributes - mlxreg-fan: Prevent fans from getting stuck at 0 RPM * tag 'hwmon-for-v6.17-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging: hwmon: (ina238) Correctly clamp power limits hwmon: (ina238) Correctly clamp shunt voltage limit hwmon: (ina238) Correctly clamp temperature hwmon: mlxreg-fan: Prevent fans from getting stuck at 0 RPM
2 parents 3d1e364 + c262357 commit 260aa8d

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

drivers/hwmon/ina238.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ static int ina238_write_in(struct device *dev, u32 attr, int channel,
379379
regval = clamp_val(val, -163, 163);
380380
regval = (regval * 1000 * 4) /
381381
(INA238_SHUNT_VOLTAGE_LSB * data->gain);
382-
regval = clamp_val(regval, S16_MIN, S16_MAX);
382+
regval = clamp_val(regval, S16_MIN, S16_MAX) & 0xffff;
383383

384384
switch (attr) {
385385
case hwmon_in_max:
@@ -517,9 +517,10 @@ static int ina238_write_power(struct device *dev, u32 attr, long val)
517517
* Unsigned postive values. Compared against the 24-bit power register,
518518
* lower 8-bits are truncated. Same conversion to/from uW as POWER
519519
* register.
520+
* The first clamp_val() is to establish a baseline to avoid overflows.
520521
*/
521-
regval = clamp_val(val, 0, LONG_MAX);
522-
regval = div_u64(val * 4 * 100 * data->rshunt, data->config->power_calculate_factor *
522+
regval = clamp_val(val, 0, LONG_MAX / 2);
523+
regval = div_u64(regval * 4 * 100 * data->rshunt, data->config->power_calculate_factor *
523524
1000ULL * INA238_FIXED_SHUNT * data->gain);
524525
regval = clamp_val(regval >> 8, 0, U16_MAX);
525526

@@ -572,7 +573,7 @@ static int ina238_write_temp(struct device *dev, u32 attr, long val)
572573
return -EOPNOTSUPP;
573574

574575
/* Signed */
575-
regval = clamp_val(val, -40000, 125000);
576+
val = clamp_val(val, -40000, 125000);
576577
regval = div_s64(val * 10000, data->config->temp_lsb) << data->config->temp_shift;
577578
regval = clamp_val(regval, S16_MIN, S16_MAX) & (0xffff << data->config->temp_shift);
578579

drivers/hwmon/mlxreg-fan.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -561,15 +561,14 @@ static int mlxreg_fan_cooling_config(struct device *dev, struct mlxreg_fan *fan)
561561
if (!pwm->connected)
562562
continue;
563563
pwm->fan = fan;
564+
/* Set minimal PWM speed. */
565+
pwm->last_hwmon_state = MLXREG_FAN_PWM_DUTY2STATE(MLXREG_FAN_MIN_DUTY);
564566
pwm->cdev = devm_thermal_of_cooling_device_register(dev, NULL, mlxreg_fan_name[i],
565567
pwm, &mlxreg_fan_cooling_ops);
566568
if (IS_ERR(pwm->cdev)) {
567569
dev_err(dev, "Failed to register cooling device\n");
568570
return PTR_ERR(pwm->cdev);
569571
}
570-
571-
/* Set minimal PWM speed. */
572-
pwm->last_hwmon_state = MLXREG_FAN_PWM_DUTY2STATE(MLXREG_FAN_MIN_DUTY);
573572
}
574573

575574
return 0;

0 commit comments

Comments
 (0)