From nobody Thu Apr 9 13:26:17 2026 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (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 3852839524E for ; Sun, 8 Mar 2026 18:29:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772994554; cv=none; b=BVlkDwx+kzLT8SKKL0kSgbIa9yZR3ghrzSffsjYre2vZskmoWRx+XyDcDlSTRoXn+hxvvsrwZcmYeq6Sqo1g8x+uOj/FsEq7r5dlGfZ449INSuxrRvdqW2lYNpfINUt8jRpRsPWcQUkQ1H9l576tTqDU2l2oAoiZYGnSu9qPAEU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772994554; c=relaxed/simple; bh=O0cO7VW/t/npflva08WlRHvPsawZmLIT17C/cEobbvo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=u+e0d0EbgCT87ZfBEPhRTbwiOorAJ8/ks4qmOEeMBLsIV0xXnObVaA0Km3wlULftsJwKJkzGtY04G7oQxl7P04+ZrtSKqo56OAOGQ237+5kewHiECh1WDhyd3cYe/pSKojIIyDn9CTUBYn10ZtnRmDZgrvVCUlWJoMrqUyufYB8= 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=dTqwT0n5; arc=none smtp.client-ip=209.85.214.169 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="dTqwT0n5" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-2ae4d919f9bso45039615ad.0 for ; Sun, 08 Mar 2026 11:29:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772994553; x=1773599353; 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=LCbW4z73JZ+d2G+J5yCTyHmQaUjL/MIJbh7uYYgZ1cE=; b=dTqwT0n5RO+tlcB11NPxOtQaDZfqQDrZGep2lMmmWFxkGl+HoVCVsHHVvOX5oB0/b6 YBuXORRmtjTlYd9SodniGoh0dHJZG9d/h6mnNI04/wLXbCEzgnOnUZcPtMDk21l0GUlT wU6XqPstzk5zSJacHvWlSX+zFu5fvasQsxJPBfUdmtffclpoSSOrcVek1d/L3KsuCvrF qbJKMszqv1sk6pDaKkbfS8a+4FX6+eWVcUTa1KVuY5KAxuBeuyXSE9oZG603t6gd9tEs kUyfO3EiRm3lexKDc8ne/0z0HB6yBACmGNsHWnllO4RJWjGiox+/z/OZRVjPPtpc/QGx eNsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772994553; x=1773599353; 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=LCbW4z73JZ+d2G+J5yCTyHmQaUjL/MIJbh7uYYgZ1cE=; b=c5ZEZjQNReGw4PY7xCoTxy85/boG8EGAsLm+XphfhYEF+lTA+hLZSbf582UOapUyFl 55P1uWJIAmF578eAQxNUR9Fb40Ys2x08AZuSfx/NCja0jc9q6Pd53umGKORLHtzu9P5G hOknX33YeT0jqA+SOlBaOHLNnmLeuc7b6aFph6ImVRonhroSVCHmWibhAevko1/SVDZO fwMfqQ5N8GY6Jsd+fZzAqUoOp1Wyjd6qC1Yr0xqA+afxAZPnKuv0Nvupx0FrlogcXga/ 6Cx4CcONXjpqpzggFltxCe4IkloA/8Rgg7AEFtYepmmKb2tqYwIYYtQnjkXeKIhrp+sQ ywsw== X-Forwarded-Encrypted: i=1; AJvYcCW8hdAC4c4067VtaDjYeauH/F9/254Np8PBTF77257GEToTVQOT7/jPDHoluuAxVmMq8IIC+NiyvtgM4tU=@vger.kernel.org X-Gm-Message-State: AOJu0Yx2PW7OSslx7zOPXi7PPw6xIuAhdlpa3uLAkQMiBmcWlSFKOr2E P+Gvns2DSst7SJB0wdN3T7HsfQSNPXiVZ0ZUd2BZP6IbvfbjmkJOhD3K X-Gm-Gg: ATEYQzyQst+2Y8vv7A3I9IlON9dtyC0Ay2jVMSD8VFhYfy5PcvyS9Qn7AFnkNNYbIHB Ci+jxpE3DiLJ7ta1FI76V0wskoyRdKuVNMj1HL/nsCBpQCw5QztaoN2gbozrM4AnwD0YS7JR/DO g+Zk/kh7wfaFW3n5/wdn2MpjLdLsJt1TYf9H49OS5KH3/SNqiofUQBWIdxfuQeievDRsu3LH90t fB3iQ3geawDcUCG+lDqJB2EvJ+q4lt3XB7Mu5H2l6YrPG/EHS+5bCVHAbTnkfquG0DSFxrJ+s3b KQoQkO8MvcfhJtWH80PyNkDc5v8q9n9L2wLmi05OO15olRekjFHqX+QTdgejG+kqEgPOSAz/oxj fa7vjTyBJGAgXPNdRxAUMvTUr36JLk03jrcxZGc2ENO3iAr90kcSEBAJU3EccvYxkmsq/mhmh3+ haRUk7vtMUdTaHFb0F8VUUeGoOeeQGtjFvXBtsIpT/ X-Received: by 2002:a17:902:da8f:b0:2ae:3a77:a1eb with SMTP id d9443c01a7336-2ae8244dbf1mr100248985ad.39.1772994552654; Sun, 08 Mar 2026 11:29:12 -0700 (PDT) Received: from debian.ari ([152.58.179.53]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ae83f783dbsm89006965ad.42.2026.03.08.11.29.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 08 Mar 2026 11:29:12 -0700 (PDT) From: Archit Anant To: jic23@kernel.org, dlechner@baylibre.com Cc: lars@metafoo.de, Michael.Hennerich@analog.com, nuno.sa@analog.com, andy@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Archit Anant Subject: [PATCH v4 1/4] iio: adc: ad799x: make rx_buf static Date: Sun, 8 Mar 2026 23:58:08 +0530 Message-Id: <20260308182811.33471-2-architanant5@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260308182811.33471-1-architanant5@gmail.com> References: <20260308182811.33471-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 using IIO_DECLARE_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 | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c index 108bb22162ef..c1a7fa37706f 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_BUFFER_WITH_TS(__be16, rx_buf, AD799X_MAX_CHANNELS); }; =20 static int ad799x_write_config(struct ad799x_state *st, u16 val) @@ -217,7 +218,7 @@ static irqreturn_t ad799x_trigger_handler(int irq, void= *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 @@ -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 13:26:17 2026 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) (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 2CE4E39448C for ; Sun, 8 Mar 2026 18:29:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772994559; cv=none; b=rnlwkyahGrdEOfcBHow8/O0/b1r47L1DxW1YOvdrZi6b1VdM9SAD1+cGOaaE+2bJZTG4z+okpwcgbLtE8qdL3bw1eQeqxFeZwQSaXVGTe0msd7DStZtwRgfh5hsI6B6iooh2jf2IyCBVmMGhexzPF86JJ2GEj/RP7/I8YbgZ8io= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772994559; c=relaxed/simple; bh=x5Is6TuJfxAgrtFz4XT+C5a3nBwqtfBUhZaPk0bie0Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=YTIABdZZZS3XIHWl5ZEczqP61LZtt20XyZ7QxVZ7nWdccwPG90sNoJsiXV+RzBv9q7T8hoLegBhzC46nQJn67EPIyKG5pl/bV5Yixnq9p5pEHk5Ykeyta2dXOgmGP5ONasSA1GmiGTJobKpL61qSqnPpAJSL4JK6XCDtf034uOw= 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=SBg0nUTa; arc=none smtp.client-ip=209.85.214.180 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="SBg0nUTa" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-2ae8979dbb2so10872485ad.3 for ; Sun, 08 Mar 2026 11:29:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772994557; x=1773599357; 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=5REngnkmAV3py6hSuWlfdMiQRrfGu2JrLts1i1aI7wE=; b=SBg0nUTa4HB4f7srpxNPlEnoxeEzwNulgV0F4XUC91XY/Cc8jOVG7u42GEnHFu1Fhl MNwxuicQqyd0O5BW0qJ0EZMl0a53hv7Kl/CQq1vH6BuUaHUDkEY6ROnsg0tvKHEyUJX+ 5K4q3AlXCuFesLJLW2eZTBXvZwrUDBvplzHp9GZndTkcyKKje9bSrZgEqmhu1KToK216 F+0F7sQqB/us6Wo7MwMd9jbGOoO2N2DW5e3Ecr6HrwcGVMGUYUHMKbXi8KLLoOl6NHZB XkgnK67lo553GKSv+BnXBJkkJKW/qhmIPS9qddUzqcBCOQIya+yckU9lexVzwrw9raUH FuCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772994557; x=1773599357; 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=5REngnkmAV3py6hSuWlfdMiQRrfGu2JrLts1i1aI7wE=; b=WZZT6cU8jDs3aUUYipU/WeEHd6+ovuHcA0ur8KfPo77KZ9yIN+teHgxC3fa1zgIb9e ARvM8QEngUPRHP2IlCYZS0Zvk759JzWV6hehEXVnpd5bOYIJiA6I0rOaLGHcId4BSbmH 1CpWvRrDGanMPVKHa7rOWXmXLeZOEqLNSbrR2H1a2wF0tEhNshkIrERIGpv5AvtzHDfN G4psJWs22Fu7wy6b5zsTG7VrWcr7b0WsaGGVXtHeuV/DbQbMhYvpl2EH8N08PD6p3L/5 ZmqWamk9pxnyV/IsfEi3aWgO9fKPmBnd9ICjGf3NEGntdtJjmdmEKIYR1lNiGdKkfUdV RKhQ== X-Forwarded-Encrypted: i=1; AJvYcCX9YceH5VFLPi0gq0uDedRS6xJRboPQI3CsBZbT9nT9aWSJfkS4tvhd3lXvtgS4d+BrgQKY8ZKKLrH99mE=@vger.kernel.org X-Gm-Message-State: AOJu0YzpxdlGicrDmfoQlG+aNQ0749BNdNMWfdVctLXSnO/nqA9U6lAm ooP2izTyLOtTblUEDyrIIq02DVXqY0ukfAUAW6MHrYjmBxOO67Q+vPNK X-Gm-Gg: ATEYQzzTMOyQxNsy67ODG2eAmfM0W67QkChT2TlFneeIXuN21Df63X69dCwnp4u+MF6 NVKgSYx9hKh/tQEJB966V7vR5uOA4s6LZEAi3gkgLucv1Xwcm4aKKPR/2lsAxX1F90qoIQrdfDD 5K4K+I2qeteSIpfwY/Ug70wtOodZACyrMC7nFVV9sCzxk0yZT1gmj3uuIQ71qiVkROj9nKcLBQE KcMzAcszjcKRkjKt7fJ6F8FmXGwcNrXDCyntCwEs+RcKE24r2/gTFzBLDg3r839uKaA0aagO6uK p0tR1iG1Y7lrJQiU+D3UZhznPG7D4hje03OJ2RY8iIpPV/25qOdTPI1LCEFH5yCWHDZQG596eE0 cJLJgZN0w/NU/rTFC+4Bnv778fwxf7ngkJR9qVWLt3sMqE8ppfLTnpgi9AG5fQug/em4ozwIRZx oaIyy0XWrtOho+qJyxsKCl1QOZmjiO3wUXcHZg6Vo7JZNW2x/Bb9Q= X-Received: by 2002:a17:902:f54e:b0:29e:9387:f2b0 with SMTP id d9443c01a7336-2ae824fcc81mr93036945ad.39.1772994557514; Sun, 08 Mar 2026 11:29:17 -0700 (PDT) Received: from debian.ari ([152.58.179.53]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ae83f783dbsm89006965ad.42.2026.03.08.11.29.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 08 Mar 2026 11:29:17 -0700 (PDT) From: Archit Anant To: jic23@kernel.org, dlechner@baylibre.com Cc: lars@metafoo.de, Michael.Hennerich@analog.com, nuno.sa@analog.com, andy@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Archit Anant Subject: [PATCH v4 2/4] iio: adc: ad799x: cache regulator voltage during probe Date: Sun, 8 Mar 2026 23:58:09 +0530 Message-Id: <20260308182811.33471-3-architanant5@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260308182811.33471-1-architanant5@gmail.com> References: <20260308182811.33471-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 voltage for this ADC is not expected to change at runtime, it is inefficient to query the regulator API every time userspace reads the IIO_CHAN_INFO_SCALE attribute. Determine the active reference voltage (either VREF or VCC) during probe() and cache it in a single variable in the state structure. This improves the performance of ad799x_read_raw(), removes the dependency on the regulator pointers during fast-path reads, and allows the removal of a redundant negative-value check. Suggested-by: Jonathan Cameron Suggested-by: David Lechner Signed-off-by: Archit Anant --- drivers/iio/adc/ad799x.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c index c1a7fa37706f..28f1901698a6 100644 --- a/drivers/iio/adc/ad799x.c +++ b/drivers/iio/adc/ad799x.c @@ -135,6 +135,9 @@ struct ad799x_state { u16 config; =20 unsigned int transfer_size; + + int vref_uV; + IIO_DECLARE_BUFFER_WITH_TS(__be16, rx_buf, AD799X_MAX_CHANNELS); }; =20 @@ -302,14 +305,7 @@ static int ad799x_read_raw(struct iio_dev *indio_dev, GENMASK(chan->scan_type.realbits - 1, 0); return IIO_VAL_INT; case IIO_CHAN_INFO_SCALE: - if (st->vref) - ret =3D regulator_get_voltage(st->vref); - else - ret =3D regulator_get_voltage(st->reg); - - if (ret < 0) - return ret; - *val =3D ret / 1000; + *val =3D st->vref_uV / 1000; *val2 =3D chan->scan_type.realbits; return IIO_VAL_FRACTIONAL_LOG2; } @@ -809,6 +805,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->vref_uV =3D ret; =20 /* check if an external reference is supplied */ if (chip_info->has_vref) { @@ -827,6 +827,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 13:26:17 2026 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (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 DFE9439524E for ; Sun, 8 Mar 2026 18:29:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772994565; cv=none; b=D9SRsSQTUKNHAr7eenYYxedHu+8WOtc8E9Ck5gW2PQLEAKGLXvIn0RaWrcIxLICtcf8+pScnW3KzKrT1Z52tBYmIhL7zDRNZABTWrTYNR43AP8FYmrRH7acjM02GGhpMvva9V/0YXlNu4Roq7a/z3O+hwclBtvjdLuJpMXGXlJk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772994565; c=relaxed/simple; bh=PjYmpT+k/BWReQwno+eCz8dspA5NeFBxuH/Bl2Dhj5Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Ek2XHpr7BgA2GMqqf9EXPyeWJ2w4WmNtCQtotCiZYNBIDl0N5d2XhLWu00TCAbHdZggiFa7H/JgKFXl6QoLfZri1Od5EpZ7ew9e3irStWW9Y6W7mkdRgdgnpn/GMVT4OfxL92W+WJD4Rp5f7lN/u2BAJ5N1T/SrF5B4LpDfUr5o= 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=GTp5seSQ; arc=none smtp.client-ip=209.85.214.172 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="GTp5seSQ" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-2ae8177446fso15957585ad.0 for ; Sun, 08 Mar 2026 11:29:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772994563; x=1773599363; 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=yYPf0gJQ1Xt4/WFQtvodMValHNTAraDsvu+wn3lhBJc=; b=GTp5seSQJ2cEgXnMysOTqfHRDrgjBKKltYnsHHBPXpluMLFtxa4x62SnGJe5L6ytI2 AEjPUPvJptN/J+3obiTvmo+GZfPHe3Qw4p5dhQnhV+PGxQ9D0tEpQz6BIF6Am7ol6YG7 b6eGA/XCfEp9EvOr92iebdY6gOxlTyRshq/wuvSdmSai5H/3P1y6LyyAG+btn8cWfRQf nCwUDeNQvl5HMXBEctK7h32jMtToWzTyHEFpRGaUB37thNUu1Kbv/38lqUSMNn0I9pPS 2umgHor1KJTGZaNnja14QQl0Adw6rSF+79mnzqWMXOg59WK9yrqktf2EmXGu3tCu4sJU M0Bw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772994563; x=1773599363; 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=yYPf0gJQ1Xt4/WFQtvodMValHNTAraDsvu+wn3lhBJc=; b=DrMJn+aCuS9DIayvvBxf4Zj7r23D0Phi/9QOkNseb/HtZTCHwCqw87Pstwemuo6SXk 7LXir1j8YUW1NF0/Ytqdfv6if/FfQTKEvhPAqubFzybnLwcqyMPnXwW5Tesqa+5pyWXY PZm2W5SoN82ELSq+gzAGkBoYSJM4LjttVgDXC9wwpI7YerkYCqYfRMRp7RSUhJvOL0YS n6zTbytfUUXsObAvqGjkpBAUkKlnA68z5ExVktsky2HZARcmaK5gDBo+nH5T6TPaJA3M 9BmVMfIZib3dS5KRVpE0XV8AW9NnYfQ35mo+gNPjAySbuqfFnSjGf4Io/LtTDvYZFcyK tQVw== X-Forwarded-Encrypted: i=1; AJvYcCW+xnE4zYt4i8v7oCeF/UT2Zu1ezVogXbwddY5lTBviQ2WnjN3rQ3WUCAEsWCAmbuOURuGMYkEeuYIB61o=@vger.kernel.org X-Gm-Message-State: AOJu0YwV0yFBl61viaH0zOb2xPJVgUrqJ/oh7K3hvU/w8LO9/tk2m1cy lquN5Itp0+iWWinoHQo60Qm1FthOxcme95w4V3uSfcv4RMLQo15j9hh/ X-Gm-Gg: ATEYQzztdzsSlwziSMKOOWLjcRejY+4z9ca4+H7NZVVPDucr5+O/pwV/08omicW4fQR 0TetbCIPPdKeN1ctsJAnXkFYsXyJ5gB+CXHJffmX+YUZ9Qkd8HR148a3WiJuI9P4jXlQI/YRkKP UozwtKfSBWaKQgZW3hm36lJcRbP7TG4FIAYFrXuo3bSumO+J4vUSrZOn9gQiEDp/azd3uqZDunI 9cZ1zyma3ZvOzKquRiPX8kkcfoNdkAGg8curTh3VVOIOo3g3RE/OsPqaZt06C9eIc1cGoMeZUHE 5dnwkDvQUdGNANfkOPvPWUt9Lq7O/bpnk3wcthGJA4EcjlCm0zA42OhrE0GrhW1DsjqQJASBQrb M5RSqbDfWP9UNYyrL3iGlCfa0PObCe2NHND7tH+5AlMiyyTc8qQnD0i+cbWRM/6AryyQXzXK/qt KXlOOmUpgID9AU9G8LiQaPAZhQ5W5gEjjYv7tExbz+ X-Received: by 2002:a17:903:3bc7:b0:2ae:3bb2:a8cb with SMTP id d9443c01a7336-2ae825046e0mr83539535ad.40.1772994563230; Sun, 08 Mar 2026 11:29:23 -0700 (PDT) Received: from debian.ari ([152.58.179.53]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ae83f783dbsm89006965ad.42.2026.03.08.11.29.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 08 Mar 2026 11:29:22 -0700 (PDT) From: Archit Anant To: jic23@kernel.org, dlechner@baylibre.com Cc: lars@metafoo.de, Michael.Hennerich@analog.com, nuno.sa@analog.com, andy@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Archit Anant , Andy Shevchenko Subject: [PATCH v4 3/4] iio: adc: ad799x: use devm_add_action_or_reset for regulators Date: Sun, 8 Mar 2026 23:58:10 +0530 Message-Id: <20260308182811.33471-4-architanant5@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260308182811.33471-1-architanant5@gmail.com> References: <20260308182811.33471-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. As part of this conversion, introduce a local device pointer to simplify function calls and remove redundant goto labels for regulator cleanup, as the devm framework now handles these automatically. Suggested-by: David Lechner Suggested-by: Andy Shevchenko Signed-off-by: Archit Anant --- drivers/iio/adc/ad799x.c | 46 ++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c index 28f1901698a6..f5ef6ff97c89 100644 --- a/drivers/iio/adc/ad799x.c +++ b/drivers/iio/adc/ad799x.c @@ -773,8 +773,14 @@ static const struct ad799x_chip_info ad799x_chip_info_= tbl[] =3D { }, }; =20 +static void ad799x_reg_disable(void *reg) +{ + regulator_disable(reg); +} + static int ad799x_probe(struct i2c_client *client) { + struct device *dev =3D &client->dev; const struct i2c_device_id *id =3D i2c_client_get_device_id(client); int ret; int extra_config =3D 0; @@ -783,7 +789,7 @@ static int ad799x_probe(struct i2c_client *client) const struct ad799x_chip_info *chip_info =3D &ad799x_chip_info_tbl[id->driver_data]; =20 - indio_dev =3D devm_iio_device_alloc(&client->dev, sizeof(*st)); + indio_dev =3D devm_iio_device_alloc(dev, sizeof(*st)); if (indio_dev =3D=3D NULL) return -ENOMEM; =20 @@ -799,7 +805,7 @@ static int ad799x_probe(struct i2c_client *client) =20 /* TODO: Add pdata options for filtering and bit delay */ =20 - st->reg =3D devm_regulator_get(&client->dev, "vcc"); + st->reg =3D devm_regulator_get(dev, "vcc"); if (IS_ERR(st->reg)) return PTR_ERR(st->reg); ret =3D regulator_enable(st->reg); @@ -807,31 +813,38 @@ 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->vref_uV =3D ret; =20 + ret =3D devm_add_action_or_reset(dev, ad799x_reg_disable, st->reg); + 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"); + st->vref =3D devm_regulator_get_optional(dev, "vref"); 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"); + dev_info(dev, "Using VCC reference voltage\n"); } =20 if (st->vref) { - dev_info(&client->dev, "Using external reference voltage\n"); + dev_info(dev, "Using external reference voltage\n"); 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; + + ret =3D devm_add_action_or_reset(dev, ad799x_reg_disable, st->vref); + if (ret) + return ret; } } =20 @@ -846,15 +859,15 @@ 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, &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, + ret =3D devm_request_threaded_irq(dev, client->irq, NULL, ad799x_event_handler, @@ -876,11 +889,6 @@ static int ad799x_probe(struct i2c_client *client) =20 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); =20 return ret; } @@ -888,14 +896,10 @@ static int ad799x_probe(struct i2c_client *client) 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); =20 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 13:26:17 2026 Received: from mail-pg1-f178.google.com (mail-pg1-f178.google.com [209.85.215.178]) (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 5F8DB39525A for ; Sun, 8 Mar 2026 18:29:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772994571; cv=none; b=kM5h5hXubtJ6WAN7IlT2lVi2qkJIel8URHrmRq5JZb/iX+mN8RDiOurUJ2iuqryVeInQs6x8YpmKg/nJ33OV+jS886zPdHDbAhmKAyUqg5Js1FDm13KcogFOimtSWTblmjTFprPg1Lg+LB42MVyIe5OIHDzIB4fYV6l3CBn0KNA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772994571; c=relaxed/simple; bh=BQnVbQ9ersD61+l0gwcAba/zQHB4QluCjuUn9yCCo9A=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=AA3q2zJ71yH1eUkLl0lwVycc7mrVGpODcUw6eDfKdsS6AVkRfveF2jyFhARkAB/SrhmlZPkdwCkfb9x6F4hfAeLr2ADk4Ck68tZBVdTYJusZU0w4bs+fjn4qlKyG4mlRSSd+F/qSO4lXwHGr6/Ma4EclBzdrEXWqf9f61jK0KPk= 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=fTtCJB4o; arc=none smtp.client-ip=209.85.215.178 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="fTtCJB4o" Received: by mail-pg1-f178.google.com with SMTP id 41be03b00d2f7-c648bc907ebso6949070a12.3 for ; Sun, 08 Mar 2026 11:29:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772994569; x=1773599369; 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=aDDYVfwTcHwETY+/IJx0R9zBp6IerNE/zKCBDDgp4AY=; b=fTtCJB4oJBYuv3RenWo3j8blKJGhBiyPe85LO7L4w/roG6ogjdrwxw0kkzqMt3A8FH 6YErfl1hRJy4ur41FDE5cUjoFVkF/Ss0Gep1EK8q70VYL3cSrL0MdywRVm2wA8K6UfjX Gb/b0FA+hj3hsMXVGgKhZ3kEeIkXIIvg9qMvykpIGJ/wPZNqzOywWJ1BRH4iIhMFmgHI mrENz4OxATrA9/xfu6EnSNbVm3qt5c4jOprM4ccvPv9/uRZJ5FdOWeqQFDSwf9M5Z/I9 a7q1uNPSH+zIniEbCiOZ4o02wTXTqGh0ruRJZGwg2u01vv8NFHS8DCPy8EJMF5MdPwUp kyIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772994569; x=1773599369; 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=aDDYVfwTcHwETY+/IJx0R9zBp6IerNE/zKCBDDgp4AY=; b=RZZuCe7jhYSyINYZdwjpP3SVTQVOWsPffaVCUSnaqJrJVhywcoqdTd34vDprUsOdnC 9Xc4Y03pqEFiNeiebd6Ml5eB+kuIpMOzskZTKN+xhx9aBwh82nGgQppHSZbAit0T8mkl 6qJURs+SzALipzF4MNcoKZPjGoW3HxXAVnrGwXoHNlDsUYIKjJuJRWr1qE5tpBr2cKbL xfNer5hDG29gHYd3TqAJiKfjURd5aesIAAfyEZnwtXrvGssiiHDJ3pEXYzG3GPtzDa8s 6INN7KehkqUv4Vq8FizZB5qNu1PBkiBBuxKsSqhNdXGdK5nXeTHGhr5po/6X2Pjx/uzg h+QQ== X-Forwarded-Encrypted: i=1; AJvYcCXcbyVwkmsoYSoiD+0hTHetlccnvgmzjW36VmVRVlH+pLiC+eXYC5WgKD6FnhOKd5BrGRFK08EdLvgYokE=@vger.kernel.org X-Gm-Message-State: AOJu0YyNnxA5C4uhu+y2p0tJ8Mp2e52bhhQaJbMaN8TJFwxU5SlgC4CO ftlsZ4MHwWT9P/FcY6Q9rjMJfkE7jULYq2tN+gVTo5+4DH85/CBYiPHcdvhPeg4b X-Gm-Gg: ATEYQzxFLUz/8pyPs2bOKDaUYlqhJ4yQBqDVRD56nkG8uNV4IuMCQpnAJc+Mdp+/KQ3 ieSir+jD187iwfZMr64PvVmLhhQEOvQEsYGuVkN+8IHfI/c1vL6t0fi89bsx4/IfcUIiLL7ette VJsPjTXlbmoSU9VIHANq5fj3aP+OxoiJ0Cchsmc4rePSQe0xke4kXsKPJyx86Nwz8adf53nhGlh d6yJIt38J60fZh2o9C9ENWXNkutBydc2ZsJgu5YwPYbGZ7IxN1byYrv2h/2YJXAAXoHKy6BNimq 0D/KeCrbk0L4UD/2eZtH+zOI//yg7M6TzkWNAXYQJ3vMHodMo7l2KmLuoPWMa2WOg3ROd+YiY6D rTO50OqPEyUzMfEO4ZgjBYfW/56CwXCgWqMrqCRBK+afYtSvdRTBbUxkw7KRbka77LqvF7l2iDD R6f4Iqv1gqdMy1/VGBL5Z+gtj03i7+fprzFF+cyVr8 X-Received: by 2002:a17:903:40cf:b0:2a9:5db8:d651 with SMTP id d9443c01a7336-2ae823b349dmr85149985ad.25.1772994568741; Sun, 08 Mar 2026 11:29:28 -0700 (PDT) Received: from debian.ari ([152.58.179.53]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ae83f783dbsm89006965ad.42.2026.03.08.11.29.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 08 Mar 2026 11:29:28 -0700 (PDT) From: Archit Anant To: jic23@kernel.org, dlechner@baylibre.com Cc: lars@metafoo.de, Michael.Hennerich@analog.com, nuno.sa@analog.com, andy@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Archit Anant , Andy Shevchenko Subject: [PATCH v4 4/4] iio: adc: ad799x: use devm_iio_device_register and drop remove Date: Sun, 8 Mar 2026 23:58:11 +0530 Message-Id: <20260308182811.33471-5-architanant5@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260308182811.33471-1-architanant5@gmail.com> References: <20260308182811.33471-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(), iio_triggered_buffer_setup(), and devm_mutex_init(). By moving these remaining resources to the devm framework, the driver no longer requires manual cleanup. This allows for the removal of all remaining goto labels in ad799x_probe() and the complete deletion of the ad799x_remove() function. Suggested-by: David Lechner Suggested-by: Andy Shevchenko Signed-off-by: Archit Anant --- drivers/iio/adc/ad799x.c | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c index f5ef6ff97c89..89ac0d393366 100644 --- a/drivers/iio/adc/ad799x.c +++ b/drivers/iio/adc/ad799x.c @@ -861,7 +861,7 @@ static int ad799x_probe(struct i2c_client *client) if (ret) return ret; =20 - ret =3D iio_triggered_buffer_setup(indio_dev, NULL, + ret =3D devm_iio_triggered_buffer_setup(dev, indio_dev, NULL, &ad799x_trigger_handler, NULL); if (ret) return ret; @@ -876,30 +876,14 @@ 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); - - ret =3D iio_device_register(indio_dev); + ret =3D devm_mutex_init(dev, &st->lock); if (ret) - goto error_cleanup_ring; - - return 0; - -error_cleanup_ring: - iio_triggered_buffer_cleanup(indio_dev); - - return ret; -} - -static void ad799x_remove(struct i2c_client *client) -{ - struct iio_dev *indio_dev =3D i2c_get_clientdata(client); - - iio_device_unregister(indio_dev); + return ret; =20 - iio_triggered_buffer_cleanup(indio_dev); + return devm_iio_device_register(dev, indio_dev); } =20 static int ad799x_suspend(struct device *dev) @@ -969,7 +953,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