| From c02ea26f318e70e68201767c1720023b2c9a2cbb Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 26 May 2021 08:40:16 -0700 |
| Subject: hwmon: (max31790) Fix fan speed reporting for fan7..12 |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Guenter Roeck <linux@roeck-us.net> |
| |
| [ Upstream commit cbbf244f0515af3472084f22b6213121b4a63835 ] |
| |
| Fans 7..12 do not have their own set of configuration registers. |
| So far the code ignored that and read beyond the end of the configuration |
| register range to get the tachometer period. This resulted in more or less |
| random fan speed values for those fans. |
| |
| The datasheet is quite vague when it comes to defining the tachometer |
| period for fans 7..12. Experiments confirm that the period is the same |
| for both fans associated with a given set of configuration registers. |
| |
| Fixes: 54187ff9d766 ("hwmon: (max31790) Convert to use new hwmon registration API") |
| Fixes: 195a4b4298a7 ("hwmon: Driver for Maxim MAX31790") |
| Cc: Jan Kundrát <jan.kundrat@cesnet.cz> |
| Reviewed-by: Jan Kundrát <jan.kundrat@cesnet.cz> |
| Cc: Václav Kubernát <kubernat@cesnet.cz> |
| Reviewed-by: Jan Kundrát <jan.kundrat@cesnet.cz> |
| Signed-off-by: Guenter Roeck <linux@roeck-us.net> |
| Link: https://lore.kernel.org/r/20210526154022.3223012-2-linux@roeck-us.net |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/hwmon/max31790.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/drivers/hwmon/max31790.c b/drivers/hwmon/max31790.c |
| index 76aa96f5b984..67677c437768 100644 |
| --- a/drivers/hwmon/max31790.c |
| +++ b/drivers/hwmon/max31790.c |
| @@ -171,7 +171,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]); |
| + sr = get_tach_period(data->fan_dynamics[channel % NR_CHANNEL]); |
| rpm = RPM_FROM_REG(data->tach[channel], sr); |
| *val = rpm; |
| return 0; |
| -- |
| 2.30.2 |
| |