Commit c37d0f08 authored by Guenter Roeck's avatar Guenter Roeck
Browse files

hwmon: (amc6821) Use multi-byte regmap operations



Use multi-byte regmap operations where possible to reduce code size.

No functional changes.

Reviewed-by: default avatarTzung-Bi Shih <tzungbi@kernel.org>
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent 21a93a9e
Loading
Loading
Loading
Loading
+13 −17
Original line number Diff line number Diff line
@@ -136,29 +136,25 @@ struct amc6821_data {
 */
static int amc6821_get_auto_point_temps(struct regmap *regmap, int channel, u8 *temps)
{
	u32 pwm, regval;
	u32 regs[] = {
		AMC6821_REG_DCY_LOW_TEMP,
		AMC6821_REG_PSV_TEMP,
		channel ? AMC6821_REG_RTEMP_FAN_CTRL : AMC6821_REG_LTEMP_FAN_CTRL
	};
	u8 regvals[3];
	int slope;
	int err;

	err = regmap_read(regmap, AMC6821_REG_DCY_LOW_TEMP, &pwm);
	if (err)
		return err;

	err = regmap_read(regmap, AMC6821_REG_PSV_TEMP, &regval);
	if (err)
		return err;
	temps[0] = regval;

	err = regmap_read(regmap,
			  channel ? AMC6821_REG_RTEMP_FAN_CTRL : AMC6821_REG_LTEMP_FAN_CTRL,
			  &regval);
	err = regmap_multi_reg_read(regmap, regs, regvals, 3);
	if (err)
		return err;
	temps[1] = FIELD_GET(AMC6821_TEMP_LIMIT_MASK, regval) * 4;
	temps[0] = regvals[1];
	temps[1] = FIELD_GET(AMC6821_TEMP_LIMIT_MASK, regvals[2]) * 4;

	/* slope is 32 >> <slope bits> in °C */
	regval = 32 >> FIELD_GET(AMC6821_TEMP_SLOPE_MASK, regval);
	if (regval)
		temps[2] = temps[1] + DIV_ROUND_CLOSEST(255 - pwm, regval);
	slope = 32 >> FIELD_GET(AMC6821_TEMP_SLOPE_MASK, regvals[2]);
	if (slope)
		temps[2] = temps[1] + DIV_ROUND_CLOSEST(255 - regvals[0], slope);
	else
		temps[2] = 255;