From nobody Thu Apr 2 19:00:20 2026 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (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 84CC936CDFE for ; Thu, 26 Mar 2026 18:05:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774548353; cv=none; b=X/ye237lP6GMY26CBJ6DNwJTT9ZdyRrx3xdG+ueXBFFWyWk4/fHYgN8aQsQnXGD8rd7F4RIlMik397FTOLurL1kILXqTMMIYhaMjlGvdqQHgDN1sYEnXFO4t3lvbqY0u/lLwOltQPJuvL0tZt2GmewC2b98AvmDT+uPEk7JFEnE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774548353; c=relaxed/simple; bh=sYny+vMdKGhF7mpPlyKtngiOJKnDYbHDcPfb5D/jrWw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=E6k/WQDlQ3NgXUZZVCxrdIqOxCg1w4h9/xxH4DlpEDcEvZuJxVlRHRq6oyg3PTbYQqu8+EPevfUTDoEgX/V99MWFvGQUC0LF7yMOt/TAT66areU4Db0G+5vcoVVxUZlpSX19gMj75c5uSOiAOou7NA14hFh/k/4ZoZAhueVoPN4= 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=CQofHHh0; arc=none smtp.client-ip=209.85.214.182 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="CQofHHh0" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-2aaf59c4f7cso5686415ad.1 for ; Thu, 26 Mar 2026 11:05:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774548344; x=1775153144; 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=CQofHHh0AM8Uooqauo361YDv3ChyCOM8Y6jXablEAykauu8MaO4YnMwgINWWXgreSQ 6+y+OITgL9JnbOyMf6PtCjC7haNZNYNLcVAkXXZeqiPo6cbffZhAP1c1nUBkfD4FhIrl 6iMleafX66r7Rkujj2eCXP2HCqepDwfzTbMTMV9LgKI/gN3skkKJrdDp++T11vOTQ1/T 340s0vApb96zzt8VxGvpNYa98axYJXQYrIIhUerQ/oGnjCBjJXIH5L+bT8XwZ4yMZiDW Ru/N1ki07pFDv9TNbHO8x4Rnmia8jKwmiCObNc7wfs1+gNBxESir1A89SeSi2vuKAr07 H7aA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774548344; x=1775153144; 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=OnFJbgX9bCm08vMppXqsvsZmm20HNEb67J8vjWQJRLqIb04qAQY+/5UezzNDZHPrpa /7qyd8V36TP/GpnyUYTi8H53n1bD7q8lu2j+9B+HZMHLW87WNz9/akgcsKFX+2NOsOQJ 2VbkNWfLORXijugluCA+oEYy8HbErzdwirNFcOcI3ImWKM1KqDXbXig/tmCsPXRZ2vtB j6fNs+o8AvIiS4WU9p2zWmxg0hc2ggr+RYU6/EVCykiVhjr42A61IjSQ9hHw1ptEyjLp f7DJo0yIb9Gf4n+8/2MFO5phytjkhuGorDFrEQxYQ1WLapZrHZGDZ5wL4NjFavYisDQT oJMw== X-Forwarded-Encrypted: i=1; AJvYcCV7Un9fnylqh5QQcZn/Ccv9lPf84fXZZksU4bLGNhLPGenS2nZQKmmgn5Kq33g5AsDB934zIm0D/hVNjVQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yyy0Emn55Lj1n56DmyoIEorfBW96jgT1D8umqrdUyOdJ7C/cquS HRUN736QL/Iovsg4xe/2ZQ6RcphMYJoD4XX0vper4RlbY576eImZfleY X-Gm-Gg: ATEYQzyjv/LNR7g93V/F+FACQMzz4gOprjo5j5ESfgtbsB7N9/xOFu0m4cs7h/C6Og+ k/TRDZa2/A9Yrka62qxIv6TPqEASuwaVEJvXYQV/+M/CngkLThNIg7yDi2OvQOGkoQeukoI19Uo WZ/DSGxT6KMkhf3SFG+Y6vNFIoXgKIApK044KSvFjpUquteHWofHzH5WW4kDfml4uBjtJtOtRQq t63HIMoUKMr/6Z2Q+agnzU+3+f7QXHmtVRRwNPB6vnf/OWF1dp8vacemjyxsQ57ag/6MUabc9dq 7ToIG0g9loRqPHsCo5xvmCEgHExcfyLPA1HNM9AOaljlnRGmLEENIGr2ojIuHdUt3yT8FuejMXJ 9zsXc30wCs6Rm4rKJiaDD4Ziuhd589AFYGXj6jc7RtBlOVEDRUY/WM7Ff7wd5X61V406f5toR0C qKgd5emWlNd6pmNTCG9L+o/RUNYoc+eC2XycQXYDN/yUejtZK9gMpnLa5EEfPan/ixpJyMIjfYI J4= X-Received: by 2002:a17:903:1b43:b0:2aa:d671:e613 with SMTP id d9443c01a7336-2b0b0aac1c7mr98129325ad.38.1774548344315; Thu, 26 Mar 2026 11:05:44 -0700 (PDT) Received: from debian.ari ([47.30.237.79]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b0bc7a17c5sm43823545ad.26.2026.03.26.11.05.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Mar 2026 11:05:43 -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 v6 1/4] iio: adc: ad799x: use local device pointer in probe Date: Thu, 26 Mar 2026 23:35:26 +0530 Message-Id: <20260326180529.19154-2-architanant5@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260326180529.19154-1-architanant5@gmail.com> References: <20260326180529.19154-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 Thu Apr 2 19:00:20 2026 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (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 E1BA53914EE for ; Thu, 26 Mar 2026 18:05:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774548353; cv=none; b=IBHsg4EGHcO96LOKBtAQVmkeyD2kzmhGYLcwYWWGYnG7etPPfsi3Oz1ueybQFIZrXVnoMN5tZs4ip4D8mcP4VKaoH+VSH/Oarj0dVfK+hiacLgmNyuQY426I7eCSxmRBmSibYyjTBG8bPcl5esqmC0A6Nf9cwYcvZkeWMRN+8Rs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774548353; c=relaxed/simple; bh=YeA5NTit+vRgO6O7UM7usIAyOEi9ktUs3te+RyJJPCc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=fPG+5KewlOOz1oh1/KofdsamS81hyNr9qy8pb6gw/ZUMhnyRc3nxNrb+Yhvozzcl4+iNofXrQidDGYMtT83aunGuIUVkyqQXGhc5c0HImiyWhrbW9jkH9ai2v1vNqJMYRPXdSyjVCGuJHWT2cJ+LFz2jUBq28i/liW5nzfrg2u0= 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=gUtIZ72c; arc=none smtp.client-ip=209.85.214.181 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="gUtIZ72c" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-2b0ba3bfe16so12419555ad.1 for ; Thu, 26 Mar 2026 11:05:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774548349; x=1775153149; 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=gUtIZ72chmMyqjTbKYpcVGZ6skdr4B2igol8sK977Ov5Gqj0qrD7KqCBK6LIuzAbj/ 4DzOUeu9tyCnS6ubxCrRnRYHRa1kx1UbG2jlu1QBilvJxxm0AYCuZbL9yegLOSm6htxn yS0PDMB6yUrx6MyNNq/gPHclb3ACtCyRNnR4IY0MeVpvSR3ox9ZB20J98lzyfyDosYGk P7s/ht0TOAs2W6EOl2fHNaKYbHAGY1eNVkffPfpiUoOBkAFrSS59uDOIuLhIJVCxH+iH Rt57kGHiKb+rYNFRjRW1kbsQl5e7Dc9gGSqxsWGIRySaXUPZ4epxIpXSa5sGjT4kDDJy 514Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774548349; x=1775153149; 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=MKozhHLDDUHdt6ccwk7fr2BPoen7UbVDDNkzFsd4znZ7qbEE0p7moUojcYZ4oQZsN9 y6oUQPDaEtH3nvWOq7mgVhLc59++xtN8NlqJbLMvToILTTu8oJvSG2d1xJOXA5Ay26G1 1TXt0HZeRsnI5Y8wCkoE7LphxC6f+oFZonO6Hvx5WMefKf/d/JmfhOdJEAAUMql6dsm8 //H45G3bZQLwD1+jU2uGFbdKCXHtCzgvyd06n1joHlZDU0/GY7OyzX4+Vw6sJtHhYICd 03AvbnS1qrpRX1VHqeLlDokDt3S84TvgnmFdBY08WFClSrLA6EJGLGBIrQTX2IClYK5v Gw1g== X-Forwarded-Encrypted: i=1; AJvYcCVlKtvGfsU52mtXkb6QyR/XN/Igqon9FglkjMd75Nio54lS619ahFFHmzZXP9gMAeJI67rTg8cerFOUvYg=@vger.kernel.org X-Gm-Message-State: AOJu0Yyf6J/KcyeeGy3+3+IAV+fcEW+OkBHtcK7mMItwXNtMX1Er6VVy fxsxWBxWi+z6J3awqgaSZ7aln2ORc73IPP/MODhtjBJjw9DNml0yxpi3 X-Gm-Gg: ATEYQzzkqc1K7vduPYxpOoqh7IswawGy88s+DGq/vqxPggJdPsm4yi828mQbHH6tp8f 9Dw0Bt9pgVgX9e0Oj88538YHNvgjGPvhd82j51aTBi3dXPp7I1YkEVc2xaVHC/bod01FZxMKdvd GS5eIQagPsfHNdbaRq/HYFTtnXbELWjgrlJNMTBteg2WuOO7ws8YXrPfGuNkf1ZUeywhT4mISGI pG3p93hbpSfmDW8riCVBSJrNF8gfBQSXPnKR9f2j2rN9mPw1jseFiy1es1oMmJB2L/tEddU+tOr iDPW/MqRmBfOKNBsGYIpJA0GMGdO5/ZkgOvWxNO76y9Aygyj4UCydna5nSbvrpwuY6WSgucIF2D PUG3J9mn5djLlLGNSBEQ+G8jquk1ZAkB3Asn47S9NGM9N1G/5VvC+fcsnMJ8wJTAyGdS+ui9mvM K2mX8kz5qa6gpGSIw9wsN2v7AFkalaI/trq9pKw5gMLAacApXvQiT317duTrOjSd3IVM2Zq6Xbm bc= X-Received: by 2002:a17:902:c950:b0:2ae:5ab4:f4c0 with SMTP id d9443c01a7336-2b0c488e16cmr25741765ad.13.1774548348811; Thu, 26 Mar 2026 11:05:48 -0700 (PDT) Received: from debian.ari ([47.30.237.79]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b0bc7a17c5sm43823545ad.26.2026.03.26.11.05.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Mar 2026 11:05:48 -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 v6 2/4] iio: adc: ad799x: use a static buffer for scan data Date: Thu, 26 Mar 2026 23:35:27 +0530 Message-Id: <20260326180529.19154-3-architanant5@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260326180529.19154-1-architanant5@gmail.com> References: <20260326180529.19154-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 Thu Apr 2 19:00:20 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 4B8C0391509 for ; Thu, 26 Mar 2026 18:05:54 +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=1774548358; cv=none; b=b8qh1CkUGtfjdcIRNxxupGa3tr16yLDLKZXMnIXQX9/pboA2K0yk/rybqHTGGO+MXCXf94twR5Clf2R5Mzi0jp8qHAXRg/RHVI1mwXA0cVIIqFTMgwd3sBIcz00n/Kc1zYvxE4Dwg9FRMjg0B09qCraMuwUM5WIdfFENbRrJt/g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774548358; c=relaxed/simple; bh=j+iI369SjpVWhlsdQU+v6N3vNKirQiExI/riw5Iy4EY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=DTX2Om5bwFrm/jovZzjssFXDv3hUKXGi1exaivn3oJ9f00elol3Fj4ietG/nxgUrzEea8Q9z8UUNfRRy7DCoI9VzAN6GjucL6XlolwvqIUnqzqMfaHRVtORVR9dE8ffeh022B74qYL5PORZGdwf8+tg5wr6XBhJx7pTuuXN7rSE= 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=hBGGQmgk; 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="hBGGQmgk" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2aae146b604so7695185ad.3 for ; Thu, 26 Mar 2026 11:05:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774548353; x=1775153153; 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=J+NbF9xYAnxp5OLp62dEzPkll0wuCfxXcdLFawqds/s=; b=hBGGQmgk9Yow2uW5c69AT5vjQlD6dg+e9alY6xlfDGMNLQku0tQgKeOp5t/uimBOPO rFC7Ax3i4CjtfYzRRLfksAXG75fmO8MOtCs6rjFW4pZcI+ucKairsWPkcRtaYHMsDtDc uDB7RCaMQFjNEgtasetg9DfuQs0vOUjMS2vfYBEV9rjm5UQe0wPbUz+s78BOBd3TUnWg vR6VZUK6TYspTQ6b2Q4uftF9QxH/kezIqhjq4mVBUo2c2qlFOquaOag6n9TA7i0THbDd Y+Xgkdc+dgNmA2bLZqkJ7eY2hsvt4k6om+YsgemVofAlQ342a5p0Esv0UiisDY1788SG 9i6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774548353; x=1775153153; 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=J+NbF9xYAnxp5OLp62dEzPkll0wuCfxXcdLFawqds/s=; b=gHJ6h3tpdTBP8yCmaCJ4HKS6puuQN9doVOvBBLX2mAXfsk+uMcKcVnggIG7c3tDzmu ju+mhi7dndretUsterBHnqRReAB0HpBOW9U4snFYK2lTH77aoze6Vknm2aNJfSf/loSr JpNkR+EOImCsmi/I3vDiF9oG2+2YHTDtum5dQGatMpEtQi1ZPSmoR+Eqvtw966tkbhOP Tw4gEWLemigt+SL9gTFxCRiaQ5SZ2bfTk1qjwYhoehyqJtI5jhcHKuo3YH7nD1ACBLaX oPKVujnw7DU89C6rzXRBo0lu6mvW74RW9ZVz/+Qbp3VrcUy+0p9CoofjyWMU4itsRIuJ vwgg== X-Forwarded-Encrypted: i=1; AJvYcCWY6jOCd7ZIKU/sVj08PRt9e9HPk712vZ9Qv6roJQVQoFw/KVZxhntRmQ5vSRRt5UEAiLvMu0jVjvxy0lY=@vger.kernel.org X-Gm-Message-State: AOJu0YwAOR1zfTIznvy+lrSa5/tJFAB71X3y3/Bmyu7UGXRjAPaycfNe F4zRbUm9wHK598x7/eIK16p/WgOiSKMg6XES6tDs1MXg1hhJYI7yA99atzTZ5pfnMuI= X-Gm-Gg: ATEYQzz5X8S9YYDnxtdZ02HEvwjovM1UKbk8Xv4XfSrBFPM/NjImfKCsLsVYlHB6AmI iuv/3+8O4WTp6Sv2G1eeyghcrRDmLHdjRrFWDbTpNcaCeZI8pdmown9Hogb2AC3nVCpRVr1QZed f9ak31/wMgaQ0w0Xlc4pFRH23UU4xa5agP+Iag+Kz3Lo+H1nUeMAyCI60RAp5nyDFA+YjiXg+JY tSL/4V16NURmyrRgMY+XhjvKOPq62m7OXrDT0gfAMN3VhmjBFNT6sQlFILFRoHrBru4d8floyql kb49BtBYtXvVORajeUpiRNHc4jmJqPt91Md6Ad2nzRRLx2uJcF36imtmSTXs4YhVYcx2GJU21sE X1Fmv0XsOsriMgclncMDonuuPkC3BAIY02/oza89IN1DS8lO1dPabNjeAbuRCSfUdV+NDPykZdk hikmmiamw6a8teIg6W+38HdDEyPi+VvQT8QuV59OyPy6/BPpGT8ApWgwpWN6Ah2xlS6rKPu1OAI z8= X-Received: by 2002:a17:902:d4d2:b0:2b0:cb96:9840 with SMTP id d9443c01a7336-2b0cb96b415mr4751265ad.40.1774548353182; Thu, 26 Mar 2026 11:05:53 -0700 (PDT) Received: from debian.ari ([47.30.237.79]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b0bc7a17c5sm43823545ad.26.2026.03.26.11.05.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Mar 2026 11:05:52 -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 v6 3/4] iio: adc: ad799x: cache regulator voltages during probe Date: Thu, 26 Mar 2026 23:35:28 +0530 Message-Id: <20260326180529.19154-4-architanant5@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260326180529.19154-1-architanant5@gmail.com> References: <20260326180529.19154-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" Since the reference voltage for this ADC is not expected to change at runtime, 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() 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..3cf7850357ab 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 / (MICRO / 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 Thu Apr 2 19:00:20 2026 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) (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 DFC08341660 for ; Thu, 26 Mar 2026 18:05:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774548361; cv=none; b=tqgrrCzk2xOWGfQMmmen7CxzrZcj8xYC2Qd9LhdobLotIO4d6cwXc1VgEkaaQSGTNH/UWYjk9Ul0eUJObtc+gIB/4s1467sgzh6bmy3u0OtFDlTJ6X3NJikchNEk+wdqri86x5s9WSCpUmv7A6YgokCsONc6c1q7RAa6FqCNbSc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774548361; c=relaxed/simple; bh=/819GhgVQ0f1i/VhmZvxWpH70/XmEbCIvtzBQyZG8Uo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=F44mdqgXRziL3buLxvrv+B4StzuHAbkM0LRs3V6iHAAJYyWr0M6KgQwCFiIdvPmZzYU3L0At1GscbJ+0+Z6TbF8xGZNkRSyU0AlC3kW+dsYdlg/GNQn39LkyOglQ1SE1r12+z9qtNf18dP4QY1vtB4Bw96/Nj3OAMwHxHsc7tWI= 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=nnQGkdvY; arc=none smtp.client-ip=209.85.214.171 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="nnQGkdvY" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-2ad617d5b80so8400035ad.1 for ; Thu, 26 Mar 2026 11:05:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774548358; x=1775153158; 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=3ATvkbzTX4jbWmEQzoe5/614PGWtMpERJNWTbS3U6No=; b=nnQGkdvYcdLKRMLJCES3aAEf1/94ExzPmhCyJV9ze+sjsKonA/NwgXnO6mZSU5oNN7 mXOgrz7Oe/jKBdUK9LEJmXyeFys8Qar+lKE/BxyAIZOkVLThE/LOMo0Ot1YnLgL0Bfrg UF54Cvs/E8eJQSMvuJo8HTIzH17dz1cQvuOsUYoxbSZ5Ga05RUBQ4Ipnn80CfTUMohqx Iy8j9NUaDvkp7Yz3ZJjh0fx4RbnMRJADngwB4v/XulP4boq23hqoCQi4ITFu3N9JUOzV KdMSFU4oFDiI5uSWfJQMQpEwMPwnyeRDhuOpd5V3n8X7jt2gCYq74QYT4OkWGFJf/Cwv M/sQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774548358; x=1775153158; 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=3ATvkbzTX4jbWmEQzoe5/614PGWtMpERJNWTbS3U6No=; b=CcIvFMHwLRWclwKOcy2g4Unroo38ZVHgEZoEC12zPNrBvbgw1sDpUJ7N6bJuom9F7I Sn0fn+fDV4IT2X6skG9wkSmqLLqRGNeJ3x+TqO9Wg6+sPtevMmugvK8c7l5FV9XB6/C4 7gRGMh4RAnHLD6YQ7BqtS8wusIR7wO9vg2L8SuvJjyblIMIMvaJDUcWzNpxYqf0lbJ8O sOGCmZ2QoPOA7g5oBRUxH5b7eJzTYs5YozW8cnm8BTaWdmKiF0JpLLeo/4prU0kMFzoA mHv17uJHdLo12JkTw2iKnBn7PGiHj9DkBxOUAS1U6yedafQnZbuCl3kmy7IybhE4Behy CpaQ== X-Forwarded-Encrypted: i=1; AJvYcCXzjMppAlH+Kyf8rZZrLZ+HgOj3n0/p3hm5g04CC/+PDS0YI4Eo3ZmUf6j1kyv6Jq6/nlOThEaRL2/gACs=@vger.kernel.org X-Gm-Message-State: AOJu0YwMmYCK1AQii45E1lli22c90Ps4XLkHXIgzyl0bTKVylNF6bGYp YfBKjTJvqcnpU9q99JT5jaUFDgYb/iU2D+nqPiRQNWPKmxnfmcwvXo15 X-Gm-Gg: ATEYQzzmvdWxQQEE7UgW0CCuNTUNbj3tcZ0VpNlSzPvbSqgsIiEYGKFYZQkP0YHWjGU UAxM7hsz8+jT1W8SdeTVcK+a0ZJIUk5Voweg+F683Du0JKYcfhLUPUUPwV4HcZtxcxIDd1oJZL6 sinjfNmv0j/FLLyvlNDxMQy50GKb1j5zYc/XQDf03CNT/5do8FeWqkGtmDKZ3QtfajqE/AensvL Y9g8gWnw52bL06oQ9MSptWuqKyaZRFQ3yXwDlCZ9SQIGUXy58ouoWUg1ztexwCYYMfOlMPjb3KL CmqooIXrZOEVyl3xcLO5lFbiRmDMUgJfx065y6o4lHW8hsNO8gGKTGjNubSC4KoK0IkI0WJ6uF0 9rRuiwvcclXRdwYyL9CccX0HUenwdKemp3ZXS8uNa7w0EVlNf2TPiTWyHXGr+ky8Z7vR1EJ/7QO muGYy0p2cxejBEhH89iMkt9XdS1BjXdRKh9eo+nyrggXL8KhL2r/2Dy8vnBgO1LmWTv/4oRfWRS rA= X-Received: by 2002:a17:903:38cd:b0:2b0:7a50:886f with SMTP id d9443c01a7336-2b0b0b1dc00mr89275245ad.51.1774548357917; Thu, 26 Mar 2026 11:05:57 -0700 (PDT) Received: from debian.ari ([47.30.237.79]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b0bc7a17c5sm43823545ad.26.2026.03.26.11.05.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Mar 2026 11:05:57 -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 v6 4/4] iio: adc: ad799x: use devm_iio_device_register and drop remove() Date: Thu, 26 Mar 2026 23:35:29 +0530 Message-Id: <20260326180529.19154-5-architanant5@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260326180529.19154-1-architanant5@gmail.com> References: <20260326180529.19154-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 | 66 ++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 39 deletions(-) diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c index 3cf7850357ab..c12bd7ed4dd7 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,15 +813,19 @@ 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; + if (ret =3D=3D -ENODEV) { st->vref =3D NULL; dev_info(dev, "Using VCC reference voltage\n"); + } else if (ret) { + return ret; } =20 if (st->vref) { @@ -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