Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+7 -7
+5 -4
drivers/hwmon/ina238.c
··· 379 379 regval = clamp_val(val, -163, 163); 380 380 regval = (regval * 1000 * 4) / 381 381 (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; 383 383 384 384 switch (attr) { 385 385 case hwmon_in_max: ··· 517 517 * Unsigned postive values. Compared against the 24-bit power register, 518 518 * lower 8-bits are truncated. Same conversion to/from uW as POWER 519 519 * register. 520 + * The first clamp_val() is to establish a baseline to avoid overflows. 520 521 */ 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 * 523 524 1000ULL * INA238_FIXED_SHUNT * data->gain); 524 525 regval = clamp_val(regval >> 8, 0, U16_MAX); 525 526 ··· 573 572 return -EOPNOTSUPP; 574 573 575 574 /* Signed */ 576 - regval = clamp_val(val, -40000, 125000); 575 + val = clamp_val(val, -40000, 125000); 577 576 regval = div_s64(val * 10000, data->config->temp_lsb) << data->config->temp_shift; 578 577 regval = clamp_val(regval, S16_MIN, S16_MAX) & (0xffff << data->config->temp_shift); 579 578
+2 -3
drivers/hwmon/mlxreg-fan.c
··· 561 561 if (!pwm->connected) 562 562 continue; 563 563 pwm->fan = fan; 564 + /* Set minimal PWM speed. */ 565 + pwm->last_hwmon_state = MLXREG_FAN_PWM_DUTY2STATE(MLXREG_FAN_MIN_DUTY); 564 566 pwm->cdev = devm_thermal_of_cooling_device_register(dev, NULL, mlxreg_fan_name[i], 565 567 pwm, &mlxreg_fan_cooling_ops); 566 568 if (IS_ERR(pwm->cdev)) { 567 569 dev_err(dev, "Failed to register cooling device\n"); 568 570 return PTR_ERR(pwm->cdev); 569 571 } 570 - 571 - /* Set minimal PWM speed. */ 572 - pwm->last_hwmon_state = MLXREG_FAN_PWM_DUTY2STATE(MLXREG_FAN_MIN_DUTY); 573 572 } 574 573 575 574 return 0;