From nobody Mon Feb 9 10:44:44 2026 Received: from mail-oa1-f52.google.com (mail-oa1-f52.google.com [209.85.160.52]) (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 ADDDE31C563 for ; Fri, 5 Sep 2025 18:12:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757095969; cv=none; b=jUYKfS2C928U6XUqLWpVqtoVIaEdjB8bCpyXl43/+9Ws4y2NrdtCj21OgQztxALqnHLli6JWzQXkgDNJwAyc++xXTJopwacBESSkLyCG2ZfsPFgkvEEvte/htv9Gug6qVJdLZ8HIhqgCUTAZX2ElqFJALCbxse6qNvZIkM2BeEA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757095969; c=relaxed/simple; bh=aRfBzEhu9pJri4r6TxRz2ZjFBxLSwzNywqlNQlQhkbQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DVD82ftTugckcPWFM2NtcoXxuObA/uLQeSOnoSHHBV/DFzzoKRSfs+mmvLzXtq4T9RSF87mnIDrp9uLy47el+E9TL/mLeMYKw9bwc+Uk5u3nufDmB96cp1XpsEIDROW75oays4sy4ze8dT/OYwJyvYTpzThdIqvnmNqG6X9myTY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=sSiolotQ; arc=none smtp.client-ip=209.85.160.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="sSiolotQ" Received: by mail-oa1-f52.google.com with SMTP id 586e51a60fabf-32170a988a1so545789fac.1 for ; Fri, 05 Sep 2025 11:12:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1757095967; x=1757700767; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=3Rel3qpsff+gDGTMnN0Ax6EW5tJ8mX6ZG/EwN44Ue6Y=; b=sSiolotQ78ML35Q1d1qfRZqAWX02ov8ayKFeBDK/J+rCE8DSwLyzA7e9vLGpSb8pUj /EkaXKLOBYbQ3LkxXU1aECQ814bCcm/pVprYRkleYXhyGF9WDG09vpeehXEGJOpqtvud 4RwYJal/Vft/RkPvAS68dPzec9AUaY0PgHTjOEf9DW0rCYd5tc0d+jdMJ3W1zKPS6+7J F9Dw6/6G/iDlYp1DLFSyY0AqHKon+dRrnjbJwUKgxoUFQW4Pr+eG4qAhDp5zld2iyIoY lPBURpNoitZK6NSUDZj0Hti+/Qin/0jqmjgVMLeqUxTy4uBRwyG9V67sw/QMgTIuwOiR Qyaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757095967; x=1757700767; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3Rel3qpsff+gDGTMnN0Ax6EW5tJ8mX6ZG/EwN44Ue6Y=; b=jPsQ4pAcn/uCH3IKrFCb5a48bN7cIc1re7MRD8BsPPEsL66It/vFlToowPKTD7V06o 7sOPIC0lLihByipW5+2gMSvZzXj56yFMMecTOMmBw7/SGEqOkUC1fMeRXbjkcE0FAdH+ lNwSYuoLWDgFhKpPuAgwmf6U+asVvpCNKhKxsIomm0mvEu6kIEP9xKrULpuUzCSzzy85 FtZwaC3ZRyZ7wnhQv+WY2E28c16z8BllEdzChp9J8li0sLahX+d2+tLVsidbHc1OR6SW sD9huCwgRgVrN5hXZGBt7gSP5uXWhWmRMNL9rRa/rebAepKneqtlC+2eR7eQZf4TQDAn qHVA== X-Forwarded-Encrypted: i=1; AJvYcCWSZFM7OuKxgvvYqeK2yVhDdqmnnHG/gRk20zOhIIhRvSJ+hrRsy7xw+hm748Ry3COejGj1lFu+3z01mTA=@vger.kernel.org X-Gm-Message-State: AOJu0YwfALWZoybQhydM0s/DtM2QMpgXgOKtQMtMfLdAFY+3ruYdQBOv hzs5tYEufI5ZSMY/DeuvIb+kJY9gD+cLD9HzPl6ysUrG0HVr9Dzo/zRVEWs5OVD5t9Y= X-Gm-Gg: ASbGnct+ssoupGLgH1sHTL24uO1iMBusBS8/lzxFVwtVhlh3FTAF0WpVpIJExd2K3K7 4tGBonUwD5YVLQLrBePhhwQJLwXze9Se4JLEL2/SYGmu8vaMEnH1MVbPHlgz5fZSgnnBAomLJxU W/vwT6NDeMfjNJQ5NcH72ktoxiMwPV6d9BQiWzJYqdaEH/VtDPNnrP+Mu03nGVOSnTVQhdc/2M3 B1tolB3IENFv+6rOr97exBuw8V4REU1cVhFZ6LEg8GR5F9/g7s9tR6DSZLxQxfU+71VDX5gmGa0 z30mAebQncTjux2Cz3iiV+fRzeCS81Ao4GBg2j7uLH/EmB70Q/w9mm8kSNknE7ExEG0s0ckcycf 3ggLD2uT87VdHxEBvgoZDG9E3c/g= X-Google-Smtp-Source: AGHT+IGqggS7ImmH+ozn+4pHmV0yVb9SKPD6zm7ihmdJjtBN01yI79Prlbl7ZlaGcmfJAzqIX3im4Q== X-Received: by 2002:a05:6871:114:b0:314:b6a6:688a with SMTP id 586e51a60fabf-319633cba8bmr10194612fac.42.1757095966053; Fri, 05 Sep 2025 11:12:46 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:1d00:52e:cda3:16cc:72bb]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-31d686398e1sm3052292fac.13.2025.09.05.11.12.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Sep 2025 11:12:45 -0700 (PDT) From: David Lechner Date: Fri, 05 Sep 2025 13:11:56 -0500 Subject: [PATCH 1/6] iio: adc: ad7124: use clamp() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250905-iio-adc-ad7124-add-filter-support-v1-1-aee3834be6a9@baylibre.com> References: <20250905-iio-adc-ad7124-add-filter-support-v1-0-aee3834be6a9@baylibre.com> In-Reply-To: <20250905-iio-adc-ad7124-add-filter-support-v1-0-aee3834be6a9@baylibre.com> To: Michael Hennerich , Jonathan Cameron , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, David Lechner X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1228; i=dlechner@baylibre.com; h=from:subject:message-id; bh=aRfBzEhu9pJri4r6TxRz2ZjFBxLSwzNywqlNQlQhkbQ=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBouyf04cLLwK890vtIhWNBsqRs22IatbAYDNJzJ HFtVhBFMRuJATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCaLsn9AAKCRDCzCAB/wGP wKnECACA92Gh+z/nR0gemOyoVcCM6t20IP9jDEYOOkB9GQPL1fabyAMAaqJ/xrkFeu2p0cu6a8i XRZYrIo54EAEz5+NFyt+wGuXyLzgqmsu4ZGIuEpUV+hBtJ5kjEwf0GGejP2lWP9BqzjmrlLe1Ug bW91kC3W3RS8/PwSnvM317o2+zzBDVzjcG7UdMjnTVbCBdDho1WGNnQ9HRsYV7ByBRkP5LmjnpP zNj7ZWgkU7pNMquiBQvv36aAVDZIktYC0m1O/5UqMhhqGLzShDmc82kbkto7g8DJA//ZYcqFzXf IkZZ6aOr+734VbjI6TM9CJY6/Sh8K9B+iMfl/A6wLHdI2d7C X-Developer-Key: i=dlechner@baylibre.com; a=openpgp; fpr=8A73D82A6A1F509907F373881F8AF88C82F77C03 Use clamp() instead of open-coding clamping. Signed-off-by: David Lechner --- drivers/iio/adc/ad7124.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/iio/adc/ad7124.c b/drivers/iio/adc/ad7124.c index 70f458e3ccc12db884dda9003abcffdf48989e5e..117777fc8ad05b773da09c113cf= 84927c75d6b7b 100644 --- a/drivers/iio/adc/ad7124.c +++ b/drivers/iio/adc/ad7124.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -301,11 +302,7 @@ static void ad7124_set_channel_odr(struct ad7124_state= *st, unsigned int channel * FS[10:0] can have a value from 1 to 2047 */ factor =3D 32 * 4; /* N =3D 4 for default sinc4 filter. */ - odr_sel_bits =3D DIV_ROUND_CLOSEST(fclk, odr * factor); - if (odr_sel_bits < 1) - odr_sel_bits =3D 1; - else if (odr_sel_bits > 2047) - odr_sel_bits =3D 2047; + odr_sel_bits =3D clamp(DIV_ROUND_CLOSEST(fclk, odr * factor), 1, 2047); =20 if (odr_sel_bits !=3D st->channels[channel].cfg.odr_sel_bits) st->channels[channel].cfg.live =3D false; --=20 2.43.0 From nobody Mon Feb 9 10:44:44 2026 Received: from mail-oa1-f50.google.com (mail-oa1-f50.google.com [209.85.160.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E893531C576 for ; Fri, 5 Sep 2025 18:12:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757095970; cv=none; b=WdAEATgw9DGsBENneoIDTUPULg9ADNadQr88ujL3QHwGbHkhkb4wNdyqdTTkfzgOMX3z6GtqtoE5/5tGnSSba2VBy/U56Z1LiINs5KCNarX5xpVnapX+MLR5kueMCFIc58xe0lHjSPP1qBd2pVe4N4IzcPyIvOoJzoApgXyswXk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757095970; c=relaxed/simple; bh=bEX5lsWv42f0P9lxFUEB4JGiSJnlYwccISSJPVPgnW4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BT32OSmW4nwDtmpEyi1ykC3jl7GmLqtrA4IPuq8WruvRdiMpierAcmnlRFWDSwPj+GjBGS8hwYfYix1wwjRmksWuXsYJe9DVkE9OacQbb2EczV4Qwr72A/TT+TZN9UnOFObhS63VHuESk9BAZ885sCyDVX3+3TUWjTK2wsPL9rs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=Cn5NjbNb; arc=none smtp.client-ip=209.85.160.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="Cn5NjbNb" Received: by mail-oa1-f50.google.com with SMTP id 586e51a60fabf-315bb486e6dso2007036fac.2 for ; Fri, 05 Sep 2025 11:12:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1757095967; x=1757700767; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=xwGy0PMkLWc/SggMpjeM/SSxNiNG4AhknUu9JH7miSw=; b=Cn5NjbNbkVUoViAp3lnYXE9wiWSYv80utUPv5YPd1VFezZFG5N2BfwwILOu5WR05RM zgOR+UuDyXCJLVBZd8vUpNyHObId7s6RWXpqF26y2VMNVFoCInK0KDT38FH5ElxVbnNS 4evAbihzhL0fdgg3+okkPH7QgEW0Dq94NYvCmkLV+evi6CZjQGS2XvG9qF3XgBGTxs1z x3ASOuOFIcIGIFRCw1ysD6RCDtAPQKYzDpm3v7kPIZ3Ks/ZOoqC0T1piupqgxLaSiMtl BD232y1x+xrFme1ybzLq/vk9bYkM3WLfAR8tbSX9vM0R01ZjlXk/tUIjTaGkH50OVTMD 6o7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757095967; x=1757700767; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xwGy0PMkLWc/SggMpjeM/SSxNiNG4AhknUu9JH7miSw=; b=ZkK/Pv6nXeTZ/R4gv5zFfg3DZmzyXm3AAfScWapMJ9VNVnhJFSd6vR4Pm/f/2c5CTA Ysq9H1zT+uypzHDPh7bFb17CvmARQTcPXqKTuJue6Y5MX59It566mtCU27iPSpO3gqXu /DTfr/nBs6DWw5gH/LlrMIo5W22KFwnVymokUJalujBnBdwmll0utZnME7Bwi65xSti1 MmNrK5zOIksCbBfYmqjH3h8pdbhjPfQHMH0jnkQpFVfEnwav/z6HCO/wGe3HrofYvoi2 JyJsirEEaw8DfxM3MNqhthg0y3Hmf5HYTRFL+87aSwx9FutZO7heO9O2oAV/rkx5px/a 9Skw== X-Forwarded-Encrypted: i=1; AJvYcCWV5b5Tyr/HbUZkLdgVFeiqOm72J488wbnzgc1mmJhUA8WRSeY49zRDxuSjatBxxUmATukDDWdL32doguI=@vger.kernel.org X-Gm-Message-State: AOJu0Yx8R6Hcb57n9zYhlSLT3J2XF1MqnzvVCe3EmTe78v5aQRjBKJrG 3MhtulhThKaU7vCU4s4aaopfsGGKT5E/9PidUxKmLwkxbxWzTlt9kLP0Srvyr4rZWQU= X-Gm-Gg: ASbGncuU1BaQS1p4KwyL8ADfKvQEp9zc06xHf/9IL97wNFASfEZqdr3TdnC2mYCl1KZ FCu5PMMLL1EMMAuXsUOuMrqyUJWkQlCabIG1Cr0Hxe36JKtobopkYXkho7y1rGeUUqJKzMyEw+I /IkZMR3NKhr3uZJh3qqy+nBakcJBbPGhKS+HVKhN8EjUP/Nz6EXR5LpHnxfeIGfnGli05LfyPpM Rw2kBc9tLv+nKoXpcUIH3y4yaeA0Pww3BszcgQGnYPiQOnX8THw5wjvkYQILFdm4wFrxiwfpQtO xpPO066T7qITvootjrK7WYmWyE/2TGEcAl3mbfCLft2/pTDnnlbYc8C5HcwMLOtFxUrFBxs4dLD Yq13FEgL2Wtkp6CHlztMJ5SEX/ak= X-Google-Smtp-Source: AGHT+IFETfk0c+71/rfkIaAQhcqoeN1xx7VWTTqo+tvrfNONZp00cKycE9KjbXq9WSp0xYJv4+MG8A== X-Received: by 2002:a05:6871:68f:b0:315:2d27:447f with SMTP id 586e51a60fabf-3196334533fmr11887579fac.31.1757095966853; Fri, 05 Sep 2025 11:12:46 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:1d00:52e:cda3:16cc:72bb]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-31d686398e1sm3052292fac.13.2025.09.05.11.12.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Sep 2025 11:12:46 -0700 (PDT) From: David Lechner Date: Fri, 05 Sep 2025 13:11:57 -0500 Subject: [PATCH 2/6] iio: adc: ad7124: use read_avail() for scale_available Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250905-iio-adc-ad7124-add-filter-support-v1-2-aee3834be6a9@baylibre.com> References: <20250905-iio-adc-ad7124-add-filter-support-v1-0-aee3834be6a9@baylibre.com> In-Reply-To: <20250905-iio-adc-ad7124-add-filter-support-v1-0-aee3834be6a9@baylibre.com> To: Michael Hennerich , Jonathan Cameron , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, David Lechner X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2868; i=dlechner@baylibre.com; h=from:subject:message-id; bh=bEX5lsWv42f0P9lxFUEB4JGiSJnlYwccISSJPVPgnW4=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBouyf6FwzYUArfE6hzEym3sg1jjyRs2aRZ+M3OM ELov7al7wmJATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCaLsn+gAKCRDCzCAB/wGP wMbFB/9xwjR38TbZF6CmFhGtV3N5s6jTnohNEv9mkCf/3XKhGiFOW0ffGffJBWnMwrL3xKW+6Hn 9X3Vbk6ykG4oxmlqdm/k5rRGTRrbwel5DLrTurCHxKPAWm/tboz/GmJdmwqa9k5Ej2jHvulFfPx qRA0qDDJj8ekUqHzZxQY2dhVjYeQXrnJ2CEsjTNNlcJMxpbmdQ6HybGhOmDwR4baH8eAVDJzXYu 4it5IX81dcNA32DskJMHMKJbxrx9qf9yKPmW4F4YnKnJMJIpfEzohgiwn3cD6dXmx7EQrml2Txq 35WLJFRb5Rwf229E59rXoE0GkYKk7tbQKiat6FG+ScQG7nYR X-Developer-Key: i=dlechner@baylibre.com; a=openpgp; fpr=8A73D82A6A1F509907F373881F8AF88C82F77C03 Replace custom attribute with the standard IIO read_avail() callback to provide in_voltage_scale_available attribute. Signed-off-by: David Lechner --- drivers/iio/adc/ad7124.c | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/drivers/iio/adc/ad7124.c b/drivers/iio/adc/ad7124.c index 117777fc8ad05b773da09c113cf84927c75d6b7b..6c17cc59f33c6ddc241e94d1b0f= 43bceced1e719 100644 --- a/drivers/iio/adc/ad7124.c +++ b/drivers/iio/adc/ad7124.c @@ -623,6 +623,33 @@ static const struct ad_sigma_delta_info ad7124_sigma_d= elta_info =3D { .num_resetclks =3D 64, }; =20 +static const int ad7124_voltage_scales[][2] =3D { + { 0, 1164 }, + { 0, 2328 }, + { 0, 4656 }, + { 0, 9313 }, + { 0, 18626 }, + { 0, 37252 }, + { 0, 74505 }, + { 0, 149011 }, + { 0, 298023 }, +}; + +static int ad7124_read_avail(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, + const int **vals, int *type, int *length, long info) +{ + switch (info) { + case IIO_CHAN_INFO_SCALE: + *vals =3D (const int *)ad7124_voltage_scales; + *type =3D IIO_VAL_INT_PLUS_NANO; + *length =3D ARRAY_SIZE(ad7124_voltage_scales) * 2; + return IIO_AVAIL_LIST; + default: + return -EINVAL; + } +} + static int ad7124_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long info) @@ -777,18 +804,6 @@ static int ad7124_reg_access(struct iio_dev *indio_dev, return ret; } =20 -static IIO_CONST_ATTR(in_voltage_scale_available, - "0.000001164 0.000002328 0.000004656 0.000009313 0.000018626 0.000037252 = 0.000074505 0.000149011 0.000298023"); - -static struct attribute *ad7124_attributes[] =3D { - &iio_const_attr_in_voltage_scale_available.dev_attr.attr, - NULL, -}; - -static const struct attribute_group ad7124_attrs_group =3D { - .attrs =3D ad7124_attributes, -}; - static int ad7124_update_scan_mode(struct iio_dev *indio_dev, const unsigned long *scan_mask) { @@ -818,12 +833,12 @@ static int ad7124_update_scan_mode(struct iio_dev *in= dio_dev, } =20 static const struct iio_info ad7124_info =3D { + .read_avail =3D ad7124_read_avail, .read_raw =3D ad7124_read_raw, .write_raw =3D ad7124_write_raw, .debugfs_reg_access =3D &ad7124_reg_access, .validate_trigger =3D ad_sd_validate_trigger, .update_scan_mode =3D ad7124_update_scan_mode, - .attrs =3D &ad7124_attrs_group, }; =20 /* Only called during probe, so dev_err_probe() can be used */ @@ -1013,6 +1028,7 @@ static const struct iio_chan_spec ad7124_channel_temp= late =3D { BIT(IIO_CHAN_INFO_OFFSET) | BIT(IIO_CHAN_INFO_SAMP_FREQ) | BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), + .info_mask_shared_by_type_available =3D BIT(IIO_CHAN_INFO_SCALE), .scan_type =3D { .sign =3D 'u', .realbits =3D 24, --=20 2.43.0 From nobody Mon Feb 9 10:44:44 2026 Received: from mail-oa1-f53.google.com (mail-oa1-f53.google.com [209.85.160.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A70FA31C56B for ; Fri, 5 Sep 2025 18:12:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757095970; cv=none; b=VDJyI1b5Ks1aHVm5bIWSkD76sn494yKjpIbwsZalJUXXqAD4tlwTdPD5gjVWd7csmlnivcuMpFlzgzxI2oL8HjPPvo1dW+Yb/hjPTEnQxrYRs6/l6oEBIxfbHAQhgQ/hZpSA2M68cSR8UzNENbdvku6s4shxyZBmpn/3Hkog47g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757095970; c=relaxed/simple; bh=kx5uyvPHJnpni90op3iFGnjN7gyxEZMgcFaPdsde1b0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JAOXRjoIp6P6E9lcmg5yy4xoIIwr1F3uvnPq2nzkYRxjlOG8c55Fd0xu3tmqR5FFtF7Hoswv7IOxQ/9rC44ugx2v4VqUqs5yUEkll7/rj8jDrRahRU4GnOEJrv22aJR0m4zT+pwg+2RCKl6D8HWIkQapv98QfLZ3YXJgklUxZk4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=zzxglfxW; arc=none smtp.client-ip=209.85.160.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="zzxglfxW" Received: by mail-oa1-f53.google.com with SMTP id 586e51a60fabf-30ccec928f6so1168473fac.3 for ; Fri, 05 Sep 2025 11:12:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1757095967; x=1757700767; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=3g/UCnn4/ZEnTWGOYRS0g3qjMxVzhKkl5rubg7Uyi/4=; b=zzxglfxWCBbWOdD0YDKm7EczVYFcziADPIsMt/qgIpitJ10tES/WphbUrF7G1NtahU +iff3S8LXuXXQWDXsCRrHBjr0Ky4ocu8DB8AfLKNnM0dIf6yVRM39cPMPFg4nWIRYtxM IK8wIVTydgzaaRYGelKiGk5DzHfnei019MqfJdw5+gX+L9gKDQtmFm1UyKoHCIo8sTVC TasfLTaN6uk0yUgavdwWj2m5+aHJgc898R8k+3XX5UyVwwRpX+Yp3Vfxv/W45vgO4E8/ 8CRS9Wf7x3Occ6n4Hf8JtJ2d+EhNOQkPC3hfvvkh6bsLW4GbLbZaGc9s7dXy2TLbCLkY uCBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757095967; x=1757700767; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3g/UCnn4/ZEnTWGOYRS0g3qjMxVzhKkl5rubg7Uyi/4=; b=UI9SPf9H4DGNEbaWKEat447G7S/nn/LNXsxinihif1Y6LhRTWz+C8E2Gk2OjQQLKeB X+CppmAwCkwZ6Wc3OSpnu0RiR1QqySqJyvsLw1NRpUzerPOMUmUX42jbNG0P+hVxCPxL yYhs660kOISqUOVCvrFI1lLtVcQT1twUnHY/n258lQwcopaWTiGFFaymn/ne8AUTBhpF 1E3qWNrDpKm51Vq4JtXsJ3Y/4GHfgILRd0jZDYA9yIEF/9Rn8tZquDkCwubgYP+70PRi M6Z+0meFPdt+oBDrkNwBdDXmVPp0WfDZ+jorB2jJoKODB8xBVYoBPJSEZmoUNwfe2ny2 wjJg== X-Forwarded-Encrypted: i=1; AJvYcCW/0d6o1vf0bO3kP/6AjnoMYRVbMtfresXVh1M1JH9z/8zo7ZZTqeGwYvGeNyZzBuNR4XVdwk2rTIrFG7s=@vger.kernel.org X-Gm-Message-State: AOJu0Yw9M0RwSCJntpwSycBhdPZdkDqsUpvyPSUxpdnMwP90eYrkCNMI MP4ZjbK0uKSJbZZPiPFl7c1h9Fx7CJmNnRe97mcKpnFP3Y4R8yz993wtsnpIAdOtPY78JqtR6oo sRyjz X-Gm-Gg: ASbGncuYXvdA24D0A3NnVd2Cghat4RhulcAzLsvqCrNupZ9QdtnLwLza4NscWLyYzdf P4IgazW+sVjQSMn99+arNyU+hLT2LiaC+JtTE7J72k7/iOf9l+aFHhiXje3SH/p7iDuloOeeLzH DSGZEQ4FFliQ4xlLVM8WOoBpELYuSabH12RWMYCj4HLIDT+8He8WirS6o6uHSvH0qS+IvkqcQNK TGsFCIY18jke7/umni2I7NNHYcuqAsYw4q/ANCfiz5tapX8W6OBUStN41tSC0zfwQB6HsaKGDl1 i0+QgHd0BYZqlImYiY19E/abQ5cPPQmsb+QECeSwLWhNydbBG/6Fc5eN8BTVI17i6w3EX2bfpKG ij9ScESRWjKq8aJGW6s0J1gIXac0= X-Google-Smtp-Source: AGHT+IF+rqHcZ5O3Yblxuqf4xfUFIK2sHxy0Ay3Nxeoe7ccO+CaEOtqHKkJIL3+4idGeldtQaxIXlQ== X-Received: by 2002:a05:6871:e78c:b0:321:2772:dd0 with SMTP id 586e51a60fabf-32127726a92mr2099568fac.10.1757095967642; Fri, 05 Sep 2025 11:12:47 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:1d00:52e:cda3:16cc:72bb]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-31d686398e1sm3052292fac.13.2025.09.05.11.12.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Sep 2025 11:12:47 -0700 (PDT) From: David Lechner Date: Fri, 05 Sep 2025 13:11:58 -0500 Subject: [PATCH 3/6] iio: adc: ad7124: use guard(mutex) to simplify return paths Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250905-iio-adc-ad7124-add-filter-support-v1-3-aee3834be6a9@baylibre.com> References: <20250905-iio-adc-ad7124-add-filter-support-v1-0-aee3834be6a9@baylibre.com> In-Reply-To: <20250905-iio-adc-ad7124-add-filter-support-v1-0-aee3834be6a9@baylibre.com> To: Michael Hennerich , Jonathan Cameron , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, David Lechner X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2323; i=dlechner@baylibre.com; h=from:subject:message-id; bh=kx5uyvPHJnpni90op3iFGnjN7gyxEZMgcFaPdsde1b0=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBouygBZy5XyJMymkrm8NweZsbQhQ0Xndor7I7za Q8eX38z84aJATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCaLsoAQAKCRDCzCAB/wGP wBp/B/4gPu4pc+ZBtlILyEsP5zzyU4KMnhP0WwhaABU/YX4quSKwp9mZ0g5g9p99SFFBDMwgAR0 yGx8nfwI8Ce40blr1ZaoF8tJQ58iKZeuPNKQ+vyHI7JldEAZ8eaDnqFy7qNI20H/U/PDROfpHV0 neJ4LWiAdkMcJnTOyZMh9Q6kq8ftK6b+cElryBdX/xCmkFfQaQkOd9o7id5AdTTgR7xXGX/LaWQ ZMJnfBu8FYqZ2JyVSk/MR7vBL6Tpe65zQTYNG0DGdCiPDwQLumr6xJ+ds54bfcV0jWTdZSm+y81 rrEja5NG69lyTfbUpz+NmU4865IyILZFFSn5xgdXhMS9Si2+ X-Developer-Key: i=dlechner@baylibre.com; a=openpgp; fpr=8A73D82A6A1F509907F373881F8AF88C82F77C03 Use guard(mutex) in a couple of functions to allow direct returns. This simplifies the code a bit and will make later changes easier. Signed-off-by: David Lechner --- drivers/iio/adc/ad7124.c | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/drivers/iio/adc/ad7124.c b/drivers/iio/adc/ad7124.c index 6c17cc59f33c6ddc241e94d1b0f43bceced1e719..d0c6462bcf410efcc664b602beb= 94a9ab6a869c0 100644 --- a/drivers/iio/adc/ad7124.c +++ b/drivers/iio/adc/ad7124.c @@ -741,24 +741,20 @@ static int ad7124_write_raw(struct iio_dev *indio_dev, { struct ad7124_state *st =3D iio_priv(indio_dev); unsigned int res, gain, full_scale, vref; - int ret =3D 0; =20 - mutex_lock(&st->cfgs_lock); + guard(mutex)(&st->cfgs_lock); =20 switch (info) { case IIO_CHAN_INFO_SAMP_FREQ: - if (val2 !=3D 0 || val =3D=3D 0) { - ret =3D -EINVAL; - break; - } + if (val2 !=3D 0 || val =3D=3D 0) + return -EINVAL; =20 ad7124_set_channel_odr(st, chan->address, val); - break; + + return 0; case IIO_CHAN_INFO_SCALE: - if (val !=3D 0) { - ret =3D -EINVAL; - break; - } + if (val !=3D 0) + return -EINVAL; =20 if (st->channels[chan->address].cfg.bipolar) full_scale =3D 1 << (chan->scan_type.realbits - 1); @@ -774,13 +770,10 @@ static int ad7124_write_raw(struct iio_dev *indio_dev, st->channels[chan->address].cfg.live =3D false; =20 st->channels[chan->address].cfg.pga_bits =3D res; - break; + return 0; default: - ret =3D -EINVAL; + return -EINVAL; } - - mutex_unlock(&st->cfgs_lock); - return ret; } =20 static int ad7124_reg_access(struct iio_dev *indio_dev, @@ -812,7 +805,8 @@ static int ad7124_update_scan_mode(struct iio_dev *indi= o_dev, int ret; int i; =20 - mutex_lock(&st->cfgs_lock); + guard(mutex)(&st->cfgs_lock); + for (i =3D 0; i < st->num_channels; i++) { bit_set =3D test_bit(i, scan_mask); if (bit_set) @@ -820,15 +814,10 @@ static int ad7124_update_scan_mode(struct iio_dev *in= dio_dev, else ret =3D ad7124_spi_write_mask(st, AD7124_CHANNEL(i), AD7124_CHANNEL_ENA= BLE, 0, 2); - if (ret < 0) { - mutex_unlock(&st->cfgs_lock); - + if (ret < 0) return ret; - } } =20 - mutex_unlock(&st->cfgs_lock); - return 0; } =20 --=20 2.43.0 From nobody Mon Feb 9 10:44:44 2026 Received: from mail-oa1-f48.google.com (mail-oa1-f48.google.com [209.85.160.48]) (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 7D56931C579 for ; Fri, 5 Sep 2025 18:12:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757095971; cv=none; b=Vs7/YUi5uZG+k1KHwJmkqHtwuRJED9c4KzfRFdaXTtet5nzxdGMjYROqOSBSUOZm9s9kiiQt7sWUhAQEMiGf/wlIDQMBYykClfQMJ3d4LrqWkJpFlujdqh0J/zL2aHy0lzfCjyf1gGdc3mFgEgsJTLYQVaIujM6coAxAMxtY6+M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757095971; c=relaxed/simple; bh=QEvSoG9oo+amGpQo5aYx923w5/Dr4Rh7PhvFmupuYfo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ekmYvx0L/4lqV61V0axKOFG/JFX7Fmot4H2aTUOA3fNUOGLSojMrHyBarIQqeKgBmOlU/uBanLBycXRLnrigoJB2sNmuFGnnL66MQZ6OAD6pv9Y4k328p3A5bHGjNW48MWa5O0U4Ivv6j7kV1PrQaOEBUqAwKe37vur8eutSsVk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=J7NKgRQR; arc=none smtp.client-ip=209.85.160.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="J7NKgRQR" Received: by mail-oa1-f48.google.com with SMTP id 586e51a60fabf-31d6b8be249so1844688fac.0 for ; Fri, 05 Sep 2025 11:12:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1757095968; x=1757700768; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=pq/O4xCAgJP0KqFCiB1CekBvbauRk68b8NmuWzDdO7c=; b=J7NKgRQR/fWBqeYZh/cU0xlxE0k+tWVClgqRKEli2b6TzxqEJcz4b6a8lThp6oBtce V8Cz98m02c0RaS+FhCkdMf1shOKo0ni7HwxPw0YyhL4A5XuwWUOmE48XhzyAT4I6bm1r qdLxRksI3IpBfzL4VtRqbC2XlzwLwUfORaxt/sqH0y6Im0iNElDHNBdTwc+ju6VpnD65 M37McxkFI0E9CuWb8OSABkUSuzNU/jhTEhChk2IVyxiepbs6RUuC+a4L/iHgL9L2hXVG UaUkrDmIT1HY1My0WtZr2nTi7fdGbf4zKzRhOKnGsdO5WZtbJYJ35GIyW84WaykWmP4F ucUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757095968; x=1757700768; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pq/O4xCAgJP0KqFCiB1CekBvbauRk68b8NmuWzDdO7c=; b=GjaSDqVjCBmOcgrR0dk8dhmDTE9w22kHwqc+BSYqN1KXYlpVKTMZDv77lHCuHKoo7I UjqVMTx6aYqbNi5Ji/b77DGBfP26IJmr8TUh5fP5LPERfXI5REUPpJSUC7Qzrw2McGrK NpN6B1EgiMDKlu7aNxscJ5i23ORFb5BfwZmWGYTMaNVk5PgcogEA0yIXz+BJDvKPAZcb vdsOfPfAkH8j4sJUJK8w3enJXBDEOmeN3dB0dU/whd+rTv50rB8MuS4k2Hv5K7UdIi8y Bg5EqBZ+ljEMAmj+XYKRAHf0zoSamdQ+AXc1I803MSo/eQwmomtYTJ9CX8b84Mq+NscA gNSg== X-Forwarded-Encrypted: i=1; AJvYcCXscNmZnfRy5dnVQXeqwag3ONBS2/oWWfzavBukOvC5WMj7GRZMUN3Cv17UxyAegk6Leo2kObgzOcKItZA=@vger.kernel.org X-Gm-Message-State: AOJu0Yzi081d9Or+eGFBgJ/a3cqRl/KGgFekEkpIfUYq9xib7T7WOiFM gSyzdo5RHx6DIW4blHgVZU2oyR7+nYxqWb/UUt84t3qzZH9Yjtj0Neh1wJMvS3Ze09w= X-Gm-Gg: ASbGncvYdeqE5nfujB8o9JtK3Ixvrw8htvclB0pLUIZLoqV/NiPs8NWqVRkoYvCNzW3 jI06VRsaD50eRM292kMScppaiqeQRUap2uBqsD0mENwC9VY6+wnaVnR2vh6PXP5BFiRRKrve/aU iFdlM6nUyaMfX/f3cOI5sa2dW8IlwQvWYmBUG3yq9++y4KRVv69PQeTz1JgZJINcF+BT+IOhu9X Ckk3JV3WMk2f4fM+oHGRvYbYqMJRUUwywmx7Qf60CatrAVD5SWnj2uLptST6ruzpE0/PNkjtmj9 wGBeEFkIoDMSAx6dfB4TS6WYUygvkn1PCvx1um1zU4NzwVcxxLYIM8CLCskg04UZPO+6TkgS7QQ 8APSZILqzoAzVBDaDidZ2Wic5JgshhjfMKDVY3Q1GLjuz8toy X-Google-Smtp-Source: AGHT+IHiFaLhmix02to3SMgZZqByu/YBe6CEM25m/eqHlooV5XhvbN53r09zYYi9FDkfdZyJBlqDqg== X-Received: by 2002:a05:6870:17a3:b0:315:a68c:d90b with SMTP id 586e51a60fabf-31963345786mr11690278fac.23.1757095968426; Fri, 05 Sep 2025 11:12:48 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:1d00:52e:cda3:16cc:72bb]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-31d686398e1sm3052292fac.13.2025.09.05.11.12.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Sep 2025 11:12:48 -0700 (PDT) From: David Lechner Date: Fri, 05 Sep 2025 13:11:59 -0500 Subject: [PATCH 4/6] iio: adc: ad7124: support fractional sampling_frequency Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250905-iio-adc-ad7124-add-filter-support-v1-4-aee3834be6a9@baylibre.com> References: <20250905-iio-adc-ad7124-add-filter-support-v1-0-aee3834be6a9@baylibre.com> In-Reply-To: <20250905-iio-adc-ad7124-add-filter-support-v1-0-aee3834be6a9@baylibre.com> To: Michael Hennerich , Jonathan Cameron , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, David Lechner X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5575; i=dlechner@baylibre.com; h=from:subject:message-id; bh=QEvSoG9oo+amGpQo5aYx923w5/Dr4Rh7PhvFmupuYfo=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBouygIcE4D5fTMX03D7KcVg5yFzpWnllIAr3oP2 0dBRTLLqHmJATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCaLsoCAAKCRDCzCAB/wGP wMH8B/4xu27Lk451bUl1W4lOAQNp20acyd2GPp93eNxqzmhsq5Iz5wzLiY1U4xzLiYa+GT7eTIt WDjGWcDkSxUBTDQJJXEYNGqGxKM8ZsTUIlAaacj1eAhUEUXDjN2wdke7eusWNIbGOPkgjghym6q 48VoxcEROCHtBauAhTJ9S6NFUJ3iHzxLhXVdHxl9ezgURZkGwvcP6uhoeQ2rNOkPcFcnOM+Ygj5 hlcsxY2oKJ2Zpl8zJHtOmcF2ntm9UAFGSY7cTwlKpCu4rAAKPtEIQevihCZfedGcgEw4uN5Kfz4 QdPpaUbJHWr0gG7GnGIQ5xKJ6/GATTkCc8ihSKxdBlSperRq X-Developer-Key: i=dlechner@baylibre.com; a=openpgp; fpr=8A73D82A6A1F509907F373881F8AF88C82F77C03 Modify the attribute read/write functions for sampling_frequency and filter_low_pass_3db_frequency to return fractional values. These ADCs support output data rates in the single digits, so being able to specify fractional values is necessary to use all possible sampling frequencies. Signed-off-by: David Lechner --- drivers/iio/adc/ad7124.c | 65 +++++++++++++++++++++++++++++---------------= ---- 1 file changed, 39 insertions(+), 26 deletions(-) diff --git a/drivers/iio/adc/ad7124.c b/drivers/iio/adc/ad7124.c index d0c6462bcf410efcc664b602beb94a9ab6a869c0..e2d92f2e3e2eb96d11dcaaf53de= 9124a6cc44ca4 100644 --- a/drivers/iio/adc/ad7124.c +++ b/drivers/iio/adc/ad7124.c @@ -168,7 +168,6 @@ struct ad7124_channel_config { bool buf_negative; unsigned int vref_mv; unsigned int pga_bits; - unsigned int odr; unsigned int odr_sel_bits; unsigned int filter_type; unsigned int calibration_offset; @@ -287,7 +286,17 @@ static u32 ad7124_get_fclk_hz(struct ad7124_state *st) return fclk_hz; } =20 -static void ad7124_set_channel_odr(struct ad7124_state *st, unsigned int c= hannel, unsigned int odr) +static u32 ad7124_get_fadc_divisor(struct ad7124_state *st, unsigned int c= hannel) +{ + /* + * The output data rate (f_ADC) is f_CLK / divisor. We are returning + * the divisor. + */ + return st->channels[channel].cfg.odr_sel_bits * 32 * 4; +} + +static void ad7124_set_channel_odr(struct ad7124_state *st, unsigned int c= hannel, + unsigned int odr, unsigned int odr_micro) { unsigned int fclk, factor, odr_sel_bits; =20 @@ -302,29 +311,28 @@ static void ad7124_set_channel_odr(struct ad7124_stat= e *st, unsigned int channel * FS[10:0] can have a value from 1 to 2047 */ factor =3D 32 * 4; /* N =3D 4 for default sinc4 filter. */ - odr_sel_bits =3D clamp(DIV_ROUND_CLOSEST(fclk, odr * factor), 1, 2047); + odr_sel_bits =3D DIV_ROUND_CLOSEST(fclk, odr * factor + + odr_micro * factor / MICRO); + odr_sel_bits =3D clamp(odr_sel_bits, 1, 2047); =20 if (odr_sel_bits !=3D st->channels[channel].cfg.odr_sel_bits) st->channels[channel].cfg.live =3D false; =20 - /* fADC =3D fCLK / (FS[10:0] x 32) */ - st->channels[channel].cfg.odr =3D DIV_ROUND_CLOSEST(fclk, odr_sel_bits * - factor); st->channels[channel].cfg.odr_sel_bits =3D odr_sel_bits; } =20 -static int ad7124_get_3db_filter_freq(struct ad7124_state *st, - unsigned int channel) +static int ad7124_get_3db_filter_factor(struct ad7124_state *st, + unsigned int channel) { - unsigned int fadc; - - fadc =3D st->channels[channel].cfg.odr; - + /* + * 3dB point is the f_CLK rate times some factor. This functions returns + * the factor times 1000. + */ switch (st->channels[channel].cfg.filter_type) { case AD7124_FILTER_FILTER_SINC3: - return DIV_ROUND_CLOSEST(fadc * 272, 1000); + return 272; case AD7124_FILTER_FILTER_SINC4: - return DIV_ROUND_CLOSEST(fadc * 230, 1000); + return 230; default: return -EINVAL; } @@ -348,7 +356,6 @@ static struct ad7124_channel_config *ad7124_find_simila= r_live_cfg(struct ad7124_ bool buf_negative; unsigned int vref_mv; unsigned int pga_bits; - unsigned int odr; unsigned int odr_sel_bits; unsigned int filter_type; unsigned int calibration_offset; @@ -365,7 +372,6 @@ static struct ad7124_channel_config *ad7124_find_simila= r_live_cfg(struct ad7124_ cfg->buf_negative =3D=3D cfg_aux->buf_negative && cfg->vref_mv =3D=3D cfg_aux->vref_mv && cfg->pga_bits =3D=3D cfg_aux->pga_bits && - cfg->odr =3D=3D cfg_aux->odr && cfg->odr_sel_bits =3D=3D cfg_aux->odr_sel_bits && cfg->filter_type =3D=3D cfg_aux->filter_type && cfg->calibration_offset =3D=3D cfg_aux->calibration_offset && @@ -720,16 +726,23 @@ static int ad7124_read_raw(struct iio_dev *indio_dev, =20 case IIO_CHAN_INFO_SAMP_FREQ: mutex_lock(&st->cfgs_lock); - *val =3D st->channels[chan->address].cfg.odr; + *val =3D ad7124_get_fclk_hz(st); + *val2 =3D ad7124_get_fadc_divisor(st, chan->address); mutex_unlock(&st->cfgs_lock); =20 - return IIO_VAL_INT; - case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: - mutex_lock(&st->cfgs_lock); - *val =3D ad7124_get_3db_filter_freq(st, chan->scan_index); - mutex_unlock(&st->cfgs_lock); + return IIO_VAL_FRACTIONAL; + case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: { + guard(mutex)(&st->cfgs_lock); =20 - return IIO_VAL_INT; + ret =3D ad7124_get_3db_filter_factor(st, chan->address); + if (ret < 0) + return ret; + + /* 3dB point is the f_CLK rate times a fractional value */ + *val =3D ret * ad7124_get_fclk_hz(st); + *val2 =3D MILLI * ad7124_get_fadc_divisor(st, chan->address); + return IIO_VAL_FRACTIONAL; + } default: return -EINVAL; } @@ -746,10 +759,10 @@ static int ad7124_write_raw(struct iio_dev *indio_dev, =20 switch (info) { case IIO_CHAN_INFO_SAMP_FREQ: - if (val2 !=3D 0 || val =3D=3D 0) + if (val2 < 0 || val < 0 || (val2 =3D=3D 0 && val =3D=3D 0)) return -EINVAL; =20 - ad7124_set_channel_odr(st, chan->address, val); + ad7124_set_channel_odr(st, chan->address, val, val2); =20 return 0; case IIO_CHAN_INFO_SCALE: @@ -1298,7 +1311,7 @@ static int ad7124_setup(struct ad7124_state *st) * regardless of the selected power mode. Round it up to 10 and * set all channels to this default value. */ - ad7124_set_channel_odr(st, i, 10); + ad7124_set_channel_odr(st, i, 10, 0); } =20 ad7124_disable_all(&st->sd); --=20 2.43.0 From nobody Mon Feb 9 10:44:44 2026 Received: from mail-oa1-f42.google.com (mail-oa1-f42.google.com [209.85.160.42]) (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 2D3EF31C56F for ; Fri, 5 Sep 2025 18:12:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757095972; cv=none; b=JTJQCEh3B/V7zL1Yo9yYb/8TOR7cAp7+rF1B/IhF84PU/DAHxcnIh1jDEcOtYTXwBwqh6Co0OoUthyc6Q53WgyBpOfAl45T5aw9eIJBdebZ1mx+muzhNkw/FdU7RCVDKxloYxwhgZQd9dk8vseoSgbk83+23SKI1lx+Zdv3j4uE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757095972; c=relaxed/simple; bh=UhlydDXcugnzLjJTjk/XAAioZYekVGc6CTVSD2i9gGs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jhmsxoUEL/6cXkWDSjq5W3fz2kSmEHALWnBQH5FMV7z2H69BUrbgyxsAjtO1P0Ymz/0HFWEmdPkDXHkl4+tJ9jijBtiLHCBXjUIS8EkLRwUwHg4odEOoAA3dJLI0ke1Xt7JPmLEwt3gETkwCurxu7cXR3DlgQLN5lFY6y0knczE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=KLmkMuG5; arc=none smtp.client-ip=209.85.160.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="KLmkMuG5" Received: by mail-oa1-f42.google.com with SMTP id 586e51a60fabf-31973960b70so2062076fac.2 for ; Fri, 05 Sep 2025 11:12:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1757095969; x=1757700769; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=DleB+ikqK3paAocf3z632XLVhvFrPz9MPLeGwHsUkLQ=; b=KLmkMuG5kbO8Ocn/9PyP65s3z71sZUW3aLzLXIEAeVWW4OI/6N1KEqQNNfZ1LRZtcT lBLXmJG59Hgm5FdQ2Fg5HBcZUbhTVqWpyBlEaQd29al1cegrqtEgsNe27XHkU4lV69vW TH1bVVRUeok4HiJI8W+UYH/yLWfIUy6Uvv6j7cRAc+wSP8M/R1DrOcE+Ok5J9daJZnZ3 r5T3tbUZ6BDRJHfpj6eEttKJYnkJrsN9T18H8nJdpy6gLylCCBD2cBe0DciYGs4kMLTa jZqw27fGBjCGrBJV7r3IpjtvBhJThzh8mjlIncVj32Zbvt1KYRHTnkkDnE2mvkWoYIxT jUgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757095969; x=1757700769; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DleB+ikqK3paAocf3z632XLVhvFrPz9MPLeGwHsUkLQ=; b=l4KVutIiCghoTgYInZq72DkxYzMkYW6K0UM+vxkYvWaRNzUkSxHPEpVBQUOv4LYUgM STAJPnFFSoWQPXUtIpMW/SESwC9aBMzwK+Z5jrVYIkPm87O3nbfaf2I8ISp7zKGOvFW2 lPGqfy0xrxfolzWpURw6z/jzXH2VqMMGYzJdvU9qV219Up9JzDd3EjBZbitmZnyYupDu c6W7EqronJQSBX+UFDAGp/HaEEUiuFwV6JGPODzWs3kR5wtQ4YM1+NPolyN527GkkO0g h8kcBmlSeXaSDNpv9R9hm6acxnJIvk/c6Uwna6oG+kxMxddN6UKFedVR5ViNYKZtEmV1 onEA== X-Forwarded-Encrypted: i=1; AJvYcCXzQDIoeFLYbZ40pEbpWf2KMfm+YrPwQRQow4BIT7qBvCZq9cpdpC6ru8NgvvemcR+V0YgDwLc0YjuVJAo=@vger.kernel.org X-Gm-Message-State: AOJu0Yy+xB31y71bIx9bjsk3qZAzjrrjef1eXyNNp1DevuBNlgLxT2B8 IPQ2kBhVe80ZgeWJhdXua+YrIhjobBIMWjPhoTRBj4VvzsHT+7H5/9OszAj4o87e25A= X-Gm-Gg: ASbGnct/sgddeHeiT3x+khGP/wng+QH6F9Dd4AsYmZzry08N0GSpaCRSGOuvYcmsW06 RYCeOLGAKTOCp7i5OCiavUixnOE4WoYmbInZHxClZvazr8Q74P77MLW8bykSMXIqorXj3xCpU0v hlS+rCoIUdv4wBGxRDTKZH6YI9M4GYqB1RFmy1552CUMTVH4k+2mEZBEv7eTGDZCxsuAxZglLsj gnkQNSnJ/ByyqM1x9gg0oiRjUSG6Xn52bgKeLUEU5wLOe5miTjv0T17bzRYkaaw5X/MS254+yf8 WgbcrB+xHLeVxfC+C2VN7jG5UYV6uBWPUH9oTutnd1w2Kr+/PmLFFe5HWPJrWQOyHuOiAKuPUMm 1C9rS1NGJ332wl3Ng0ASNO72TmQb+oPwkeL3QAA== X-Google-Smtp-Source: AGHT+IEG308lU85edkIqK41LXv7dqfiardEUaVlFVAv6OdheaIszKrFQQ/vXgyBzxKcDoTV7vc316Q== X-Received: by 2002:a05:6870:331e:b0:321:4dd9:b850 with SMTP id 586e51a60fabf-3214de91431mr1383842fac.34.1757095969198; Fri, 05 Sep 2025 11:12:49 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:1d00:52e:cda3:16cc:72bb]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-31d686398e1sm3052292fac.13.2025.09.05.11.12.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Sep 2025 11:12:48 -0700 (PDT) From: David Lechner Date: Fri, 05 Sep 2025 13:12:00 -0500 Subject: [PATCH 5/6] iio: adc: ad7124: add filter support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250905-iio-adc-ad7124-add-filter-support-v1-5-aee3834be6a9@baylibre.com> References: <20250905-iio-adc-ad7124-add-filter-support-v1-0-aee3834be6a9@baylibre.com> In-Reply-To: <20250905-iio-adc-ad7124-add-filter-support-v1-0-aee3834be6a9@baylibre.com> To: Michael Hennerich , Jonathan Cameron , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, David Lechner X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=15521; i=dlechner@baylibre.com; h=from:subject:message-id; bh=UhlydDXcugnzLjJTjk/XAAioZYekVGc6CTVSD2i9gGs=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBouygOYPkTNt64k45XN4cltv+5L2KqAizTsW31o GBnDrKvY/qJATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCaLsoDgAKCRDCzCAB/wGP wDgJB/4qM2/3+8afBNM638NIP78Q2ik8eB+dfSDiJiN1MeBX9gnLTL7eNRikoYtKpx328RMyCgN QsmNr1v3L18iQiw19XB2sRg6IE78oX/stF1KCrTlGw1+pi5p2zFA6ANXOXrUeGaNUpxxb93kH4x 9FA8C6GPYvTyeCVph6A7mL34X06VSDjN/fjuliEFpx4M3HgM9YgGMP9xCIEsAVWD8c4pJhoZAy9 CaDXJ+RyNWAeZYJw2YQi0vOuKQUkK+aMq34e8IcbFKgP54BM4g+/qzDPV7eJMrq7BBZvlhWkF4d xw74WmuWR+yGsGwtxW6xtLWK1TOwb7kH0By84zLBVP6YgH2e X-Developer-Key: i=dlechner@baylibre.com; a=openpgp; fpr=8A73D82A6A1F509907F373881F8AF88C82F77C03 Add support to the ad7124 driver for selecting the filter type. The filter type has an influence on the effective sampling frequency of each channel. For sinc3+pf{1,2,3,4}, the sampling frequency is fixed. For sinc{3,4} (without post filter), there is a factor of 3 or 4 depending on the filter type. For the extra +sinc1, there is an extra averaging factor that depends on the power mode. In order to select the closest sampling frequency for each filter type, we keep a copy of the requested sampling frequency. This way, if the user sets the sampling frequency first and then selects the filter type, the sampling frequency will still be as close as possible to the requested value. Since we always either have the SINGLE_CYCLE bit set or have more than one channel enabled, the sampling frequency is always using the "zero-latency" calculation from the data sheet. This is only documented for the basic sinc{3,4} filters, so the other filter types had to be inferred and confirmed through testing. Since the flat filter type list consists of multiple register fields, the struct ad7124_channel_config::filter_type field is changed to the enum ad7124_filter_type type to avoid nested switch statements in a lot of places. Signed-off-by: David Lechner --- drivers/iio/adc/ad7124.c | 257 +++++++++++++++++++++++++++++++++++++++++--= ---- 1 file changed, 227 insertions(+), 30 deletions(-) diff --git a/drivers/iio/adc/ad7124.c b/drivers/iio/adc/ad7124.c index e2d92f2e3e2eb96d11dcaaf53de9124a6cc44ca4..a776354a25b65dc92770705e769= b6351da00c2cc 100644 --- a/drivers/iio/adc/ad7124.c +++ b/drivers/iio/adc/ad7124.c @@ -3,6 +3,7 @@ * AD7124 SPI ADC driver * * Copyright 2018 Analog Devices Inc. + * Copyright 2025 BayLibre, SAS */ #include #include @@ -99,6 +100,13 @@ #define AD7124_FILTER_FILTER_SINC3 2 #define AD7124_FILTER_FILTER_SINC4_SINC1 4 #define AD7124_FILTER_FILTER_SINC3_SINC1 5 +#define AD7124_FILTER_FILTER_SINC3_PF 7 +#define AD7124_FILTER_REJ60 BIT(20) +#define AD7124_FILTER_POST_FILTER GENMASK(19, 17) +#define AD7124_FILTER_POST_FILTER_47dB 2 +#define AD7124_FILTER_POST_FILTER_62dB 3 +#define AD7124_FILTER_POST_FILTER_86dB 5 +#define AD7124_FILTER_POST_FILTER_92dB 6 #define AD7124_FILTER_SINGLE_CYCLE BIT(16) #define AD7124_FILTER_FS GENMASK(10, 0) =20 @@ -153,9 +161,24 @@ struct ad7124_chip_info { unsigned int num_inputs; }; =20 +enum ad7124_filter_type { + AD7124_FILTER_TYPE_SINC3, + AD7124_FILTER_TYPE_SINC3_PF1, + AD7124_FILTER_TYPE_SINC3_PF2, + AD7124_FILTER_TYPE_SINC3_PF3, + AD7124_FILTER_TYPE_SINC3_PF4, + AD7124_FILTER_TYPE_SINC3_REJ60, + AD7124_FILTER_TYPE_SINC3_SINC1, + AD7124_FILTER_TYPE_SINC4, + AD7124_FILTER_TYPE_SINC4_REJ60, + AD7124_FILTER_TYPE_SINC4_SINC1, +}; + struct ad7124_channel_config { bool live; unsigned int cfg_slot; + unsigned int requested_odr; + unsigned int requested_odr_micro; /* * Following fields are used to compare for equality. If you * make adaptations in it, you most likely also have to adapt @@ -169,7 +192,7 @@ struct ad7124_channel_config { unsigned int vref_mv; unsigned int pga_bits; unsigned int odr_sel_bits; - unsigned int filter_type; + enum ad7124_filter_type filter_type; unsigned int calibration_offset; unsigned int calibration_gain; ); @@ -286,21 +309,50 @@ static u32 ad7124_get_fclk_hz(struct ad7124_state *st) return fclk_hz; } =20 +static u32 ad7124_get_fs_factor(struct ad7124_state *st, unsigned int chan= nel) +{ + enum ad7124_power_mode power_mode =3D + FIELD_GET(AD7124_ADC_CONTROL_POWER_MODE, st->adc_control); + u32 avg =3D power_mode =3D=3D AD7124_LOW_POWER ? 8 : 16; + + /* + * These are the "zero-latency" factors from the data sheet. For the + * sinc1 filters, these aren't documented, but derived by taking the + * single-channel formula from the sinc1 section of the data sheet and + * multiplying that by the sinc3/4 factor from the corresponding zero- + * latency sections. + */ + switch (st->channels[channel].cfg.filter_type) { + case AD7124_FILTER_TYPE_SINC4: + case AD7124_FILTER_TYPE_SINC4_REJ60: + return 4 * 32; + case AD7124_FILTER_TYPE_SINC4_SINC1: + return 4 * avg * 32; + case AD7124_FILTER_TYPE_SINC3_SINC1: + return 3 * avg * 32; + default: + return 3 * 32; + } +} + static u32 ad7124_get_fadc_divisor(struct ad7124_state *st, unsigned int c= hannel) { + u32 factor =3D ad7124_get_fs_factor(st, channel); + /* * The output data rate (f_ADC) is f_CLK / divisor. We are returning * the divisor. */ - return st->channels[channel].cfg.odr_sel_bits * 32 * 4; + return st->channels[channel].cfg.odr_sel_bits * factor; } =20 -static void ad7124_set_channel_odr(struct ad7124_state *st, unsigned int c= hannel, - unsigned int odr, unsigned int odr_micro) +static void ad7124_set_channel_odr(struct ad7124_state *st, unsigned int c= hannel) { + struct ad7124_channel_config *cfg =3D &st->channels[channel].cfg; unsigned int fclk, factor, odr_sel_bits; =20 fclk =3D ad7124_get_fclk_hz(st); + factor =3D ad7124_get_fs_factor(st, channel); =20 /* * FS[10:0] =3D fCLK / (fADC x 32 * N) where: @@ -310,9 +362,9 @@ static void ad7124_set_channel_odr(struct ad7124_state = *st, unsigned int channel * FS[10:0] are the bits in the filter register * FS[10:0] can have a value from 1 to 2047 */ - factor =3D 32 * 4; /* N =3D 4 for default sinc4 filter. */ - odr_sel_bits =3D DIV_ROUND_CLOSEST(fclk, odr * factor + - odr_micro * factor / MICRO); + odr_sel_bits =3D DIV_ROUND_CLOSEST(fclk, cfg->requested_odr * factor + + cfg->requested_odr_micro * + factor / MICRO); odr_sel_bits =3D clamp(odr_sel_bits, 1, 2047); =20 if (odr_sel_bits !=3D st->channels[channel].cfg.odr_sel_bits) @@ -324,15 +376,29 @@ static void ad7124_set_channel_odr(struct ad7124_stat= e *st, unsigned int channel static int ad7124_get_3db_filter_factor(struct ad7124_state *st, unsigned int channel) { + struct ad7124_channel_config *cfg =3D &st->channels[channel].cfg; + /* * 3dB point is the f_CLK rate times some factor. This functions returns * the factor times 1000. */ - switch (st->channels[channel].cfg.filter_type) { - case AD7124_FILTER_FILTER_SINC3: + switch (cfg->filter_type) { + case AD7124_FILTER_TYPE_SINC3: + case AD7124_FILTER_TYPE_SINC3_REJ60: + case AD7124_FILTER_TYPE_SINC3_SINC1: return 272; - case AD7124_FILTER_FILTER_SINC4: + case AD7124_FILTER_TYPE_SINC4: + case AD7124_FILTER_TYPE_SINC4_REJ60: + case AD7124_FILTER_TYPE_SINC4_SINC1: return 230; + case AD7124_FILTER_TYPE_SINC3_PF1: + return 633; + case AD7124_FILTER_TYPE_SINC3_PF2: + return 605; + case AD7124_FILTER_TYPE_SINC3_PF3: + return 669; + case AD7124_FILTER_TYPE_SINC3_PF4: + return 759; default: return -EINVAL; } @@ -357,7 +423,7 @@ static struct ad7124_channel_config *ad7124_find_simila= r_live_cfg(struct ad7124_ unsigned int vref_mv; unsigned int pga_bits; unsigned int odr_sel_bits; - unsigned int filter_type; + enum ad7124_filter_type filter_type; unsigned int calibration_offset; unsigned int calibration_gain; })); @@ -424,8 +490,9 @@ static int ad7124_init_config_vref(struct ad7124_state = *st, struct ad7124_channe static int ad7124_write_config(struct ad7124_state *st, struct ad7124_chan= nel_config *cfg, unsigned int cfg_slot) { - unsigned int tmp; - unsigned int val; + unsigned int val, filter; + unsigned int rej60 =3D 0; + unsigned int post =3D 0; int ret; =20 cfg->cfg_slot =3D cfg_slot; @@ -448,6 +515,47 @@ static int ad7124_write_config(struct ad7124_state *st= , struct ad7124_channel_co if (ret < 0) return ret; =20 + switch (cfg->filter_type) { + case AD7124_FILTER_TYPE_SINC3: + filter =3D AD7124_FILTER_FILTER_SINC3; + break; + case AD7124_FILTER_TYPE_SINC3_PF1: + filter =3D AD7124_FILTER_FILTER_SINC3_PF; + post =3D AD7124_FILTER_POST_FILTER_47dB; + break; + case AD7124_FILTER_TYPE_SINC3_PF2: + filter =3D AD7124_FILTER_FILTER_SINC3_PF; + post =3D AD7124_FILTER_POST_FILTER_62dB; + break; + case AD7124_FILTER_TYPE_SINC3_PF3: + filter =3D AD7124_FILTER_FILTER_SINC3_PF; + post =3D AD7124_FILTER_POST_FILTER_86dB; + break; + case AD7124_FILTER_TYPE_SINC3_PF4: + filter =3D AD7124_FILTER_FILTER_SINC3_PF; + post =3D AD7124_FILTER_POST_FILTER_92dB; + break; + case AD7124_FILTER_TYPE_SINC3_REJ60: + filter =3D AD7124_FILTER_FILTER_SINC3; + rej60 =3D 1; + break; + case AD7124_FILTER_TYPE_SINC3_SINC1: + filter =3D AD7124_FILTER_FILTER_SINC3_SINC1; + break; + case AD7124_FILTER_TYPE_SINC4: + filter =3D AD7124_FILTER_FILTER_SINC4; + break; + case AD7124_FILTER_TYPE_SINC4_REJ60: + filter =3D AD7124_FILTER_FILTER_SINC4; + rej60 =3D 1; + break; + case AD7124_FILTER_TYPE_SINC4_SINC1: + filter =3D AD7124_FILTER_FILTER_SINC4_SINC1; + break; + default: + return -EINVAL; + } + /* * NB: AD7124_FILTER_SINGLE_CYCLE is always set so that we get the same * sampling frequency even when only one channel is enabled in a @@ -455,14 +563,12 @@ static int ad7124_write_config(struct ad7124_state *s= t, struct ad7124_channel_co * would be 1 and we would get a faster sampling frequency than what * was requested. */ - tmp =3D FIELD_PREP(AD7124_FILTER_FILTER, cfg->filter_type) | - AD7124_FILTER_SINGLE_CYCLE | - FIELD_PREP(AD7124_FILTER_FS, cfg->odr_sel_bits); - return ad7124_spi_write_mask(st, AD7124_FILTER(cfg->cfg_slot), - AD7124_FILTER_FILTER | - AD7124_FILTER_SINGLE_CYCLE | - AD7124_FILTER_FS, - tmp, 3); + return ad_sd_write_reg(&st->sd, AD7124_FILTER(cfg->cfg_slot), 3, + FIELD_PREP(AD7124_FILTER_FILTER, filter) | + FIELD_PREP(AD7124_FILTER_REJ60, rej60) | + FIELD_PREP(AD7124_FILTER_POST_FILTER, post) | + AD7124_FILTER_SINGLE_CYCLE | + FIELD_PREP(AD7124_FILTER_FS, cfg->odr_sel_bits)); } =20 static struct ad7124_channel_config *ad7124_pop_config(struct ad7124_state= *st) @@ -724,13 +830,47 @@ static int ad7124_read_raw(struct iio_dev *indio_dev, return -EINVAL; } =20 - case IIO_CHAN_INFO_SAMP_FREQ: - mutex_lock(&st->cfgs_lock); - *val =3D ad7124_get_fclk_hz(st); - *val2 =3D ad7124_get_fadc_divisor(st, chan->address); - mutex_unlock(&st->cfgs_lock); + case IIO_CHAN_INFO_SAMP_FREQ: { + struct ad7124_channel_config *cfg =3D &st->channels[chan->address].cfg; =20 - return IIO_VAL_FRACTIONAL; + guard(mutex)(&st->cfgs_lock); + + switch (cfg->filter_type) { + case AD7124_FILTER_TYPE_SINC3: + case AD7124_FILTER_TYPE_SINC3_REJ60: + case AD7124_FILTER_TYPE_SINC3_SINC1: + case AD7124_FILTER_TYPE_SINC4: + case AD7124_FILTER_TYPE_SINC4_REJ60: + case AD7124_FILTER_TYPE_SINC4_SINC1: + *val =3D ad7124_get_fclk_hz(st); + *val2 =3D ad7124_get_fadc_divisor(st, chan->address); + return IIO_VAL_FRACTIONAL; + /* + * Post filters force the chip to a fixed rate. These are the + * single-channel rates from the data sheet divided by 3 for + * the multi-channel case (data sheet doesn't explicitly state + * this but confirmed through testing). + */ + case AD7124_FILTER_TYPE_SINC3_PF1: + *val =3D 300; + *val2 =3D 33; + return IIO_VAL_FRACTIONAL; + case AD7124_FILTER_TYPE_SINC3_PF2: + *val =3D 25; + *val2 =3D 3; + return IIO_VAL_FRACTIONAL; + case AD7124_FILTER_TYPE_SINC3_PF3: + *val =3D 20; + *val2 =3D 3; + return IIO_VAL_FRACTIONAL; + case AD7124_FILTER_TYPE_SINC3_PF4: + *val =3D 50; + *val2 =3D 9; + return IIO_VAL_FRACTIONAL; + default: + return -EINVAL; + } + } case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: { guard(mutex)(&st->cfgs_lock); =20 @@ -753,6 +893,7 @@ static int ad7124_write_raw(struct iio_dev *indio_dev, int val, int val2, long info) { struct ad7124_state *st =3D iio_priv(indio_dev); + struct ad7124_channel_config *cfg =3D &st->channels[chan->address].cfg; unsigned int res, gain, full_scale, vref; =20 guard(mutex)(&st->cfgs_lock); @@ -762,7 +903,9 @@ static int ad7124_write_raw(struct iio_dev *indio_dev, if (val2 < 0 || val < 0 || (val2 =3D=3D 0 && val =3D=3D 0)) return -EINVAL; =20 - ad7124_set_channel_odr(st, chan->address, val, val2); + cfg->requested_odr =3D val; + cfg->requested_odr_micro =3D val2; + ad7124_set_channel_odr(st, chan->address); =20 return 0; case IIO_CHAN_INFO_SCALE: @@ -1008,6 +1151,52 @@ static const struct iio_enum ad7124_syscalib_mode_en= um =3D { .get =3D ad7124_get_syscalib_mode }; =20 +static const char * const ad7124_filter_types[] =3D { + [AD7124_FILTER_TYPE_SINC3] =3D "sinc3", + [AD7124_FILTER_TYPE_SINC3_PF1] =3D "sinc3+pf1", + [AD7124_FILTER_TYPE_SINC3_PF2] =3D "sinc3+pf2", + [AD7124_FILTER_TYPE_SINC3_PF3] =3D "sinc3+pf3", + [AD7124_FILTER_TYPE_SINC3_PF4] =3D "sinc3+pf4", + [AD7124_FILTER_TYPE_SINC3_REJ60] =3D "sinc3+rej60", + [AD7124_FILTER_TYPE_SINC3_SINC1] =3D "sinc3+sinc1", + [AD7124_FILTER_TYPE_SINC4] =3D "sinc4", + [AD7124_FILTER_TYPE_SINC4_REJ60] =3D "sinc4+rej60", + [AD7124_FILTER_TYPE_SINC4_SINC1] =3D "sinc4+sinc1", +}; + +static int ad7124_set_filter_type_attr(struct iio_dev *dev, + const struct iio_chan_spec *chan, + unsigned int value) +{ + struct ad7124_state *st =3D iio_priv(dev); + struct ad7124_channel_config *cfg =3D &st->channels[chan->address].cfg; + + guard(mutex)(&st->cfgs_lock); + + cfg->live =3D false; + cfg->filter_type =3D value; + ad7124_set_channel_odr(st, chan->address); + + return 0; +} + +static int ad7124_get_filter_type_attr(struct iio_dev *dev, + const struct iio_chan_spec *chan) +{ + struct ad7124_state *st =3D iio_priv(dev); + + guard(mutex)(&st->cfgs_lock); + + return st->channels[chan->address].cfg.filter_type; +} + +static const struct iio_enum ad7124_filter_type_enum =3D { + .items =3D ad7124_filter_types, + .num_items =3D ARRAY_SIZE(ad7124_filter_types), + .set =3D ad7124_set_filter_type_attr, + .get =3D ad7124_get_filter_type_attr, +}; + static const struct iio_chan_spec_ext_info ad7124_calibsys_ext_info[] =3D { { .name =3D "sys_calibration", @@ -1018,6 +1207,9 @@ static const struct iio_chan_spec_ext_info ad7124_cal= ibsys_ext_info[] =3D { &ad7124_syscalib_mode_enum), IIO_ENUM_AVAILABLE("sys_calibration_mode", IIO_SHARED_BY_TYPE, &ad7124_syscalib_mode_enum), + IIO_ENUM("filter_type", IIO_SEPARATE, &ad7124_filter_type_enum), + IIO_ENUM_AVAILABLE("filter_type", IIO_SHARED_BY_TYPE, + &ad7124_filter_type_enum), { } }; =20 @@ -1301,17 +1493,22 @@ static int ad7124_setup(struct ad7124_state *st) mutex_init(&st->cfgs_lock); INIT_KFIFO(st->live_cfgs_fifo); for (i =3D 0; i < st->num_channels; i++) { + struct ad7124_channel_config *cfg =3D &st->channels[i].cfg; =20 - ret =3D ad7124_init_config_vref(st, &st->channels[i].cfg); + ret =3D ad7124_init_config_vref(st, cfg); if (ret < 0) return ret; =20 + /* Default filter type on the ADC after reset. */ + cfg->filter_type =3D AD7124_FILTER_TYPE_SINC4; + /* * 9.38 SPS is the minimum output data rate supported * regardless of the selected power mode. Round it up to 10 and * set all channels to this default value. */ - ad7124_set_channel_odr(st, i, 10, 0); + cfg->requested_odr =3D 10; + ad7124_set_channel_odr(st, i); } =20 ad7124_disable_all(&st->sd); --=20 2.43.0 From nobody Mon Feb 9 10:44:44 2026 Received: from mail-oa1-f47.google.com (mail-oa1-f47.google.com [209.85.160.47]) (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 E0823302163 for ; Fri, 5 Sep 2025 18:12:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757095972; cv=none; b=SsdHG5HPTDrrriNQOkt6bE3oc95AKCAFkdyE3CsBoHt1mPV3VkiTHS/NgEdFhmSOot+dC8fy4UYg5OwRsU7MdPMmrrKW8pc51fgxXxlco64jFjZJXP07M92e443fRem41Y7mFhNnQJmHpVhrkBRhejiFLI1c2DlNJnQLFB+cdvI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757095972; c=relaxed/simple; bh=BMUZul4w2Wdqu3+6ZxGgii/wI/FeYD/KgRdlY83CvQU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nu4pMXR27fiNcH/wNRxfFfAmyUwfk8pxl0FsHyhp6VTVnzYbXUdxBvr7QYusOnxGyV7ETYbWTAGYybgMI0Z0bNdDCdW8gRcM9uINHdo5AS1i9s62jzQMPM7UJcCmA9cKnBrYROxbP72pe9UA+eVo94nr6cIBC6L2yDsiebzb94g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=EjGAfyVm; arc=none smtp.client-ip=209.85.160.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="EjGAfyVm" Received: by mail-oa1-f47.google.com with SMTP id 586e51a60fabf-315bb486e6dso2007077fac.2 for ; Fri, 05 Sep 2025 11:12:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1757095970; x=1757700770; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=IcSrjebCEmD8D7u4qyd0fiTNVHOhu3JhXWISUNqvRUw=; b=EjGAfyVmOMKjrq2wnLZOyojnpGN21OEfkG93lBlpyrCIAFmtNRAXBoAApgsPnNadw+ i4XuIN6tR35S8djBK3KB9pVUNdX+Vk+a7tZ3DDMtXYR6X8M+IgxRXT8DUxsJinPwuqP4 Bh0ZEOOT9zTsM+LndMFSJLVi8Hl7PkHvXEX5GZ05S2TbC9K4wDkpMuiae7QKeNaRcTyC EzfT7beGbq0nJwV0A9VK6v9OPJncIaFGbcUrTRNUFdmimmY8GphMpnQ1qYjiOLEGiMsj JuAl+ZI8S8nV5QuH1fAb694OFiVvtRVLRx7DgJqdb9yLhFJUWjQEUL7EV2ZdxLHBKrNa qY0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757095970; x=1757700770; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IcSrjebCEmD8D7u4qyd0fiTNVHOhu3JhXWISUNqvRUw=; b=F6xoTwrIgHv2gCXMmwR1o1hGmfbT8XIElbPI47Pb1qCwglUFpgM/R+OILjMdtnKzk2 vc6zlxTYnZjQWhfFC0Jt2hLSxXrwPfG5g8QV29FpJ+oB18UHjhktn9Vmkqz/8oVZvhIE TU9fe++u0e6h3Rg7GfjWA9eV7PUBhBqMQki4TbhIu4cyBWLpUs9oIONdxVStI3r4LV7y +lm1A38zSm7Pvm8aE1W6ixf+wLUZlDn8NzXXeh2AmWlwkJ2XmJ4JXtgpX5ZJBZ689QTy eQjrn7AodhNRrRtVWwwHoELJi5HejjpDWCqLbcBDnfvaPxTfR99Y8h6DVaTJGChSvB82 aVRg== X-Forwarded-Encrypted: i=1; AJvYcCUYKqqNL2xG9vnf0vadJV3mrdD0iZOK47aqtlyh47KcktjYHjl96+omCSmkDJsButU0unhOO8XmB2PKAuE=@vger.kernel.org X-Gm-Message-State: AOJu0YyGdZglyswhWOd1p8WHeOMOlh8BYtJ9retq27lDeWeQz+Afk8fD nP+FnsA2TcS4e+BPFlLPCj0UpWC5VnQR6esWEh0P1r30vdsa00pMmwnUY+Xg2ZFGPVQ= X-Gm-Gg: ASbGncsziWMLXcsE4cjgYWlNnUA/SL+wE//EPX/aUqEXe+xZ4xAFyr0NNSMqJg0HtgQ O12pAXfyMMzrY9zTAt4eiKraGXqIKCVHW2LRfPvxaO+jnaFukDPzLJEnkKswnCH031cv3cHWBl+ fnOqymdcfSUH/JxhE5/RWEa21KCUvnlj2zGFMUldxn14U2rqeEaCGUYangVAfsRAZws+Ndm3VVc Z6yzxg0a8JBpN4LaqWI1QsvwNqFAxdQKHTuOdRMADc2EH8qR2/Am0p8TeY/7rcx+4PVUbd2Mp5P s3tGoSTSQWOhIdLDR/NMSwdY6VwOTaAdd+Sq0REYbGvRW6qFdhhGDhuFmvQlUdOvPobKBd5plSq sLbSQmCnh9Ibe8zfopsMxI51nUYOPunmdX36sQg== X-Google-Smtp-Source: AGHT+IHjqh2TAkyXxBVFC12hRuJSEXtSHxoq52W9gS8+bIr5XA7E5vsCCX93r7ssCowzDZ/WUbTcig== X-Received: by 2002:a05:6870:a68a:b0:2e4:68ee:4f21 with SMTP id 586e51a60fabf-31963113151mr11465607fac.20.1757095969965; Fri, 05 Sep 2025 11:12:49 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:1d00:52e:cda3:16cc:72bb]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-31d686398e1sm3052292fac.13.2025.09.05.11.12.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Sep 2025 11:12:49 -0700 (PDT) From: David Lechner Date: Fri, 05 Sep 2025 13:12:01 -0500 Subject: [PATCH 6/6] iio: ABI: document "sinc4+rej60" filter_type Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250905-iio-adc-ad7124-add-filter-support-v1-6-aee3834be6a9@baylibre.com> References: <20250905-iio-adc-ad7124-add-filter-support-v1-0-aee3834be6a9@baylibre.com> In-Reply-To: <20250905-iio-adc-ad7124-add-filter-support-v1-0-aee3834be6a9@baylibre.com> To: Michael Hennerich , Jonathan Cameron , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, David Lechner X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=838; i=dlechner@baylibre.com; h=from:subject:message-id; bh=BMUZul4w2Wdqu3+6ZxGgii/wI/FeYD/KgRdlY83CvQU=; b=owGbwMvMwMV46IwC43/G/gOMp9WSGDJ2a4jWuwq1lifObHk4J6ar777kyzLVPSfWlpjWitRli 5q9F1bsZDRmYWDkYpAVU2R5I3FzXhJf87U5NzJmwAxiZQKZwsDFKQATqZ/G/j+xhtfc5YEFZ1dd 3dfrEnp3v7FeXKZ15SdjVVw856reFoXa9tip2tYx2T9DXt5QXxnvlSkpYpU6ty5kqm2Y+OVPx9k Evn/tjrqZwfJpjzbndutVHO+3ainEssmteHi58oTB6/aituXqazm3nzl58Hg5g3B64v89iqf8LM pPv9KV/rIymsPQ6xyD1wuW735HJcxT2qY8XF6dnp90y+rsLif7ow/Pnuzw/iCQph19xn66S/20h Z5Lm4Ju6jve27J59wfRmidBh1OcZvWu61XIqj612li7PE6wS24H17I6PlXH1ivaCgctVCXVWC6u WDxha2PIuZq7cRJcGzbbzlEwDODwkP/1pXNaNpdD3do0AA== X-Developer-Key: i=dlechner@baylibre.com; a=openpgp; fpr=8A73D82A6A1F509907F373881F8AF88C82F77C03 Add a bullet point for "sinc4+rej60" filter_type that is used in the ad7124 driver. Signed-off-by: David Lechner --- Documentation/ABI/testing/sysfs-bus-iio | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/te= sting/sysfs-bus-iio index 2fb2cea4b19249743398b1ff0b538b03ced0340b..829ccfd902f2ca4e5ae38ca025e= b3c4a9fe1389d 100644 --- a/Documentation/ABI/testing/sysfs-bus-iio +++ b/Documentation/ABI/testing/sysfs-bus-iio @@ -2292,6 +2292,7 @@ Description: 1st conversion time. * "sinc4+sinc1" - Sinc4 + averaging by 8. Low 1st conversion time. + * "sinc4+rej60" - Sinc4 + 60Hz rejection. * "sinc5" - The digital sinc5 filter. Excellent noise performance * "sinc5+avg" - Sinc5 + averaging by 4. --=20 2.43.0