hwmon: (sparx5) Fix initial reading of temperature
authorLars Povlsen <lars.povlsen@microchip.com>
Thu, 3 Sep 2020 13:47:04 +0000 (15:47 +0200)
committerGuenter Roeck <linux@roeck-us.net>
Wed, 23 Sep 2020 16:39:40 +0000 (09:39 -0700)
If the temperature is read before the internal calibration is
completed, the driver returns -EIO. Instead it should return -EAGAIN
to encourage repeating the operation.

Note (groeck): Returning -EAGAIN to userspace may result in hard loops;
some userspace code interprets -EAGAIN as request to retry immediately.
I would prefer -ENODATA, but it turns out that the thermal subsystem only
handles -EAGAIN silently, so we'll have to stick with that.

Signed-off-by: Lars Povlsen <lars.povlsen@microchip.com>
Link: https://lore.kernel.org/r/20200903134704.8949-1-lars.povlsen@microchip.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/sparx5-temp.c

index 1a2b102..98be48e 100644 (file)
@@ -56,7 +56,7 @@ static int s5_read(struct device *dev, enum hwmon_sensor_types type,
        case hwmon_temp_input:
                stat = readl_relaxed(hwmon->base + TEMP_STAT);
                if (!(stat & TEMP_STAT_VALID))
-                       return -EIO;
+                       return -EAGAIN;
                value = stat & TEMP_STAT_TEMP;
                /*
                 * From register documentation: