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

Commit b721fe2a authored by Bartosz Golaszewski's avatar Bartosz Golaszewski Committed by Guenter Roeck
Browse files

hwmon: (ina2xx) use DIV_ROUND_CLOSEST() to avoid rounding errors



Use DIV_ROUND_CLOSEST() when dealing with the calibration values to make the
calculations less error prone.

Signed-off-by: default avatarBartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent 71eb7c4c
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -186,8 +186,11 @@ static void ina226_set_update_interval(struct ina2xx_data *data)

static int ina2xx_calibrate(struct ina2xx_data *data)
{
	return i2c_smbus_write_word_swapped(data->client, INA2XX_CALIBRATION,
			data->config->calibration_factor / data->rshunt);
	u16 val = DIV_ROUND_CLOSEST(data->config->calibration_factor,
				    data->rshunt);

	return i2c_smbus_write_word_swapped(data->client,
					    INA2XX_CALIBRATION, val);
}

/*
@@ -307,7 +310,8 @@ static int ina2xx_get_value(struct ina2xx_data *data, u8 reg)
		val = (s16)data->regs[reg];
		break;
	case INA2XX_CALIBRATION:
		val = data->config->calibration_factor / data->regs[reg];
		val = DIV_ROUND_CLOSEST(data->config->calibration_factor,
					data->regs[reg]);
		break;
	default:
		/* programmer goofed */