Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

hwmon: (lm63) Fix smatch warnings

smatch complains as follows when checking lm63.c.

drivers/hwmon/lm63.c:594 set_temp11() warn:
'65504' 65504 can't fit into 32767 'data->temp11[nr]'
drivers/hwmon/lm63.c:596 set_temp11() warn:
'32768' 32768 can't fit into 32767 'data->temp11[nr]'

Fix by using DIV_ROUND_CLOSEST and clamp_val to convert the values.
While we are at it, modify other macros as well for consistency and
to make the code easier to understand.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>

+10 -17
+10 -17
drivers/hwmon/lm63.c
··· 126 126 #define FAN_TO_REG(val) ((val) <= 82 ? 0xFFFC : \ 127 127 (5400000 / (val)) & 0xFFFC) 128 128 #define TEMP8_FROM_REG(reg) ((reg) * 1000) 129 - #define TEMP8_TO_REG(val) ((val) <= -128000 ? -128 : \ 130 - (val) >= 127000 ? 127 : \ 131 - (val) < 0 ? ((val) - 500) / 1000 : \ 132 - ((val) + 500) / 1000) 133 - #define TEMP8U_TO_REG(val) ((val) <= 0 ? 0 : \ 134 - (val) >= 255000 ? 255 : \ 135 - ((val) + 500) / 1000) 129 + #define TEMP8_TO_REG(val) DIV_ROUND_CLOSEST(clamp_val((val), -128000, \ 130 + 127000), 1000) 131 + #define TEMP8U_TO_REG(val) DIV_ROUND_CLOSEST(clamp_val((val), 0, \ 132 + 255000), 1000) 136 133 #define TEMP11_FROM_REG(reg) ((reg) / 32 * 125) 137 - #define TEMP11_TO_REG(val) ((val) <= -128000 ? 0x8000 : \ 138 - (val) >= 127875 ? 0x7FE0 : \ 139 - (val) < 0 ? ((val) - 62) / 125 * 32 : \ 140 - ((val) + 62) / 125 * 32) 141 - #define TEMP11U_TO_REG(val) ((val) <= 0 ? 0 : \ 142 - (val) >= 255875 ? 0xFFE0 : \ 143 - ((val) + 62) / 125 * 32) 144 - #define HYST_TO_REG(val) ((val) <= 0 ? 0 : \ 145 - (val) >= 127000 ? 127 : \ 146 - ((val) + 500) / 1000) 134 + #define TEMP11_TO_REG(val) (DIV_ROUND_CLOSEST(clamp_val((val), -128000, \ 135 + 127875), 125) * 32) 136 + #define TEMP11U_TO_REG(val) (DIV_ROUND_CLOSEST(clamp_val((val), 0, \ 137 + 255875), 125) * 32) 138 + #define HYST_TO_REG(val) DIV_ROUND_CLOSEST(clamp_val((val), 0, 127000), \ 139 + 1000) 147 140 148 141 #define UPDATE_INTERVAL(max, rate) \ 149 142 ((1000 << (LM63_MAX_CONVRATE - (rate))) / (max))