diff options
-rw-r--r-- | drivers/hwmon/g762.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/hwmon/g762.c b/drivers/hwmon/g762.c index b96a2a9e4df7..628be9c95ff9 100644 --- a/drivers/hwmon/g762.c +++ b/drivers/hwmon/g762.c | |||
@@ -193,14 +193,17 @@ static inline unsigned int rpm_from_cnt(u8 cnt, u32 clk_freq, u16 p, | |||
193 | * Convert fan RPM value from sysfs into count value for fan controller | 193 | * Convert fan RPM value from sysfs into count value for fan controller |
194 | * register (FAN_SET_CNT). | 194 | * register (FAN_SET_CNT). |
195 | */ | 195 | */ |
196 | static inline unsigned char cnt_from_rpm(u32 rpm, u32 clk_freq, u16 p, | 196 | static inline unsigned char cnt_from_rpm(unsigned long rpm, u32 clk_freq, u16 p, |
197 | u8 clk_div, u8 gear_mult) | 197 | u8 clk_div, u8 gear_mult) |
198 | { | 198 | { |
199 | if (!rpm) /* to stop the fan, set cnt to 255 */ | 199 | unsigned long f1 = clk_freq * 30 * gear_mult; |
200 | unsigned long f2 = p * clk_div; | ||
201 | |||
202 | if (!rpm) /* to stop the fan, set cnt to 255 */ | ||
200 | return 0xff; | 203 | return 0xff; |
201 | 204 | ||
202 | return clamp_val(((clk_freq * 30 * gear_mult) / (rpm * p * clk_div)), | 205 | rpm = clamp_val(rpm, f1 / (255 * f2), ULONG_MAX / f2); |
203 | 0, 255); | 206 | return DIV_ROUND_CLOSEST(f1, rpm * f2); |
204 | } | 207 | } |
205 | 208 | ||
206 | /* helper to grab and cache data, at most one time per second */ | 209 | /* helper to grab and cache data, at most one time per second */ |