]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
hwmon: (max6639) Fix pulses-per-revolution implementation
authorGuenter Roeck <linux@roeck-us.net>
Fri, 20 Mar 2026 04:31:22 +0000 (21:31 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 25 Mar 2026 10:13:32 +0000 (11:13 +0100)
[ Upstream commit e7bae9a7a5e1251ab414291f4e9304d702bb9221 ]

The valid range for the pulses-per-revolution devicetree property is
1..4. The current code checks for a range of 1..5. Fix it.

Declare the variable used to retrieve pulses per revolution from
devicetree as u32 (unsigned) to match the of_property_read_u32() API.

The current code uses a postfix decrement when writing the pulses per
resolution into the chip. This has no effect since the value is evaluated
before it is decremented. Fix it by decrementing before evaluating the
value.

Fixes: 7506ebcd662b ("hwmon: (max6639) : Configure based on DT property")
Cc: Naresh Solanki <naresh.solanki@9elements.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/hwmon/max6639.c

index 48fde4f1a1561387b9713049fad505d06a7d172c..b6b32286d967a97cdce990071339808162c0f1f4 100644 (file)
@@ -232,7 +232,7 @@ static int max6639_read_fan(struct device *dev, u32 attr, int channel,
 static int max6639_set_ppr(struct max6639_data *data, int channel, u8 ppr)
 {
        /* Decrement the PPR value and shift left by 6 to match the register format */
-       return regmap_write(data->regmap, MAX6639_REG_FAN_PPR(channel), ppr-- << 6);
+       return regmap_write(data->regmap, MAX6639_REG_FAN_PPR(channel), --ppr << 6);
 }
 
 static int max6639_write_fan(struct device *dev, u32 attr, int channel,
@@ -524,8 +524,8 @@ static int max6639_probe_child_from_dt(struct i2c_client *client,
 
 {
        struct device *dev = &client->dev;
-       u32 i;
-       int err, val;
+       u32 i, val;
+       int err;
 
        err = of_property_read_u32(child, "reg", &i);
        if (err) {
@@ -540,8 +540,8 @@ static int max6639_probe_child_from_dt(struct i2c_client *client,
 
        err = of_property_read_u32(child, "pulses-per-revolution", &val);
        if (!err) {
-               if (val < 1 || val > 5) {
-                       dev_err(dev, "invalid pulses-per-revolution %d of %pOFn\n", val, child);
+               if (val < 1 || val > 4) {
+                       dev_err(dev, "invalid pulses-per-revolution %u of %pOFn\n", val, child);
                        return -EINVAL;
                }
                data->ppr[i] = val;