]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: adc: ti-tsc2046: simplify with cleanup.h
authorKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Fri, 5 Jul 2024 10:40:48 +0000 (12:40 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 29 Jul 2024 19:31:11 +0000 (20:31 +0100)
Allocate the memory with scoped/cleanup.h to reduce error handling and
make the code a bit simpler.

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://patch.msgid.link/20240705-cleanup-h-iio-v1-5-77114c7e84c5@linaro.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/ti-tsc2046.c

index edcef8f11522b48440beb68136d89feca9011223..24b1d4390872e06390cac668d6444dd356fa1ca4 100644 (file)
@@ -6,6 +6,7 @@
  */
 
 #include <linux/bitfield.h>
+#include <linux/cleanup.h>
 #include <linux/delay.h>
 #include <linux/module.h>
 #include <linux/regulator/consumer.h>
@@ -273,7 +274,6 @@ static int tsc2046_adc_read_one(struct tsc2046_adc_priv *priv, int ch_idx,
                                u32 *effective_speed_hz)
 {
        struct tsc2046_adc_ch_cfg *ch = &priv->ch_cfg[ch_idx];
-       struct tsc2046_adc_atom *rx_buf, *tx_buf;
        unsigned int val, val_normalized = 0;
        int ret, i, count_skip = 0, max_count;
        struct spi_transfer xfer;
@@ -287,18 +287,20 @@ static int tsc2046_adc_read_one(struct tsc2046_adc_priv *priv, int ch_idx,
                max_count = 1;
        }
 
-       if (sizeof(*tx_buf) * max_count > PAGE_SIZE)
+       if (sizeof(struct tsc2046_adc_atom) * max_count > PAGE_SIZE)
                return -ENOSPC;
 
-       tx_buf = kcalloc(max_count, sizeof(*tx_buf), GFP_KERNEL);
+       struct tsc2046_adc_atom *tx_buf __free(kfree) = kcalloc(max_count,
+                                                               sizeof(*tx_buf),
+                                                               GFP_KERNEL);
        if (!tx_buf)
                return -ENOMEM;
 
-       rx_buf = kcalloc(max_count, sizeof(*rx_buf), GFP_KERNEL);
-       if (!rx_buf) {
-               ret = -ENOMEM;
-               goto free_tx;
-       }
+       struct tsc2046_adc_atom *rx_buf __free(kfree) = kcalloc(max_count,
+                                                               sizeof(*rx_buf),
+                                                               GFP_KERNEL);
+       if (!rx_buf)
+               return -ENOMEM;
 
        /*
         * Do not enable automatic power down on working samples. Otherwise the
@@ -326,7 +328,7 @@ static int tsc2046_adc_read_one(struct tsc2046_adc_priv *priv, int ch_idx,
        if (ret) {
                dev_err_ratelimited(&priv->spi->dev, "SPI transfer failed %pe\n",
                                    ERR_PTR(ret));
-               goto free_bufs;
+               return ret;
        }
 
        if (effective_speed_hz)
@@ -337,14 +339,7 @@ static int tsc2046_adc_read_one(struct tsc2046_adc_priv *priv, int ch_idx,
                val_normalized += val;
        }
 
-       ret = DIV_ROUND_UP(val_normalized, max_count - count_skip);
-
-free_bufs:
-       kfree(rx_buf);
-free_tx:
-       kfree(tx_buf);
-
-       return ret;
+       return DIV_ROUND_UP(val_normalized, max_count - count_skip);
 }
 
 static size_t tsc2046_adc_group_set_layout(struct tsc2046_adc_priv *priv,