summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/hwmon/g762.c11
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 */
196static inline unsigned char cnt_from_rpm(u32 rpm, u32 clk_freq, u16 p, 196static 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 */