From nobody Mon Feb 9 10:44:40 2026 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.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 216C3288A8 for ; Fri, 6 Jun 2025 14:20:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749219641; cv=none; b=A3TM+5impM8dt891gzaMnXfHwW+dPid+ERYYjwvbiUXnOG3Ok1MPRZqS+l09+D72LzWxU7ahqOcMBl1hvN/dQAg5aVDPG4gjS//ZvnE40CsEp8YD3MyK/KbqQZ49wys3XKBx6LmQMXqZXdp7PvY8eNvtmz7DFbayAEu9YcXJzb8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749219641; c=relaxed/simple; bh=3MDKCzcRqE17jpMODKflA/mPPIlcttinXXOo2OBAwAs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lPtIlxrwp7VhEgw9XhQm9zKRzqDOmHgLS9otEwGkUylHrgzZcekqfEAVPLWYNT0yspPfvgeLEFZs/irtTZ3IOzbf1sSgutbAANKrvnei2vTl4cfttBHrBsaXKMrgWb6jx9itbDB7nfFAON+Qenv+ULJ8XUh8cXQaXKO0gNhRXTM= 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=255GtuGk; arc=none smtp.client-ip=209.85.128.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="255GtuGk" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-450dd065828so16526875e9.2 for ; Fri, 06 Jun 2025 07:20:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1749219637; x=1749824437; 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=BCECvT2ZqaLSupqrgHoRYTITFIBrUFbkXozj6gpUIgI=; b=255GtuGkBXlI2UOWybrmrBwbIHQffrjov0sFZNJKZ4dJiWV2B15jbwXmMuNSVgNMHk MEFB4VLhH3JwSO/n1AEyHblJF9NXlmASdp1uj51a0FxJFojjwDg/K+f3Dg3tQGDyE5Uj hyZx3lXNQ1Lfv5HaYGFDR4Aiab5ktwePsonZ5W7XSP5W8iJbkWmlbwkYe+IxKiFGimhN xUS3nXrnNuLp+NNfk4F2cfOqPupCwMdulVRMHik1PKSL5C8I5H6M8EDNfR7z+17hm119 WVn2jqM7KHQtfYmvY/aHMs2LM2ioPTY+HD5z231YHjigiYzf8Xg3RYJkwSAjXDLC4Ctp AghA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749219637; x=1749824437; 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=BCECvT2ZqaLSupqrgHoRYTITFIBrUFbkXozj6gpUIgI=; b=A0Fo85if3hoTbEDYb79+Q0vnmTW0goN4Ct/KAbZeNsC9P60IFqKWo9m1XPXyA1Xymg AN3vhZutvvxXTFv0B5Mkw/BayM/gszTo8v3A6R5tCGFK3g9DWjKjAr1WRiZi0xK3x1Mf rhfAxS2KYLzeiourYbc8nDbcIo1CY9gAPlef37GMGkpZx4zbQSDjT4JxjFmzV1U+sHpN goyYARpuSTKcGZGxgtHFyg2wCpNHslUfA2CYX1SdElUvjjCgA9yr5qhj6UE18opA1HT5 zwbZbhc4BE0uRByB28U7AdQgUFRHbce6aMK7cmbYbHnHkYfDyWg/WDDXn+OF/T9tIzEQ KZJQ== X-Forwarded-Encrypted: i=1; AJvYcCWImGam2iBBPzGfZ2nth0WdfviuWo+5q1MOcWZzWlhVJ3L670NWDQp5wDq6mVJmSDWZxrY2kObRCub400E=@vger.kernel.org X-Gm-Message-State: AOJu0YxSCiYSdViYWbumDnVCTA8wX8u2XkdO9o9LlgbG4hPcbMF2Mj5W CqvHNMeRUQr12gFYonH6IivnNdHKSNEjRMWMPCOvBZpdQrHRkX0tO/UF8oX6d5vX9jA= X-Gm-Gg: ASbGncsGToVepfLRgkjsO5wDah5V3HgidVroSJlpKbAD7T/rC0ZzelxPK+mgu4whyqn Lccna0lh5bFZzSrwLlfSD2pZEKuTOZckJHh82Ul0vrvW5Ft7tVg2Esgj6NP+1SoLUaGlhh4drum R5pufUdh4lh7S9nPYNn5pf8OM1R3X/E0kBKCNTCwNR/QI4a0XYxlZ4Pcr9Tw/0n2O1swy6tVVQx lO4tELs0ts3uy3XtCqKHxK/xra1IbDEtRI/R7LXU/YE8s36IeVAxcYZU5E/KaUgduAIYLbAkf6T l3BtA6jsjgFiwkSBbOdCux6gjLMW9e0AUdrTM7HolSSMUw1BgvSdqYsVnmprNPG8ZFTpm6u++8Q DnpBo6nt7wPdRT1+UBRdbdl9Uia/+pX4= X-Google-Smtp-Source: AGHT+IH59aMsKf3hdHtSKVIfRUVq4kAbJbYNUCQzRJeoDhtgAosvkcg81rm88rY6ZYDHdAP4zhIZwQ== X-Received: by 2002:a05:600c:83cf:b0:450:b9c0:c7d2 with SMTP id 5b1f17b1804b1-452014146bamr37850795e9.11.1749219637319; Fri, 06 Jun 2025 07:20:37 -0700 (PDT) Received: from [192.168.0.2] (host-80-116-51-117.retail.telecomitalia.it. [80.116.51.117]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45213754973sm25686345e9.35.2025.06.06.07.20.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Jun 2025 07:20:36 -0700 (PDT) From: Angelo Dureghello X-Google-Original-From: Angelo Dureghello Date: Fri, 06 Jun 2025 16:19:16 +0200 Subject: [PATCH v9 1/7] Documentation: ABI: IIO: add new convdelay documentation 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: <20250606-wip-bl-ad7606-calibration-v9-1-6e014a1f92a2@baylibre.com> References: <20250606-wip-bl-ad7606-calibration-v9-0-6e014a1f92a2@baylibre.com> In-Reply-To: <20250606-wip-bl-ad7606-calibration-v9-0-6e014a1f92a2@baylibre.com> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Michael Hennerich , devicetree@vger.kernel.org, Angelo Dureghello X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1850; i=adureghello@baylibre.com; h=from:subject:message-id; bh=HL+KRQj9p0fzRWOWKu4itMjiQokyOUQbf/17jsDSPRk=; b=owGbwMvMwCXGf3bn1e/btlsznlZLYshw+vEsMrwlT6QtiT/9adzuwK9LpP7aftApjC3T3F78t 4r7zcHdHaUsDGJcDLJiiix1iREmobdDpZQXMM6GmcPKBDKEgYtTACbiHsfwV9iXRbItQ+bak6zk qAqt8zvrmLdqZXKabucRPPnj/Y9D3xn+Sr/y+8PxyzuBNSWTM1CF80HtAc3bwXqTMkVr7+Xr29/ gBQA= X-Developer-Key: i=adureghello@baylibre.com; a=openpgp; fpr=703CDFAD8B573EB00850E38366D1CB9419AF3953 From: Angelo Dureghello Add new IIO "convdelay" documentation. The ad7606 implements a phase calibation feature, in nanoseconds. Being this a time delay, using the convdelay suffix. Signed-off-by: Angelo Dureghello Reviewed-by: Andy Shevchenko --- Documentation/ABI/testing/sysfs-bus-iio | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/te= sting/sysfs-bus-iio index ef52c427a015cf47bb9847782e13afbee01e9f31..3bc386995fb6ddf5fd0718587a8= 4d703cb973d70 100644 --- a/Documentation/ABI/testing/sysfs-bus-iio +++ b/Documentation/ABI/testing/sysfs-bus-iio @@ -559,6 +559,30 @@ Description: - a small discrete set of values like "0 2 4 6 8" - a range specified as "[min step max]" =20 +What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_convdelay +KernelVersion: 6.17 +Contact: linux-iio@vger.kernel.org +Description: + Delay of start of conversion from common reference point shared + by all channels. Can be writable when used to compensate for + delay variation introduced by external filters feeding a + simultaneous sampling ADC. + + E.g., for the ad7606 ADC series, this value is intended as a + configurable time delay in seconds, to correct delay introduced + by an optional external filtering circuit. + +What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_convdelay_available +KernelVersion: 6.16 +Contact: linux-iio@vger.kernel.org +Description: + Available values of convdelay. Maybe expressed as: + + - a range specified as "[min step max]" + + If shared across all channels, _convdelay_available + is used. + What: /sys/bus/iio/devices/iio:deviceX/in_accel_x_calibscale What: /sys/bus/iio/devices/iio:deviceX/in_accel_y_calibscale What: /sys/bus/iio/devices/iio:deviceX/in_accel_z_calibscale --=20 2.49.0 From nobody Mon Feb 9 10:44:40 2026 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.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 9E43E43AA9 for ; Fri, 6 Jun 2025 14:20:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749219643; cv=none; b=oLIbjVyJN6AsrEk3tLkmusogcDdyEcbfKTXOO4EDwhg7Jb+DG9NzWvnlXO+SBueKQoFPMGFBbr8DkXfV2G2tUGrpLGds5gkWoMqb5rSESYkAxT6Ge3rg22L6bbpiYvOUyKId/MiVWc0B1MS56ixomHM3FKxfyCBuhvy6cmXB/HY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749219643; c=relaxed/simple; bh=cBfFaDkjp8cn9ZsqfhZtThmlU0g1ewE4x6fWUwfuIqQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VLvuhF/pq5JupQPwx8sZdzT7WkI/MU2y+CAUCao/7rlQ2CGThhemh0S1g+iMYTo0EFzs00ws0Avh3D3X5aus39Ty09XbfaLHfOYCWpCNqvBY3OF2x9shAp/pxDi7+9WDy5azzfhDPW72J43tx7KXvrXQ/I32dqhL9X/5sDi9TSM= 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=UG8149b9; arc=none smtp.client-ip=209.85.221.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="UG8149b9" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-3a5257748e1so1566326f8f.2 for ; Fri, 06 Jun 2025 07:20:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1749219639; x=1749824439; 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=Wv6YLDN8CkaWn53LtM3+C3UNFVc2t/n3NaXm0d2EaQs=; b=UG8149b9fNLK5R4KGiFmRknnZ6FzjNFeG66lQutYDTAOVR01SaRXfQO+DYTBhAXI88 DRMJ9gs7d30XCyTFG2raeI2hC0g5UhVEVN6I63XdnaABMxzXE9wkZIdO4pLWvuNNsPMG aHqqAxzJPmb1GhpJ63DrPli9043LJvPyJn1LoV4FjnxEJsKcl/mHQZ2z5OWQiwSVv850 LG0fnQSk7m8oRwCpwUmNwdDjiCCKxYeDr4fi29wK3jqbWOwhrirKRfRdnhN8r4b01BlS mugAeabCugtAgWboTHKQrZQqiKNFoCHusWgwa77ial02NiN45eH+xj7gpg8OonKAC83c 6zUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749219639; x=1749824439; 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=Wv6YLDN8CkaWn53LtM3+C3UNFVc2t/n3NaXm0d2EaQs=; b=q7QvF7Y/N4GrPOSZgPebp8U6sxN42eT4lkSaqIdL7CN5tDBnGKAXhDVLq/cp5/Ijrl Pwc1zmYb0zmjtnHa9MNJStTZmvqBw74SGXygvzgwq9P3c1IPAEeWrk/D2NajE5KtaYlA jI5id6XT4+8mE2pTtXnFIdJgNAAG5vDtSzorA/sr8BNNc0O14dartRQfkyxFC0HMQS1T rTEjCCW6zAIYmYkPgTviPwz80Ow5DWSY3lV++VFY/zGNvEpu4whiQ2siWnYOs3twq4t4 FdRsBf2ycHKCMqnvxIJ4goqDHeDvWMgyMy5vw8DohiXCXKnzzlv+wTVHqyE0RSr38uzy 4nwA== X-Forwarded-Encrypted: i=1; AJvYcCWoLx5w5giPItAJrNxrObIwb2pVjRALWB4cVEb0cVZkNxKwpljqzVaX2GyC/BON6ILHpDkoKLK5wfpQYeM=@vger.kernel.org X-Gm-Message-State: AOJu0Yyih0D9/cgSKdjyvEQt+9R5gGxDAG0vgaTTINcaCn8I211dNUtj om1Ss4YXMv7Af97F4eZsw9DEs0Mm3TZk2UPOd0yzx/21sk53fJWElViOHkm2dNl5Bds= X-Gm-Gg: ASbGncuQNpA2FtkvKDdhS+AMEUnsNAqulKfC7A+NwEsX7PB6PB9le/YmbgKL1ADNeun Oe9oM0WFo5+5OtdjO4Jo4/mMNcSqIhNK2QQ/NFLJPpmh9orPS+yPHsgy9z7AjlXpCkDRmkOf288 W1cKRT92UnWknW5EfcvItwJ8ND+w8wcayp0hKTz0W8lI7Y/XyaVR4GuVh6d+Ebf613gHOB9XErN 48ElNTqETjFhWTB9EJrGHVaFq/asysAPFtd0jobKjVo5+B+EbvvJjgC1s301oUCxnpBrOkCmm6F 53iR0opClq2JgFmNDYYpe4y0390z8scDC/N5U2vFF3YGyhczGcOp9tG5TmQzDx0bwVN0YexFBXV VMdk0M+Cn++nxJQS6tk7N+mET2QNOJlk= X-Google-Smtp-Source: AGHT+IF37F/jINDH7H2db1udG2JDyKrV0755zPZUiYV6DkuZZCp3DPM5k1KeUHEdsmDsp87Q/GpBTA== X-Received: by 2002:a05:6000:402c:b0:3a4:ef00:a7ac with SMTP id ffacd0b85a97d-3a5319a7ae1mr3050442f8f.45.1749219638714; Fri, 06 Jun 2025 07:20:38 -0700 (PDT) Received: from [192.168.0.2] (host-80-116-51-117.retail.telecomitalia.it. [80.116.51.117]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45213754973sm25686345e9.35.2025.06.06.07.20.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Jun 2025 07:20:38 -0700 (PDT) From: Angelo Dureghello X-Google-Original-From: Angelo Dureghello Date: Fri, 06 Jun 2025 16:19:17 +0200 Subject: [PATCH v9 2/7] iio: core: add ADC delay calibration definition 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: <20250606-wip-bl-ad7606-calibration-v9-2-6e014a1f92a2@baylibre.com> References: <20250606-wip-bl-ad7606-calibration-v9-0-6e014a1f92a2@baylibre.com> In-Reply-To: <20250606-wip-bl-ad7606-calibration-v9-0-6e014a1f92a2@baylibre.com> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Michael Hennerich , devicetree@vger.kernel.org, Angelo Dureghello X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1303; i=adureghello@baylibre.com; h=from:subject:message-id; bh=1bBjL7VlkgNBkqwPeVPqoUWRyRoNRlMdTRY5+MPjmRY=; b=owGbwMvMwCXGf3bn1e/btlsznlZLYshw+vFsApPX851X8qwZrpmor1L946L5+tWTw3/7b70/O U9H6Qz3hY5SFgYxLgZZMUWWusQIk9DboVLKCxhnw8xhZQIZwsDFKQATCdJgZFh/4nRgUMb+5VtC v7Kw/y99EpjQ33j33YqJ+tWhbvqlNlMY/vDUf33NZZjpeqDu9JoQha+PfRLsjxk0HTnvP2OmSfa 2x3wA X-Developer-Key: i=adureghello@baylibre.com; a=openpgp; fpr=703CDFAD8B573EB00850E38366D1CB9419AF3953 From: Angelo Dureghello ADCs as ad7606 implement a phase calibration as a delay. Add such definition, needed for ad7606. Signed-off-by: Angelo Dureghello Reviewed-by: Andy Shevchenko --- drivers/iio/industrialio-core.c | 1 + include/linux/iio/types.h | 1 + 2 files changed, 2 insertions(+) diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-cor= e.c index 178e99b111debc59a247fcc3a6037e429db3bebf..f13c3aa470d774bfe655d6a9fb0= 0c263789db637 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c @@ -188,6 +188,7 @@ static const char * const iio_chan_info_postfix[] =3D { [IIO_CHAN_INFO_CALIBAMBIENT] =3D "calibambient", [IIO_CHAN_INFO_ZEROPOINT] =3D "zeropoint", [IIO_CHAN_INFO_TROUGH] =3D "trough_raw", + [IIO_CHAN_INFO_CONVDELAY] =3D "convdelay", }; /** * iio_device_id() - query the unique ID for the device diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h index d89982c98368cf72c0fc30fa66ab001e48af4e8b..ad2761efcc8315e1f9907d2a715= 9447fb463333e 100644 --- a/include/linux/iio/types.h +++ b/include/linux/iio/types.h @@ -69,6 +69,7 @@ enum iio_chan_info_enum { IIO_CHAN_INFO_CALIBAMBIENT, IIO_CHAN_INFO_ZEROPOINT, IIO_CHAN_INFO_TROUGH, + IIO_CHAN_INFO_CONVDELAY, }; =20 #endif /* _IIO_TYPES_H_ */ --=20 2.49.0 From nobody Mon Feb 9 10:44:40 2026 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (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 49A6413AA20 for ; Fri, 6 Jun 2025 14:20:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749219644; cv=none; b=M1ksz3/khZb1wTR6ZOcCOffaYCArJp5wojgaDZAdBiPZLrvezlvjZRtyZ4TSbJHTzhiBkXq3RS5H0jHyW0fD6WNnGIuS00yteadwvFakTluQcaP6v2g/Kf7N997CYwbihTmrHdVuBYqhJz6F6gSl8qrXcEGIB3JDcW2sdY8tLN4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749219644; c=relaxed/simple; bh=f+7ognlnkY6ABMgqMvYNANME2eJG1YvGoQid+4LAH8A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ueiALOFe7v3mqjNjUmEYZWmL8CxVfKUmUpW7AgnSiO6d2gtRvrAMtYeb1XeMNrjJmK5lAnkx2/Y35thQI9pR3v+0N6TOLcoBrNV+X4t8rf9791BzUS7wbUEn1398FQnYbiMCnce2ZuRuhHSJe9RPMmeXMKbEk0Hi8MfJBPaqbIw= 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=knH6/L/8; arc=none smtp.client-ip=209.85.221.54 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="knH6/L/8" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-3a4f379662cso1863811f8f.0 for ; Fri, 06 Jun 2025 07:20:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1749219641; x=1749824441; 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=jZ28Kx5QxbLsb0Rtfg5i9W4w8GmfQk90Ip8Fmjx54W8=; b=knH6/L/8bKWQ70j8y//qGp7dOAkjMccbvAe9lvI4Yhl//4w9pIhx7ZBga5gYH6trZR m8D1S0kijl0r8AJC1kAZzLvYSbSOvn6xATDVPRhoGFU0dXcLTSKbqjN5//7DFzmb6Mkw /mg7EIIN2cvGa4m88jin4E6Emstq6AVCFAo5YvU9gi7vhfwQCoCt96DZEnuRC9JdtHMv zxRvlB/wiN4fNfh/W98Np/4hBTR5nGkpBx/sab5phx/BRVNSjrxXP+T1c7UabSe/IRe4 aAZfAGJdzUbVvCBk/uzvPuyRFOkzY8h5qwxYE6CW04i9utvnc80DtHz35+8VOUwbmGKd SLEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749219641; x=1749824441; 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=jZ28Kx5QxbLsb0Rtfg5i9W4w8GmfQk90Ip8Fmjx54W8=; b=pXUGs9WSmw4eB8ugENuYcyT6gQmwfdEcuLg1bb0WEnUR+oJX8I4lCiLASiGQZWZt4M drHWtxvn6vwepCnjSA8fBdsmGMCLT2DLrQUOQgpxw3YrUXAG4EX9glBOZ8F0tdvAygL7 9gq5nPteuAThTtAZcsVw/HdK/c2VTNnEI5oif50pR1YnVGjKRFPDAxPVpdNTtjTsMfDE kfCTY0RZ7weRlxxrwmisRiIvxvuF0pxg3Ld6mPIXzKlqPw+ovMV9OUB+hORg0fiTNmoA 8mfpnpSRNsxf1pcllhWyAbq04yqtygvadBqsvhEJMy/YsCErXO/xlK/eNUdUX3E6c4Gg j5Mg== X-Forwarded-Encrypted: i=1; AJvYcCWuQWfavPL6xJpw3ARAo1bKYSk0FwA/f9tbc6r9OLyULGkkyDoTJB0o6JVba6dViza4MvBXnjrxAhTEMjs=@vger.kernel.org X-Gm-Message-State: AOJu0YzjoBOa3leFODzF4bYJAAgWcQFGLc/OG0p/+twkfQ3+4GOxJpbt hGmjuv07MZrsbZrgNtOTRmMoW4rPryDP7iXRPCH8LhGv52IICGD70LAamv45XwxTsH4= X-Gm-Gg: ASbGncvcXnlycgA+DcmytPFvE7Sqr29o18Y4KGMlXT7OGUj/NNYJ2qvRti7C0jQnL9b ZCSHYJQw1lVQwL+nvwm+TNlPDTSbGr/tdDLgNvj2aKkT7iitRfSiZVhzqBO46WXnc1dHDtTjchg KPHLz5C2DLP/UpcAQc0TJ19sOXfrqsn763K2lgWP5WoMv6UlA5k/Fsl7m2pheqabcrQWRFua5t7 ZOT3nYc7GIhg/ngyqpXNOoFh3tm5K6zu+/CbNgLst5eAj1HxPDmv7MNVgY18f/d/4AavYrQU1vW WqQPhAxamri1ajDLRiK2gYgGwQMoHsbO8uOsDX8aobKsuYroZ+EM7NK2WZqYesYT6anwplbq7Xn CSWxdN2Mpo5ngJI+vv+XF8lnAlF2vqAQK95S34dDCGg== X-Google-Smtp-Source: AGHT+IHhCj/YwN7oQ3fXOgIifxbVNhKuGlY1eNZwPXPGmMH9lESTEdVKh5c3xerKbBD26znzRGWiQg== X-Received: by 2002:a05:6000:290d:b0:3a4:fb7e:5fa6 with SMTP id ffacd0b85a97d-3a5319b6aa4mr2628159f8f.1.1749219640153; Fri, 06 Jun 2025 07:20:40 -0700 (PDT) Received: from [192.168.0.2] (host-80-116-51-117.retail.telecomitalia.it. [80.116.51.117]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45213754973sm25686345e9.35.2025.06.06.07.20.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Jun 2025 07:20:39 -0700 (PDT) From: Angelo Dureghello X-Google-Original-From: Angelo Dureghello Date: Fri, 06 Jun 2025 16:19:18 +0200 Subject: [PATCH v9 3/7] iio: adc: ad7606: add offset and phase calibration 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: <20250606-wip-bl-ad7606-calibration-v9-3-6e014a1f92a2@baylibre.com> References: <20250606-wip-bl-ad7606-calibration-v9-0-6e014a1f92a2@baylibre.com> In-Reply-To: <20250606-wip-bl-ad7606-calibration-v9-0-6e014a1f92a2@baylibre.com> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Michael Hennerich , devicetree@vger.kernel.org, Angelo Dureghello X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=9455; i=adureghello@baylibre.com; h=from:subject:message-id; bh=fCW7hUH+4D7M4y8C5+DvPW92iP3q60SPzFCMbSrvenM=; b=owGbwMvMwCXGf3bn1e/btlsznlZLYshw+vGsZbODt2Dz693a6lPZXN59TD/IIMNaaLV+s8Snf yurG3i4O0pZGMS4GGTFFFnqEiNMQm+HSikvYJwNM4eVCWQIAxenAEzkYD7DP3WGSWwxLNYy5eqe zWqarzr0G2eHTZTa/uGbXdKu4zM/yTMyNPhG2N8oLr0/T67Au1bXZvJV/mvB7O/rd9Wk10U3nYj iAQA= X-Developer-Key: i=adureghello@baylibre.com; a=openpgp; fpr=703CDFAD8B573EB00850E38366D1CB9419AF3953 From: Angelo Dureghello Add support for offset and phase calibration, only for devices that support software mode, that are: ad7606b ad7606c-16 ad7606c-18 Tested-by: David Lechner Reviewed-by: Nuno S=C3=A1 Signed-off-by: Angelo Dureghello Reviewed-by: Andy Shevchenko --- drivers/iio/adc/ad7606.c | 160 +++++++++++++++++++++++++++++++++++++++++++= ++++ drivers/iio/adc/ad7606.h | 9 +++ 2 files changed, 169 insertions(+) diff --git a/drivers/iio/adc/ad7606.c b/drivers/iio/adc/ad7606.c index 9e489c05dea6f0a9fd144640fb0e23775eb4f3d8..f0c22365f23fa2bf00edddcdd7d= 608bd1393bf28 100644 --- a/drivers/iio/adc/ad7606.c +++ b/drivers/iio/adc/ad7606.c @@ -95,6 +95,22 @@ static const unsigned int ad7616_oversampling_avail[8] = =3D { 1, 2, 4, 8, 16, 32, 64, 128, }; =20 +static const int ad7606_calib_offset_avail[3] =3D { + -128, 1, 127, +}; + +static const int ad7606c_18bit_calib_offset_avail[3] =3D { + -512, 4, 508, +}; + +static const int ad7606b_calib_phase_avail[][2] =3D { + { 0, 0 }, { 0, 1250 }, { 0, 318750 }, +}; + +static const int ad7606c_calib_phase_avail[][2] =3D { + { 0, 0 }, { 0, 1000 }, { 0, 255000 }, +}; + static int ad7606c_18bit_chan_scale_setup(struct iio_dev *indio_dev, struct iio_chan_spec *chan); static int ad7606c_16bit_chan_scale_setup(struct iio_dev *indio_dev, @@ -164,6 +180,8 @@ const struct ad7606_chip_info ad7606b_info =3D { .scale_setup_cb =3D ad7606_16bit_chan_scale_setup, .sw_setup_cb =3D ad7606b_sw_mode_setup, .offload_storagebits =3D 32, + .calib_offset_avail =3D ad7606_calib_offset_avail, + .calib_phase_avail =3D ad7606b_calib_phase_avail, }; EXPORT_SYMBOL_NS_GPL(ad7606b_info, "IIO_AD7606"); =20 @@ -177,6 +195,8 @@ const struct ad7606_chip_info ad7606c_16_info =3D { .scale_setup_cb =3D ad7606c_16bit_chan_scale_setup, .sw_setup_cb =3D ad7606b_sw_mode_setup, .offload_storagebits =3D 32, + .calib_offset_avail =3D ad7606_calib_offset_avail, + .calib_phase_avail =3D ad7606c_calib_phase_avail, }; EXPORT_SYMBOL_NS_GPL(ad7606c_16_info, "IIO_AD7606"); =20 @@ -226,6 +246,8 @@ const struct ad7606_chip_info ad7606c_18_info =3D { .scale_setup_cb =3D ad7606c_18bit_chan_scale_setup, .sw_setup_cb =3D ad7606b_sw_mode_setup, .offload_storagebits =3D 32, + .calib_offset_avail =3D ad7606c_18bit_calib_offset_avail, + .calib_phase_avail =3D ad7606c_calib_phase_avail, }; EXPORT_SYMBOL_NS_GPL(ad7606c_18_info, "IIO_AD7606"); =20 @@ -681,6 +703,40 @@ static int ad7606_scan_direct(struct iio_dev *indio_de= v, unsigned int ch, return ret; } =20 +static int ad7606_get_calib_offset(struct ad7606_state *st, int ch, int *v= al) +{ + int ret; + + ret =3D st->bops->reg_read(st, AD7606_CALIB_OFFSET(ch)); + if (ret < 0) + return ret; + + *val =3D st->chip_info->calib_offset_avail[0] + + ret * st->chip_info->calib_offset_avail[1]; + + return 0; +} + +static int ad7606_get_calib_phase(struct ad7606_state *st, int ch, int *va= l, + int *val2) +{ + int ret; + + ret =3D st->bops->reg_read(st, AD7606_CALIB_PHASE(ch)); + if (ret < 0) + return ret; + + *val =3D 0; + + /* + * ad7606b: phase delay from 0 to 318.75 =CE=BCs in steps of 1.25 =CE=BCs. + * ad7606c-16/18: phase delay from 0 =C2=B5s to 255 =C2=B5s in steps of 1= =C2=B5s. + */ + *val2 =3D ret * st->chip_info->calib_phase_avail[1][1]; + + return 0; +} + static int ad7606_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, @@ -715,6 +771,22 @@ static int ad7606_read_raw(struct iio_dev *indio_dev, pwm_get_state(st->cnvst_pwm, &cnvst_pwm_state); *val =3D DIV_ROUND_CLOSEST_ULL(NSEC_PER_SEC, cnvst_pwm_state.period); return IIO_VAL_INT; + case IIO_CHAN_INFO_CALIBBIAS: + if (!iio_device_claim_direct(indio_dev)) + return -EBUSY; + ret =3D ad7606_get_calib_offset(st, chan->scan_index, val); + iio_device_release_direct(indio_dev); + if (ret) + return ret; + return IIO_VAL_INT; + case IIO_CHAN_INFO_CONVDELAY: + if (!iio_device_claim_direct(indio_dev)) + return -EBUSY; + ret =3D ad7606_get_calib_phase(st, chan->scan_index, val, val2); + iio_device_release_direct(indio_dev); + if (ret) + return ret; + return IIO_VAL_INT_PLUS_NANO; } return -EINVAL; } @@ -765,6 +837,64 @@ static int ad7606_write_os_hw(struct iio_dev *indio_de= v, int val) return 0; } =20 +static int ad7606_set_calib_offset(struct ad7606_state *st, int ch, int va= l) +{ + int start_val, step_val, stop_val; + int offset; + + start_val =3D st->chip_info->calib_offset_avail[0]; + step_val =3D st->chip_info->calib_offset_avail[1]; + stop_val =3D st->chip_info->calib_offset_avail[2]; + + if (val < start_val || val > stop_val) + return -EINVAL; + + offset =3D (val - start_val) / step_val; + + return st->bops->reg_write(st, AD7606_CALIB_OFFSET(ch), offset); +} + +static int ad7606_set_calib_phase(struct ad7606_state *st, int ch, int val, + int val2) +{ + int wreg, start_ns, step_ns, stop_ns; + + if (val !=3D 0) + return -EINVAL; + + start_ns =3D st->chip_info->calib_phase_avail[0][1]; + step_ns =3D st->chip_info->calib_phase_avail[1][1]; + stop_ns =3D st->chip_info->calib_phase_avail[2][1]; + + /* + * ad7606b: phase delay from 0 to 318.75 =CE=BCs in steps of 1.25 =CE=BCs. + * ad7606c-16/18: phase delay from 0 =C2=B5s to 255 =C2=B5s in steps of 1= =C2=B5s. + */ + if (val2 < start_ns || val2 > stop_ns) + return -EINVAL; + + wreg =3D val2 / step_ns; + + return st->bops->reg_write(st, AD7606_CALIB_PHASE(ch), wreg); +} + +static int ad7606_write_raw_get_fmt(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, long info) +{ + switch (info) { + case IIO_CHAN_INFO_SCALE: + return IIO_VAL_INT_PLUS_MICRO; + case IIO_CHAN_INFO_SAMP_FREQ: + case IIO_CHAN_INFO_OVERSAMPLING_RATIO: + case IIO_CHAN_INFO_CALIBBIAS: + return IIO_VAL_INT; + case IIO_CHAN_INFO_CONVDELAY: + return IIO_VAL_INT_PLUS_NANO; + default: + return -EINVAL; + } +} + static int ad7606_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int val, @@ -818,6 +948,18 @@ static int ad7606_write_raw(struct iio_dev *indio_dev, if (val < 0 && val2 !=3D 0) return -EINVAL; return ad7606_set_sampling_freq(st, val); + case IIO_CHAN_INFO_CALIBBIAS: + if (!iio_device_claim_direct(indio_dev)) + return -EBUSY; + ret =3D ad7606_set_calib_offset(st, chan->scan_index, val); + iio_device_release_direct(indio_dev); + return ret; + case IIO_CHAN_INFO_CONVDELAY: + if (!iio_device_claim_direct(indio_dev)) + return -EBUSY; + ret =3D ad7606_set_calib_phase(st, chan->scan_index, val, val2); + iio_device_release_direct(indio_dev); + return ret; default: return -EINVAL; } @@ -996,6 +1138,14 @@ static int ad7606_read_avail(struct iio_dev *indio_de= v, *type =3D IIO_VAL_INT_PLUS_MICRO; =20 return IIO_AVAIL_LIST; + case IIO_CHAN_INFO_CALIBBIAS: + *vals =3D st->chip_info->calib_offset_avail; + *type =3D IIO_VAL_INT; + return IIO_AVAIL_RANGE; + case IIO_CHAN_INFO_CONVDELAY: + *vals =3D (const int *)st->chip_info->calib_phase_avail; + *type =3D IIO_VAL_INT_PLUS_NANO; + return IIO_AVAIL_RANGE; } return -EINVAL; } @@ -1058,6 +1208,7 @@ static const struct iio_info ad7606_info_sw_mode =3D { .read_raw =3D &ad7606_read_raw, .write_raw =3D &ad7606_write_raw, .read_avail =3D &ad7606_read_avail, + .write_raw_get_fmt =3D ad7606_write_raw_get_fmt, .debugfs_reg_access =3D &ad7606_reg_access, .validate_trigger =3D &ad7606_validate_trigger, .update_scan_mode =3D &ad7606_update_scan_mode, @@ -1250,6 +1401,15 @@ static int ad7606_probe_channels(struct iio_dev *ind= io_dev) chan->info_mask_separate_available |=3D BIT(IIO_CHAN_INFO_SCALE); =20 + if (st->chip_info->calib_offset_avail) { + chan->info_mask_separate |=3D + BIT(IIO_CHAN_INFO_CALIBBIAS) | + BIT(IIO_CHAN_INFO_CONVDELAY); + chan->info_mask_separate_available |=3D + BIT(IIO_CHAN_INFO_CALIBBIAS) | + BIT(IIO_CHAN_INFO_CONVDELAY); + } + /* * All chips with software mode support oversampling, * so we skip the oversampling_available check. And the diff --git a/drivers/iio/adc/ad7606.h b/drivers/iio/adc/ad7606.h index 441e62c521bcbea69b4f70bb2d55f65334d22276..f613583a7fa4095115b0b28e3f8= e51cd32b93524 100644 --- a/drivers/iio/adc/ad7606.h +++ b/drivers/iio/adc/ad7606.h @@ -40,6 +40,11 @@ #define AD7606_RANGE_CH_ADDR(ch) (0x03 + ((ch) >> 1)) #define AD7606_OS_MODE 0x08 =20 +#define AD7606_CALIB_GAIN(ch) (0x09 + (ch)) +#define AD7606_CALIB_GAIN_MASK GENMASK(5, 0) +#define AD7606_CALIB_OFFSET(ch) (0x11 + (ch)) +#define AD7606_CALIB_PHASE(ch) (0x19 + (ch)) + struct ad7606_state; =20 typedef int (*ad7606_scale_setup_cb_t)(struct iio_dev *indio_dev, @@ -61,6 +66,8 @@ typedef int (*ad7606_sw_setup_cb_t)(struct iio_dev *indio= _dev); * @init_delay_ms: required delay in milliseconds for initialization * after a restart * @offload_storagebits: storage bits used by the offload hw implementation + * @calib_offset_avail: pointer to offset calibration range/limits array + * @calib_phase_avail: pointer to phase calibration range/limits array */ struct ad7606_chip_info { unsigned int max_samplerate; @@ -74,6 +81,8 @@ struct ad7606_chip_info { bool os_req_reset; unsigned long init_delay_ms; u8 offload_storagebits; + const int *calib_offset_avail; + const int (*calib_phase_avail)[2]; }; =20 /** --=20 2.49.0 From nobody Mon Feb 9 10:44:40 2026 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.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 5FF9017B425 for ; Fri, 6 Jun 2025 14:20:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749219646; cv=none; b=CnOTRdmpbRbppow92S0NkKhPZpfdlXF6W+obSfNoCaPwjaQjxaH+fN03Po0peRORISw5iIFi9OUU+2Qa+O3V+yJ6fpg5GaktX6IV3OXZHIqmM2dHC7esidFwG4JH5AgogKBjU+Q2VEFiCg+ZoJtSOInk0UqpprA0cQoU4e44Yps= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749219646; c=relaxed/simple; bh=NtotUFQE861trIH/6KVUMJlh1RHFkSekY2PpGsDNTzs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bNrq3P9/ZhXQUxxb5gl5K9INAfyt9H5ypmMvMgT43a16QC6Q0ZHFSTuvWkgH6du6lsBi/fv2QrcLVLem0XCMg6Nip1ekzRadNVslF959wRprJ8RcrxQ6nzoHlrUtdXWYM58SwBsP3BKIm3rJg6opNy8l44lJvQHBtawG8GTEJXc= 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=lLtuejX3; arc=none smtp.client-ip=209.85.221.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="lLtuejX3" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-3a4f71831abso2073682f8f.3 for ; Fri, 06 Jun 2025 07:20:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1749219642; x=1749824442; 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=SSPYC82OHD2BI/YU/tjmuoLa3AQcRKZBypSGl/10x2A=; b=lLtuejX3slvpCHU5i4svKXMgnvnLvKMSNrDwTfrfZr4seE5NN7DXsUvdXy8mAhg8zc vLxQ5Z+RK7lcPCEH84kmRBoq1WU9PJHqXpVZVTqAAnGeb+Obw5hmv22WqkFDvfA3UtNh +0xUY1Lxb1DWn4INjEkWAWYmkh5LF5BqaeUMGrH2tgaLfnEA1qoMIv6jszDUagmREmWp BZ9ypARgXCHZ/5U2CMMJqRg8fXliJaMI+vMnAjwa1oo3r2ra7x+q5AlsCrVYF0venqFi jW5Plgraw/5hXShlLZ0Zhjm4kBFG6psp6PxVhpn7RrfTcJcgDwfamj+FMtI+viXtjwsA llmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749219642; x=1749824442; 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=SSPYC82OHD2BI/YU/tjmuoLa3AQcRKZBypSGl/10x2A=; b=lkGCiXoV4DHHsEhUfV58n+jBlyA4CoRbJ3yxmYP1Tg00qMTQAZAiWKaGgvVrIIlist emQfg2ytbaRYNX8zSWUkzZ5j/M9XsQGy7y1TNSXD4E4Rq0nvTsTvJQl6l4IB3zUTwWP0 dvRGbkD5/h/ya4Y2it/DSPOQnzMEjNygQ2iehhEfGZsKUQxI9iMJEpQEZb6JUifaIJGj h6bQYE2m4ahZ0e37X1wnrQMihZSiXImemYO/0IAKWqibG7Pn60rltWlBKszLfC96BJyO ey+wYF1q16/U4ZCf7GM/QBFQrL43kkRIvC9qb8Qjx8u3z5X0Ex7ltjXT5P9aQm8TunbJ qokQ== X-Forwarded-Encrypted: i=1; AJvYcCVPvVu7+97xTgL8RI5uKF5ivOGaLe6jOpuYrGSy9vOfTs8KzwV3ZAeaQSXTa+TYxPMt+0ZnyPFrU3frvTA=@vger.kernel.org X-Gm-Message-State: AOJu0YxJb+aExzHG9nufysL/zq41fSN5UOgf5wvuJ6/slEDj4SUVlYJA QSCS5zD6zT8kKVX93md9y0X4mPIKBbGyPv94OjNMRLfEQKj4CvfZ2X4GEuQHZorG6ZM= X-Gm-Gg: ASbGncvwBI3ICqC3NYPDCp4SgyOBTdC/LRn05jQP55LRoaazbFy9P/nU78fKsG4PtUM KknZjKWfEmADdT3yH4XZv301f8KwLSgtibPMCMvEwaLy+EnK5ID0kP5QXSi8t0KYybmNY1sfHve ttz5sQ0kiCnxvRcHTp04i7l/IIPbv7eGhuhjVOhoWaY0DslFvHY2kPfzXh6tprHiTseDv6294sq /WRBAM7F/4QdAouHLbZzpDe6DNsXd6Z0scIedYzWqD35Iderlo6gZk9lyWyu+dCSu/KniCWwYHf lwHLAKFhHWv/UKvkUEeWE66ql3pf/gLQq+TICTj6j7CYshvGFsZQXcLLcNTFBIMiOhNMuviA/T1 rciTmoBoQslilSHOwhFAQffEicAJDRqrPxHbi1YeBlQ== X-Google-Smtp-Source: AGHT+IEPSADRuivjsBAwnxDwELX3J0cYKMrPAlNjoba2OLvJNlyJgJfrVNB7PQfFuEos6eyJm7zU2g== X-Received: by 2002:a05:6000:22c4:b0:3a5:2f23:3789 with SMTP id ffacd0b85a97d-3a53188d5cfmr2988081f8f.15.1749219641589; Fri, 06 Jun 2025 07:20:41 -0700 (PDT) Received: from [192.168.0.2] (host-80-116-51-117.retail.telecomitalia.it. [80.116.51.117]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45213754973sm25686345e9.35.2025.06.06.07.20.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Jun 2025 07:20:41 -0700 (PDT) From: Angelo Dureghello X-Google-Original-From: Angelo Dureghello Date: Fri, 06 Jun 2025 16:19:19 +0200 Subject: [PATCH v9 4/7] dt-bindings: iio: adc: adi,ad7606: add gain calibration 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: <20250606-wip-bl-ad7606-calibration-v9-4-6e014a1f92a2@baylibre.com> References: <20250606-wip-bl-ad7606-calibration-v9-0-6e014a1f92a2@baylibre.com> In-Reply-To: <20250606-wip-bl-ad7606-calibration-v9-0-6e014a1f92a2@baylibre.com> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Michael Hennerich , devicetree@vger.kernel.org, Angelo Dureghello , Conor Dooley X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2030; i=adureghello@baylibre.com; h=from:subject:message-id; bh=mK1GoQiX2hS20/yC/1czrPjfc5t1uAwSltJDkMx72Mc=; b=owGbwMvMwCXGf3bn1e/btlsznlZLYshw+vGszPKRm63gXMlsYU25p/+9pCYJzNvw3ZXJrWmy5 gVJ5oV7O0pZGMS4GGTFFFnqEiNMQm+HSikvYJwNM4eVCWQIAxenAEzE6jbDf8cJPqdERXo7/dob 1gZM6W+U/um4QMru1QcHV5v1Fr//xwJVuF/PW/jn7zF1he36bNKT+jU05/3ebmv1ZN1pB4UAVQ4 eAA== X-Developer-Key: i=adureghello@baylibre.com; a=openpgp; fpr=703CDFAD8B573EB00850E38366D1CB9419AF3953 From: Angelo Dureghello Add gain calibration support by a per-channel resistor value. Acked-by: Conor Dooley Signed-off-by: Angelo Dureghello Reviewed-by: Andy Shevchenko --- .../devicetree/bindings/iio/adc/adi,ad7606.yaml | 29 ++++++++++++++++++= ++++ 1 file changed, 29 insertions(+) diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml b/Do= cumentation/devicetree/bindings/iio/adc/adi,ad7606.yaml index 29f12d650442b8ff2eb455306ce59a0e87867ddd..6926f5f090ad6bbbe7bfd9327dc= 5ae17dafcd1fd 100644 --- a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml +++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml @@ -204,6 +204,15 @@ patternProperties: considered a bipolar differential channel. Otherwise it is bipol= ar single-ended. =20 + adi,rfilter-ohms: + description: + For ADCs that supports gain calibration, this property must be s= et to + the value of the external RFilter resistor. Proper gain error + correction is applied based on this value. + default: 0 + minimum: 0 + maximum: 64512 + required: - reg - bipolar @@ -256,6 +265,25 @@ allOf: properties: adi,oversampling-ratio-gpios: false =20 + - if: + properties: + compatible: + contains: + enum: + - adi,ad7605-4 + - adi,ad7606-4 + - adi,ad7606-6 + - adi,ad7606-8 + - adi,ad7607 + - adi,ad7608 + - adi,ad7609 + - adi,ad7616 + then: + patternProperties: + "^channel@[0-9a-f]+$": + properties: + adi,rfilter-ohms: false + - if: properties: compatible: @@ -398,6 +426,7 @@ examples: reg =3D <8>; diff-channels =3D <8 8>; bipolar; + adi,rfilter-ohms =3D <2048>; }; =20 }; --=20 2.49.0 From nobody Mon Feb 9 10:44:40 2026 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.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 E863419D087 for ; Fri, 6 Jun 2025 14:20:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749219646; cv=none; b=bp1gJVIXf65Gi5KhjxYK32H3vEXyDiE34B0/+FF5Kni8xyNSTlEF7/CMtld0BaGnvaVGvuQyEpLb0823S88BZMf3OXmkItff8/smKzZnwFIO8pF07LDMR65nhzmbLEVqA2HBj8aUabzou8/K8dvx86HYS1ti8Ydip7DPw7/ikUo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749219646; c=relaxed/simple; bh=gYfEpf2B0eWfEeN9J0NWkVxgQeOXhE0vWQqSI1AdL6w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=O0P9nBLBKlpH9gNj9Q4lf3lvL1kJ6dCOjzE+ccOz7cnimr2O3tWgsgAoen0s5+SCdhXzNT0DMDCROogobk3Y8zAEXSdBCX16DNN3PeJ8UQTrx50ZgUsrT3WWmXAZRWGxQGhJm7zd/+b6LsU6D0PCaXQgOJhVgIPcX0WFlk8lw70= 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=xl8zDuQg; arc=none smtp.client-ip=209.85.221.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="xl8zDuQg" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-3a4f71831abso2073721f8f.3 for ; Fri, 06 Jun 2025 07:20:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1749219643; x=1749824443; 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=G1WuSemWPuN4SdNDyJuKtWMwJnRcINbePcyuYFAeNSg=; b=xl8zDuQgOcvXr26pndVTz9RWxSiJfigwaOWDjUCCUw52d27jJEQnYgTocxzmfC2Uwo 900ElBBmYlOzi8NeBJoHUsZ7w6mKaPDyJEDPJUaWgO1bOpm/oZRnoyC0WIlL7dLzQg9S ZI1r+ZBKdT4QF1zAfNB8BOZLo/SfrqYpnvIdursH11lOLSDrmUYJXh25v12npT40okEE A2WWcLv345N0PNBY62VpXLKN8ni4d8PHNHn4dsCr7KSjssjBp9UnKoCm5aKhDdH3bgjA 5V4Jj7xjRpYOcomRJj9A2o9EH9dYJmtWsFByvR8oqhW3ol0BhwCPW8Rej6B/xahn6Fy+ aPdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749219643; x=1749824443; 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=G1WuSemWPuN4SdNDyJuKtWMwJnRcINbePcyuYFAeNSg=; b=VoBFCUGUJGT8F3JgCpW6OKumoPA4HbcMSvX/Y4K/FtsAhpftCl6+3xlpGkUiWbRGdB Pst1Dje8cEyAcuqi/dR3D+92s+qYPzD10m4IUfAhbml8lAk3+hucYUcDZBIDlGMrxpi7 ZtolWF2LODdno156jBZVRf7Yl5WQPiD1XT02wAmiKgl/2GN3RnVa86HpEZ24zH5tn7fS +uQbeUejC6qvUe2rUWcweaYjSSQflfsz2HHCZ129whIYcqNDggcNrtV+Y5sWTzHZGF78 QYQVlvhDTT5fpKExnTDSmZaWzK2tNZ0eQGGEBa717H/e0WjuZivsR4ee7f6i1X46hP2t M1eQ== X-Forwarded-Encrypted: i=1; AJvYcCX5/MDvfu9HQZ+IOmWcrkX8HH1qfx3g1JdpKmV1Pylku89+0iCwDDDUOgxVegARDwwSEMsPIXnVepU1iWA=@vger.kernel.org X-Gm-Message-State: AOJu0YxjrLCMuI8H3hCBDgfWqC8kcoaEzmhdt7mJDeicvgu8hxuvJyaM 9gt1kjk+K069a/io0KYT58yMV+78yuD3FKQZZu/NWisP7x/x8YfL4UiuTLcZ8diEwo8= X-Gm-Gg: ASbGncsdIvBywYq0Z06wMHzo6dPUAPqioFye7cWSki1EN3alzxDN1GOU/sysvvkoJki 3urUMcOUgYZtCupTN/auMMLhiji0vzgkHA2ZfLnVZDE6WH7Jn0hl1cG+yClOCmSu4KutUBfNo54 Zhwbg6egbWEriu6nIzo2DHPLD+lSBvY9iLwJBNspnK43hHLCrg0bCuSBIvOSPczZOcWPSRXDswM MNNoKvkarUOnNzsh442/9bJTvQR8CFPryTYhAAlF47UWH/HWsyWSBW5wqy3peX4nRxpztTYcSD+ TIcOeIN9j1gmrH6eqSHyDHI7hTQ9qM/z8kvnfAjnYgHWW9O7yIM5KqkHeMu7+157N5HjDwldfQL 1f40Hsv9Pe24S5RJVs+grk8xdv8Xz9yE= X-Google-Smtp-Source: AGHT+IFtlzsfvKdrGidMqXsh4h0hFXBsNFDQ1/vkDgbyZn8qf/GpmYhHZbaV81p1vbt2rpfR/6BT2w== X-Received: by 2002:a05:6000:2288:b0:3a4:f8fa:8a3a with SMTP id ffacd0b85a97d-3a53188d961mr2814047f8f.18.1749219643145; Fri, 06 Jun 2025 07:20:43 -0700 (PDT) Received: from [192.168.0.2] (host-80-116-51-117.retail.telecomitalia.it. [80.116.51.117]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45213754973sm25686345e9.35.2025.06.06.07.20.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Jun 2025 07:20:42 -0700 (PDT) From: Angelo Dureghello X-Google-Original-From: Angelo Dureghello Date: Fri, 06 Jun 2025 16:19:20 +0200 Subject: [PATCH v9 5/7] iio: adc: ad7606: exit for invalid fdt dt_schema properties 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: <20250606-wip-bl-ad7606-calibration-v9-5-6e014a1f92a2@baylibre.com> References: <20250606-wip-bl-ad7606-calibration-v9-0-6e014a1f92a2@baylibre.com> In-Reply-To: <20250606-wip-bl-ad7606-calibration-v9-0-6e014a1f92a2@baylibre.com> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Michael Hennerich , devicetree@vger.kernel.org, Angelo Dureghello X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1153; i=adureghello@baylibre.com; h=from:subject:message-id; bh=RXow6w1uaNfMkBVbDyKeZVZMYqn8OBoe2df7BYhUk/U=; b=owGbwMvMwCXGf3bn1e/btlsznlZLYshw+vHse9SpmdYf179kvjN5/seTMywr79gmJh3gnBwbK pF668miZR2lLAxiXAyyYoosdYkRJqG3Q6WUFzDOhpnDygQyhIGLUwAm4uTIyDBpwyLzDUkNLtua 7j08+P22bl+43sTQnbIHNP4UZh+48bCf4a80x7GdF/Rj1i77ov0u/d6vGTIef2xfB5w48a9jU27 goxw+AA== X-Developer-Key: i=adureghello@baylibre.com; a=openpgp; fpr=703CDFAD8B573EB00850E38366D1CB9419AF3953 From: Angelo Dureghello Fix ad7606_get_chan_config() fdt parsing function to exit for error in case of invalid dt_schema values. Idea is to not proceed when there are values that are not allowed under the dt_schema. Signed-off-by: Angelo Dureghello Reviewed-by: Andy Shevchenko --- drivers/iio/adc/ad7606.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/iio/adc/ad7606.c b/drivers/iio/adc/ad7606.c index f0c22365f23fa2bf00edddcdd7d608bd1393bf28..e5878974a28293664dd8dbded5f= ffcea6db31ef3 100644 --- a/drivers/iio/adc/ad7606.c +++ b/drivers/iio/adc/ad7606.c @@ -319,15 +319,13 @@ static int ad7606_get_chan_config(struct iio_dev *ind= io_dev, int ch, =20 ret =3D fwnode_property_read_u32(child, "reg", ®); if (ret) - continue; + return ret; =20 /* channel number (here) is from 1 to num_channels */ - if (reg < 1 || reg > num_channels) { - dev_warn(dev, - "Invalid channel number (ignoring): %d\n", reg); - continue; - } + if (reg < 1 || reg > num_channels) + return -EINVAL; =20 + /* Loop until we are in the right channel. */ if (reg !=3D (ch + 1)) continue; =20 --=20 2.49.0 From nobody Mon Feb 9 10:44:40 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (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 7FF5A1BBBE5 for ; Fri, 6 Jun 2025 14:20:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749219648; cv=none; b=OJKeQsDoYA0TvZXDgF9I0JfQxmqS9OJsUXvW1q2ledkudUKf3l0xYCT8coecF1QbP9xeQkbfHj9CVNvDvREncY8ciFz2XH5+KXhmg5TofPbiKWxRrxp6fC/buAZsC4MNIVugAcSgxYgO/jzv2PIishQO2E5/xAdKcBfLdDbpXv4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749219648; c=relaxed/simple; bh=FM/lNx/NoMUl4+HOYDoXqhqfqugSIVlZhiTKYzbPGF8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VM9A09mujWvhQqqiIr+wxa2rEPiwCIpsQkKAILeMN1gvuWk1P8inOY/0BYxZjHqqRKKr409sMA8QH/x+PvV5aXK+Yne+kHNAZOpKrAuF/oWU4Wdgn5dVCibMWD6s2t2T1Mm3xg5HHm5Ske+Cg0+/caLu06VgbikipW361lpTE/0= 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=e+x/X77k; arc=none smtp.client-ip=209.85.128.54 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="e+x/X77k" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-451d6ade159so19235595e9.1 for ; Fri, 06 Jun 2025 07:20:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1749219645; x=1749824445; 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=FTuEafk7AJcKSXLfCGmDtVuPWJx1m3LaW+qyIuTb51M=; b=e+x/X77kqpGTvnyR7HK6Jbsbh3OJewr2fDJEVVRvH3W20jj0ftX9FvhLXYPUsMd0aQ zgSRELIjpigRwQdMzsy/qD9sFzs5do99njdIhIkZDvDtw7qW5zGRpLpnaIFud+aarJHa RnzNGZbvXzYOoo/4DFe8OnWZLWuyYbsbWWvLM0q+Tjk/p01EjFqouvBu7HSw5iEEQn2x UPO4t04dS5YGiaXdU8z0clptcEn0CohMJKtUfSxscOLtWQAwfaQFkJkoQtQF6AGlOWFA QCgkmtzU31qZTSM5aE/z3B2W7lclFXIbm+cdgl/unTWYI89paGoWx8T/qmdrzYysZtOF soyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749219645; x=1749824445; 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=FTuEafk7AJcKSXLfCGmDtVuPWJx1m3LaW+qyIuTb51M=; b=vn4Prs9wOgVaJ/7O8wjbTKLUkttbG665rZxJO1RffzWknBqh3g+t/8S6GbKeaaovYb C6H+okiVEqHFhqzH37hQ8yUIlLN2tlLYmz0HMbhvjUp8ucHrlGvmcGaW4sc9Zm4DF5Of 432POCWo3RLnd1u8cnZyXE/EJOKzX/1OYeTV/6FJIgtCQlJTOafGJDbLeju4HvE4weUg XoVQX8iZcGDE2UUU71lsP69B0+uPyQmEXRqh5a8XO+fYve2dZBsEPcCv9BrQ5t1jNksp llGL1ez2Z5nxsQ9qT7bPWBOJB228X3MXftnXGLWduqiCAkhTpnZ5YBPybzHux04ElmaG 4PeA== X-Forwarded-Encrypted: i=1; AJvYcCUV7DFqPlWjRK5hLH123ZtbUALOmY9YwU7RFaEaSoGXu1ycUCsQxDVjSkc/tnh7x6WSJYMmRpKc52sIspc=@vger.kernel.org X-Gm-Message-State: AOJu0YxPE8B2yqsBS7myFskei+KjMy/ahR3P5Qp9ASC+47QpzKtFDuWu hxZHLJvhnI8R4remNpCWUGAar3iKt6YnwvDWyo29gvHNqV6yTAD2v48ddyNeqy7JAKA= X-Gm-Gg: ASbGnctzOGcWptUib1DhWPAOgUQ2rHbJqIynrWeFPc35EceuszZhVDaoV30YQFsEiXM n+yzaBB6/0IKP7hy6cdWHG4wOpWVcPGB1RL+dd0iy5nnKX5ZSDle8nzKUcc+VbwvZIFAzTcjLkR XAty2nrg5pSztaYpxBz2qlVURHY1KSCdwr6If9pUlj6w7PrNxIbRYyQ1S0zIfp2JXtzdYtq03Ru SQA/64FOIufqCYvgOWsgiK0Ozw1FHcWTf4wLGQ53w3GDLocrgznZvYj0sTPHRuP2yXJDYUcDOEN ZQFJ/zImlI+9LiRE2czcITjE+6B6eB0oykpQ4CMabKrHsEGjdG/WXGvPSdivEosk32zEkm9QX76 mxKSXXqr5E3+Cqy6iFNPTGYCy+sz9oZo= X-Google-Smtp-Source: AGHT+IGEhI4sPI0wEudXZKJjhOjCtgvCYvzI5muZwgZmR7jg/VdiL3a8CyaHhrsgfABhSeDX0jmdGQ== X-Received: by 2002:a05:600c:8b11:b0:43d:77c5:9c1a with SMTP id 5b1f17b1804b1-4520137401bmr37541965e9.4.1749219644593; Fri, 06 Jun 2025 07:20:44 -0700 (PDT) Received: from [192.168.0.2] (host-80-116-51-117.retail.telecomitalia.it. [80.116.51.117]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45213754973sm25686345e9.35.2025.06.06.07.20.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Jun 2025 07:20:44 -0700 (PDT) From: Angelo Dureghello X-Google-Original-From: Angelo Dureghello Date: Fri, 06 Jun 2025 16:19:21 +0200 Subject: [PATCH v9 6/7] iio: adc: ad7606: rename chan_scale to a more generic chan_info 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: <20250606-wip-bl-ad7606-calibration-v9-6-6e014a1f92a2@baylibre.com> References: <20250606-wip-bl-ad7606-calibration-v9-0-6e014a1f92a2@baylibre.com> In-Reply-To: <20250606-wip-bl-ad7606-calibration-v9-0-6e014a1f92a2@baylibre.com> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Michael Hennerich , devicetree@vger.kernel.org, Angelo Dureghello X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=13558; i=adureghello@baylibre.com; h=from:subject:message-id; bh=jM36RN95wuoXc1xpOLlSkdVG60WLPaOM5HAG18IsH9o=; b=owGbwMvMwCXGf3bn1e/btlsznlZLYshw+vGs8PPbQ80BZb7CIq8rcouE3kbvW5dx+IYw09sft jd3PM436ShlYRDjYpAVU2SpS4wwCb0dKqW8gHE2zBxWJpAhDFycAjCRmRmMDHtlstfnqiYXu0/9 N9NNNdDpsPyFzfP/fOuY+P/FsalbC7IZ/lelvJnvNmllYYTXvCjJ5U6LJicf0njW+3PvrDjHI09 UWDgA X-Developer-Key: i=adureghello@baylibre.com; a=openpgp; fpr=703CDFAD8B573EB00850E38366D1CB9419AF3953 From: Angelo Dureghello Non functional, renaming chan-related chan_scale structure to a more generic chan_info, to host other chan specific settings, not just scale-related. Signed-off-by: Angelo Dureghello Reviewed-by: Andy Shevchenko --- drivers/iio/adc/ad7606.c | 142 +++++++++++++++++++++++--------------------= ---- drivers/iio/adc/ad7606.h | 8 +-- 2 files changed, 75 insertions(+), 75 deletions(-) diff --git a/drivers/iio/adc/ad7606.c b/drivers/iio/adc/ad7606.c index e5878974a28293664dd8dbded5fffcea6db31ef3..d19682186e7cd73a60541f62adf= 08d987ba24ec3 100644 --- a/drivers/iio/adc/ad7606.c +++ b/drivers/iio/adc/ad7606.c @@ -283,21 +283,21 @@ static int ad7606_16bit_chan_scale_setup(struct iio_d= ev *indio_dev, struct iio_chan_spec *chan) { struct ad7606_state *st =3D iio_priv(indio_dev); - struct ad7606_chan_scale *cs =3D &st->chan_scales[chan->scan_index]; + struct ad7606_chan_info *ci =3D &st->chan_info[chan->scan_index]; =20 if (!st->sw_mode_en) { /* tied to logic low, analog input range is +/- 5V */ - cs->range =3D 0; - cs->scale_avail =3D ad7606_16bit_hw_scale_avail; - cs->num_scales =3D ARRAY_SIZE(ad7606_16bit_hw_scale_avail); + ci->range =3D 0; + ci->scale_avail =3D ad7606_16bit_hw_scale_avail; + ci->num_scales =3D ARRAY_SIZE(ad7606_16bit_hw_scale_avail); return 0; } =20 /* Scale of 0.076293 is only available in sw mode */ /* After reset, in software mode, =C2=B110 V is set by default */ - cs->range =3D 2; - cs->scale_avail =3D ad7606_16bit_sw_scale_avail; - cs->num_scales =3D ARRAY_SIZE(ad7606_16bit_sw_scale_avail); + ci->range =3D 2; + ci->scale_avail =3D ad7606_16bit_sw_scale_avail; + ci->num_scales =3D ARRAY_SIZE(ad7606_16bit_sw_scale_avail); =20 return 0; } @@ -359,14 +359,14 @@ static int ad7606c_18bit_chan_scale_setup(struct iio_= dev *indio_dev, struct iio_chan_spec *chan) { struct ad7606_state *st =3D iio_priv(indio_dev); - struct ad7606_chan_scale *cs =3D &st->chan_scales[chan->scan_index]; + struct ad7606_chan_info *ci =3D &st->chan_info[chan->scan_index]; bool bipolar, differential; int ret; =20 if (!st->sw_mode_en) { - cs->range =3D 0; - cs->scale_avail =3D ad7606_18bit_hw_scale_avail; - cs->num_scales =3D ARRAY_SIZE(ad7606_18bit_hw_scale_avail); + ci->range =3D 0; + ci->scale_avail =3D ad7606_18bit_hw_scale_avail; + ci->num_scales =3D ARRAY_SIZE(ad7606_18bit_hw_scale_avail); return 0; } =20 @@ -376,12 +376,12 @@ static int ad7606c_18bit_chan_scale_setup(struct iio_= dev *indio_dev, return ret; =20 if (differential) { - cs->scale_avail =3D ad7606c_18bit_differential_bipolar_scale_avail; - cs->num_scales =3D + ci->scale_avail =3D ad7606c_18bit_differential_bipolar_scale_avail; + ci->num_scales =3D ARRAY_SIZE(ad7606c_18bit_differential_bipolar_scale_avail); /* Bipolar differential ranges start at 8 (b1000) */ - cs->reg_offset =3D 8; - cs->range =3D 1; + ci->reg_offset =3D 8; + ci->range =3D 1; chan->differential =3D 1; chan->channel2 =3D chan->channel; =20 @@ -391,23 +391,23 @@ static int ad7606c_18bit_chan_scale_setup(struct iio_= dev *indio_dev, chan->differential =3D 0; =20 if (bipolar) { - cs->scale_avail =3D ad7606c_18bit_single_ended_bipolar_scale_avail; - cs->num_scales =3D + ci->scale_avail =3D ad7606c_18bit_single_ended_bipolar_scale_avail; + ci->num_scales =3D ARRAY_SIZE(ad7606c_18bit_single_ended_bipolar_scale_avail); /* Bipolar single-ended ranges start at 0 (b0000) */ - cs->reg_offset =3D 0; - cs->range =3D 3; + ci->reg_offset =3D 0; + ci->range =3D 3; chan->scan_type.sign =3D 's'; =20 return 0; } =20 - cs->scale_avail =3D ad7606c_18bit_single_ended_unipolar_scale_avail; - cs->num_scales =3D + ci->scale_avail =3D ad7606c_18bit_single_ended_unipolar_scale_avail; + ci->num_scales =3D ARRAY_SIZE(ad7606c_18bit_single_ended_unipolar_scale_avail); /* Unipolar single-ended ranges start at 5 (b0101) */ - cs->reg_offset =3D 5; - cs->range =3D 1; + ci->reg_offset =3D 5; + ci->range =3D 1; chan->scan_type.sign =3D 'u'; =20 return 0; @@ -417,14 +417,14 @@ static int ad7606c_16bit_chan_scale_setup(struct iio_= dev *indio_dev, struct iio_chan_spec *chan) { struct ad7606_state *st =3D iio_priv(indio_dev); - struct ad7606_chan_scale *cs =3D &st->chan_scales[chan->scan_index]; + struct ad7606_chan_info *ci =3D &st->chan_info[chan->scan_index]; bool bipolar, differential; int ret; =20 if (!st->sw_mode_en) { - cs->range =3D 0; - cs->scale_avail =3D ad7606_16bit_hw_scale_avail; - cs->num_scales =3D ARRAY_SIZE(ad7606_16bit_hw_scale_avail); + ci->range =3D 0; + ci->scale_avail =3D ad7606_16bit_hw_scale_avail; + ci->num_scales =3D ARRAY_SIZE(ad7606_16bit_hw_scale_avail); return 0; } =20 @@ -434,12 +434,12 @@ static int ad7606c_16bit_chan_scale_setup(struct iio_= dev *indio_dev, return ret; =20 if (differential) { - cs->scale_avail =3D ad7606c_16bit_differential_bipolar_scale_avail; - cs->num_scales =3D + ci->scale_avail =3D ad7606c_16bit_differential_bipolar_scale_avail; + ci->num_scales =3D ARRAY_SIZE(ad7606c_16bit_differential_bipolar_scale_avail); /* Bipolar differential ranges start at 8 (b1000) */ - cs->reg_offset =3D 8; - cs->range =3D 1; + ci->reg_offset =3D 8; + ci->range =3D 1; chan->differential =3D 1; chan->channel2 =3D chan->channel; chan->scan_type.sign =3D 's'; @@ -450,23 +450,23 @@ static int ad7606c_16bit_chan_scale_setup(struct iio_= dev *indio_dev, chan->differential =3D 0; =20 if (bipolar) { - cs->scale_avail =3D ad7606c_16bit_single_ended_bipolar_scale_avail; - cs->num_scales =3D + ci->scale_avail =3D ad7606c_16bit_single_ended_bipolar_scale_avail; + ci->num_scales =3D ARRAY_SIZE(ad7606c_16bit_single_ended_bipolar_scale_avail); /* Bipolar single-ended ranges start at 0 (b0000) */ - cs->reg_offset =3D 0; - cs->range =3D 3; + ci->reg_offset =3D 0; + ci->range =3D 3; chan->scan_type.sign =3D 's'; =20 return 0; } =20 - cs->scale_avail =3D ad7606c_16bit_single_ended_unipolar_scale_avail; - cs->num_scales =3D + ci->scale_avail =3D ad7606c_16bit_single_ended_unipolar_scale_avail; + ci->num_scales =3D ARRAY_SIZE(ad7606c_16bit_single_ended_unipolar_scale_avail); /* Unipolar single-ended ranges start at 5 (b0101) */ - cs->reg_offset =3D 5; - cs->range =3D 1; + ci->reg_offset =3D 5; + ci->range =3D 1; chan->scan_type.sign =3D 'u'; =20 return 0; @@ -476,11 +476,11 @@ static int ad7607_chan_scale_setup(struct iio_dev *in= dio_dev, struct iio_chan_spec *chan) { struct ad7606_state *st =3D iio_priv(indio_dev); - struct ad7606_chan_scale *cs =3D &st->chan_scales[chan->scan_index]; + struct ad7606_chan_info *ci =3D &st->chan_info[chan->scan_index]; =20 - cs->range =3D 0; - cs->scale_avail =3D ad7607_hw_scale_avail; - cs->num_scales =3D ARRAY_SIZE(ad7607_hw_scale_avail); + ci->range =3D 0; + ci->scale_avail =3D ad7607_hw_scale_avail; + ci->num_scales =3D ARRAY_SIZE(ad7607_hw_scale_avail); return 0; } =20 @@ -488,11 +488,11 @@ static int ad7608_chan_scale_setup(struct iio_dev *in= dio_dev, struct iio_chan_spec *chan) { struct ad7606_state *st =3D iio_priv(indio_dev); - struct ad7606_chan_scale *cs =3D &st->chan_scales[chan->scan_index]; + struct ad7606_chan_info *ci =3D &st->chan_info[chan->scan_index]; =20 - cs->range =3D 0; - cs->scale_avail =3D ad7606_18bit_hw_scale_avail; - cs->num_scales =3D ARRAY_SIZE(ad7606_18bit_hw_scale_avail); + ci->range =3D 0; + ci->scale_avail =3D ad7606_18bit_hw_scale_avail; + ci->num_scales =3D ARRAY_SIZE(ad7606_18bit_hw_scale_avail); return 0; } =20 @@ -500,11 +500,11 @@ static int ad7609_chan_scale_setup(struct iio_dev *in= dio_dev, struct iio_chan_spec *chan) { struct ad7606_state *st =3D iio_priv(indio_dev); - struct ad7606_chan_scale *cs =3D &st->chan_scales[chan->scan_index]; + struct ad7606_chan_info *ci =3D &st->chan_info[chan->scan_index]; =20 - cs->range =3D 0; - cs->scale_avail =3D ad7609_hw_scale_avail; - cs->num_scales =3D ARRAY_SIZE(ad7609_hw_scale_avail); + ci->range =3D 0; + ci->scale_avail =3D ad7609_hw_scale_avail; + ci->num_scales =3D ARRAY_SIZE(ad7609_hw_scale_avail); return 0; } =20 @@ -743,7 +743,7 @@ static int ad7606_read_raw(struct iio_dev *indio_dev, { int ret, ch =3D 0; struct ad7606_state *st =3D iio_priv(indio_dev); - struct ad7606_chan_scale *cs; + struct ad7606_chan_info *ci; struct pwm_state cnvst_pwm_state; =20 switch (m) { @@ -758,9 +758,9 @@ static int ad7606_read_raw(struct iio_dev *indio_dev, case IIO_CHAN_INFO_SCALE: if (st->sw_mode_en) ch =3D chan->scan_index; - cs =3D &st->chan_scales[ch]; - *val =3D cs->scale_avail[cs->range][0]; - *val2 =3D cs->scale_avail[cs->range][1]; + ci =3D &st->chan_info[ch]; + *val =3D ci->scale_avail[ci->range][0]; + *val2 =3D ci->scale_avail[ci->range][1]; return IIO_VAL_INT_PLUS_MICRO; case IIO_CHAN_INFO_OVERSAMPLING_RATIO: *val =3D st->oversampling; @@ -795,12 +795,12 @@ static ssize_t in_voltage_scale_available_show(struct= device *dev, { struct iio_dev *indio_dev =3D dev_to_iio_dev(dev); struct ad7606_state *st =3D iio_priv(indio_dev); - struct ad7606_chan_scale *cs =3D &st->chan_scales[0]; - const unsigned int (*vals)[2] =3D cs->scale_avail; + struct ad7606_chan_info *ci =3D &st->chan_info[0]; + const unsigned int (*vals)[2] =3D ci->scale_avail; unsigned int i; size_t len =3D 0; =20 - for (i =3D 0; i < cs->num_scales; i++) + for (i =3D 0; i < ci->num_scales; i++) len +=3D scnprintf(buf + len, PAGE_SIZE - len, "%u.%06u ", vals[i][0], vals[i][1]); buf[len - 1] =3D '\n'; @@ -901,7 +901,7 @@ static int ad7606_write_raw(struct iio_dev *indio_dev, { struct ad7606_state *st =3D iio_priv(indio_dev); unsigned int scale_avail_uv[AD760X_MAX_SCALES]; - struct ad7606_chan_scale *cs; + struct ad7606_chan_info *ci; int i, ret, ch =3D 0; =20 guard(mutex)(&st->lock); @@ -910,21 +910,21 @@ static int ad7606_write_raw(struct iio_dev *indio_dev, case IIO_CHAN_INFO_SCALE: if (st->sw_mode_en) ch =3D chan->scan_index; - cs =3D &st->chan_scales[ch]; - for (i =3D 0; i < cs->num_scales; i++) { - scale_avail_uv[i] =3D cs->scale_avail[i][0] * MICRO + - cs->scale_avail[i][1]; + ci =3D &st->chan_info[ch]; + for (i =3D 0; i < ci->num_scales; i++) { + scale_avail_uv[i] =3D ci->scale_avail[i][0] * MICRO + + ci->scale_avail[i][1]; } val =3D (val * MICRO) + val2; - i =3D find_closest(val, scale_avail_uv, cs->num_scales); + i =3D find_closest(val, scale_avail_uv, ci->num_scales); =20 if (!iio_device_claim_direct(indio_dev)) return -EBUSY; - ret =3D st->write_scale(indio_dev, ch, i + cs->reg_offset); + ret =3D st->write_scale(indio_dev, ch, i + ci->reg_offset); iio_device_release_direct(indio_dev); if (ret < 0) return ret; - cs->range =3D i; + ci->range =3D i; =20 return 0; case IIO_CHAN_INFO_OVERSAMPLING_RATIO: @@ -1115,7 +1115,7 @@ static int ad7606_read_avail(struct iio_dev *indio_de= v, long info) { struct ad7606_state *st =3D iio_priv(indio_dev); - struct ad7606_chan_scale *cs; + struct ad7606_chan_info *ci; unsigned int ch =3D 0; =20 switch (info) { @@ -1130,9 +1130,9 @@ static int ad7606_read_avail(struct iio_dev *indio_de= v, if (st->sw_mode_en) ch =3D chan->scan_index; =20 - cs =3D &st->chan_scales[ch]; - *vals =3D (int *)cs->scale_avail; - *length =3D cs->num_scales * 2; + ci =3D &st->chan_info[ch]; + *vals =3D (int *)ci->scale_avail; + *length =3D ci->num_scales * 2; *type =3D IIO_VAL_INT_PLUS_MICRO; =20 return IIO_AVAIL_LIST; @@ -1655,7 +1655,7 @@ static int ad7606_resume(struct device *dev) struct ad7606_state *st =3D iio_priv(indio_dev); =20 if (st->gpio_standby) { - gpiod_set_value(st->gpio_range, st->chan_scales[0].range); + gpiod_set_value(st->gpio_range, st->chan_info[0].range); gpiod_set_value(st->gpio_standby, 1); ad7606_reset(st); } diff --git a/drivers/iio/adc/ad7606.h b/drivers/iio/adc/ad7606.h index f613583a7fa4095115b0b28e3f8e51cd32b93524..26db8e3c724f47f68b7d5323f5d= 1db75b3334540 100644 --- a/drivers/iio/adc/ad7606.h +++ b/drivers/iio/adc/ad7606.h @@ -86,14 +86,14 @@ struct ad7606_chip_info { }; =20 /** - * struct ad7606_chan_scale - channel scale configuration + * struct ad7606_chan_info - channel configuration * @scale_avail: pointer to the array which stores the available scales * @num_scales: number of elements stored in the scale_avail array * @range: voltage range selection, selects which scale to apply * @reg_offset: offset for the register value, to be applied when * writing the value of 'range' to the register value */ -struct ad7606_chan_scale { +struct ad7606_chan_info { #define AD760X_MAX_SCALES 16 const unsigned int (*scale_avail)[2]; unsigned int num_scales; @@ -106,7 +106,7 @@ struct ad7606_chan_scale { * @dev: pointer to kernel device * @chip_info: entry in the table of chips that describes this device * @bops: bus operations (SPI or parallel) - * @chan_scales: scale configuration for channels + * @chan_info: scale configuration for channels * @oversampling: oversampling selection * @cnvst_pwm: pointer to the PWM device connected to the cnvst pin * @base_address: address from where to read data in parallel operation @@ -137,7 +137,7 @@ struct ad7606_state { struct device *dev; const struct ad7606_chip_info *chip_info; const struct ad7606_bus_ops *bops; - struct ad7606_chan_scale chan_scales[AD760X_MAX_CHANNELS]; + struct ad7606_chan_info chan_info[AD760X_MAX_CHANNELS]; unsigned int oversampling; struct pwm_device *cnvst_pwm; void __iomem *base_address; --=20 2.49.0 From nobody Mon Feb 9 10:44:40 2026 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.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 D4BAE1CEAC2 for ; Fri, 6 Jun 2025 14:20:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749219649; cv=none; b=UlcNmd4QY2M8mdzjEhYMiPFYBTOItbJdPtNtywP3Q5TAjNxI8mzTVyf6XYw3hOp416vXk2gbwLSMc1yAtRZ1vWJGdzpP/QwzwxffZLX6Moz1pGfZkEfVVJvFvEhvg5gL2MDPt+VKpl9CYRPISgA5RUIc2yi2rLNMRrUnaRpWo64= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749219649; c=relaxed/simple; bh=L/gwxvm6plajhtZUJBhnKB7CkU77xzODIZq6h41Wvi8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XGU+fam037Gs3yEFlhkxPFoQyYJf5/2CEf2YRh8Vd4Bv/2UXZt5zpbqbNdCFbgfm7Ape3NJvqCdK/nNx7G46COK2YN729w/m8YTaNfPqsKvMjlb9Inmz0do0FvtR4rjkn4k4CPy5dupKwdHxrlFpMjMy3IzLJrT6JB1VbazkVbA= 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=UZLVYr9z; arc=none smtp.client-ip=209.85.128.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="UZLVYr9z" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-450cfb790f7so16998365e9.0 for ; Fri, 06 Jun 2025 07:20:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1749219646; x=1749824446; 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=8HpQeVbRwMAK/HKOtbrEdsV8ikZIsnrbhJJIVEFRiLg=; b=UZLVYr9ztQa6BVFfwr3aiSB10sy0axQE0a3TBQBgJdgvoOT01bcbF9w7lf5YJNChCI 94BCa6EsDFNQV5At+nHN9o4ATVXdI+lWKKeNcHchwliO/Gglu35YTAJVxLqnjySFxYiy 1q7emvStVxmdRoE0+0duHjKJ3a+Yotyif/yn3SVJoCzEyfN5HO9mdATCDwqJC42hdX0L xMi0X0Z+NmYMVezqyVG0zLF2ZE0Q0DWZEbsUEN14CrMAmYWlhfZweuyNpBBrQqGvnJUB 3pIA7+epvNvhfWJWZlzfGlTiP8HH3VolCOsrn27dxWgBF7he3/LsAKt/lRXZU5ERtjjR vQUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749219646; x=1749824446; 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=8HpQeVbRwMAK/HKOtbrEdsV8ikZIsnrbhJJIVEFRiLg=; b=aXc3FYZ1O7pDZ1T7r+lhs6Q7gswNGXNBkAVO/+cxQjP7w1t3hzcfORjbEMIlJ0nuH5 W29LlKKZ4jczFHUUs8nja0ChH2T2FXlOdrAPT7Ejj2irj16ubVIJhhGUT7J1KiH8kdQu fuVNz9PfF0vRkywAyXthB2s9tuKLUB0rpWu1pf25O8loglAISfDt/Wl0Fs41qurdBItQ YPNiZe5+Udqjp1S1hQqLTFJMbkp9A4I8SVddaIeWpgLlxKvSbZJY4TSC05/TzYDGM9JI Uf2tj/pb4m/l/OF8yWROrAh6Px/N+RyEjPBhNFu+8elRDbcQ8i7JPRB66qcfFjImXsJX HL2A== X-Forwarded-Encrypted: i=1; AJvYcCWRqjLrAG16F/GXC8c4wnJeVpuH+K6HBtnKO4+HQvVY+pHcuOxxtEjpxJhpNrL64GbSk1H/t/1k59Sbk8o=@vger.kernel.org X-Gm-Message-State: AOJu0YzZ45HOF7muS1/mFpPZsCezGSnXImzlYQRLVWlG+yxLrgA8sNkQ nOpH6W4Rj+T4498/gjTr6sUa9321qNqUQumWbdlQUiaMzaEyoF1erGQ2jMCOkxzOGCw= X-Gm-Gg: ASbGncstaVH6uCN+gaX30YXvVJAWbl8SK1QsKdG64DvWxFduj0CbLRxlLQ8NM3gwczp 1avTH99DVvY1M3cYIQZzKQOSyOzPgF7gLcDKxaWtD/A847ndNCYbc/9jzjktSfJlGW5eFQGlJjv b1FYJF85F6cZkia4W9wDdr1Jm5xGGyNThdEoGvGCeUZwkBmIkU9a8n0q4i+0kAqt+PyeSU+e6ul MyRmqCc0K0HerYnaxGEgvUgxbibuvRtLHmIZMR+A26ztYPT5N6u3munFNgrnpMwK+9vPTD1xBAH 6uDLz6CE/hwalmv2AUpU+8wNlwaZbizrAy4e1b9kJ6n/DTTtDraV4PsH/jVMGU7j2T356MrLi2/ GSAcMVuNd6iyVpD/67D8yJWdtROGUvq8LYj624gkIIQ== X-Google-Smtp-Source: AGHT+IFkrVts+bEEPUp4BBAtLVZPot/aA/9X0oPRBOSSiEtVNiKU2TRV736+tfIKnO29f0u+64AR8w== X-Received: by 2002:a05:600c:a08e:b0:43c:fa24:873e with SMTP id 5b1f17b1804b1-45201391375mr39843995e9.13.1749219646003; Fri, 06 Jun 2025 07:20:46 -0700 (PDT) Received: from [192.168.0.2] (host-80-116-51-117.retail.telecomitalia.it. [80.116.51.117]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45213754973sm25686345e9.35.2025.06.06.07.20.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Jun 2025 07:20:45 -0700 (PDT) From: Angelo Dureghello X-Google-Original-From: Angelo Dureghello Date: Fri, 06 Jun 2025 16:19:22 +0200 Subject: [PATCH v9 7/7] iio: adc: ad7606: add gain calibration 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: <20250606-wip-bl-ad7606-calibration-v9-7-6e014a1f92a2@baylibre.com> References: <20250606-wip-bl-ad7606-calibration-v9-0-6e014a1f92a2@baylibre.com> In-Reply-To: <20250606-wip-bl-ad7606-calibration-v9-0-6e014a1f92a2@baylibre.com> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Michael Hennerich , devicetree@vger.kernel.org, Angelo Dureghello X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5283; i=adureghello@baylibre.com; h=from:subject:message-id; bh=IKWt2EvUAc6fFAR+GqaSzL5Mis4xCa3ugoUhm+8Psbg=; b=owGbwMvMwCXGf3bn1e/btlsznlZLYshw+vHs2gXb+MPrOrytJjwNkI28X7Y0uLH1//aN7De9i s4JPZvN1VHKwiDGxSArpshSlxhhEno7VEp5AeNsmDmsTCBDGLg4BWAiDy4zMtxgt1teuLT3rqGu 9Zrtq5u+T3mRsjCj5NCuAl824/A3Ux4w/NPRap+vuKLnh0zcy9Dv1YZKcTXu/Gdeiqr2VXotf5R 2kwMA X-Developer-Key: i=adureghello@baylibre.com; a=openpgp; fpr=703CDFAD8B573EB00850E38366D1CB9419AF3953 From: Angelo Dureghello Add gain calibration support, using resistor values set on devicetree, values to be set accordingly with ADC external RFilter, as explained in the ad7606c-16 datasheet, rev0, page 37. Usage example in the fdt yaml documentation. Signed-off-by: Angelo Dureghello Reviewed-by: Andy Shevchenko --- drivers/iio/adc/ad7606.c | 39 +++++++++++++++++++++++++++++++++++++++ drivers/iio/adc/ad7606.h | 5 +++++ 2 files changed, 44 insertions(+) diff --git a/drivers/iio/adc/ad7606.c b/drivers/iio/adc/ad7606.c index d19682186e7cd73a60541f62adf08d987ba24ec3..d9271894f091a837d29197f7de8= 92c022b7e4152 100644 --- a/drivers/iio/adc/ad7606.c +++ b/drivers/iio/adc/ad7606.c @@ -33,6 +33,10 @@ =20 #include "ad7606.h" =20 +#define AD7606_CALIB_GAIN_MIN 0 +#define AD7606_CALIB_GAIN_STEP 1024 +#define AD7606_CALIB_GAIN_MAX (63 * AD7606_CALIB_GAIN_STEP) + /* * Scales are computed as 5000/32768 and 10000/32768 respectively, * so that when applied to the raw values they provide mV values. @@ -180,6 +184,7 @@ const struct ad7606_chip_info ad7606b_info =3D { .scale_setup_cb =3D ad7606_16bit_chan_scale_setup, .sw_setup_cb =3D ad7606b_sw_mode_setup, .offload_storagebits =3D 32, + .calib_gain_avail =3D true, .calib_offset_avail =3D ad7606_calib_offset_avail, .calib_phase_avail =3D ad7606b_calib_phase_avail, }; @@ -195,6 +200,7 @@ const struct ad7606_chip_info ad7606c_16_info =3D { .scale_setup_cb =3D ad7606c_16bit_chan_scale_setup, .sw_setup_cb =3D ad7606b_sw_mode_setup, .offload_storagebits =3D 32, + .calib_gain_avail =3D true, .calib_offset_avail =3D ad7606_calib_offset_avail, .calib_phase_avail =3D ad7606c_calib_phase_avail, }; @@ -246,6 +252,7 @@ const struct ad7606_chip_info ad7606c_18_info =3D { .scale_setup_cb =3D ad7606c_18bit_chan_scale_setup, .sw_setup_cb =3D ad7606b_sw_mode_setup, .offload_storagebits =3D 32, + .calib_gain_avail =3D true, .calib_offset_avail =3D ad7606c_18bit_calib_offset_avail, .calib_phase_avail =3D ad7606c_calib_phase_avail, }; @@ -306,6 +313,7 @@ static int ad7606_get_chan_config(struct iio_dev *indio= _dev, int ch, bool *bipolar, bool *differential) { struct ad7606_state *st =3D iio_priv(indio_dev); + struct ad7606_chan_info *ci; unsigned int num_channels =3D st->chip_info->num_adc_channels; struct device *dev =3D st->dev; int ret; @@ -349,6 +357,14 @@ static int ad7606_get_chan_config(struct iio_dev *indi= o_dev, int ch, return -EINVAL; } =20 + ci =3D &st->chan_info[reg - 1]; + + ci->r_gain =3D 0; + ret =3D fwnode_property_read_u32(child, "adi,rfilter-ohms", + &ci->r_gain); + if (ret =3D=3D 0 && ci->r_gain > AD7606_CALIB_GAIN_MAX) + return -EINVAL; + return 0; } =20 @@ -1352,6 +1368,23 @@ static int ad7606b_sw_mode_setup(struct iio_dev *ind= io_dev) return st->bops->sw_mode_config(indio_dev); } =20 +static int ad7606_set_gain_calib(struct ad7606_state *st) +{ + struct ad7606_chan_info *ci; + int i, ret; + + for (i =3D 0; i < st->chip_info->num_adc_channels; i++) { + ci =3D &st->chan_info[i]; + ret =3D st->bops->reg_write(st, AD7606_CALIB_GAIN(i), + DIV_ROUND_CLOSEST(ci->r_gain, + AD7606_CALIB_GAIN_STEP)); + if (ret) + return ret; + } + + return 0; +} + static int ad7606_probe_channels(struct iio_dev *indio_dev) { struct ad7606_state *st =3D iio_priv(indio_dev); @@ -1630,6 +1663,12 @@ int ad7606_probe(struct device *dev, int irq, void _= _iomem *base_address, st->chip_info->sw_setup_cb(indio_dev); } =20 + if (st->sw_mode_en && st->chip_info->calib_gain_avail) { + ret =3D ad7606_set_gain_calib(st); + if (ret) + return ret; + } + return devm_iio_device_register(dev, indio_dev); } EXPORT_SYMBOL_NS_GPL(ad7606_probe, "IIO_AD7606"); diff --git a/drivers/iio/adc/ad7606.h b/drivers/iio/adc/ad7606.h index 26db8e3c724f47f68b7d5323f5d1db75b3334540..2951bb731354d64cbec6e8460b3= d841a22bb17ec 100644 --- a/drivers/iio/adc/ad7606.h +++ b/drivers/iio/adc/ad7606.h @@ -66,6 +66,7 @@ typedef int (*ad7606_sw_setup_cb_t)(struct iio_dev *indio= _dev); * @init_delay_ms: required delay in milliseconds for initialization * after a restart * @offload_storagebits: storage bits used by the offload hw implementation + * @calib_gain_avail: chip supports gain calibration * @calib_offset_avail: pointer to offset calibration range/limits array * @calib_phase_avail: pointer to phase calibration range/limits array */ @@ -81,6 +82,7 @@ struct ad7606_chip_info { bool os_req_reset; unsigned long init_delay_ms; u8 offload_storagebits; + bool calib_gain_avail; const int *calib_offset_avail; const int (*calib_phase_avail)[2]; }; @@ -92,6 +94,8 @@ struct ad7606_chip_info { * @range: voltage range selection, selects which scale to apply * @reg_offset: offset for the register value, to be applied when * writing the value of 'range' to the register value + * @r_gain: gain resistor value in ohms, to be set to match the + * external r_filter value */ struct ad7606_chan_info { #define AD760X_MAX_SCALES 16 @@ -99,6 +103,7 @@ struct ad7606_chan_info { unsigned int num_scales; unsigned int range; unsigned int reg_offset; + unsigned int r_gain; }; =20 /** --=20 2.49.0