iio: adc: rtq6056: Use automated cleanup for mode handling in write_raw
authorGabriel Schwartz <gschwartz@usp.br>
Fri, 26 Apr 2024 20:01:14 +0000 (17:01 -0300)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 29 Apr 2024 19:53:10 +0000 (20:53 +0100)
Using iio_device_claim_direct_scoped() to automate mode claim and release
simplifies code flow and allows for straight-forward error handling with
direct returns on errors.

Signed-off-by: Gabriel Schwartz <gschwartz@usp.br>
Reviewed-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
Reviewed-by: ChiYuan Huang <cy_huang@richtek.com>
Link: https://lore.kernel.org/r/20240426200118.20900-1-gschwartz@usp.br
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/rtq6056.c

index a5464737e527ca1d0fe13abb0e23e4c9fe072b03..bcb129840908981fddee7b2925c90620d60052ac 100644 (file)
@@ -520,32 +520,20 @@ static int rtq6056_adc_write_raw(struct iio_dev *indio_dev,
 {
        struct rtq6056_priv *priv = iio_priv(indio_dev);
        const struct richtek_dev_data *devdata = priv->devdata;
-       int ret;
 
-       ret = iio_device_claim_direct_mode(indio_dev);
-       if (ret)
-               return ret;
-
-       switch (mask) {
-       case IIO_CHAN_INFO_SAMP_FREQ:
-               if (devdata->fixed_samp_freq) {
-                       ret = -EINVAL;
-                       break;
+       iio_device_claim_direct_scoped(return -EBUSY, indio_dev) {
+               switch (mask) {
+               case IIO_CHAN_INFO_SAMP_FREQ:
+                       if (devdata->fixed_samp_freq)
+                               return -EINVAL;
+                       return rtq6056_adc_set_samp_freq(priv, chan, val);
+               case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
+                       return devdata->set_average(priv, val);
+               default:
+                       return -EINVAL;
                }
-
-               ret = rtq6056_adc_set_samp_freq(priv, chan, val);
-               break;
-       case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
-               ret = devdata->set_average(priv, val);
-               break;
-       default:
-               ret = -EINVAL;
-               break;
        }
-
-       iio_device_release_direct_mode(indio_dev);
-
-       return ret;
+       unreachable();
 }
 
 static const char *rtq6056_channel_labels[RTQ6056_MAX_CHANNEL] = {