]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: adc: Switch to sparse friendly iio_device_claim/release_direct()
authorJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 17 Feb 2025 14:16:29 +0000 (14:16 +0000)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Tue, 4 Mar 2025 13:17:50 +0000 (13:17 +0000)
Single patch for all the relatively simple cases.

These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.

Cc: Olivier Moysan <olivier.moysan@foss.st.com>
Cc: Phil Reid <preid@electromag.com.au>
Reviewed-by: Mike Looijmans <mike.looijmans@topic.nl>
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
Link: https://patch.msgid.link/20250217141630.897334-30-jic23@kernel.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
15 files changed:
drivers/iio/adc/ad7173.c
drivers/iio/adc/ad7266.c
drivers/iio/adc/ad7298.c
drivers/iio/adc/ad7380.c
drivers/iio/adc/ad7476.c
drivers/iio/adc/ad7887.c
drivers/iio/adc/ad7923.c
drivers/iio/adc/ad7944.c
drivers/iio/adc/dln2-adc.c
drivers/iio/adc/stm32-adc.c
drivers/iio/adc/ti-adc084s021.c
drivers/iio/adc/ti-adc108s102.c
drivers/iio/adc/ti-ads1298.c
drivers/iio/adc/ti-ads131e08.c
drivers/iio/adc/ti-tlc4541.c

index 54f9cc5a89f53716b9ec70a20333fd247d297250..ca2b41b16cc9d61bd01a3540a475dec408ee5a06 100644 (file)
@@ -1157,11 +1157,10 @@ static int ad7173_write_raw(struct iio_dev *indio_dev,
        struct ad7173_state *st = iio_priv(indio_dev);
        struct ad7173_channel_config *cfg;
        unsigned int freq, i;
-       int ret;
+       int ret = 0;
 
-       ret = iio_device_claim_direct_mode(indio_dev);
-       if (ret)
-               return ret;
+       if (!iio_device_claim_direct(indio_dev))
+               return -EBUSY;
 
        switch (info) {
        /*
@@ -1195,7 +1194,7 @@ static int ad7173_write_raw(struct iio_dev *indio_dev,
                break;
        }
 
-       iio_device_release_direct_mode(indio_dev);
+       iio_device_release_direct(indio_dev);
        return ret;
 }
 
index 858c8be2ff1a09e99e8d1fb2f0325bd58e454eda..18559757f9085c589461fcec3d672d13cae21c20 100644 (file)
@@ -153,11 +153,10 @@ static int ad7266_read_raw(struct iio_dev *indio_dev,
 
        switch (m) {
        case IIO_CHAN_INFO_RAW:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
                ret = ad7266_read_single(st, val, chan->address);
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
 
                if (ret < 0)
                        return ret;
index b35bd4d9ef81b07f7b6cf13051876c82ae0a9581..28b88092b4aa2d5b3f3c0abbad9fab9da14b8505 100644 (file)
@@ -232,16 +232,15 @@ static int ad7298_read_raw(struct iio_dev *indio_dev,
 
        switch (m) {
        case IIO_CHAN_INFO_RAW:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
 
                if (chan->address == AD7298_CH_TEMP)
                        ret = ad7298_scan_temp(st, val);
                else
                        ret = ad7298_scan_direct(st, chan->address);
 
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
 
                if (ret < 0)
                        return ret;
index a18dcd664c1b5e5032cc55c063e5681d11c23352..f232ad1a49634baeedc655916bc7a967604a1206 100644 (file)
@@ -716,16 +716,15 @@ static int ad7380_debugfs_reg_access(struct iio_dev *indio_dev, u32 reg,
        struct ad7380_state *st = iio_priv(indio_dev);
        int ret;
 
-       ret = iio_device_claim_direct_mode(indio_dev);
-       if (ret)
-               return ret;
+       if (!iio_device_claim_direct(indio_dev))
+               return -EBUSY;
 
        if (readval)
                ret = regmap_read(st->regmap, reg, readval);
        else
                ret = regmap_write(st->regmap, reg, writeval);
 
-       iio_device_release_direct_mode(indio_dev);
+       iio_device_release_direct(indio_dev);
 
        return ret;
 }
@@ -1018,14 +1017,13 @@ static int ad7380_read_raw(struct iio_dev *indio_dev,
 
        switch (info) {
        case IIO_CHAN_INFO_RAW:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
 
                ret = ad7380_read_direct(st, chan->scan_index,
                                         scan_type, val);
 
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
 
                return ret;
        case IIO_CHAN_INFO_SCALE:
@@ -1056,13 +1054,12 @@ static int ad7380_read_raw(struct iio_dev *indio_dev,
 
                return IIO_VAL_INT;
        case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
 
                ret = ad7380_get_osr(st, val);
 
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
 
                if (ret)
                        return ret;
@@ -1155,13 +1152,12 @@ static int ad7380_write_raw(struct iio_dev *indio_dev,
 
        switch (mask) {
        case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
 
                ret = ad7380_set_oversampling_ratio(st, val);
 
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
 
                return ret;
        default:
@@ -1186,13 +1182,12 @@ static int ad7380_read_event_config(struct iio_dev *indio_dev,
        struct ad7380_state *st = iio_priv(indio_dev);
        int tmp, ret;
 
-       ret = iio_device_claim_direct_mode(indio_dev);
-       if (ret)
-               return ret;
+       if (!iio_device_claim_direct(indio_dev))
+               return -EBUSY;
 
        ret = regmap_read(st->regmap, AD7380_REG_ADDR_CONFIG1, &tmp);
 
-       iio_device_release_direct_mode(indio_dev);
+       iio_device_release_direct(indio_dev);
 
        if (ret)
                return ret;
@@ -1209,16 +1204,15 @@ static int ad7380_write_event_config(struct iio_dev *indio_dev,
        struct ad7380_state *st = iio_priv(indio_dev);
        int ret;
 
-       ret = iio_device_claim_direct_mode(indio_dev);
-       if (ret)
-               return ret;
+       if (!iio_device_claim_direct(indio_dev))
+               return -EBUSY;
 
        ret = regmap_update_bits(st->regmap,
                                 AD7380_REG_ADDR_CONFIG1,
                                 AD7380_CONFIG1_ALERTEN,
                                 FIELD_PREP(AD7380_CONFIG1_ALERTEN, state));
 
-       iio_device_release_direct_mode(indio_dev);
+       iio_device_release_direct(indio_dev);
 
        return ret;
 }
@@ -1265,13 +1259,12 @@ static int ad7380_read_event_value(struct iio_dev *indio_dev,
 
        switch (info) {
        case IIO_EV_INFO_VALUE:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
 
                ret = ad7380_get_alert_th(st, dir, val);
 
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
                return ret;
        default:
                return -EINVAL;
@@ -1332,13 +1325,12 @@ static int ad7380_write_event_value(struct iio_dev *indio_dev,
 
        switch (info) {
        case IIO_EV_INFO_VALUE:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
 
                ret = ad7380_set_alert_th(indio_dev, chan, dir, val);
 
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
                return ret;
        default:
                return -EINVAL;
index aeb8e383fe71b2ab638fe4ea5680eff0f50c5397..37b0515cf4fc2ef49d58673c4eee78a97b7a5149 100644 (file)
@@ -138,11 +138,10 @@ static int ad7476_read_raw(struct iio_dev *indio_dev,
 
        switch (m) {
        case IIO_CHAN_INFO_RAW:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
                ret = ad7476_scan_direct(st);
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
 
                if (ret < 0)
                        return ret;
index 69add1dc4b5388ed0a18196f248412725eb324a7..87ff95643794c0e69e09595b545113b70f0fb8a7 100644 (file)
@@ -152,11 +152,10 @@ static int ad7887_read_raw(struct iio_dev *indio_dev,
 
        switch (m) {
        case IIO_CHAN_INFO_RAW:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
                ret = ad7887_scan_direct(st, chan->address);
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
 
                if (ret < 0)
                        return ret;
index acc44cb34f8245b9d68359c8addabed623d42393..87945efb940b3618fcbd6a9ec1c4251b1dad633e 100644 (file)
@@ -260,11 +260,10 @@ static int ad7923_read_raw(struct iio_dev *indio_dev,
 
        switch (m) {
        case IIO_CHAN_INFO_RAW:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
                ret = ad7923_scan_direct(st, chan->address);
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
 
                if (ret < 0)
                        return ret;
index 9a7825ea5087af9725613492c42020587631403c..2f949fe5587318957f2e423029294ced0a6f803d 100644 (file)
@@ -407,12 +407,11 @@ static int ad7944_read_raw(struct iio_dev *indio_dev,
 
        switch (info) {
        case IIO_CHAN_INFO_RAW:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
 
                ret = ad7944_single_conversion(adc, chan, val);
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
                return ret;
 
        case IIO_CHAN_INFO_SCALE:
index 221a5fdc1eaac81349b72fe5c5c9bb4dc1019a58..a1e48a756a7b519105393f77c4aebde1f2f85d50 100644 (file)
@@ -314,15 +314,14 @@ static int dln2_adc_read_raw(struct iio_dev *indio_dev,
 
        switch (mask) {
        case IIO_CHAN_INFO_RAW:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret < 0)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
 
                mutex_lock(&dln2->mutex);
                ret = dln2_adc_read(dln2, chan->channel);
                mutex_unlock(&dln2->mutex);
 
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
 
                if (ret < 0)
                        return ret;
index 9d3b23efcc068a794636a069e89005001508c91a..5dbf5f136768ef119e308c449469a5f97c863412 100644 (file)
@@ -1471,9 +1471,8 @@ static int stm32_adc_read_raw(struct iio_dev *indio_dev,
        switch (mask) {
        case IIO_CHAN_INFO_RAW:
        case IIO_CHAN_INFO_PROCESSED:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
                if (chan->type == IIO_VOLTAGE)
                        ret = stm32_adc_single_conv(indio_dev, chan, val);
                else
@@ -1482,7 +1481,7 @@ static int stm32_adc_read_raw(struct iio_dev *indio_dev,
                if (mask == IIO_CHAN_INFO_PROCESSED)
                        *val = STM32_ADC_VREFINT_VOLTAGE * adc->vrefint.vrefint_cal / *val;
 
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
                return ret;
 
        case IIO_CHAN_INFO_SCALE:
index da16876c32ae88493efed7f598ee8b2480dec0a5..9c845ee01697c3527c1c198a3f39870e0de37d32 100644 (file)
@@ -96,19 +96,18 @@ static int adc084s021_read_raw(struct iio_dev *indio_dev,
 
        switch (mask) {
        case IIO_CHAN_INFO_RAW:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret < 0)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
 
                ret = regulator_enable(adc->reg);
                if (ret) {
-                       iio_device_release_direct_mode(indio_dev);
+                       iio_device_release_direct(indio_dev);
                        return ret;
                }
 
                adc->tx_buf[0] = channel->channel << 3;
                ret = adc084s021_adc_conversion(adc, &be_val);
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
                regulator_disable(adc->reg);
                if (ret < 0)
                        return ret;
index 9758ac8013100dee7c501e324c27a2125420bb2a..7d615e2bbf3934c5b9e59b2b926ec5db78984627 100644 (file)
@@ -181,13 +181,12 @@ static int adc108s102_read_raw(struct iio_dev *indio_dev,
 
        switch (m) {
        case IIO_CHAN_INFO_RAW:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
 
                ret = adc108s102_scan_direct(st, chan->address);
 
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
 
                if (ret < 0)
                        return ret;
index 03f762415fa5c3c4341d463a5f9caad396f6f2ea..ae30b47e451426539b1b0afc4d92b30ed754b7b9 100644 (file)
@@ -319,13 +319,12 @@ static int ads1298_read_raw(struct iio_dev *indio_dev,
 
        switch (mask) {
        case IIO_CHAN_INFO_RAW:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
 
                ret = ads1298_read_one(priv, chan->scan_index);
 
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
 
                if (ret)
                        return ret;
index 91a79ebc4bde2b3155b84d771b93cc455150c22d..c6096b64664e67351e7d2a54da7c4b51adb019ea 100644 (file)
@@ -505,12 +505,11 @@ static int ads131e08_read_raw(struct iio_dev *indio_dev,
 
        switch (mask) {
        case IIO_CHAN_INFO_RAW:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
 
                ret = ads131e08_read_direct(indio_dev, channel, value);
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
                if (ret)
                        return ret;
 
@@ -551,12 +550,11 @@ static int ads131e08_write_raw(struct iio_dev *indio_dev,
 
        switch (mask) {
        case IIO_CHAN_INFO_SAMP_FREQ:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
 
                ret = ads131e08_set_data_rate(st, value);
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
                return ret;
 
        default:
index 08de997584fd0177d30f704fd2d7350770955582..5a138be983ede197b2a85b022b6faa9e9e5be297 100644 (file)
@@ -131,11 +131,10 @@ static int tlc4541_read_raw(struct iio_dev *indio_dev,
 
        switch (m) {
        case IIO_CHAN_INFO_RAW:
-               ret = iio_device_claim_direct_mode(indio_dev);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
                ret = spi_sync(st->spi, &st->scan_single_msg);
-               iio_device_release_direct_mode(indio_dev);
+               iio_device_release_direct(indio_dev);
                if (ret < 0)
                        return ret;
                *val = be16_to_cpu(st->rx_buf[0]);