]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
hwmon: (lm75) Fix configuration register writes.
authorMarkus Stockhausen <markus.stockhausen@gmx.de>
Sat, 2 May 2026 17:32:07 +0000 (19:32 +0200)
committerGuenter Roeck <linux@roeck-us.net>
Thu, 7 May 2026 23:30:12 +0000 (16:30 -0700)
Sensors configurations are defined by set and clear masks. These
do not follow a consistent "clear mask is a superset of set mask"
rule. This relaxed definition breaks lm75_write_config()

static inline int lm75_write_config(struct lm75_data *data, u16 set_mask,
    u16 clr_mask)
{
return regmap_update_bits(data->regmap, LM75_REG_CONF,
  clr_mask | LM75_SHUTDOWN, set_mask);
}

Basically all bits from set_mask that are not defined in clr_mask are
dropped. Fix that by enhancing the helper to always combine clr_mask
and set_mask into the mask bits of regmap_update_bits().

Fixes: 6da24a25f766 ("hwmon: (lm75) Hide register size differences in regmap access functions")
Suggested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://lore.kernel.org/r/20260502173207.3567876-3-markus.stockhausen@gmx.de
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/lm75.c

index a1bf4e9813ed8ef4a929b9c636a775c2a6c1da26..c283443e363b4270151ad1060e685e26010e54e3 100644 (file)
@@ -353,7 +353,7 @@ static inline int lm75_write_config(struct lm75_data *data, u16 set_mask,
                                    u16 clr_mask)
 {
        return regmap_update_bits(data->regmap, LM75_REG_CONF,
-                                 clr_mask | LM75_SHUTDOWN, set_mask);
+                                 clr_mask | set_mask | LM75_SHUTDOWN, set_mask);
 }
 
 static irqreturn_t lm75_alarm_handler(int irq, void *private)