From nobody Thu Oct 2 20:46:41 2025 Received: from mail-ot1-f50.google.com (mail-ot1-f50.google.com [209.85.210.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 806852DF70F for ; Thu, 11 Sep 2025 21:42:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757626975; cv=none; b=u5TbWcHpxzUSFD3f4hmbYPyCNSaylaq6R6gc2Lp1UEXrA3ZeDJ2dSzdkLymaOYH2NHgT2SgtDoUbdmCaqBWp7MC0mpWP918Q1Us/CAFLixwIBcKpB/GV/lJf4Dm2v3j7AEjOpNRFD06HCO3HZMP5gK/noKCwQZs7SA317/5qpr4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757626975; c=relaxed/simple; bh=gDn9YPJHyqGcki3xUliu4EoJ+ebT/H69rs47+Giddfw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Yn/xQEGvtaOcFxqE7ezSj1Y9c6RTemHhrCxPFDrcVsYvBfCXXFmSd3KW7EmjLROmT2tlOfEVMY6L9h2n/H0MZMEs8sZAtxJWUoUd9MwwrL8GkZFWLnP7Qv69OY9knea7SLM21zh6+DLtJvZKLhM+d4ayVgXSCnYB7AGyGUHzZOQ= 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=VWcaKkOb; arc=none smtp.client-ip=209.85.210.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="VWcaKkOb" Received: by mail-ot1-f50.google.com with SMTP id 46e09a7af769-746d754f656so983515a34.0 for ; Thu, 11 Sep 2025 14:42:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1757626972; x=1758231772; 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=HhUpT+YwVFW5P8lRHWLBHFBotGvvsI+OkEJy2qzTADE=; b=VWcaKkObqZVdma6bZAUFRdzI0B8L0OoxA9W08cYwFkq0St26NcOH5fb6nmt5k+4mMi HPxUJ0JEl18uDUJzi0XR31U0bq/2yjcUi2PYGcLrypeS9CIuYDxdpBobESiDgwo9tNOI PkgZ6So+ef4Qm5nZmYehuDVcNk8j6WXoHl3IA7x+Il6V72t18RrmsfGgrF5/XHA4WYDY 9X1/e0+vHjvGkVtkRc1ATziHO/YaxibMs5Dm18/p43Zz86j/uE6JT5x9rTSTGK/bRF+2 HZ5Kth/7ViS27prDXb/20ISVdcKNayE7qAVweCXrV9ChiyBk8zU/rsF6e3R6vIciGL7O l7IA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757626972; x=1758231772; 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=HhUpT+YwVFW5P8lRHWLBHFBotGvvsI+OkEJy2qzTADE=; b=M3a21/6IqThQsjgFLs1w55TYe5aNpoOSNFIRUPn6pxdac3VZgKQ2unHJiaUstSNPPo yZukk09TMKgm3bEEjuQ2bz3OBnGDOtT8qR5TpBKV72j29u2Y2uPwB1KwaLlwS/TdXlfm pwCHM3GULW76KfnR/GqgY3NIQhLHeniKM8dBJi1zpeqfYut471uN6VVa1BioqGVNpsMY +Ek0e6EnEfEe/XFbXVSJUSdYLOFVTRC7AQlmT7a9r/C2RJAEbDGqT95SW98ZFYXpLH0t ewSEm3hMfRXezqu48bcBS/Ayya4r5/r81GSmsl9lc1EkP1cnjj4MqIr22Vpoc9f0Klb1 f6Bg== X-Forwarded-Encrypted: i=1; AJvYcCUacbzlSbyiBC51CDHACLaqQrZj7M/zEydFOeNSWjPx6DvOP+kLylkgn0QcixDdowp/2bWLLlUokIPaJSU=@vger.kernel.org X-Gm-Message-State: AOJu0YzPFA1vqACh9vKZR832vZgUVXyN3drAo/t/3j3vV2brJa/GQHmg WauLMpbkt/Tb724YXl+bcl8ETSNB6mJ7ULQQU8KRBYHfbRsir7cmdUhEqiDJm3Blpwc= X-Gm-Gg: ASbGnctfKPTM48ZLVeIwJ5eQvxReQmmtpp9rb8zLQynnGxf03HTt4HWCH8MhvRP8guh xqcR9+J28pqbdiE5kRdxxQXFjCM4AjlMOLnopxAZV1OqmMFpOlh0owbH/TKjVlcf2Ai1whSlwNS 85nH41b2KTumVQ6GPdG0voEzoBCkOqrs/uZtTH3YKGi3wK0b6y1vkBbMORPOEcl5xSfsDIet+Fp 8B5MSecjM3iNw0tFKWRpE8cQbAIfx06Lv+wBywP2rxKn7/SdmYv6AaHisFlaweli5EcSoUWLJ3j NcBJoJ6XLdsD3mXEWheqevkmnPpfue5tIZ8/qzhAWrJRf8ST7wlBYXYDi1CQBihnguU8DQv73vv 0LfZpNVpWRRGYVZfE/QzjDof+YzII6K/n6ca1lF7tO71LXnj1Mw== X-Google-Smtp-Source: AGHT+IE5Y8tGyYb81WyBJWOVCKQNxEz6s6NWWbKX1L8PE0XbC812+1aNvMndegimJX7QCIUF1eaqFw== X-Received: by 2002:a05:6830:498e:b0:745:6166:bb5b with SMTP id 46e09a7af769-753551dbd6bmr521082a34.29.1757626972648; Thu, 11 Sep 2025 14:42:52 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:1d00:d684:59db:8b2a:5451]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7524986a7c3sm604188a34.10.2025.09.11.14.42.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 14:42:52 -0700 (PDT) From: David Lechner Date: Thu, 11 Sep 2025 16:42:00 -0500 Subject: [PATCH v2 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: <20250911-iio-adc-ad7124-add-filter-support-v2-1-b09f492416c7@baylibre.com> References: <20250911-iio-adc-ad7124-add-filter-support-v2-0-b09f492416c7@baylibre.com> In-Reply-To: <20250911-iio-adc-ad7124-add-filter-support-v2-0-b09f492416c7@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=gDn9YPJHyqGcki3xUliu4EoJ+ebT/H69rs47+Giddfw=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBow0IxdY7aUq+FuVQrVan1CCmcsp5qV1yThM2YA UaQyXpVw4KJATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCaMNCMQAKCRDCzCAB/wGP wEz2CACBl7sATJvtRYDPwiq53Mo2XdgBAw1/FzB3uQ9IL343V7EiRygrXtB1YnDkAdKdHx0zf9x jDA3qsfODH7HOJFB/M5G8UhY3gG5XSVh+ERUShWTQ/BAoPrMP7fU2MG3gjCIX32HBuvZ/6PV9G/ vcg3wlwCv584EZ924HhqhC3Y/4xn3coN9uQFJpxJHRlHQak8czI0+qbpHeUWsCZxRxkxJ4Gx+Bd B8A5SKVRMYiC5HoD+G96Of0ZaOu7u9v68w4bSTMgaIJYDcbZqFoDecUrrBwOblkoFMYUqXafEKy F27jgAt8dG0cICoL9Aef4uH5++N+jOUuVYmyMBoIL5tTV9AR X-Developer-Key: i=dlechner@baylibre.com; a=openpgp; fpr=8A73D82A6A1F509907F373881F8AF88C82F77C03 Use clamp() instead of open-coding clamping. Signed-off-by: David Lechner Reviewed-by: Andy Shevchenko --- 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 15d98b78ec2709e14c354a64f14e7deefc3bcb56..8f6ca33d0c902be4ada103a32f3= 7855c82a5f2fc 100644 --- a/drivers/iio/adc/ad7124.c +++ b/drivers/iio/adc/ad7124.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -299,11 +300,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 Thu Oct 2 20:46:41 2025 Received: from mail-ot1-f50.google.com (mail-ot1-f50.google.com [209.85.210.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 501AF2DF705 for ; Thu, 11 Sep 2025 21:42:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757626978; cv=none; b=AEc6x9uuoVpHxKwD1iCPADAbm3R+SMtpraqRoi6J3J3h7xdIJCFNp0soPI0AUmsWUlf2XjWHN4zXuow0TrCInhxtzoQ8V6zg4L5AGrx9OP9sy51xtdNA5Z2Jo/RO0M3loTwEc8BU6zqqZk/59te06Z1eyiqAiUJCJ+L7vZ7i9ds= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757626978; c=relaxed/simple; bh=Mv7NRoKazrA+jxppM7YWklFA4jjQpodozntDXuzzUWQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s7Pq+9f/bVfpk//19QHtTGr8CmLx8iV+VrDvSKUsyePTMu10vcdgrYPum8lUgb6X9HehgHJZuud+dsrVA2TM5WHZIUS9qPAgu/7mgoP/6C+b4oVz4MUq04ND4+89tIVptSwKwWHxOdWRKRnwZiWiWqbsuG5dcluqXmSUI9W++rU= 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=rcowWmnK; arc=none smtp.client-ip=209.85.210.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="rcowWmnK" Received: by mail-ot1-f50.google.com with SMTP id 46e09a7af769-753103d3dafso626112a34.3 for ; Thu, 11 Sep 2025 14:42:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1757626974; x=1758231774; 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=RlaCxILklmP/mn2TGXOLlTmpiGYpiaIzM7ZwwksGtoQ=; b=rcowWmnK25hx5GNrWW5tdEPRvQ8Xsfl6z+Q/VbUw0We3y0xmwL1GWua1pdXvr+DG0+ PV/2/UdAVIYAFXtLmwfym7IKiDxrWZ0jwsgPeZskmwJ1vBg+L06xpt+3MyzNhc+IO6Bm Cwbp4Rb3pZWpooq1vkrHEMCt6tQrd9Co63VDT6mbApc67nTYz/QA4G5yDVnJgJzCSyYi T6H86m1pGXQmJR23x9Dc2DAskmAacFSkmqwKmqny2Z6xTXrddj0UY0Q0ghhwJD6rQ1c8 cqEh1xTo7ON/e8SNz4hR07OwvJj1Frb+fG6rvGe29cg3PotHtW+Kx1yMrP3+F7/i2+uY 0Jpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757626974; x=1758231774; 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=RlaCxILklmP/mn2TGXOLlTmpiGYpiaIzM7ZwwksGtoQ=; b=wHirQtQlMC3gzS/P/zGg+8HzWolmSRPdNQAuLouEdbkYdfmcbedXWQz/7u/tfZ1Ln8 spggbBa59aEPqfTynmPlQj2LgKBe/431CV/6CA70MPdO1s1eWtOy8Cjfq1+eLTZmbJNG 0n3fAF7FCl+cF/1VXfndu0v4qFXA2+Qj/o7vmWBR+K9ppPO7p1XmBmzF2iWzWTjxw0RK EnzKgF4i89pvJYAAeIMdFeMQksuOLophX7qEMBb26d/9QrEkybkM1/NuRkVEdzQ4wl8u Jwkjjn5SQ7986+giWZcgZqOlbMw5Y5i91G6GVjuglghZQGVOCG6Ns6Fp/j1NRH1r0qT7 ehGw== X-Forwarded-Encrypted: i=1; AJvYcCWiRmyVYyqWwtE4UXND4iuwerr0LrSY+aGFtLF4CQM1Y3asBowgxdv5UxOKdJPr+e/bRq51XpfWXtykxeY=@vger.kernel.org X-Gm-Message-State: AOJu0YxZVqIHdf0bMGn3Me56b90wmNlMsglMMpHcKgN0pLqwvAwt9W1k SIsezZb1K8rCBHw6wmIaESwt//tqaMLBfK7KDjAzv1TWYiR+MjBWnQaRC9jHbPiQXWo= X-Gm-Gg: ASbGncvPWcC2FVly5DdpQLSW5xajCNJWi+4twy89QbPuX1wUU+8PcEPnsOA4zQin/E3 lQ8lXqKi2O7m6mpkgqKtEvtKGD8AhmMCd5S1NA5087IonXB/xHdFRCuPl9Q7JPldsKObi0z+4pJ ndSJrBaDE/xA8/pGhfH5QPPwpE4by9SjFmIaJNBmhTq+ixdndWL7HY1M4V4IsNP2m+UcTxG+/5m AblDOLQOeYphyerZl8QZBY5aKh4nZLr4dal9D2EXnO4of5yHD9CACwPoi/h3ZlelA8MFMu126ab e6vHbgGvrjAFyuRgY87RWhPOJAkaoiobcu2e3voZ/+AqfG4OGDPu96pG3VUjBZvzGtV/1wmFkGB fMEk8mow78dG2zh48xGy3fs5ZbK3DR8cQKQsFXBU= X-Google-Smtp-Source: AGHT+IEQdZRxetaxarIpdJQRQAL4Jy1BPvFg6uhxGgeo323h8KWN3bLShNlheY91A2GrPIr25YAfOQ== X-Received: by 2002:a05:6830:920:b0:745:a220:155c with SMTP id 46e09a7af769-75353e5eaaamr590342a34.16.1757626974337; Thu, 11 Sep 2025 14:42:54 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:1d00:d684:59db:8b2a:5451]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7524986a7c3sm604188a34.10.2025.09.11.14.42.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 14:42:53 -0700 (PDT) From: David Lechner Date: Thu, 11 Sep 2025 16:42:01 -0500 Subject: [PATCH v2 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: <20250911-iio-adc-ad7124-add-filter-support-v2-2-b09f492416c7@baylibre.com> References: <20250911-iio-adc-ad7124-add-filter-support-v2-0-b09f492416c7@baylibre.com> In-Reply-To: <20250911-iio-adc-ad7124-add-filter-support-v2-0-b09f492416c7@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=Mv7NRoKazrA+jxppM7YWklFA4jjQpodozntDXuzzUWQ=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBow0I548qg/Y0Q+grQU4jHpD889qfkAbWg+zU5F lBmVRdaAIeJATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCaMNCOQAKCRDCzCAB/wGP wC/EB/4yLP8om2BoNqj+q226cUR2Eprk2uT61JPkmYat+prl7guoeU+zdRvlMrvLbnZdgIvnJR/ 4HMbbQqXhAxQXGy6/g6jHT6jyLNSWzBJXeoKiB+3owEkMVPU+joun/y7adqD3dwLU/ilPSlBwRu Zt8/3O+PLH41rR2XgMCnD1N/oSZS1wWheBJphC9iZnWBcAtsm8BtZdOm7cye2w1gmoQDmOCtBfh Xn2M/3wxrbSCpLUEX2WjA++NRMu6+qqrw95EWTa5lj5YdeCj8tJ1PLL69AAo/LipOUY2mXZgJ+q noeOlyWDfiWiE7px71Hryq8uhaAIJFGAbhg0fao65G+4N37G 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 Reviewed-by: Andy Shevchenko --- 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 8f6ca33d0c902be4ada103a32f37855c82a5f2fc..97d601b3387524fe411cc0afc73= 6618e32759880 100644 --- a/drivers/iio/adc/ad7124.c +++ b/drivers/iio/adc/ad7124.c @@ -621,6 +621,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) @@ -775,18 +802,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) { @@ -816,12 +831,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 */ @@ -1011,6 +1026,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 Thu Oct 2 20:46:41 2025 Received: from mail-ot1-f47.google.com (mail-ot1-f47.google.com [209.85.210.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 1DA142DF3CC for ; Thu, 11 Sep 2025 21:42:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757626979; cv=none; b=qgOl1OuCGJviHIv3KxPV/LLkbZoR2RlDcjT4aR0fP41rSQIn1C075mA7EbHx/ri1YdPK1vdKjFP4/Q5dvC48TCb5XXfnYZpuxc9beJosObh5eO1o09IncgPKewz8SySWrSIoFi2UELkEVLckq4Y14QRmLaggdQ7hTFIdPiUeauQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757626979; c=relaxed/simple; bh=vky8ZBYH6Ai0NSmG5ho3XsINbssqMEB6+aMv2/QM2u8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NUPUZh9jUUh/hu/hyx0zYVJu+EpjVLOSRhTRaTxOO/NJ74OGogAM+hjpf4IOsmg7P97v6qrQkwfJaPpv07ebgMBFsHzdzJhUxqJMATs1HOgRyGHzsE07B2QLB+rHM9WftkqnjCK8PkcnaORvMPxGPj7QpY61k5El7w6v8m/oMqU= 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=PqAxMzHT; arc=none smtp.client-ip=209.85.210.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="PqAxMzHT" Received: by mail-ot1-f47.google.com with SMTP id 46e09a7af769-750b77699b4so1068947a34.2 for ; Thu, 11 Sep 2025 14:42:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1757626975; x=1758231775; 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=GRGV/5JAWSAB321ugkVWopex4kAcYr4Tkq9Fy877fY0=; b=PqAxMzHTks6VHCV140r+T4WSEkfZYjJAq3ZGT/Ugi08MB5SnNkFUxqMu0JLKLt+lL9 xWdWu3FAHDdJN6eWutHbraZuEBypeIM1F5nSPSsjdHTRJIDfYFv8YpcC8b6+4NSdIIkA GikIz/pG347GgGDcyD3ae1GK/z004YMwRKhUU/HtSD7/SiiNLXrOiQ0YxENkIftdAX5t cLTEGTGxBSXzIUwvy2Ass3gluwKNl5Zs9p8iMx1NZ5l42NYjWp8v7p8Ocg7LmUxcjmuk JUcF8I8hpS9ERmuybpGANqjgpY1n0hOfs0dDL4iYp6cAuaEGfja2eRgjdcBrYPJBX590 Nx4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757626975; x=1758231775; 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=GRGV/5JAWSAB321ugkVWopex4kAcYr4Tkq9Fy877fY0=; b=FlOWzuc6JhYTxAJZYbELXwMyreM5jpSrQ8RE5mS+bYrvYTknVYudx2jJxkyCCW8Zmf alc2Abthvt+ar2yfJlrfnR68mYXkQ0ABNX6trRiogmVC70E6np1pHKgWhrvSd3vIkwXk fHrOjfNwJExtB2h21PNH8JNEXmjPYB48FIauSWLsFt90J+pg01KrT4J6UD4N7+YWDbkH 9gjBWeme0+1s4Tl8amTTu+AAeRTI0FfRCSLLRjQZv0BvGUELCg04v65BW08HfGMiW8CK hZYDy3O4UrjJKAqSlOaDKnlItjdsghDoLa/inac8CX6se8DEtQkgSeDaitRIVCWY2TxF se0g== X-Forwarded-Encrypted: i=1; AJvYcCVCNST612itSPz1pAm80HTIfaup4MUFU95xY+6hb0eE4zSfA8ojMWfbHOIKd2wC2DusNzyExwitXekF/EM=@vger.kernel.org X-Gm-Message-State: AOJu0Yx86Snrkzxan8zAPEfconvfveLQKsg6tl8AdTwF1teojWKn+Wdn +Rd3/RzWuvHM8wLW2yhOHvrULJTu0Ubx5VX7dKxw44VNLcXNPkrssR753FeOZcX0d6c= X-Gm-Gg: ASbGncvR+mxPrqeByhu0juihbe/O8wyPbCyTjnE0bC/MEPmiCOr6jjptcQMTYngiYq6 boTYxWyyANVYBcgTcCaCC6hJHKQCPIhGfiv/iEKMcT1m2FCBT2fLrIvKw/+V8u/QI9qkw3PC2kR fD3Gh6Scy5rbYANIjPJjhyFGHBRJpnRZSSsE0yUcOhYqmdiNgVvfELFpS5s2pQqRVJ+TLY9nXAS vy0nPYRJzyF0woJjE0PO/BDq6M/T7B+EESM+8NO68LznwMD7my7vtWTJCua5iC2Ir8F8wXMvVUr N8jDW11Emh1cUb9WdUkJ/3tNB9uM8ncw8sYEYhAPjfx9mrHCPPOWdUe/7Yu5FtdHiLcjNGpHjii WIxEVvszZF6WrkLbBCno0eZTnNPntr64eGlHIhyE= X-Google-Smtp-Source: AGHT+IGEl01KCALkIGqEs9Pw8gJ4WgOmRrVHa9jFPUfvAVcsjQNtiM2ULB9R/AkuEm+gstOYHQK5ow== X-Received: by 2002:a05:6830:411c:b0:746:d995:4e56 with SMTP id 46e09a7af769-75353379d0fmr544332a34.11.1757626975017; Thu, 11 Sep 2025 14:42:55 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:1d00:d684:59db:8b2a:5451]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7524986a7c3sm604188a34.10.2025.09.11.14.42.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 14:42:54 -0700 (PDT) From: David Lechner Date: Thu, 11 Sep 2025 16:42:02 -0500 Subject: [PATCH v2 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: <20250911-iio-adc-ad7124-add-filter-support-v2-3-b09f492416c7@baylibre.com> References: <20250911-iio-adc-ad7124-add-filter-support-v2-0-b09f492416c7@baylibre.com> In-Reply-To: <20250911-iio-adc-ad7124-add-filter-support-v2-0-b09f492416c7@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=vky8ZBYH6Ai0NSmG5ho3XsINbssqMEB6+aMv2/QM2u8=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBow0JAk8XVD90CUzTjS0oO8Dv7bSp5UaygisRqy jfmR6XWqWOJATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCaMNCQAAKCRDCzCAB/wGP wAmoCACJcpjM4RHlzKsi4lK+w/6FqIKSLXSbFmiPHsuZ8fEVLarec1xnycx84N0zXdTazB6U1GP 2ym0V+/13zQhHFIPl+DzxNQkOQov1/0FpuRK5JQj+VR6R1889PEt7qZ/biMosdMEPa8ZNrLTVxQ q8IFvK9oUMgO53wFdm1poJDFrT5qCYlDfD/jaXSdUyceF3KUKcTiACKi1y56inmBQdecDXGIUwx 6GEfadpUhnDzyTxAoxbsJaLzDGGEtDSJaBbh5j1QHpHUK8hBndw2+vm6pqYKUuNR+YSYd5mcaQP izI755uedgLrLCcCDZiQZd7wQeNmnlRqdLZS4e/X87x3T/7U 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 Reviewed-by: Andy Shevchenko --- 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 97d601b3387524fe411cc0afc736618e32759880..3afc4dcc315e82ab822370ff8d2= 1590086e0bc7e 100644 --- a/drivers/iio/adc/ad7124.c +++ b/drivers/iio/adc/ad7124.c @@ -739,24 +739,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); @@ -772,13 +768,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, @@ -810,7 +803,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) @@ -818,15 +812,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 Thu Oct 2 20:46:41 2025 Received: from mail-oa1-f46.google.com (mail-oa1-f46.google.com [209.85.160.46]) (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 BE65B2E1749 for ; Thu, 11 Sep 2025 21:42:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757626980; cv=none; b=YyXWTVNnOHBPThT6f6ammjHkxxr9yrk31U6xo9P4GDpyHQZGRnqujdKIEd0z8ZDhxcEQ1jT3aEx3z0Ohy0NVdB3bx5FS8hPRTCIcmlzMiWWtHa6G8YrGgW1hZNdZ8BbcgP4/Im/wP4smpmWYCUv71TOpHSuhbcsaPf9UXDxcoXI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757626980; c=relaxed/simple; bh=2emXA2SStyc0MKsp4DgIlttQ3aARs3+icwXTl4wIg9k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=C2iN6oAIgTBl3RsYK82pe8+ldIEIIz76PxLv+EFOO8wm3EatVInVWZ36og0hYY0rOVsah11dv/MSEyWEqJc7i+gO/60mf2dYK1+lQYvISMi6MPs2r3WZT8BSXAKULs/TA9Ll8hGjN9+o8ny3oLbhJCk9Z1N/kRHrvE8PwA0Bvio= 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=KbgD9vUd; arc=none smtp.client-ip=209.85.160.46 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="KbgD9vUd" Received: by mail-oa1-f46.google.com with SMTP id 586e51a60fabf-30cce8c3afaso771268fac.1 for ; Thu, 11 Sep 2025 14:42:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1757626977; x=1758231777; 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=y+vlqNotxyngfaMtY7z4y6Czl360IhxSvv2niU7RyLk=; b=KbgD9vUdSiotqKh3USB0IPnPa/QIZ5qTfLs7wPTtIldvIpYSL/zMQYkJp7jsxK7zt+ giKfOuE4PdxpW+lK8NQAc9J8Id/FBFBmRVUTnw/2Ctfvb3R1EcCNyDBRB9PQGTnOzBDe 080Syl5nz2jKvRHZrIkteIAIHYEA/KTyu5bOahOga23chPq6gWVor48wgj8BEdAKQGd3 1TRZP1UdDPiYedtp9HvQ9RReOnfxWkNUBiWrNSBqNvsaGnk7I6Zgz58BLwwBWXLJ+0RP JnRhk4JQACLz5c+ddvYEfOv0Y3yOLvoK/T4+OXzZD7+eG0+XL+P9op6E/zVtxpjjK9Li k1ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757626977; x=1758231777; 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=y+vlqNotxyngfaMtY7z4y6Czl360IhxSvv2niU7RyLk=; b=E529NHcaGtZ53FeWUpqT8+IdDXMl4AW9oOOcvJgCmgqOaK9VL/PPKJL0TBRj/uTsYB ZLnfyAbkGKHy+x1sL6/Kg7VG/CxxgqloSPOxitZ8wrr3FTELpIeqNAAdB/9Nvjsyzmus TK+b16NHOGOkmdt4vegg90ZAAkSAGSMTfTAx9D3Cug+P057jWjKYPZ6saIVNMVytAVID oXoZaOShYkYmxnZopVeUqawWiQFdZVOYM7fEfmHVCqJoMY88UU8nfYZOpCY0E1aqkOKx VHij4JMkNnrycxY2WOxdJtzOjvbOdcdaM3EoJ8CIyDDT4usy+6f6p9QEFK7jWXpG19nm +JDw== X-Forwarded-Encrypted: i=1; AJvYcCXmutlTBmaszklUUx/MRCl5Yk2rD94W7WBBI8DHGx1C+uP+zi56o8SrVS6q259w4geUy3BfUeDUsmyGILY=@vger.kernel.org X-Gm-Message-State: AOJu0YyX9Tu1ZibalPDHuGGm+NnTdP3xOZYhaj/S6mEePLmRWJ8VXPMJ fSjFywcdzRsNhjq1vLSn+zYaHETot/6fJzdf2l0GRQCePkBD5MEeOEXj7iiPFxs9oV8= X-Gm-Gg: ASbGncu16OvqiJeEawBiG0vhAWStQFJOmaJwQ9Ox7zrDB8mDo39ozLk13Zs0QLnMuvE /Bhriu7UQJ0IrSUQWja/BmP/5m3/A8DNHFtrpXyuzKf2nlNHZ5tmETDgaF4A+H3UC6VTBQnviuJ 8MoPCsN0ARn++FSfOSnL/lOCu5BFojEm/uP2XMXx6fdWvxDdtAp3qdQUyK16Y+QjXzSTkrhAl6H DgT26va2Knlw+7eoroO7ss3WWvuVY+ZDPIi0Ea/GgvhfZhxQPTMm7CzfOIV3fxzFhF6WZc7cQNA 9gNMeAcPOU/jvLbl14tm8vu3yNb9UdNoSYUnw8ovgnDa7W7ZspLaw6torIQOKZHb0V1JIbRRN9i CFY8VSXbIsDEceC7z5krfFAi9wnb8ytJYplPaNVeolKX1GM4LIg== X-Google-Smtp-Source: AGHT+IEzMxpM730S0qiQRVgFWlq/Gq/4VeCE9+gTt9KCsUctTsmXYdZt1ce8H/6F0GQvtNOFeDgd/w== X-Received: by 2002:a05:6870:f6a9:b0:30b:a81d:b56 with SMTP id 586e51a60fabf-32e5886fd49mr375385fac.38.1757626976867; Thu, 11 Sep 2025 14:42:56 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:1d00:d684:59db:8b2a:5451]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7524986a7c3sm604188a34.10.2025.09.11.14.42.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 14:42:56 -0700 (PDT) From: David Lechner Date: Thu, 11 Sep 2025 16:42:03 -0500 Subject: [PATCH v2 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: <20250911-iio-adc-ad7124-add-filter-support-v2-4-b09f492416c7@baylibre.com> References: <20250911-iio-adc-ad7124-add-filter-support-v2-0-b09f492416c7@baylibre.com> In-Reply-To: <20250911-iio-adc-ad7124-add-filter-support-v2-0-b09f492416c7@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=2emXA2SStyc0MKsp4DgIlttQ3aARs3+icwXTl4wIg9k=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBow0JHv3ofy6c2tN3Wdc2L59YsDIIQlCxUyGDnH q88IQOzvGWJATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCaMNCRwAKCRDCzCAB/wGP wH80CACAjrwhqsjxfDqXHUxAjij7am/rU+wpww4W8KjDKTb0KlP4enIaX7qmTviUxZCKUfnZnBm qHp3zthg5cqxIOIZ07owQUYDfaNZ+A+vDBEWb97Oum0hgtOos9lVR9w9OkyZIITAQHI+ogl6cNW XKJju5ZVWrfdxNlpobrqBUYd8B06BXgu3FG/6chD9BTigahQrEMwIrFTO5kgCMVCmMVIE01jP7A fIAqLY2w2mnYphKRsWJyeM9ungC1/USwYaLmwfHEJkDXiaxpar16WakHA2Itx9FJ8XLJmx/akCP SOHMHvxhaEMHiq7xi7DrogI4bXIN8FHuXzR4USg0wwvsL4us 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 Reviewed-by: Andy Shevchenko --- 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 3afc4dcc315e82ab822370ff8d21590086e0bc7e..b644191319a5eb6ab1a8ba22df4= 520edbb34ee75 100644 --- a/drivers/iio/adc/ad7124.c +++ b/drivers/iio/adc/ad7124.c @@ -166,7 +166,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; @@ -285,7 +284,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 @@ -300,29 +309,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; } @@ -346,7 +354,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; @@ -363,7 +370,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 && @@ -718,16 +724,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; } @@ -744,10 +757,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: @@ -1296,7 +1309,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 Thu Oct 2 20:46:41 2025 Received: from mail-oo1-f49.google.com (mail-oo1-f49.google.com [209.85.161.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 90FBF2E267E for ; Thu, 11 Sep 2025 21:42:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757626982; cv=none; b=iE7Kn0mibRdSbdfQdcerBmPVH2fHqpi0zq6ZAB8Wq+iuCrgJMtwIQEgCkfdK4oZj5+wMLIDjAx0n6Op+8IfAZ1iCADyxby5G2EFXyzKisvzmQtfsSjma/7rNj/DoDQoCSCKMVqyKmNCE3SxvujZwOqGKwGXFK69Wb5AZcjf1Abw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757626982; c=relaxed/simple; bh=f6rDj9kImdMEFXxuOv+xaT+NTqi9Euf7elFeUT10MR8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=K33hvgeY/GMt7oPHYUW170zX1G89rZl4dHO//RJWhrDjdmvW6/+JoNAipgPyuBSytIOqZ4c5p5MG/wx0fP7suK9lvJhthgleoUuPHMLyeqhyoXpqzbrguGNT8/60ar+9jp/HsYbRzzHJ0AQHDbJDMx/y1cvghoJJgNIUrcEycio= 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=DdOg7vGI; arc=none smtp.client-ip=209.85.161.49 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="DdOg7vGI" Received: by mail-oo1-f49.google.com with SMTP id 006d021491bc7-61da7b78978so716243eaf.1 for ; Thu, 11 Sep 2025 14:42:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1757626979; x=1758231779; 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=dSPiyKNtG04t1z8Ry3jUY2Wm2ThtvP092cmojhqt60Y=; b=DdOg7vGIMhGkC4M1TdggpzImKUbksctzDpraQ5edrIUUqLxmcNB5+eDVyzeHQS9RKJ kXzmyPqjS1eC9RsJUO5id2T0QLvKTlaNjuUQVhdRnFz7VvvsZ76QJmerFzOVINXlThru z4ApixHdJb62j7xQzjdOwogrJl/SR5Zvq8EcwCQ9l494sxDM8OTuqZyp742MMHsV+pgM 7DFyuya6JsFOrmLLbwKr0tkgoVS3R4x9Wx7saAlRD/uCZMeWbAs28BrFq54N3ZFKMlsD sfn34zSl3QHovi4q+AhveM765gV65JHA3PB1bEn9BTVs0N9W4j0Png4dAm2cszwy3qEy 4VOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757626979; x=1758231779; 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=dSPiyKNtG04t1z8Ry3jUY2Wm2ThtvP092cmojhqt60Y=; b=g60LU4fxpIn+5HiPH9CdOTB157M992Ho83SqlJLGerGbwSjiQT9JRYZMQCId3SZfeZ QIukbnHnJLnQo8CKAOPD2eBeTSQB2r/FCi0N+RHtbFLy1/2eld4T5wubW5pkGzV3ai6+ qyMOk/nQA2nt3KSzecptV1EKEXXYJyXelA3cooyI9O1eex/XBYTAPgD9jzPaaUUArp/o pJmySkXe0YF/iKLXNQ9D/Q8YS6cUCU4MWK74lGnwozKLHexO387Q0G6bRdUwq0yPGEqS AIWQ5+aoAcMbbodFqBu0ZcrmtaSNhMKaZ7r09nrosPoBBextUbsqXthdZAwBpQBGPtm0 5/+w== X-Forwarded-Encrypted: i=1; AJvYcCWxn9iWyqJKXu8yw4Wee4GIMXpkCCdqa+MI8HI2ucG+AaQ12pQyFo3a2jm2VnD6wsHIPtwhLrtzkWAaNGU=@vger.kernel.org X-Gm-Message-State: AOJu0YyPmwx703BJjo7UCn3RSGvmw0kIAxUi/JZ3P81HlwGoi2I90aTL XdQ68i+i5kadPRjBYXVKoFpGCkw7DsCP7Kohbv1VI/EAXjnUHTBifaCamuZ155PEJuc= X-Gm-Gg: ASbGncu1lu4pMMgyVSfc2O5AoS9xFOXs2LlEKVIR3o5qyUtf6coaVa3o+zwzoMwGi+k In5Edvmjt5UaabiNW+t5KKEBbYOIgJ6WqxZNVgTBxvnrIwS3YskxCDG1z6J0Eui1gq99NMRoy+K vU90/vErTaHmePAZLbrmzX9oukI2iVWljdWCYAuFnxoPPmkN0P954SZFLDvMFQci9mPXTyqK+vK wyVFDrG4s36WbJPxl/LgOibGC9h67TTAjTpC08Rp3ZgzoS36PjWgC6IIN8+/kzWQle/+T0cfkB0 J9ScJj4H9OulP1bjaK90C3wnhLAebxGpvMtKstNraVXhZu6X8Z5EpWuCeeoaOxRuQrk2LuLKP5E n1JoLJRVeZzddcoGARjrC+qycNM7YUXlJ77MGod7z5il13wLGdA== X-Google-Smtp-Source: AGHT+IGp09+4DRj7X196GZuisCs0gzUQ/ApAg5YTD2fTzPWBJDWPZA5Fv/D8IxCKo6Lgk9KD2xIe+Q== X-Received: by 2002:a05:6808:1513:b0:438:4312:ab98 with SMTP id 5614622812f47-43b8d87ac90mr370401b6e.12.1757626978565; Thu, 11 Sep 2025 14:42:58 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:1d00:d684:59db:8b2a:5451]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7524986a7c3sm604188a34.10.2025.09.11.14.42.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 14:42:58 -0700 (PDT) From: David Lechner Date: Thu, 11 Sep 2025 16:42:04 -0500 Subject: [PATCH v2 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: <20250911-iio-adc-ad7124-add-filter-support-v2-5-b09f492416c7@baylibre.com> References: <20250911-iio-adc-ad7124-add-filter-support-v2-0-b09f492416c7@baylibre.com> In-Reply-To: <20250911-iio-adc-ad7124-add-filter-support-v2-0-b09f492416c7@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=15722; i=dlechner@baylibre.com; h=from:subject:message-id; bh=f6rDj9kImdMEFXxuOv+xaT+NTqi9Euf7elFeUT10MR8=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBow0JNx3UGfMNH+ZH1l/61EpUdcbUWZDP1NUchE +uPtEeQoZSJATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCaMNCTQAKCRDCzCAB/wGP wGTUB/44VUHl4K7nLoU+S2wzKn+zJp0MsVOfBqABbgSoMqUvlTLCedtJhhvUiuvTmE1dJUW2O9w mBqP+pBPkRtfSd2l/OQBfzG5gLzsnYYbrvBVc5fL612V4wA9eQWinqb/+9/44wsJx73DX0W7wuf 57Hybn/OKrFzj5SCn40piBbHtG6jPgnoZwNgJakVlcT6HqtfqYa3Euw5HbuGtUsGlAVhcXrVEAa StzzQoHgPO9rbH7S9qMw3+C7puApq/Cmm4cFROFGiPAWj1MJy7no0O6M96GjfjpE9mmz6OfJN4K AkW0XvzE4nY2sL6FdqeiC3oHWbxBS9qb6z/M4pwPkqpaKD51 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 Reviewed-by: Andy Shevchenko --- drivers/iio/adc/ad7124.c | 262 +++++++++++++++++++++++++++++++++++++++++--= ---- 1 file changed, 230 insertions(+), 32 deletions(-) diff --git a/drivers/iio/adc/ad7124.c b/drivers/iio/adc/ad7124.c index b644191319a5eb6ab1a8ba22df4520edbb34ee75..910b40393f77de84afc77d406c1= 7c6e5051a02cd 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 @@ -97,6 +98,15 @@ #define AD7124_FILTER_FILTER GENMASK(23, 21) #define AD7124_FILTER_FILTER_SINC4 0 #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 @@ -151,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 @@ -167,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; ); @@ -284,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) { - unsigned int fclk, factor, odr_sel_bits; + struct ad7124_channel_config *cfg =3D &st->channels[channel].cfg; + unsigned int fclk, factor, divisor, 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: @@ -308,10 +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 clamp(odr_sel_bits, 1, 2047); + divisor =3D cfg->requested_odr * factor + + cfg->requested_odr_micro * factor / MICRO; + odr_sel_bits =3D clamp(DIV_ROUND_CLOSEST(fclk, divisor), 1, 2047); =20 if (odr_sel_bits !=3D st->channels[channel].cfg.odr_sel_bits) st->channels[channel].cfg.live =3D false; @@ -322,15 +375,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; } @@ -355,7 +422,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; })); @@ -422,8 +489,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; @@ -446,6 +514,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 @@ -453,14 +562,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) @@ -722,13 +829,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 @@ -751,6 +892,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); @@ -760,7 +902,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: @@ -1006,6 +1150,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", @@ -1016,6 +1206,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 @@ -1299,17 +1492,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 Thu Oct 2 20:46:41 2025 Received: from mail-oo1-f42.google.com (mail-oo1-f42.google.com [209.85.161.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 67A562E2DEF for ; Thu, 11 Sep 2025 21:43:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757626982; cv=none; b=TanOgU7OaYG0KlpGIWleaqXMZ4xazJ5ibsvWkqMEwDoi1SH+GBVP3SO8+vQfrpP/w2eZ4w0BsYiBpJFivEPNTqmpIyY77k8CZtGwcQAsoVZ+V9EtF643GPlmkofZYgE1T709B59fg0giLUEsWLsMUPA94ZJsF1AYd1Bx0dEaUCI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757626982; 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=rDKkCfiaOXk/keO03r5t/8HMVI8i3PDzEszWmkpVnCShkmMYz0Il+r2+oF+Yks3LQc15fc5Uz3w+9lK5kJnCVSfRR+/ItHOxQHK13L2/Ob5uTogmFhVZZAQK0TrNcwAEnhEB9MXMQ/EFecgEBKyo+rCtf25fa6Bm+nyvfaXZ62s= 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=gkUS0WyN; arc=none smtp.client-ip=209.85.161.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="gkUS0WyN" Received: by mail-oo1-f42.google.com with SMTP id 006d021491bc7-6205e2b7a8fso610862eaf.0 for ; Thu, 11 Sep 2025 14:43:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1757626979; x=1758231779; 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=gkUS0WyNy7NGXBQs0bzGgeceZNEjQFEwjZ3DGP/QodTUDc2ZU7aq2ggbYnxqmroyFM LkS+Nzf+RFumzbCHJmUn7ufvpeFFuCOs3NByZTD83tguhj08N/AxibYZpZaxn7I8TYyO GJJL5PtsoY9ZIvCsHnjcIP/dGOLZOzPRJGq6lJ82cAgKMna+CVfYwFzD4FG7s/BfF5W1 OLFpFNoqIJKuq5Ur83MJq6UjQhMU5tPlZdF2wZ9I0vda7z3J89/s400nIXxKqXBE1Tk+ mfAsduUIFc9t0XhwavD5y80j4J2rnjcN1/EG50YAbhCo2dQBgStOq/KgsO5dfCORNRKU 6Dfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757626979; x=1758231779; 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=eyrqpdO88byv1IKhLZw4OvHwvKt9pOsdj4pR6ghwRinJIPW3aysnFqYgCypOhxpMrx nTJy4joewhJsSfXUEVZ0TQemJQD6Ep5iZ6poQ7wABAyPBkfw5qVq02D3ohhh+/75voz+ xJjFaXckqwuVww/aT5td6bpcnuuIncMSa0oUAXpLq+MAZHT5OKETMOCbHiLFg0l05vhG 7fUwSOMuQSRV1pLDWIqKk3N+1T4fLzgj5eJA0K1lP5+ooD/kFag8BYfPheu2VLrMpcr/ PDHTg7hkyKHuhrs1j7o1eldZRUrKjnzb5S8l0ZkskTQHr+pXDKao7gzz/CXSPj1Dsvfu Aq0A== X-Forwarded-Encrypted: i=1; AJvYcCUK6ya+//aw8prXA14WLFRs67hps6e0P0wfBN2jCWPE1ruwYg/JFesCQ8zrrYuEzu3+b49fj9h9DxNbIoI=@vger.kernel.org X-Gm-Message-State: AOJu0YwpiYspT+vzJDGOUSw0irhX6zQbjKTM35/ATVKUw+hOs4VOt4ck D3ZzC2Z080DjdfGSkR1uap0ck7Zx4YsBOOknFudOcrp3Ed1KQGkGmM9uDTD0IEyrlSs= X-Gm-Gg: ASbGncuQQb3cayCsSbnbq6TpUHqi4axpCoz6Gm9PS/e9NIFjmp/6FqOy924uiJWrX58 UuflaO2+0rbL8RrSQo0BO/LjLTt97vqsnAkuIi5idgDJcushLrcDDsHbOHdnjqW4zCvmH04CRS6 ZjNarSZT1KGqK9NgNdZvtnH046xX3IoPl0wgZna/Pp8PQ02zJTvF4pCHMGdyW2y8jWhFq9re3a9 CHZlOykChGLETTjGF0CF32ccQXdk48tCjCj0l90JppL+mDLhWNNzPvqyr8wdiTg/m9Gn0iPQECI NRh7D2O1EIXEKtPfgakciEb6gvlXlGfe6m2U1Sb8M8VROO8so0VT4S+V0xS/ZmQ6ALzASZkVf7x 2w3MWISBlxU9P7sq7EiS5AGe2BXuH6+q7MphI/Wc= X-Google-Smtp-Source: AGHT+IF6EmKy/M6sMmOkz7IT/ipRKY0iTQyQA6+wygNDE7llSpDWhnsTp4ifJ4gi9JoybvuSYwiLLg== X-Received: by 2002:a05:6808:218e:b0:438:25e0:bf82 with SMTP id 5614622812f47-43b8d72c7d9mr315007b6e.0.1757626979315; Thu, 11 Sep 2025 14:42:59 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:1d00:d684:59db:8b2a:5451]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7524986a7c3sm604188a34.10.2025.09.11.14.42.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 14:42:58 -0700 (PDT) From: David Lechner Date: Thu, 11 Sep 2025 16:42:05 -0500 Subject: [PATCH v2 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: <20250911-iio-adc-ad7124-add-filter-support-v2-6-b09f492416c7@baylibre.com> References: <20250911-iio-adc-ad7124-add-filter-support-v2-0-b09f492416c7@baylibre.com> In-Reply-To: <20250911-iio-adc-ad7124-add-filter-support-v2-0-b09f492416c7@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=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBow0JTtu85rjP1ShuAEpkAIG3qtLVmQ4OyaDOKe XucV62AfSiJATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCaMNCUwAKCRDCzCAB/wGP wABlCACF0wJCj9x2/tTQzrpNuclD6Z9nH9qotv5HHDdleCHFdeZi6nwrliqg8flSyLEy7Y8h+Az X3x5dejvhWgmkYkKpQpFZlISbIVtDKAC4gPeSBdabbdZNcyEepoMJzb3EgJF4+VkkMSOJeLxI8D xgqsnhNBwnmuCLSgLleYj7Ftw8YPHoB9mwf+ckHaBuqDGPGfW0TEz2XSqyLYT2yzRyfXdB12Sbj sRLDJJfzQPsMeWcwpPk9Oka1PJ3lOLNpi5yjH0jD0EIkbZcRoks799PXGyeQqFv0NdNNcYtrj0+ W/Mbv0b5NQsZB6oZM/bEHRok+TKC0QpRu6nzilDnvF3npSQb 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 Reviewed-by: Andy Shevchenko --- 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