summaryrefslogtreecommitdiffstats
path: root/kernel/drivers/hwmon/g762.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/drivers/hwmon/g762.c')
-rw-r--r--kernel/drivers/hwmon/g762.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/kernel/drivers/hwmon/g762.c b/kernel/drivers/hwmon/g762.c
index b96a2a9e4..628be9c95 100644
--- a/kernel/drivers/hwmon/g762.c
+++ b/kernel/drivers/hwmon/g762.c
@@ -193,14 +193,17 @@ static inline unsigned int rpm_from_cnt(u8 cnt, u32 clk_freq, u16 p,
* Convert fan RPM value from sysfs into count value for fan controller
* register (FAN_SET_CNT).
*/
-static inline unsigned char cnt_from_rpm(u32 rpm, u32 clk_freq, u16 p,
+static inline unsigned char cnt_from_rpm(unsigned long rpm, u32 clk_freq, u16 p,
u8 clk_div, u8 gear_mult)
{
- if (!rpm) /* to stop the fan, set cnt to 255 */
+ unsigned long f1 = clk_freq * 30 * gear_mult;
+ unsigned long f2 = p * clk_div;
+
+ if (!rpm) /* to stop the fan, set cnt to 255 */
return 0xff;
- return clamp_val(((clk_freq * 30 * gear_mult) / (rpm * p * clk_div)),
- 0, 255);
+ rpm = clamp_val(rpm, f1 / (255 * f2), ULONG_MAX / f2);
+ return DIV_ROUND_CLOSEST(f1, rpm * f2);
}
/* helper to grab and cache data, at most one time per second */