From nobody Thu Apr 9 12:31:44 2026 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1B4953D5232 for ; Mon, 2 Mar 2026 13:06:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772456815; cv=none; b=PNaWqvVCgyUhjyjbo3IU7JeVw0LNlTB6GZ4WfdqaCp+wntW+nYxAA+AZOyx6f9NGYCUxmmiQGF1R8JQvNeNWA+MGe5bTvEO2yKJ6b+bEAvs2LWbw2D93QA8UEGyZuXiyMb/lusfe7PIibrYYvaRTa6q72Ojo9yjikLLtysFUdmA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772456815; c=relaxed/simple; bh=eJYQ5YvtPHTQPiSfzoq2ScstbsQx5eZ3LHmpQIhH8vo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=r4+EedCwoQfc5BXaVp5iaLUfrVe/gP+DamG70/Zj9JKEc2meypngE9UWYHWHdutrqJxfZvBOHR38kKYwkPW1t3piuMPIH+lP376kqp3+0WjjxDJpCTMZnEtIBlQYlSgFbM5xsVwoaDm7pRE+9FHIMOBviN+5Up5OjFPCkSvvZRU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=fWXjIEfv; arc=none smtp.client-ip=209.85.216.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fWXjIEfv" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-3598c008455so620788a91.3 for ; Mon, 02 Mar 2026 05:06:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772456813; x=1773061613; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=redOa/mq1A5/vGoB89xwTvVxlbWjSEO176qz4hWguZs=; b=fWXjIEfvWDTGjl950tWPNf7fyhB0LfrEdBCxgVMl6oqUmBhwhK/IVaiisvOkgbxAy7 A617nE+sl2p08GjBgVpodJ6jSlHA2H8Y3j5lp5p2zFf1piq4tz6gqqpKWA5sy7EmxE5c G+dEvpqjjfNXcIdtFO2ZQyNfLpqbAbXgjz65X1YQ2oCwnO3mrIcxPgsW6xfQ8AE8Q1gg aqcyKefPlpadLGJjhk71bY9DgN3K7dvscUXmbeQtLsgBt997JhHFnKXtD0rfbp7zgKhX rPfYWLIZvNwNQ6A3JUe1tgYG5mML/toOPh80CbjqxwLpfHB2+Y76PS2/sN47kjj/FGB9 LIGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772456813; x=1773061613; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=redOa/mq1A5/vGoB89xwTvVxlbWjSEO176qz4hWguZs=; b=exKCQy5Gk42bVEv2HCaB5tkUMWmxeRmy+VatV45HzaEbRcitlqsyKCs+sAt7mvoaA+ zGKCi4roFrqdzwyDoGvLTwk0qGab352wIVQ8lrRiIApfTX8SulOrLaYk5qXz7YELyY2s YaBDgpxhRDpvEe3y7qU5C4IO6YgwHOwPtPj5J09WkQupVpXTVbxnxqHgwqmLPThw9T+W 4EmvLg6YsjADZxtu58oIiITbA9ybZNOcc84R49n6S6UlmfhtC9f6LvN4kd8mGY58Yt7X ueeioQPNurzRzAjWW5AXcqnfgMo19K2Hw+vzXbwdl8Ii/bQKwO/2qQdN9eT+rs5Qw+CF 8zrw== X-Forwarded-Encrypted: i=1; AJvYcCWtadx7FLkDIJNQPCEeVZHGYZYWRQfaN9Nb7jwlRJdkE0C2rvBrgo63yl3uGPce8x3mt3WNst1ClOpeLzI=@vger.kernel.org X-Gm-Message-State: AOJu0YzibjLs54kT0WWDZ8Ei65CwGs1t1x1SUbglkk53J0bKOPNdVEpF ROhQ5rwIq9uaxI2WLTUI48VvydfXv1gWzFPehMsISaC7ZkNgnz2g5h39 X-Gm-Gg: ATEYQzxdyWD993z8IYO6btx51r18CttnTeuLJk6jsNoEUJa0Qa++3O/W06SEYIzimcI p13rzIrFslxouXO7m8KJtfCvRdJAH9BnODQzwI5eclMA4tRB3pCwvXVCUKHOYnSe/2VvOQ7TTUv SdCMgoePg271YMnY3O2B9H5SSJOP308adm+K300z285ipIyF3z0IrFhzBvFhqhTlVmHMVkt2wyF WOZPXxFlsTpRrvQzIoEH/hASXAqtEA34NtRv5z2MSIJBw30cEmBXli5yVfRJ0GkWA+CRYRtkEQL QBmllBqR5tiYKKMig3leu9NVNbFRMLNhWJNTdxFAoFZHjDaezmFRIgShCQ/yU/yk9gH61oI2MnY MTB0szCDC0JoLRlvzoeIbmtv/URLXRyGotxbsyXIiFGbNDs43fAP4ycZkaj1/ltoadWotiITXXV qAGaQfxwKrr2ERUMZIIJ0fHahCTuzidVTKgr0m9vcd8g== X-Received: by 2002:a17:90b:4a:b0:354:c600:1a1 with SMTP id 98e67ed59e1d1-35965ccf1b9mr9811995a91.19.1772456813363; Mon, 02 Mar 2026 05:06:53 -0800 (PST) Received: from debian.ari ([152.58.176.247]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3597b448e38sm7444585a91.5.2026.03.02.05.06.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Mar 2026 05:06:52 -0800 (PST) From: Archit Anant To: jic23@kernel.org, lars@metafoo.de, Michael.Hennerich@analog.com Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Archit Anant Subject: [PATCH v3 1/4] iio: adc: ad799x: make rx_buf static and DMA-safe Date: Mon, 2 Mar 2026 18:36:29 +0530 Message-Id: <20260302130632.29144-2-architanant5@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260302130632.29144-1-architanant5@gmail.com> References: <20260302130632.29144-1-architanant5@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently, rx_buf is dynamically allocated using kmalloc() every time ad799x_update_scan_mode() is called. This can lead to memory leaks if the scan mask is updated multiple times. Drop the dynamic allocation and replace it with a static, buffer at the end of the state structure using IIO_DECLARE_DMA_BUFFER_WITH_TS(). This eliminates the allocation overhead, prevents leaks, and removes the need for manual kfree() on driver removal. Suggested-by: David Lechner Signed-off-by: Archit Anant --- drivers/iio/adc/ad799x.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c index 108bb22162ef..7775be874081 100644 --- a/drivers/iio/adc/ad799x.c +++ b/drivers/iio/adc/ad799x.c @@ -39,6 +39,7 @@ #include =20 #define AD799X_CHANNEL_SHIFT 4 +#define AD799X_MAX_CHANNELS 8 =20 /* * AD7991, AD7995 and AD7999 defines @@ -133,8 +134,8 @@ struct ad799x_state { unsigned int id; u16 config; =20 - u8 *rx_buf; unsigned int transfer_size; + IIO_DECLARE_DMA_BUFFER_WITH_TS(__be16, rx_buf, AD799X_MAX_CHANNELS); }; =20 static int ad799x_write_config(struct ad799x_state *st, u16 val) @@ -217,11 +218,11 @@ static irqreturn_t ad799x_trigger_handler(int irq, vo= id *p) } =20 b_sent =3D i2c_smbus_read_i2c_block_data(st->client, - cmd, st->transfer_size, st->rx_buf); + cmd, st->transfer_size, (u8 *)st->rx_buf); if (b_sent < 0) goto out; =20 - iio_push_to_buffers_with_timestamp(indio_dev, st->rx_buf, + iio_push_to_buffers_with_timestamp(indio_dev, &st->rx_buf, iio_get_time_ns(indio_dev)); out: iio_trigger_notify_done(indio_dev->trig); @@ -234,11 +235,6 @@ static int ad799x_update_scan_mode(struct iio_dev *ind= io_dev, { struct ad799x_state *st =3D iio_priv(indio_dev); =20 - kfree(st->rx_buf); - st->rx_buf =3D kmalloc(indio_dev->scan_bytes, GFP_KERNEL); - if (!st->rx_buf) - return -ENOMEM; - st->transfer_size =3D bitmap_weight(scan_mask, iio_get_masklength(indio_dev)) * 2; =20 @@ -895,7 +891,6 @@ static void ad799x_remove(struct i2c_client *client) if (st->vref) regulator_disable(st->vref); regulator_disable(st->reg); - kfree(st->rx_buf); } =20 static int ad799x_suspend(struct device *dev) --=20 2.39.5 From nobody Thu Apr 9 12:31:44 2026 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 23ECB3D7D7C for ; Mon, 2 Mar 2026 13:06:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772456820; cv=none; b=YLzv0nCzk6rEKlqhyocUlJO6rim1dha4oSO5bqV9BLqAcQjRAV1oToVYUt5HfyVOnz/LpzA+8vCh6MROvKLMYmCq3kgeyZCvoGeyLA6TM/sGj4wYQEZxYLcdhZB3ieat4LA3V8ABVxdFFXs8paRZpPwYoSxpACbH1vcQrKPZZf0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772456820; c=relaxed/simple; bh=tJOlEx2YSqymMwX2fM5CB5Sh2YTeZS67ymrbPi2BBeg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ZurZ4de08oZ1BVUOR6hC2PLLMK6TxuMVv8vc1Ic7QDbFavpQtopHlMra6r2cDYS9H8CKla9ZdW/7PF+WrfjUssbh3BWCRoI1dhpH3in+G+eSlQQJ3FmirTmOptpP0OoHBhYq5/wpAPTicBTIpHUS9et83CyfFx9wnRNbptAGc5g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=I4B59C0q; arc=none smtp.client-ip=209.85.216.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="I4B59C0q" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-3585ec417f6so2035382a91.1 for ; Mon, 02 Mar 2026 05:06:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772456818; x=1773061618; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2mxbGIf2vs06p+QEYROvnEWXbdM+MByCGD3Xnp5U/wY=; b=I4B59C0qALDlyzRayvHMU9UWZdlGbhute9f1lmCPz3A3O+vhpZSN63g3eW2d3Z/cyk 0hnf8gnYTDZnBMREibP5Pa3oAsFIcP4s05TXgGOqH1xj/MaM5VWBXfSSRn+eriZCPTmw dtXobRfomntWmEIsNNvYLTHjEo/AMVU296QKDha2jWKTEStUOeIN3yUw3yg/Z2wRdRHe 91V/vxdQttZGhpLRxhPX+/+ZdSGb6Skb/l7RCu+irlZIZPryPtfld5CX8M0SYL71L/k9 yzB8o2Xp8b4i1calSGG6lPhLGPeMLuJaaAaZDUzqEpmFzExQUR8wBavvVSiZXDdDAxf0 6LZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772456818; x=1773061618; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=2mxbGIf2vs06p+QEYROvnEWXbdM+MByCGD3Xnp5U/wY=; b=QUidm1Ce2jtQn/DdfsZ2jVcYgxwUqd4Jo9yCh2CrG/womdNvn4BU7D+FeHSKFNrgMn E3BEkAK4DURffa+o6vob8xEfDaYTRhrDwlnQBaxSrUaPuK6d3B1rQzgpcOxhRohbWB/I NSBuX1F3m+FKGgRMSHTac8VpF9400DpgflhlWGjWkNwltg0cho8+R2+NgKtA88ytsdin gqTphNq8vA/TezUyWfqMIt7Fu4ZuZ9qlY48f8+Symb4PQq0v5F3NIhnbStEN0AEjHPaZ hLNWXTbXLh6r0FYAoczExQEe2XO/1NeWtzmMu2+6s10d9wKK+XGNVKE+rf34y6mtL7gp pS2w== X-Forwarded-Encrypted: i=1; AJvYcCXBHlV7MuRK/8YY5wG1xBqBhQWNN+yf5taQ0B0z9eCpiQNoY5r22uTBXQFevSWll+gqL0FRIkwXJff1YOc=@vger.kernel.org X-Gm-Message-State: AOJu0YwjrM/InY6+KvRvLEVZLSUxg3g2mGV5AuXxb2S0VTckAWSFicD6 ob1RQyeMPP//jJwqCJLnfpl8+j05p9Oew4NjmtUGqSM82ZewOym5dEIA X-Gm-Gg: ATEYQzw5xQfIdnQ3JYv1EEQeZB2UunS3euXiMnwVL0/Rdp/X+pKHrL4m+r4E3vgXss0 LFfFG9rK6TBbefSXNkE4DWJztSILcs3OTjeRT9R7dhAh3LoV8caVI9YpL5n3OsNKN/FQvc/1yjW op6aUQUr4Y4vh1tBZRQ8pZGVEuIXeBc6UJpmtI2pGH6wTlxjuVwW5TZ32EV0qtJJAqmulSQb9kz 50CwaCGN6KWB3hsB3UHbDIpBMGwUBMKIBJJcVRxHogxYuwsrgKfz6VCFDg8lJpvP7QJO+pubPYe Rq8jR+6utDVt8/T9KD3kKOxgbSRCzXLEZY836+kSA3fRXSfOQoZ9368jtCdCGRr/PGBwgfRJ8Ge NS7FdpYMt4QSyfKAgRdknPLA1wBZJA2sG8gs4T3xTAuBO2yEnrUJ7TLrfVWBzWySbnf0Ht+D9VA 0lcswnRumHoRhH1y+zUCNwjm+PWhBHYwGrm9PyoT2I/w== X-Received: by 2002:a17:90a:e704:b0:359:8df1:8553 with SMTP id 98e67ed59e1d1-3598df1884emr2375476a91.9.1772456818404; Mon, 02 Mar 2026 05:06:58 -0800 (PST) Received: from debian.ari ([152.58.176.247]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3597b448e38sm7444585a91.5.2026.03.02.05.06.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Mar 2026 05:06:57 -0800 (PST) From: Archit Anant To: jic23@kernel.org, lars@metafoo.de, Michael.Hennerich@analog.com Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Archit Anant Subject: [PATCH v3 2/4] iio: adc: ad799x: cache regulator voltages during probe Date: Mon, 2 Mar 2026 18:36:30 +0530 Message-Id: <20260302130632.29144-3-architanant5@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260302130632.29144-1-architanant5@gmail.com> References: <20260302130632.29144-1-architanant5@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Reading the regulator voltage via regulator_get_voltage() can be a slow operation. Since the reference voltages for this ADC are not expected to change at runtime, it is inefficient to query the regulator API every time userspace reads the IIO_CHAN_INFO_SCALE attribute. Cache the VCC and VREF voltages in the state structure during probe(). This improves the performance of ad799x_read_raw() and removes the dependency on the regulator pointers during fast-path reads. Suggested-by: Jonathan Cameron Signed-off-by: Archit Anant --- drivers/iio/adc/ad799x.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c index 7775be874081..35e0589428d0 100644 --- a/drivers/iio/adc/ad799x.c +++ b/drivers/iio/adc/ad799x.c @@ -135,6 +135,10 @@ struct ad799x_state { u16 config; =20 unsigned int transfer_size; + + int vcc_uv; + int vref_uv; + IIO_DECLARE_DMA_BUFFER_WITH_TS(__be16, rx_buf, AD799X_MAX_CHANNELS); }; =20 @@ -303,9 +307,9 @@ static int ad799x_read_raw(struct iio_dev *indio_dev, return IIO_VAL_INT; case IIO_CHAN_INFO_SCALE: if (st->vref) - ret =3D regulator_get_voltage(st->vref); + ret =3D st->vref_uv; else - ret =3D regulator_get_voltage(st->reg); + ret =3D st->vcc_uv; =20 if (ret < 0) return ret; @@ -809,6 +813,10 @@ static int ad799x_probe(struct i2c_client *client) ret =3D regulator_enable(st->reg); if (ret) return ret; + ret =3D regulator_get_voltage(st->reg); + if (ret < 0) + goto error_disable_reg; + st->vcc_uv =3D ret; =20 /* check if an external reference is supplied */ if (chip_info->has_vref) { @@ -827,6 +835,11 @@ static int ad799x_probe(struct i2c_client *client) ret =3D regulator_enable(st->vref); if (ret) goto error_disable_reg; + + ret =3D regulator_get_voltage(st->vref); + if (ret < 0) + goto error_disable_vref; + st->vref_uv =3D ret; } } =20 --=20 2.39.5 From nobody Thu Apr 9 12:31:44 2026 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B925E3D5232 for ; Mon, 2 Mar 2026 13:07:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772456824; cv=none; b=DKiCtvptdrwvKUSzEK5KFz0z6dfT4unkg05sG5CQp1qFswX1hereV3nYWuc7D1s04KsItwaZchTQKTRJ1RrXpcPbEdlMbAz9KbEVBoJXBDUmwjTTg1nwp2phOOH4kEStafTZGPk6uobAfTm2ncdXaBT1ZqJV36v7TXWqJkBtJ/Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772456824; c=relaxed/simple; bh=pUizvyGgrbVh0ydayA9+/BD4CmqGKVV3YpQdMRdjHZs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=oeZB9l3ZrIjC/GeSqBceRUuKsp1YYd3DcfxThDZzNxS0PDUw9o9+5kVj4xlpkpefeArdSIVA2kB2fRdE50Zdl6rnTltR3wZ65c2WIcNgxrQXaBG4MIxOo3m9yV0NwsUojajY0JJwwNfV1ZkhEeV5w0cb0/b6TCUuMVWXhq2xUWw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=R+PGTZVU; arc=none smtp.client-ip=209.85.216.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="R+PGTZVU" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-356337f058aso2195498a91.2 for ; Mon, 02 Mar 2026 05:07:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772456823; x=1773061623; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dmA9gHa9RdR5TU2BtZuAJxtVJP+tTGO3ZPbWbacgMoU=; b=R+PGTZVUA7JbdHRysP+2JoXHE/0ycwp6I5a6VDUBUr/+vJ0WTJbQGjLnM/NrVCqZ25 7DHZb7zXlzqbqxj3s0oj5ojiZUtJsMBXuRCdOicRy/YYj8WGbudWAZJVUDPs/BFWLDU0 VdZQ+072DZQ6pBw61QvV7Rc/lze5Z9FILqMVmd4GKns1ZuIKS3G613RXQpG4T+ImGJ9v voxDWv7+jqhE8MFLaV/rf3UC2CL6dCzAXWccLVHQ7aUmjHtS/eZyvcAMlYrf3enMk/Ph RFjzFASphB2UPOaJN471rBvqgre7OeQUL39eojyFQH5nwJ5NvVM92hj/n+Gkq2A4EgGN tRww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772456823; x=1773061623; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=dmA9gHa9RdR5TU2BtZuAJxtVJP+tTGO3ZPbWbacgMoU=; b=V6y39Yw12pn2h5m962NlXVzYhoCcBPbDdbhEq+d5WORRA2R+vlvq6DFQh3uv3PaKut 7sPEJPPgP7kbr/xiow6V/V2VppwaXKsg9S1FXJDBU6Foa/UV6KgMgXhA3R9rQUOyHWlt tT29GYcNOaUheK1cblc5C/tDC4TG0V3I6zrluPjBaKNEs091xdYzNzymXVnwTbLrd509 vJd5UfQZ+WPs87gT9+tD3BJ2yv4E73aAJbPsGQRiT6qYSJwNhvBVehDHiA725Ddq3iTx SsMH4leUfWXNQL1X8l6phu+3OqhuS0VWOvCAqY3sjEspSg+15nK8UbqFuKnegxBlSn2I feVw== X-Forwarded-Encrypted: i=1; AJvYcCUlP1mJBrf3bhEXCfFz24RwG6XoNotL1svWcsfbu79Q1D3U7Wot1RFrFlE+ndsuIeMD5J+2P5MeglHE9Zs=@vger.kernel.org X-Gm-Message-State: AOJu0YxHyQnbHd6DN5Evyepl3GuOV+6sEIlz45DAVZszpzABD648SPtF /GrBhsIgW91GnmP51ymrnRnezHrE8H5sn+wxZmY+Uts50cDA7EUZkey4 X-Gm-Gg: ATEYQzylQzmk34A1kIJ+aUl4ylrTYIerR5EfQfxKiLY4wcp91vb72HtFHwebXMZnvVi ziJieeVSrI2KaofKDqs4dZT1+90x+tvNb1WgA8q36SIaEdHd/hvYfo2UuY2Fg5g1BL2mrVLRpZ/ klCk8SUVdebe9VCJ4KcKwkEQciTcuM4DKnj9XvKA24rdMQFj8QfDhPKiA86p0HBJqkoiATExoiy 1MnAd8L34iLdGdkBsZol3egZuzSFrAPFmFIJOcnudjToriXi32UIIpVlPrPcXzhqNjei2itFURT 3PrOc+nolkKxMbGaE/Zqhx8pvaJjlTd8gSW2vbRkdRoQnwUrc1kAv5/EuPEKYKnEJstnRp9AZ/A b0hsKHgLZiuG+2UEL8LcD3njEIt2TD9b+Tko6oos3qYTOhpvEoNqzUq0zOmo8DQ86914/8Aa/sr 0DfdFdL5FdqLoe5eEqRWjDsUsE3Zgfyo9lnG9sgwbktQ== X-Received: by 2002:a17:90b:524b:b0:354:999f:1b22 with SMTP id 98e67ed59e1d1-35965cf519bmr8851182a91.32.1772456822897; Mon, 02 Mar 2026 05:07:02 -0800 (PST) Received: from debian.ari ([152.58.176.247]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3597b448e38sm7444585a91.5.2026.03.02.05.06.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Mar 2026 05:07:02 -0800 (PST) From: Archit Anant To: jic23@kernel.org, lars@metafoo.de, Michael.Hennerich@analog.com Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Archit Anant Subject: [PATCH v3 3/4] iio: adc: ad799x: use devm_add_action_or_reset for regulators Date: Mon, 2 Mar 2026 18:36:31 +0530 Message-Id: <20260302130632.29144-4-architanant5@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260302130632.29144-1-architanant5@gmail.com> References: <20260302130632.29144-1-architanant5@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert the manual regulator_disable() handling to use devm_add_action_or_reset(). This guarantees that the regulators are disabled in the correct reverse order of allocation during device teardown or probe failure. This removes the need to manually disable the regulators in the remove() function. Suggested-by: David Lechner Signed-off-by: Archit Anant --- drivers/iio/adc/ad799x.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c index 35e0589428d0..1a96b5417ecf 100644 --- a/drivers/iio/adc/ad799x.c +++ b/drivers/iio/adc/ad799x.c @@ -781,6 +781,13 @@ static const struct ad799x_chip_info ad799x_chip_info_= tbl[] =3D { }, }; =20 +static void ad799x_reg_disable(void *data) +{ + struct regulator *reg =3D data; + + regulator_disable(reg); +} + static int ad799x_probe(struct i2c_client *client) { const struct i2c_device_id *id =3D i2c_client_get_device_id(client); @@ -818,6 +825,10 @@ static int ad799x_probe(struct i2c_client *client) goto error_disable_reg; st->vcc_uv =3D ret; =20 + ret =3D devm_add_action_or_reset(&client->dev, ad799x_reg_disable, st->re= g); + if (ret) + return ret; + /* check if an external reference is supplied */ if (chip_info->has_vref) { st->vref =3D devm_regulator_get_optional(&client->dev, "vref"); @@ -840,6 +851,11 @@ static int ad799x_probe(struct i2c_client *client) if (ret < 0) goto error_disable_vref; st->vref_uv =3D ret; + + ret =3D devm_add_action_or_reset(&client->dev, ad799x_reg_disable, + st->vref); + if (ret) + goto error_disable_reg; } } =20 @@ -901,9 +917,6 @@ static void ad799x_remove(struct i2c_client *client) iio_device_unregister(indio_dev); =20 iio_triggered_buffer_cleanup(indio_dev); - if (st->vref) - regulator_disable(st->vref); - regulator_disable(st->reg); } =20 static int ad799x_suspend(struct device *dev) --=20 2.39.5 From nobody Thu Apr 9 12:31:44 2026 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3E5183D6CD2 for ; Mon, 2 Mar 2026 13:07:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772456829; cv=none; b=oGBGSzerLGfxTvdlCR49ds+k8uwo88wGPdkJtPyCxNoaYP8KTnWV4R7wv+LHXL1DSjvGz1DTTZ2zQ7k7W87Vi4ZqG8MKZSU8XUUS2hNT4bmPcmJK+8TmtLA2Pmdhf98tCp0B3vaRQsM12QFfaHwerGPDs9ttdHxb/EMzaN0EgVk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772456829; c=relaxed/simple; bh=aQ7zABqojbwxrU4SsOcLTgZNgpwW7JwcYk5QGDZUQ+0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=kNCG6rZ+okQBjS1YBi32YNLcgIAU031jNMcRATkw9QxAGfEo8JfhFgfqMhKXo+Zkcv5TuOPmornaZ40CmUhep2liu4xeK/qYlDbFkkUWAk8NcH2yRwlnSGnnL7KVKsnHeflNifmpi6znJCXwmNpl40Mfos9IyxddfQRUqoL89Zw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RVIDnc/d; arc=none smtp.client-ip=209.85.216.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RVIDnc/d" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-3598e7155bbso591977a91.2 for ; Mon, 02 Mar 2026 05:07:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772456827; x=1773061627; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=bEGlEibZYgaxceaxVmMyXueExIiVmPPFnlkrZeXfPYQ=; b=RVIDnc/daZu0AHoUwfLAfzmswrGuVO3BveOnVd9pragn8tbE6DqjbcgVl5ZZrj3oVK q+NcJoKD9sjESDqhCFmnp3TQbk0ct/wQ89D3VN28j+l3+fF4XhPI0lWdM8jjkfPEcX5A wOS7lW2+uN2gXnfF3c0ykpm6NpJcJs2XA9Rzwlv3Wi8kaW80WRLQ97KEEojsE+hNUlc/ 06Rr07OhzpZS0nj79A0Jg77c7TFD7wPlOL4HnRFeew6rJMDbC89veFw9ZfIwei1kgmsu +Wnoogbk0xZxFy1vvcO93gTniqVZtDUnJHcLTs0uQ69VrSVD0z2/ZI+dFVU5suOPlyge k+xQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772456827; x=1773061627; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=bEGlEibZYgaxceaxVmMyXueExIiVmPPFnlkrZeXfPYQ=; b=MOG62FHEaZpx7imRRLNhehe8O/W2xcAPowJOHBVERj0Znf99uFvs0JU2/x2CM3duix 02a+66aid9W4hq3LjR3b6LXMtT/voiknv1DVjBBIFs0uqIVeCMqZ+tpA9AXWlDlDvtJs I/dwdIfsZsZJMK/QYaeJI3OVTv8WYbzK6SI7uIirzu345H4+Eov8vmThTi1I2xoofK93 dT+uPaHb6EPfYhJhS+wQh8kROCfPNIkAfdhtT/kZslzRNO8VmjQub5rUmGhKZ/4uNEFY 8SAkZRlkfwlJL1mycTvxLxkUA7ZYC+nh6bAx/jATf+srNtZ7BQuBsbuDLEdNhj0iSnpr 1X2A== X-Forwarded-Encrypted: i=1; AJvYcCVU9h32B1BUkN8YH5ce0wAqwuBayJX01y3oP1jqRpWL2QdANYyz7bvhvrjls3p/h8FGVnh9B13m2snblj4=@vger.kernel.org X-Gm-Message-State: AOJu0YzfHoDUSn/GGe6v2lb8CBRnC8MdKXTKMIodFLUWRj3SMnfR3pKF 5T3paG5ltxZBGN7LXFikMKeKBOfQOq7iRQxVGMYTVT3mkRt5hVSw0Wmr X-Gm-Gg: ATEYQzwveH+6Fw+YSe6hykVFw38ZDjY1zX2Np6Lmm+Sp8FntTWf+lWG1nyKVRqMDjZR mO9EzOnOLSML/mDtROyl2NfN5ySR17mPvq1InKZw3qpsjoSivPr2tLV0xNNRIkxEm9t3Yzjn2o0 urcLxEazNHpAsBbJJPgx0TbUZC22O34JaXbiKMom/nZoTMrc0N6hvJkMXyDw8h7mw5H+C+kTA4U RO1nsllOATP32LX3ePOZfX8oFW16dsOvqw3mNpR+PsU44EOvFjOr+SgiYY8KfEqKRFlRkKHx8dL b7qd6jRxFvDfxgHaQrAu6ySFbIrcWodLmBj0rq/9/F5Fm4FGTP6fgUTBaWnfSw+2UVsTsSgBED+ 9TMsD0ATdxySm7EmUAXgDQvj6vIoFQMQ9EYNTTOYHNFW8pz1rIV44afwwQi5CR4yOL4nbhzSyrz 8PB6F5isTasZrrDe13648kih/5KLxM/GRACbt+HhsTLQ== X-Received: by 2002:a17:90b:288b:b0:359:88c5:3ae4 with SMTP id 98e67ed59e1d1-35988c541c3mr3965793a91.25.1772456827351; Mon, 02 Mar 2026 05:07:07 -0800 (PST) Received: from debian.ari ([152.58.176.247]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3597b448e38sm7444585a91.5.2026.03.02.05.07.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Mar 2026 05:07:06 -0800 (PST) From: Archit Anant To: jic23@kernel.org, lars@metafoo.de, Michael.Hennerich@analog.com Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Archit Anant Subject: [PATCH v3 4/4] iio: adc: ad799x: use devm_iio_device_register and drop remove Date: Mon, 2 Mar 2026 18:36:32 +0530 Message-Id: <20260302130632.29144-5-architanant5@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260302130632.29144-1-architanant5@gmail.com> References: <20260302130632.29144-1-architanant5@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert the driver to use the device-managed versions of iio_device_register() and iio_triggered_buffer_setup(). Because all resources (buffer, regulators, IRQs, IIO device) are now managed by the devm core, the unwinding order is guaranteed to be safe and correct. We can safely remove all manual error handling goto labels in ad799x_probe() and delete the ad799x_remove() function entirely. This eliminates boilerplate code and prevents future resource leaks. Suggested-by: David Lechner Signed-off-by: Archit Anant --- drivers/iio/adc/ad799x.c | 43 ++++++++++------------------------------ 1 file changed, 11 insertions(+), 32 deletions(-) diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c index 1a96b5417ecf..2b40ef2da7a2 100644 --- a/drivers/iio/adc/ad799x.c +++ b/drivers/iio/adc/ad799x.c @@ -822,7 +822,7 @@ static int ad799x_probe(struct i2c_client *client) return ret; ret =3D regulator_get_voltage(st->reg); if (ret < 0) - goto error_disable_reg; + return ret; st->vcc_uv =3D ret; =20 ret =3D devm_add_action_or_reset(&client->dev, ad799x_reg_disable, st->re= g); @@ -835,7 +835,7 @@ static int ad799x_probe(struct i2c_client *client) ret =3D PTR_ERR_OR_ZERO(st->vref); if (ret) { if (ret !=3D -ENODEV) - goto error_disable_reg; + return ret; st->vref =3D NULL; dev_info(&client->dev, "Using VCC reference voltage\n"); } @@ -845,17 +845,17 @@ static int ad799x_probe(struct i2c_client *client) extra_config |=3D AD7991_REF_SEL; ret =3D regulator_enable(st->vref); if (ret) - goto error_disable_reg; + return ret; =20 ret =3D regulator_get_voltage(st->vref); if (ret < 0) - goto error_disable_vref; + return ret; st->vref_uv =3D ret; =20 ret =3D devm_add_action_or_reset(&client->dev, ad799x_reg_disable, st->vref); if (ret) - goto error_disable_reg; + return ret; } } =20 @@ -870,12 +870,12 @@ static int ad799x_probe(struct i2c_client *client) =20 ret =3D ad799x_update_config(st, st->chip_config->default_config | extra_= config); if (ret) - goto error_disable_vref; + return ret; =20 - ret =3D iio_triggered_buffer_setup(indio_dev, NULL, + ret =3D devm_iio_triggered_buffer_setup(&client->dev, indio_dev, NULL, &ad799x_trigger_handler, NULL); if (ret) - goto error_disable_vref; + return ret; =20 if (client->irq > 0) { ret =3D devm_request_threaded_irq(&client->dev, @@ -887,36 +887,16 @@ static int ad799x_probe(struct i2c_client *client) client->name, indio_dev); if (ret) - goto error_cleanup_ring; + return ret; } =20 mutex_init(&st->lock); =20 - ret =3D iio_device_register(indio_dev); + ret =3D devm_iio_device_register(&client->dev, indio_dev); if (ret) - goto error_cleanup_ring; + return ret; =20 return 0; - -error_cleanup_ring: - iio_triggered_buffer_cleanup(indio_dev); -error_disable_vref: - if (st->vref) - regulator_disable(st->vref); -error_disable_reg: - regulator_disable(st->reg); - - return ret; -} - -static void ad799x_remove(struct i2c_client *client) -{ - struct iio_dev *indio_dev =3D i2c_get_clientdata(client); - struct ad799x_state *st =3D iio_priv(indio_dev); - - iio_device_unregister(indio_dev); - - iio_triggered_buffer_cleanup(indio_dev); } =20 static int ad799x_suspend(struct device *dev) @@ -986,7 +966,6 @@ static struct i2c_driver ad799x_driver =3D { .pm =3D pm_sleep_ptr(&ad799x_pm_ops), }, .probe =3D ad799x_probe, - .remove =3D ad799x_remove, .id_table =3D ad799x_id, }; module_i2c_driver(ad799x_driver); --=20 2.39.5