]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: health: max30102: Use IIO cleanup helpers
authorKurt Borja <kuurtb@gmail.com>
Tue, 20 Jan 2026 06:20:46 +0000 (01:20 -0500)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Thu, 22 Jan 2026 20:53:17 +0000 (20:53 +0000)
Use IIO_DEV_GUARD_CURRENT_MODE() cleanup helper to simplify and drop
busy-waiting code in max30102_read_raw().

Reviewed-by: David Lechner <dlechner@baylibre.com>
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/health/max30102.c

index 6918fcb5de2bca8a080295f179beba89d38f4e9e..47da44efd68b5e0f931d6afc77825378c95a17ea 100644 (file)
@@ -467,44 +467,29 @@ static int max30102_read_raw(struct iio_dev *indio_dev,
                             int *val, int *val2, long mask)
 {
        struct max30102_data *data = iio_priv(indio_dev);
-       int ret = -EINVAL;
+       int ret;
 
        switch (mask) {
-       case IIO_CHAN_INFO_RAW:
+       case IIO_CHAN_INFO_RAW: {
                /*
                 * Temperature reading can only be acquired when not in
                 * shutdown; leave shutdown briefly when buffer not running
                 */
-any_mode_retry:
-               if (!iio_device_try_claim_buffer_mode(indio_dev)) {
-                       /*
-                        * This one is a *bit* hacky. If we cannot claim buffer
-                        * mode, then try direct mode so that we make sure
-                        * things cannot concurrently change. And we just keep
-                        * trying until we get one of the modes...
-                        */
-                       if (!iio_device_claim_direct(indio_dev))
-                               goto any_mode_retry;
-
-                       ret = max30102_get_temp(data, val, true);
-                       iio_device_release_direct(indio_dev);
-               } else {
-                       ret = max30102_get_temp(data, val, false);
-                       iio_device_release_buffer_mode(indio_dev);
-               }
+               IIO_DEV_GUARD_CURRENT_MODE(indio_dev);
+
+               ret = max30102_get_temp(data, val, !iio_buffer_enabled(indio_dev));
                if (ret)
                        return ret;
 
-               ret = IIO_VAL_INT;
-               break;
+               return IIO_VAL_INT;
+       }
        case IIO_CHAN_INFO_SCALE:
                *val = 1000;  /* 62.5 */
                *val2 = 16;
-               ret = IIO_VAL_FRACTIONAL;
-               break;
+               return IIO_VAL_FRACTIONAL;
+       default:
+               return -EINVAL;
        }
-
-       return ret;
 }
 
 static const struct iio_info max30102_info = {