Project import generated by Copybara.
GitOrigin-RevId: 0acb173e07e155358594d3ce7b5f19e91bb9fec3
diff --git a/drivers/hwmon/max31790.c b/drivers/hwmon/max31790.c
index 2baf88e..117fb79 100644
--- a/drivers/hwmon/max31790.c
+++ b/drivers/hwmon/max31790.c
@@ -27,7 +27,6 @@
/* Fan Config register bits */
#define MAX31790_FAN_CFG_RPM_MODE 0x80
-#define MAX31790_FAN_CFG_CTRL_MON 0x10
#define MAX31790_FAN_CFG_TACH_INPUT_EN 0x08
#define MAX31790_FAN_CFG_TACH_INPUT 0x01
@@ -105,7 +104,7 @@ static struct max31790_data *max31790_update_device(struct device *dev)
data->tach[NR_CHANNEL + i] = rv;
} else {
rv = i2c_smbus_read_word_swapped(client,
- MAX31790_REG_PWM_DUTY_CYCLE(i));
+ MAX31790_REG_PWMOUT(i));
if (rv < 0)
goto abort;
data->pwm[i] = rv;
@@ -171,7 +170,7 @@ static int max31790_read_fan(struct device *dev, u32 attr, int channel,
switch (attr) {
case hwmon_fan_input:
- sr = get_tach_period(data->fan_dynamics[channel % NR_CHANNEL]);
+ sr = get_tach_period(data->fan_dynamics[channel]);
rpm = RPM_FROM_REG(data->tach[channel], sr);
*val = rpm;
return 0;
@@ -272,12 +271,12 @@ static int max31790_read_pwm(struct device *dev, u32 attr, int channel,
*val = data->pwm[channel] >> 8;
return 0;
case hwmon_pwm_enable:
- if (fan_config & MAX31790_FAN_CFG_CTRL_MON)
- *val = 0;
- else if (fan_config & MAX31790_FAN_CFG_RPM_MODE)
+ if (fan_config & MAX31790_FAN_CFG_RPM_MODE)
*val = 2;
- else
+ else if (fan_config & MAX31790_FAN_CFG_TACH_INPUT_EN)
*val = 1;
+ else
+ *val = 0;
return 0;
default:
return -EOPNOTSUPP;
@@ -300,41 +299,31 @@ static int max31790_write_pwm(struct device *dev, u32 attr, int channel,
err = -EINVAL;
break;
}
- data->valid = false;
+ data->pwm[channel] = val << 8;
err = i2c_smbus_write_word_swapped(client,
MAX31790_REG_PWMOUT(channel),
- val << 8);
+ data->pwm[channel]);
break;
case hwmon_pwm_enable:
fan_config = data->fan_config[channel];
if (val == 0) {
- fan_config |= MAX31790_FAN_CFG_CTRL_MON;
- /*
- * Disable RPM mode; otherwise disabling fan speed
- * monitoring is not possible.
- */
- fan_config &= ~MAX31790_FAN_CFG_RPM_MODE;
+ fan_config &= ~(MAX31790_FAN_CFG_TACH_INPUT_EN |
+ MAX31790_FAN_CFG_RPM_MODE);
} else if (val == 1) {
- fan_config &= ~(MAX31790_FAN_CFG_CTRL_MON | MAX31790_FAN_CFG_RPM_MODE);
+ fan_config = (fan_config |
+ MAX31790_FAN_CFG_TACH_INPUT_EN) &
+ ~MAX31790_FAN_CFG_RPM_MODE;
} else if (val == 2) {
- fan_config &= ~MAX31790_FAN_CFG_CTRL_MON;
- /*
- * The chip sets MAX31790_FAN_CFG_TACH_INPUT_EN on its
- * own if MAX31790_FAN_CFG_RPM_MODE is set.
- * Do it here as well to reflect the actual register
- * value in the cache.
- */
- fan_config |= (MAX31790_FAN_CFG_RPM_MODE | MAX31790_FAN_CFG_TACH_INPUT_EN);
+ fan_config |= MAX31790_FAN_CFG_TACH_INPUT_EN |
+ MAX31790_FAN_CFG_RPM_MODE;
} else {
err = -EINVAL;
break;
}
- if (fan_config != data->fan_config[channel]) {
- err = i2c_smbus_write_byte_data(client, MAX31790_REG_FAN_CONFIG(channel),
- fan_config);
- if (!err)
- data->fan_config[channel] = fan_config;
- }
+ data->fan_config[channel] = fan_config;
+ err = i2c_smbus_write_byte_data(client,
+ MAX31790_REG_FAN_CONFIG(channel),
+ fan_config);
break;
default:
err = -EOPNOTSUPP;