From nobody Mon Apr 6 18:22:52 2026 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (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 A80E63B4E9C for ; Wed, 18 Mar 2026 09:29:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773826193; cv=none; b=l8Rep+fE91nesAeVpJWSQHmcsBkKdZhpYBg2EfIi+ZtFeS5KR+aeq+XdT9vJKpJYI7QLTGLyGMw2SEN3sY+M0wnb1nFsT+doeUY3fVx68By5FSGqUttCfM9SWyiKpWUl/miVcmvYXLwdilp7R8cFP2/kn2XbT1MY0flRD2aez8g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773826193; c=relaxed/simple; bh=sYny+vMdKGhF7mpPlyKtngiOJKnDYbHDcPfb5D/jrWw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=IomsrbX87b8wtLb0l9rXIbCrDAIefFlMrCW/LCG9XrTBnBY3TzIE2DQLRSBhOKezMQ2r2WWN8LM6khmjLGD+D9pSTSaqjdZe7IKxnI4DlFcPbi85J+VLWWxsEZRL8vjgHP3jMNQ3KZpcce8ONLVw+YxKLXkfG+vGutk5hoLFkEk= 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=GA0I+wG1; arc=none smtp.client-ip=209.85.214.170 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="GA0I+wG1" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2b06c43e6a7so5311925ad.2 for ; Wed, 18 Mar 2026 02:29:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773826186; x=1774430986; 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=MRjHGTziGVvd+VSh4h4J+ikp9tkHEYWZDQCls0MWsNc=; b=GA0I+wG1xx2yhvZrzzcCyClryGbCx30pNkG3uDDdc3pX2/at98P4lPO+4QOxyGK4+7 ZI76RJAzk0l61OId0I5yfXr2pi27tOcc/r3NvUXd+QTatT/8cskHO+O77SiTUb1604i/ 6pmY+ZytNtdnV5w/We9ln5gMQDQLfEGD6C+ISvunRvzcETA5hSWXXwoti0t9i4Ur8/vn vgPNhB1shq1UREXdEY3pAvtmLjmQ7Ij3Xra98os2gViDQ2fip+3oOVPPd+WQ/k0Ar6ye 7FcdDFBxdXn2kjm28g+VxBswoza+P7QEHweS2IeVOny6Dn/iNgDYArG/jHg7rW2bSTFq PnGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773826186; x=1774430986; 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=MRjHGTziGVvd+VSh4h4J+ikp9tkHEYWZDQCls0MWsNc=; b=N+tywHPmQAjbcr5dOKH41gbXXyFqU2Zu+3Pj49mPh4lnaXGD25nHaqz9L10Jn5BuBD 5uzQESAxlxOJt0EERNTPrGXjoUTYGn6zRQXu0YV9rLphBw9i+TOeF8MPlV/mjl87YNkN e/dYExLF/ZJI2q7ZH6nZYvD03J0C4qJeVhLEqyJadsQNyiOf3Rs0g0jR+JMSsMVnU+K9 lq4BbCDeQIikVzXxgT3Uo1AQNxdMx1+3fL9CGuo1Ljnv2kLlryrBSRLMPlShdVuwWVSG jS47U5zV5QbLoHXgx2mFKCa/UkzZO2lkrlkOIuSBiU4EtFypdCqq+VzWnK3PPwPSWP4E k33g== X-Forwarded-Encrypted: i=1; AJvYcCVS+jbN1cQTiaLWGSBX+QXpuWkI8+UZODl3tZQFMUrt7v3SvqIyHiL5aN1mlyVW2okRNvdYidesD0U5Vdw=@vger.kernel.org X-Gm-Message-State: AOJu0YzHhGZWIJ54SZQXxRJ4CFFKHqcqFjhht3vDdUQ4w4O69sGAvsR0 yxYV149/qi8/oBOOoUXMdjFhR2hroHoflA6tAZLZePH5ZGTOCmTe5oVK X-Gm-Gg: ATEYQzxEjZqNxacMxm2sB33L+PtJexUhZYALZR3+HVIX7pQltAyevOpu0uWUbLQbfl4 rdMu5VQ9W+PJtmRvPrO2pN5I2YWwi7kp7dDT/mfgkUU0jR3HuxMS5fmbQcjMfJZxj85p0G7L6pX h19GpcY7FyhVjw2oDQppnWjozRNwOaJIvfM42ScMJu0bImfypRQdEAlZfVVx76X8XComy+bCeMj DxdcoUKHkbig/eFBO5Ltw0hMK7PI4wfafe0LJaJzznQqz0cIVb9nLFqW9qSfr75n8zOWcUI5ZKj UeLx0WTHrI9qqA3RB+ukeZX6PDj36e5mIKJGGH5OKtbY3ozkev+ESa3JQj8bG1xBXy4hz9f5tw8 vg1jpzmlvCaG3+nw7HlqTMmySwBuynTmteeLZWPn9PK//kLU650spVk7FGqPDyS6Qgzk4VBXPxk XdQFG0D5kXT3H839LNErVh/FsEiyc2Rd1sKhhOk5uXfVZK7farfkHFtn6DBT5Q5iONt6CQnrUA X-Received: by 2002:a17:902:ebcd:b0:2b0:6f20:8044 with SMTP id d9443c01a7336-2b06f208484mr22527175ad.43.1773826185599; Wed, 18 Mar 2026 02:29:45 -0700 (PDT) Received: from debian.ari ([152.58.182.62]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b06e616351sm21168315ad.67.2026.03.18.02.29.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Mar 2026 02:29:45 -0700 (PDT) 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-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Archit Anant Subject: [PATCH v5 1/4] iio: adc: ad799x: use local device pointer in probe Date: Wed, 18 Mar 2026 14:57:12 +0530 Message-Id: <20260318092715.42538-2-architanant5@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260318092715.42538-1-architanant5@gmail.com> References: <20260318092715.42538-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" Introduce a local device pointer 'dev' in ad799x_probe() and use it throughout the function instead of accessing &client->dev repeatedly. Signed-off-by: Archit Anant --- drivers/iio/adc/ad799x.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c index 108bb22162ef..9825abc9285d 100644 --- a/drivers/iio/adc/ad799x.c +++ b/drivers/iio/adc/ad799x.c @@ -783,6 +783,7 @@ static const struct ad799x_chip_info ad799x_chip_info_t= bl[] =3D { =20 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; @@ -791,7 +792,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 @@ -807,7 +808,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); @@ -816,17 +817,17 @@ static int ad799x_probe(struct i2c_client *client) =20 /* 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; 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) @@ -853,7 +854,7 @@ static int ad799x_probe(struct i2c_client *client) goto error_disable_vref; =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, --=20 2.39.5 From nobody Mon Apr 6 18:22:52 2026 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (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 CB8DC3A7F6B for ; Wed, 18 Mar 2026 09:29:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773826197; cv=none; b=KLFBNyiPC0Swu1juJ/sYObDgt0a4kphIOiSWg31goqccprYp7mLmtFMgFZ4y+hXrVm/K6vtqVDWw2BF4QM31zohIIGOmvfJ9+oqfT6LCobDWthRy87yKeVCftlqiCB/ytUnyo1kETwKy+vtJQoarrcrTemt69m6I+LMwNRYWuIU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773826197; c=relaxed/simple; bh=YeA5NTit+vRgO6O7UM7usIAyOEi9ktUs3te+RyJJPCc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=PiSDsxEUcKEidhIYMOpQC1Sn8TVKSN270DZWKGMMfrhe2tpJ6u/4+eVV569PGY6px0WJZUvoLwpy4IWLO38L7U3o5AOP8BRtg5zxg/+l+ml1UEOi86D1Brlpi/mj7ZvTJd77nkvK0XgpY4joTtQuJptR2kKGnLYXqf6WMV1kNHs= 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=g7xh4Bcb; arc=none smtp.client-ip=209.85.214.177 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="g7xh4Bcb" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-2b0586d5bb8so21745515ad.3 for ; Wed, 18 Mar 2026 02:29:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773826191; x=1774430991; 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=V7lW8LFGu1hdwVKAacX1pBoH1829SaNw1Lo72wdjeU4=; b=g7xh4Bcb4gqqNnVVvNpUHt9mKxhVcQfevQ+1J8Us/shLocSleLAhyz73N/6X9MojeV YLQ31TLU0BpAyHjV2pwPxZiFvOx8aZxYj9Wc+EWbFxDFtmpaUwklJwZb/g5yUrlx7msb xTRNOfkpP1uqJe2GePxvKR2ho4lBbqEgdDbRDRolIKOsFklRaz58hl5XFmbSfEuegVct NvtB4Qas4v0JTuVBIXr9ZXIXSjOw0SVqrhEBG4PUfEVFAnxk/5+IC4y+hG8GyYWRv1pX oKVicfgJVIPQIcIc6wPEtm2hmCrfpm/WIABv4anZovu6vDWFlnGMyU6CtlAVO7Ks0kjt RCBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773826191; x=1774430991; 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=V7lW8LFGu1hdwVKAacX1pBoH1829SaNw1Lo72wdjeU4=; b=JifmELqM9V3KvHw8Zlt9ErUPysoJF8dZcvFrM9pqWSD2ESRn2Kb75lChXxu2nu9gug zaf1yHeM1QqvWngOEkiEJxoTJnw+jGFTwaIVwB9xkUpskqtYQp+Fu/pbEi4vtAktGnO9 iE/ig9MymdLwK8s/tgubO6XoijB7p2THqo4Q3VaGTbmGs+KIuFOuiGlhnBZLCFv4m+B+ DCu+987McquNTyP1WwYeV5YARYxyWZAxYeZ5kXEF/JQMCQ22ckVG7wbq+kRMYnb4qe9U YZ03coiiICVazG7RJjawrp0Xivsvc+k9Qnx0xzkDq37hMAHySVezyZE1WmFdiIGWEV4q DJDA== X-Forwarded-Encrypted: i=1; AJvYcCWvfkXW64qUS6TFuyY0ny4I7uyDSziRVLstgIgnSfueLXuNkVULf+7T86QmP3F34iL6jtsytmxSMCEVz+s=@vger.kernel.org X-Gm-Message-State: AOJu0YxqDhoffu4xTzoLwtbELf5dBWx65S1ab6H63GEzhjzksjRqj73j 5dkTgYtEIG+m48owtLbwUMHPcArsfsZGfM97egH47xTl+X9UtpP4Wiay X-Gm-Gg: ATEYQzzEoevMYO0+BjkMDHBtsSQ5aV3tzKxmnvTTnkcnfO8NffoD0RWAIphR9FN5aSv WDjK+Q4c2wWD1ph/ZTwQcQ+YIJ8MAKvoIdFFHuKb6mFHCDxw75vMHeZjU+qk4qB/hAHapo1k5Tv Ev4GHYKlx4G/pHzivQqysQJVHKCdLLcmEMFtaCHLLG9/7eYcBSfCHw9k0U+TrH7pM2IfTITotRg qSIcGf5iFVCHw7mb1H2IP7cCsONQm0oRQ9rlcG88te65kE+7TMQekVeHsNsrOXlakXm5sfUI5L6 +/DR3MK/oXKO0ZJKmUnl+XGUHxoccWhCwZb6Q57MaGlYAunfI+/kQ7xBhjBOgpzjY0Lgfl+r8ev 6WVtPWjD0BS6t5OenCSjNCGbFoG5Yjru92jwhzaYdqt2GS9En6B0XzGJlxmu1Acve42FLVHPSiA cwG0BUMm6EgbWcMITDyThiHEEdmpV+zjJaM31jT5DNmyokBZjLZB6sCFMI9W4CCM1jIJs63ZHsn Upv4FkS90Q= X-Received: by 2002:a17:903:1a67:b0:2ae:3b9b:db34 with SMTP id d9443c01a7336-2b06e41a91emr26532705ad.42.1773826190696; Wed, 18 Mar 2026 02:29:50 -0700 (PDT) Received: from debian.ari ([152.58.182.62]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b06e616351sm21168315ad.67.2026.03.18.02.29.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Mar 2026 02:29:50 -0700 (PDT) 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-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Archit Anant Subject: [PATCH v5 2/4] iio: adc: ad799x: use a static buffer for scan data Date: Wed, 18 Mar 2026 14:57:13 +0530 Message-Id: <20260318092715.42538-3-architanant5@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260318092715.42538-1-architanant5@gmail.com> References: <20260318092715.42538-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_BUFFER_WITH_TS(). This eliminates the allocation overhead, prevents leaks, and removes the need for manual kfree() on driver removal. 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 9825abc9285d..7504bcf627da 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 @@ -896,7 +892,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 Mon Apr 6 18:22:52 2026 Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.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 507013B7B86 for ; Wed, 18 Mar 2026 09:29:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773826200; cv=none; b=LrilqVxS5SwQ9RmFfBGUFP7kBHzW75ZRF0QTCnBFW2fcaf98oXLoRcWBxHplWUoE+H1Atj/ayGO3ck84aTdncgojU6R/fl6lwmdRkDGfYFSJiCmdI7p5JnF77ZoV5mOcWDzGQ7XxIIKi+YSRrpzW0rEGQeyD02FQTn8Xz/Jo4dA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773826200; c=relaxed/simple; bh=pRd86ixJCsIKMhFYIEKfaVMan2Ea5weBwsSCy5N7fHc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=UYHsalR929867Vs4y2P8QgasPdGkeub0ZIk1z4CxQIf/KJE0vir8P0yN7x/8+HY0Yp8GpEcVnLIJGz/y0tOT3+2ogmvwkINhPrjUP0LwR25PPsUZ2S8cuED5bGqRiBnQWuCDzpNlfL3KY0gxTPCBjotvvgnQ6KvFz+o+hXFr49c= 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=f73HQSMl; arc=none smtp.client-ip=209.85.215.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="f73HQSMl" Received: by mail-pg1-f172.google.com with SMTP id 41be03b00d2f7-c73e9e4cdf7so2267344a12.2 for ; Wed, 18 Mar 2026 02:29:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773826195; x=1774430995; 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=5FT3FCWE6d/BfnmV6V9NTfwQvybJ7Oe0ujhNN4DmJ54=; b=f73HQSMlulRLagBtJc98PwMTa9Wsejt/Q86wDSG/iSq24v6CGFnaaJlXKOudSZwxfw XZdC5plIre3Big5KcDYZa31rahN+wVlO+ewOetKIUZX07X9oSTPQoWAV0EKHEY3BAa5J fy8YqXtd4lh8tP/cwyfuHVXEu2fWoYOW/vskxJgJd9hPfMtMK0jqL4NySGYle8GfOX91 l/LS2AiWtMgypPu2jeZB/v+oMrGfPvZ8aueHn3GQ2bGoHJqRrCyFnfK7P/QR90d8Tvfv KBqiuqIihwFxF1njy86RVFhI1jXPUQlWRm7hmHBdQN3ESDKCo6M3CdgOeAT//wE5Knoi 8TWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773826195; x=1774430995; 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=5FT3FCWE6d/BfnmV6V9NTfwQvybJ7Oe0ujhNN4DmJ54=; b=cUBcyZZZP+Ii5hGvcKHC/Et21cP9wkSVKRjquVR6na0M6FL7yfHq9/emxZWupr9o2o LNbuRwXBi9qFuO3GsGh+DXfXbq4ygxfJzJhdH2Fo6ckDpL1M7eTSQLtyvh3B53/oK5Ea SDDBEmyZ4nNAbG2BeApmV2H5Ttx6ob6yn8nQYmbNGHHpFWzFAOPjMMIoM5XWzmdpkXKn NJsHKdVl72Ktw6tpRAyX0n5Weu0lI+vI6asgThtdTTv8kmhzDMXe2HbEqNAm2E/Tjrai i94WqCWR9trxYVWOl0wwSli+jxFiqtqK9Lypjl0tpcjfukvx7IUphA1XZCv+6wWfqT4I LbiQ== X-Forwarded-Encrypted: i=1; AJvYcCVtH2KXaL5cbSR48Vew17ItbwiQuLJ1j8dSg79LVqlFg/HtBV6Lnm0NARMCe7kEjphSKdprQKRrOT0HO8g=@vger.kernel.org X-Gm-Message-State: AOJu0Yy3ZlbT4TACl0vzdc8SbFBdivoWqt4dIevLUCxA5AaGnpbQrnC/ 0M5Ty/sTdO86TB26nIMJEw4uMpy8A+Not27p/BVkdKoxmh7WBe+Bums9 X-Gm-Gg: ATEYQzxFJ3qs846fQb55y1yUG2SuAJ3S/Eo3EtbcXjwqOOiAUmD6nReB+reQsWs4wTE oKvkOiEy8T1fKTuEzY5owj4cyBvNUn5Ty/BoOszWohyMvHoCknyRr3LWoHWBYrIJsQHOSiRxLU9 dtwuPUzxInDC/FhCJxj8IdBP3BcSXf8W5FUvRG24yXzpxXMR6NBmI4A6zAJ7n3gn8mkKCjOnwJQ ptNH9ml7Bcjla21ZdKYDg0UYr9ol9qpLBzF2xmVqvjVT099n+W1l1MEXC/O+pZXv+cdmSfLMz0s kMmDijS1Zfd6m+mwNSsMu0T0LLQPNrTdEOlCMjX53GSsIm4Ov7zR9LNONuNIotCsvgj11A3d8S8 Y2JO3aHuA8ys9+FR/q5ZvVbF+b7Gtdj/iqnLJSaD+yAKPJCBXI9M/FHoQ1NIB4GOD2SK6IDQ6uS tc9MMC1B+EnePGtdGrlLfWSKhJSwGXEuqfkW78fnenDJQt83w4kEWqzsU/CZHDA+PDrKspjfdT X-Received: by 2002:a17:902:f708:b0:2ae:4445:f39a with SMTP id d9443c01a7336-2b06e2fbf94mr27636655ad.7.1773826195304; Wed, 18 Mar 2026 02:29:55 -0700 (PDT) Received: from debian.ari ([152.58.182.62]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b06e616351sm21168315ad.67.2026.03.18.02.29.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Mar 2026 02:29:54 -0700 (PDT) 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-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Archit Anant Subject: [PATCH v5 3/4] iio: adc: ad799x: cache regulator voltages during probe Date: Wed, 18 Mar 2026 14:57:14 +0530 Message-Id: <20260318092715.42538-4-architanant5@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260318092715.42538-1-architanant5@gmail.com> References: <20260318092715.42538-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. Determine the active reference voltage (either VREF or VCC) during probe() and cache it in the state structure. This improves the performance of ad799x_read_raw() and removes the dependency on the regulator pointers during fast-path reads. Suggested-by: Jonathan Cameron Suggested-by: David Lechner Signed-off-by: Archit Anant --- drivers/iio/adc/ad799x.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c index 7504bcf627da..ae2ad4bd37cc 100644 --- a/drivers/iio/adc/ad799x.c +++ b/drivers/iio/adc/ad799x.c @@ -30,6 +30,7 @@ #include #include #include +#include =20 #include #include @@ -135,6 +136,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 +306,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 / MILLI; *val2 =3D chan->scan_type.realbits; return IIO_VAL_FRACTIONAL_LOG2; } @@ -828,9 +825,20 @@ 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 + if (!st->vref) { + ret =3D regulator_get_voltage(st->reg); + if (ret < 0) + goto error_disable_reg; + st->vref_uV =3D ret; + } + st->client =3D client; =20 indio_dev->name =3D id->name; --=20 2.39.5 From nobody Mon Apr 6 18:22:52 2026 Received: from mail-pj1-f45.google.com (mail-pj1-f45.google.com [209.85.216.45]) (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 6927E3B7B95 for ; Wed, 18 Mar 2026 09:30:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773826205; cv=none; b=fpj29n3/OzQfSR8fAJhxqkaA1cX9Aifx5cOQHN0paWNaittUd2ogeyDAQPekgi6E6p4M+SNnTLcJiClACJ5bcjS9FVubtiTu1Dt+3EM5Xm2xkCEypqCFeAt4T2DxVszfXwfC8UzpTj5AgWjSXpEFHUuX/j/oiQJeLp0thQPfLOA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773826205; c=relaxed/simple; bh=Tk8gsHUA/br8aqrC1iyhj1FHWqR7iTwilxeIVhkRv9w=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Kdna3HAAJs0SMLXY6D0EVxSUFGG0/rOI7OHQYhemn0K1angn3gJvJmVB+E2fYw+6YlVNSX5QCTDy2drLrF/wB7Fyns0RCPBNzfPapWvf/ASnV9hFiu5YhDy0NrWgkr1PhClmNLADYf29JiEI8ZWg8W2X5oDIE4NIxYY788bE3Sg= 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=AOHjbepp; arc=none smtp.client-ip=209.85.216.45 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="AOHjbepp" Received: by mail-pj1-f45.google.com with SMTP id 98e67ed59e1d1-35a09e0dd63so7587463a91.3 for ; Wed, 18 Mar 2026 02:30:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773826200; x=1774431000; 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=9q1E7NzrKrJ5QZEJfz50RfWy0GA0rHOKbA0v+tdNbCk=; b=AOHjbeppezO+IB3o22PtkZEljCIWN/f0U085hTyGBxAj3qPKpiDn5BLbyYpNasceuT iLhEASduwPMzmBipPm3hM8boqad5dzc0xGvLILa5TDx1xxXvDiZBBUW1Z99CAJw5r7az fCZk2DNUxLxZzx+wvW7DVT9Yfz2dnrblVUnRA/RTH1jgKkRMU7O2/+w1GOegaicRQv4X MUAThMAJB2ejYYb2OR0ZyzeQ1ibT+U+saTpK+4DH618dziDEQnXsdGsFkOBH4qm4DONw uv4HD0wauiklnpmccpJY865hb1oLRDdUxKDZwwfjpEb8XQBt8NcTQFT86lr1X4km+NIK 2ucg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773826200; x=1774431000; 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=9q1E7NzrKrJ5QZEJfz50RfWy0GA0rHOKbA0v+tdNbCk=; b=KTfsUJ5JnwHGLPOEb2TCHn/pcL/YAUCIeAIMqY+ClGQ0DKdSfosO0sbOUo8Ao0FAjS HP0eaaWHYpuimCV77ZQLTnSph3MkxGE101lKOcwkg21aFCrGf9YCjo8fIHUN2wTawRNM jdlmA4OXymti0Z0dFozgEcmAgwio3pcflyo2UgYtjcXJwqntzx3S1BzZJltpdMr+MAlq jal7dgkjxD8kvkIpFRZg0gvh56otSCx5Bs4KtDDLM7FGYw1xTua4JHOWLbjpIDNgg2fP 7WM0CnT3APXIAyQtHBOhSLpxeLgjYaSoLr5XCkKwtmgTlgckUCx/YX6arOYyvav5/7nm XWZQ== X-Forwarded-Encrypted: i=1; AJvYcCVv+HcEg/6Dc+5SLa1aL0hCpiQ/NaxttN34mE5JyXUtFA8t/LAO9aT2lrr2C4la1wxnx1Hn5jIgMtO+yqM=@vger.kernel.org X-Gm-Message-State: AOJu0YwtoBiLZ3I47u+tJIbaJtKx6G4TB9Ir7nMUbHF4XwtsqZF7Fvfn D/aGQgQA/zRuwxhry7ZDOp/S+4ykbdS7PluxAW4L/71OOK1oxH4Chi2M X-Gm-Gg: ATEYQzy0xtw6ks/nwmgL2DuBDYDI5a1HZO7pRh6ZKi34qvrBLZsEYW9mlTw05GRCvSY vyX2JDM2TU56nRb9hVxEf7LptP7cVEb8cSUNYpPHt2IvKww72B1WUEj2tSgWQ6mLiA532Bjx3tt COqLUFzsfY3L3oPXmDXdlkwWzjKYy8GCtvwff1Fh2wtCmp5EwxdtBRjlpzML3tVkOPhUZgV1cbt CK8qex9t5D68PSt0LIZeZbpDILzjUt1zRZuFMjL7Rcl0k77d+3H15DYU5jALsowFX40909lUOh2 fDjwBsE0WJRuo6IihJoXVdJy20ESkCNuMI3aC2a10MkWVLxV0mIjlvKo4zXNt7LjwW/bVafS9Bn ptYuAe7KLxmi69zMj6wz11UtyPYJbVeEQE3Sqrm5QP1d9Flr2bl1AFZjFbautZ4Za41V+thZ470 +xbuuAaXwGqo89/BXq0VUiOVccNK0MfZlgyOftGp8MBVkJWM3kg+j4SRfNxdDB3F0YzNg3R7qY X-Received: by 2002:a17:903:2445:b0:2ae:ceb0:d5eb with SMTP id d9443c01a7336-2b06e30fcadmr29723885ad.6.1773826200285; Wed, 18 Mar 2026 02:30:00 -0700 (PDT) Received: from debian.ari ([152.58.182.62]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b06e616351sm21168315ad.67.2026.03.18.02.29.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Mar 2026 02:29:59 -0700 (PDT) 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-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Archit Anant Subject: [PATCH v5 4/4] iio: adc: ad799x: use devm_iio_device_register and drop remove() Date: Wed, 18 Mar 2026 14:57:15 +0530 Message-Id: <20260318092715.42538-5-architanant5@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260318092715.42538-1-architanant5@gmail.com> References: <20260318092715.42538-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 mutex_init(). Use devm_add_action_or_reset() to ensure that the VCC and VREF regulators are disabled safely and in the correct order during driver teardown or probe failure. Because all resources (buffer, regulators, IRQs, IIO device, mutex) are now fully managed by the devm core, the unwinding order is guaranteed to be correct (reverse order of allocation). We can now safely remove all manual error handling goto labels in ad799x_probe() and delete the ad799x_remove() function entirely. This eliminates boilerplate code and prevents potential resource leaks. Suggested-by: Jonathan Cameron Suggested-by: David Lechner Signed-off-by: Archit Anant --- drivers/iio/adc/ad799x.c | 62 ++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 37 deletions(-) diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c index ae2ad4bd37cc..3d745612bb80 100644 --- a/drivers/iio/adc/ad799x.c +++ b/drivers/iio/adc/ad799x.c @@ -774,6 +774,11 @@ 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; @@ -808,13 +813,17 @@ static int ad799x_probe(struct i2c_client *client) if (ret) return 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(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(dev, "Using VCC reference voltage\n"); } @@ -824,10 +833,15 @@ 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; + + ret =3D devm_add_action_or_reset(dev, ad799x_reg_disable, st->vref); + if (ret) + return ret; + ret =3D regulator_get_voltage(st->vref); if (ret < 0) - goto error_disable_vref; + return ret; st->vref_uV =3D ret; } } @@ -835,7 +849,7 @@ static int ad799x_probe(struct i2c_client *client) if (!st->vref) { ret =3D regulator_get_voltage(st->reg); if (ret < 0) - goto error_disable_reg; + return ret; st->vref_uV =3D ret; } =20 @@ -850,12 +864,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(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(dev, @@ -867,39 +881,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); -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); + return ret; =20 - iio_triggered_buffer_cleanup(indio_dev); - if (st->vref) - regulator_disable(st->vref); - regulator_disable(st->reg); + return devm_iio_device_register(dev, indio_dev); } =20 static int ad799x_suspend(struct device *dev) @@ -969,7 +958,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