Loading drivers/hwmon/amc6821.c +13 −17 Original line number Diff line number Diff line Loading @@ -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, ®val); if (err) return err; temps[0] = regval; err = regmap_read(regmap, channel ? AMC6821_REG_RTEMP_FAN_CTRL : AMC6821_REG_LTEMP_FAN_CTRL, ®val); 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; Loading Loading
drivers/hwmon/amc6821.c +13 −17 Original line number Diff line number Diff line Loading @@ -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, ®val); if (err) return err; temps[0] = regval; err = regmap_read(regmap, channel ? AMC6821_REG_RTEMP_FAN_CTRL : AMC6821_REG_LTEMP_FAN_CTRL, ®val); 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; Loading