On Fri, 11 Feb 2022 at 01:36, Eugene Shalygin <eugene.shalygin@xxxxxxxxx> wrote: > > Reading DSDT code for ASUS X470-based boards (the ones served by the > asus_wmi_Sensors driver), where ASUS put hardware monitoring functions > into the WMI code, reveals that fan and current sensors data is > unsigned. For the current sensor that was confirmed by a user who showed > high enough current value for overflow. Denis, you might be interested in fixing temperature sensors in the asus_wmi_sensors driver too. > static inline s32 get_sensor_value(const struct ec_sensor_info *si, u8 *data) > { > - switch (si->addr.components.size) { > - case 1: > - return (s8)*data; > - case 2: > - return (s16)get_unaligned_be16(data); > - case 4: > - return (s32)get_unaligned_be32(data); > - default: > - return 0; > + if (is_sensor_data_signed(si)) { > + switch (si->addr.components.size) { > + case 1: > + return (s8)*data; > + case 2: > + return (s16)get_unaligned_be16(data); > + case 4: > + return (s32)get_unaligned_be32(data); > + default: > + return 0; > + } > + } else { > + switch (si->addr.components.size) { > + case 1: > + return *data; > + case 2: > + return get_unaligned_be16(data); > + case 4: > + return get_unaligned_be32(data); > + default: > + return 0; > + } > } > } I would appreciate it if anyone could help me to collapse this ugliness somehow, without multi-level macros, please. Thank you, Eugene