Commit 07757eeb authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'hwmon-for-v6.13-rc8' of...

Merge tag 'hwmon-for-v6.13-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging

Pull hwmon fixes from Guenter Roeck:

 - ltc2991, tmp513: Fix problems seen when dividing negative numbers

 - drivetemp: Handle large timeouts observed on some drives

 - acpi_power_meter: Fix loading the driver on platforms without _PMD
   method

* tag 'hwmon-for-v6.13-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
  hwmon: (ltc2991) Fix mixed signed/unsigned in DIV_ROUND_CLOSEST
  hwmon: (drivetemp) Set scsi command timeout to 10s
  hwmon: (acpi_power_meter) Fix a check for the return value of read_domain_devices().
  hwmon: (tmp513) Fix division of negative numbers
parents 7fed891d e9b24deb
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -682,7 +682,7 @@ static int setup_attrs(struct acpi_power_meter_resource *resource)

	/* _PMD method is optional. */
	res = read_domain_devices(resource);
	if (res != -ENODEV)
	if (res && res != -ENODEV)
		return res;

	if (resource->caps.flags & POWER_METER_CAN_MEASURE) {
+1 −1
Original line number Diff line number Diff line
@@ -194,7 +194,7 @@ static int drivetemp_scsi_command(struct drivetemp_data *st,
	scsi_cmd[14] = ata_command;

	err = scsi_execute_cmd(st->sdev, scsi_cmd, op, st->smartdata,
			       ATA_SECT_SIZE, HZ, 5, NULL);
			       ATA_SECT_SIZE, 10 * HZ, 5, NULL);
	if (err > 0)
		err = -EIO;
	return err;
+1 −1
Original line number Diff line number Diff line
@@ -125,7 +125,7 @@ static int ltc2991_get_curr(struct ltc2991_state *st, u32 reg, int channel,

	/* Vx-Vy, 19.075uV/LSB */
	*val = DIV_ROUND_CLOSEST(sign_extend32(reg_val, 14) * 19075,
				 st->r_sense_uohm[channel]);
				 (s32)st->r_sense_uohm[channel]);

	return 0;
}
+4 −3
Original line number Diff line number Diff line
@@ -207,7 +207,8 @@ static int tmp51x_get_value(struct tmp51x_data *data, u8 reg, u8 pos,
		*val = sign_extend32(regval,
				     reg == TMP51X_SHUNT_CURRENT_RESULT ?
				     16 - tmp51x_get_pga_shift(data) : 15);
		*val = DIV_ROUND_CLOSEST(*val * 10 * MILLI, data->shunt_uohms);
		*val = DIV_ROUND_CLOSEST(*val * 10 * (long)MILLI, (long)data->shunt_uohms);

		break;
	case TMP51X_BUS_VOLTAGE_RESULT:
	case TMP51X_BUS_VOLTAGE_H_LIMIT:
@@ -223,7 +224,7 @@ static int tmp51x_get_value(struct tmp51x_data *data, u8 reg, u8 pos,
	case TMP51X_BUS_CURRENT_RESULT:
		// Current = (ShuntVoltage * CalibrationRegister) / 4096
		*val = sign_extend32(regval, 15) * (long)data->curr_lsb_ua;
		*val = DIV_ROUND_CLOSEST(*val, MILLI);
		*val = DIV_ROUND_CLOSEST(*val, (long)MILLI);
		break;
	case TMP51X_LOCAL_TEMP_RESULT:
	case TMP51X_REMOTE_TEMP_RESULT_1:
@@ -263,7 +264,7 @@ static int tmp51x_set_value(struct tmp51x_data *data, u8 reg, long val)
		 * The user enter current value and we convert it to
		 * voltage. 1lsb = 10uV
		 */
		val = DIV_ROUND_CLOSEST(val * data->shunt_uohms, 10 * MILLI);
		val = DIV_ROUND_CLOSEST(val * (long)data->shunt_uohms, 10 * (long)MILLI);
		max_val = U16_MAX >> tmp51x_get_pga_shift(data);
		regval = clamp_val(val, -max_val, max_val);
		break;