From nobody Sat Jun 13 23:44:54 2026 Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) (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 1B0A43921CE for ; Sat, 13 Jun 2026 19:10:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781377835; cv=none; b=Jq62UTVs5KS4vfGv+Le1EZLlrxoUjuOWTkOVx5qvEKJherDcCYcmBd94VIdbNcugYasPPIlBrInfp4om8z53TljJ/73t15L5hpLx7qbA2GnjAV56DzeT+9os5wqfv4PVzyb/xCJxCkQEM1DsNJgaz+3N0KgIc3Sg5YNYtDoeslo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781377835; c=relaxed/simple; bh=5WojoqxUs/ntPznjUv9nyPMgBf7/G0hvcdYOyUnOR4c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gd7XdU9uGlfPogiDWhvjKP+aVuVu3GtYMM7d3ksm0b5oA823Pb0wlrrVnOj/j5ZNp/+f5DXAFvzt/OBN/RMFCTf/NQ4E62vx5F2eiERnpGStGSXUmoKI0WkjgH1xUgfO398MiOtWkOwo7qyaUx54CahXm22QEjid8E0APQ4cBVw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=sNwLRfb3; arc=none smtp.client-ip=209.85.218.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="sNwLRfb3" Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-bec4639953dso343609566b.1 for ; Sat, 13 Jun 2026 12:10:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781377832; x=1781982632; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ODs+nJPeDxYTbJmLgo82ZIoGtAVgjXH6j+M6Vh+Y9KI=; b=sNwLRfb3zO0B/ei0Ec4j8ot2RRch4mem4f3ZMJYBtg9mkC5wL7/zIy60IxuQcu454V iqboEXwKmrG8AlwQAv6UGbBsTSSRrbjjFtQaFV5PqzOiPYzGp59K9EMForl8pnYlqmOQ w86hWy042s8wHtgh7ZT0Nl5akk7dyOyMUmANKABUyQc3VCOpNu48cSp41perY+3VbjDT clUqmjtBPNLtUNPKJrim1ybJj2LqyfIYuZgxxM+oVtN4IXO6/+nIOv6nTR1hy2eek/YR Wp133VY17E2CVqdfNlfEWTDzKSyZtysvhX8+VVcfqKlv1AyfmrxdRA/wXBBsfPS0Z/xI HfPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781377832; x=1781982632; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ODs+nJPeDxYTbJmLgo82ZIoGtAVgjXH6j+M6Vh+Y9KI=; b=hfJLhqGsUwNZCLEnwmg8P7jaOKTwc4fou+leG8NHrKuRKxexdjzpbZKiYZ/8pnjAGt M6VfJjBO1ELRAp0pHbwl8qQU1NcAjkUS2PFqMJ41FOA2juQdnzHdiwIeYBNFlCRpHTqV dwSGNphUrlHxu7CK495pFuRMdrOXaGHHU8DKiaT3K6E2eZ2Xbkuogpu0EIr4JCyrZOdT 63fhvmbGE0BMRlsRu236EzW+0GtmpPcxoTSCVzGa0re+g/km3+cDzL2y7t45ZeEd/31M Uu8/blnxLu/Z3gSIYO72PGsFRjIEGGJ51M1gOW3P400BEUwhsj/Y27o6yN5DbR7SDfuv je9A== X-Forwarded-Encrypted: i=1; AFNElJ/j/SmHJPbrquz/dqrSM/QfyGmeHKjsqCeKTbmdXTrVPKJUYL5Ac4LKsgMjLT87lcdfz3VfyRouCmntsx8=@vger.kernel.org X-Gm-Message-State: AOJu0YyqwfLtMVhtgMX4KC0n4PzYlSkI36SA3yFVHrtbpSBSkqxzhFX4 bFmnjQL1DWjwidWfsnzVL3mZXLcHkZr3sAQELRKeIA1Opr/Hrlf5k1xQbVORSdX0 X-Gm-Gg: Acq92OGzD6t/XfuhjGxLk36U3iKrUURCA2Kq4zMk1ugIUOtQ2VfpxBIlBnHTTPg/nmT Yn70G7Pkho3XJb9dlAuklWf/9XuVLaJe/D0/Gts2nf1CjUxxCX1/gfep+cCP/qMNELSjrreUVYr nOTbwb+ifW+kFrxnQ9mwLm6vSzFOCy436oxlw0HIEUSyHT2A3H5kQvv36yOd9rQgaSar9XD2gJz Di8uOCVmRhHBIGsNTjLwAqdKsdf+KE5Lf2hzCIEnSAVTwuIHifB2uKNA08RkcWsd0GGmO1H8LzE U9SNW0/qV3P7DG0cC7cdj05meEQKza3fW6rXZWaLttTWzr/5AfRiiV4ZRh68o1Vais0DkWi7FZt r+Zm6j1OB0zBtG/cXvw1l6MIoB6zaMhsq49DpB6IwwtcbxVrL9uBhuQJfuoCRKQIynnV7oYQXu6 6Mosq+6rzBTjD3JOUmH4FT3C8zJOC14dWoJFqpvTfIY0gdis6H+STPIVJbxg== X-Received: by 2002:a17:907:762f:b0:bd9:2b46:99b0 with SMTP id a640c23a62f3a-bfe2b3ea941mr250053666b.49.1781377832427; Sat, 13 Jun 2026 12:10:32 -0700 (PDT) Received: from MSI-LINUX.kielce.vectranet.pl ([2a02:2a40:27ec:2900:9790:7740:8855:4d8c]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb4b2276fsm237193366b.17.2026.06.13.12.10.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2026 12:10:30 -0700 (PDT) From: Jakub Szczudlo To: linux-iio@vger.kernel.org Cc: andy@kernel.org, antoniu.miclaus@analog.com, conor+dt@kernel.org, devicetree@vger.kernel.org, dlechner@baylibre.com, duje@dujemihanovic.xyz, jic23@kernel.org, jishnu.prakash@oss.qualcomm.com, jorge.marques@analog.com, krzk+dt@kernel.org, linusw@kernel.org, linux-kernel@vger.kernel.org, marcelo.schmitt@analog.com, mazziesaccount@gmail.com, mike.looijmans@topic.nl, nuno.sa@analog.com, robh@kernel.org, sakari.ailus@linux.intel.com, wens@kernel.org, joshua.crofts1@gmail.com, Jakub Szczudlo Subject: [PATCH v3 1/3] dt-bindings: iio: adc: ti,ads1100: add support for ADS1110 Date: Sat, 13 Jun 2026 21:09:55 +0200 Message-ID: <20260613190957.654798-2-jakubszczudlo40@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260613190957.654798-1-jakubszczudlo40@gmail.com> References: <20260613190957.654798-1-jakubszczudlo40@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Register layouts are the same as for ADS1100 but ADS1110 have different datarates and have internal voltage reference that is always 2.048V Signed-off-by: Jakub Szczudlo --- .../devicetree/bindings/iio/adc/ti,ads1100.yaml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/iio/adc/ti,ads1100.yaml b/Do= cumentation/devicetree/bindings/iio/adc/ti,ads1100.yaml index 970ccab15e1e..28c5e2dd0ad6 100644 --- a/Documentation/devicetree/bindings/iio/adc/ti,ads1100.yaml +++ b/Documentation/devicetree/bindings/iio/adc/ti,ads1100.yaml @@ -4,19 +4,23 @@ $id: http://devicetree.org/schemas/iio/adc/ti,ads1100.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# =20 -title: TI ADS1100/ADS1000 single channel I2C analog to digital converter +title: TI ADS1100 and similar single channel I2C Analog to Digital Convert= ers =20 maintainers: - Mike Looijmans =20 description: | - Datasheet at: https://www.ti.com/lit/gpn/ads1100 + Datasheets: + - https://www.ti.com/lit/gpn/ads1000 + - https://www.ti.com/lit/gpn/ads1100 + - https://www.ti.com/lit/gpn/ads1110 =20 properties: compatible: enum: - - ti,ads1100 - ti,ads1000 + - ti,ads1100 + - ti,ads1110 =20 reg: maxItems: 1 --=20 2.47.3 From nobody Sat Jun 13 23:44:54 2026 Received: from mail-ej1-f51.google.com (mail-ej1-f51.google.com [209.85.218.51]) (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 54F0B39891D for ; Sat, 13 Jun 2026 19:10:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781377840; cv=none; b=Nzqf1J9PBpkokotNeyCHLeJ9AMtfKW4EwgArZUWzmMKsfNOSevsPkYNueWlx9h7ZSsu6FZQUmJ9SAuAlKvSqsdBdoLQy3KtYp9xz7l+s8j/qWzXGV1qjgmntRBhZgbCxgPkRlhqOzwflVkUqdfYRXZ9OONCWpUp+2cUMZZpXYtA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781377840; c=relaxed/simple; bh=/ATcjgQBg4PKaQAKJoJ+QyJHoBhwM3d25iuyZbX1jKE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=P4zdIg+FIeNxSgfde2ShaRCVJpY09VzMy2ToajcHB2n3plvY6zzKXzNEDKI6PR9hb9LZ86CK0ZElxlqjq+Es4WP5S6Ico4DJt+No4Qy+p3tZZimQs9ID0cH8LzdXOqazpC/4RA/1n9baAitjqXPTZ1Yd8hfDbaop9xqLVcv3GKA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UUyjg8N9; arc=none smtp.client-ip=209.85.218.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UUyjg8N9" Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-bebb72b845aso345342766b.3 for ; Sat, 13 Jun 2026 12:10:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781377837; x=1781982637; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YI/dslK6AvANzEH96zaO8Q+P15bLXwMMeUyI+PCap/M=; b=UUyjg8N9k9KaovYFY3vaBVbF4e3QD1ibqFkfaKYvpLHhDtm84JQLdWGWI5XxzoYXo8 m7NL5+dyYQOHsqCI7XUBPevWPtJRmcpJDnqQ1byNMkv2cqYVj7x+ZtwepWhThXOfwmLs AS0dndpaOTPDoKsJIA23Pw7WEeUkNyUycqy2vUbknhdCN0Q7DeXQoEdL83t8rTbmkCJo xiOax2fnrsZxFZp9Md033AGIhqx6OuW0Yj1nS7H48/XBD1PXhax1OCf4PdCuiFy8Dv5I k0u7YNJM3ZjC4rx0eey36NgZ2CzsCGI+gEOURVntCnoNU8d8iKfqDg/sHbrHW5ZHhWoK Maig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781377837; x=1781982637; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=YI/dslK6AvANzEH96zaO8Q+P15bLXwMMeUyI+PCap/M=; b=NOIdfoWhQCLo77xNAwKIfC+3yqpd41foHBgxWFU969SFvXE1AmRhzaPoanvMG4BXuk Q7rt7PJtpvq/nb0MGni09IhQpeEF4PcK2R9ObC/8dbfUrObcjtbnIKnFSBxDf34uXLmg W2eYUD5sN3ojTL2X7vMPADAR5ruinBOQ64Q7l83MxaZy2FMNgYdRL5LqAnl4erh3wxb9 mwzolFWgDDm17YkItLYPyv6U0SU+Hc4+PPh3+o4S6pcFAsYHjWaJ6lxUbywC15bJ7P7m +Klt9gyTT4kI+FR6M8vah+bTVR3tLo0i6r4SWmu6m1Y+y2sQJtakV+o/r71W26t9I1sy UUxg== X-Forwarded-Encrypted: i=1; AFNElJ8qhW09OBY3X6w4zY7gskG0zh+o993v7Ps1l748TaIsHzn7+NpVdNM0tDKhuNpWxdTr19NKnpCjyLvT6sk=@vger.kernel.org X-Gm-Message-State: AOJu0YwR3FBRGJg+4/vMZ2fgs5ulcO58jiTMXqKCydofyYyhpEJLjcX2 Qdetok6ZQxObkk9B9m2D1zg55lUOOAH6DGWVd7KCxLWURTIRACX+Vm+X X-Gm-Gg: Acq92OEw/IOYjXpDIoDOmNkGymbYDVwIqAEzyQAot3Yfg2XBNvcfxIt2tq7NkDtk5li wK/6///3HeZSbqNYp1CDYKb67ux9+/yruFgsiuxQvJgpmH+Zrtg9sj8kY6iDW+2p1kGPJdeJQaf 2gBuz5lgrKaF52XadqH3HURXiYhVLJ4B9iPYt2hkUDLNtnQKHkZedZVUOByIGYSVPgYpZzsJ7Zl 0LQXN4UC10hfVJ1mkglFGF4RC//gTACaGGmUrb78Jiqxhb1nwSztrJ05r3Nsf2pmkfxfEPsBJOh Hoq1JTpRerwaaq2RtRseUdq7ICVUoYjfOGgqkZG02T9eC0uleycPmBtSfDayq5eyB3T+gzvqgeJ WdM7EuT8toeEqA4NaUUvrYMtP89+L2T1x3PugZScxlaXc2rrrz/a7t5LJl2T7geKv9Bd15xa2EB dZcShc+i4U980DcJHat3To8NUaF1YNuQwmswY0Ol4/x8fSxtTIXA19HUNjFg== X-Received: by 2002:a17:907:7285:b0:bee:aed6:9d50 with SMTP id a640c23a62f3a-bfe2bfa08a5mr337807066b.48.1781377836530; Sat, 13 Jun 2026 12:10:36 -0700 (PDT) Received: from MSI-LINUX.kielce.vectranet.pl ([2a02:2a40:27ec:2900:9790:7740:8855:4d8c]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb4b2276fsm237193366b.17.2026.06.13.12.10.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2026 12:10:35 -0700 (PDT) From: Jakub Szczudlo To: linux-iio@vger.kernel.org Cc: andy@kernel.org, antoniu.miclaus@analog.com, conor+dt@kernel.org, devicetree@vger.kernel.org, dlechner@baylibre.com, duje@dujemihanovic.xyz, jic23@kernel.org, jishnu.prakash@oss.qualcomm.com, jorge.marques@analog.com, krzk+dt@kernel.org, linusw@kernel.org, linux-kernel@vger.kernel.org, marcelo.schmitt@analog.com, mazziesaccount@gmail.com, mike.looijmans@topic.nl, nuno.sa@analog.com, robh@kernel.org, sakari.ailus@linux.intel.com, wens@kernel.org, joshua.crofts1@gmail.com, Jakub Szczudlo Subject: [PATCH v3 2/3] iio: adc: Add ti-ads1110 support to ti-ads1100 driver Date: Sat, 13 Jun 2026 21:09:56 +0200 Message-ID: <20260613190957.654798-3-jakubszczudlo40@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260613190957.654798-1-jakubszczudlo40@gmail.com> References: <20260613190957.654798-1-jakubszczudlo40@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add ADS1110 support that have faster datarate than ADS1100, it also uses internal voltage reference of 2.048V for measurement. Signed-off-by: Jakub Szczudlo --- drivers/iio/adc/Kconfig | 6 +-- drivers/iio/adc/ti-ads1100.c | 83 +++++++++++++++++++++++++++--------- 2 files changed, 65 insertions(+), 24 deletions(-) diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig index a9dedbb8eb46..54a0149a3838 100644 --- a/drivers/iio/adc/Kconfig +++ b/drivers/iio/adc/Kconfig @@ -1747,11 +1747,11 @@ config TI_ADS1018 called ti-ads1018. =20 config TI_ADS1100 - tristate "Texas Instruments ADS1100 and ADS1000 ADC" + tristate "Texas Instruments ADS1100 and similar single channel I2C ADC" depends on I2C help - If you say yes here you get support for Texas Instruments ADS1100 and - ADS1000 ADC chips. + If you say yes here you get support TI ADS1100 and similar single + channel I2C Analog to Digital Converters =20 This driver can also be built as a module. If so, the module will be called ti-ads1100. diff --git a/drivers/iio/adc/ti-ads1100.c b/drivers/iio/adc/ti-ads1100.c index aa8946063c7d..76de2466dc53 100644 --- a/drivers/iio/adc/ti-ads1100.c +++ b/drivers/iio/adc/ti-ads1100.c @@ -5,7 +5,7 @@ * Copyright (c) 2023, Topic Embedded Products * * Datasheet: https://www.ti.com/lit/gpn/ads1100 - * IIO driver for ADS1100 and ADS1000 ADC 16-bit I2C + * IIO driver for ADS1100 and similar single channel ADC 16-bit I2C */ =20 #include @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -39,17 +40,41 @@ #define ADS1100_SINGLESHOT ADS1100_CFG_SC =20 #define ADS1100_SLEEP_DELAY_MS 2000 +#define ADS1110_REFERENCE_VOLTAGE_MILIVOLTS 2048 + +/* Timeout based on the minimum sample rate of 8 SPS (7500000us) */ +#define ADS1100_MAX_DRDY_TIMEOUT 7500000 =20 static const int ads1100_data_rate[] =3D { 128, 32, 16, 8 }; +static const int ads1110_data_rate[] =3D { 240, 60, 30, 15 }; static const int ads1100_data_rate_bits[] =3D { 12, 14, 15, 16 }; =20 +struct ads1100_config { + const char *name; + const int *data_rate; + bool has_reference_voltage; +}; + +static const struct ads1100_config ads1100_config =3D { + .name =3D "ads1100", + .data_rate =3D ads1100_data_rate, + .has_reference_voltage =3D false, +}; + +static const struct ads1100_config ads1110_config =3D { + .name =3D "ads1110", + .data_rate =3D ads1110_data_rate, + .has_reference_voltage =3D true, +}; + struct ads1100_data { struct i2c_client *client; struct regulator *reg_vdd; struct mutex lock; int scale_avail[2 * 4]; /* 4 gain settings */ + struct ads1100_config *ads_config; u8 config; - bool supports_data_rate; /* Only the ADS1100 can select the rate */ + bool supports_data_rate; /* Only the ADS1100/ADS1110 can select the rate = */ }; =20 static const struct iio_chan_spec ads1100_channel =3D { @@ -85,6 +110,19 @@ static int ads1100_set_config_bits(struct ads1100_data = *data, u8 mask, u8 value) return 0; }; =20 +static int ads1100_get_voltage_milivolts(struct ads1100_data *data) +{ + if (data->ads_config->has_reference_voltage) + return ADS1110_REFERENCE_VOLTAGE_MILIVOLTS; + else + return regulator_get_voltage(data->reg_vdd) / MILLI; +} + +static int ads1100_get_voltage_microvolts(struct ads1100_data *data) +{ + return ads1100_get_voltage_milivolts(data) * MICRO / MILLI; +} + static int ads1100_data_bits(struct ads1100_data *data) { return ads1100_data_rate_bits[FIELD_GET(ADS1100_DR_MASK, data->config)]; @@ -107,9 +145,9 @@ static int ads1100_get_adc_result(struct ads1100_data *= data, int chan, int *val) =20 pm_runtime_put_autosuspend(&data->client->dev); =20 - if (ret < 0) { + if (ret < 2) { dev_err(&data->client->dev, "I2C read fail: %d\n", ret); - return ret; + return -EIO; } =20 /* Value is always 16-bit 2's complement */ @@ -135,7 +173,7 @@ static int ads1100_set_scale(struct ads1100_data *data,= int val, int val2) if (!val2) return -EINVAL; =20 - microvolts =3D regulator_get_voltage(data->reg_vdd); + microvolts =3D ads1100_get_voltage_microvolts(data); /* * val2 is in 'micro' units, n =3D val2 / 1000000 * result must be millivolts, d =3D microvolts / 1000 @@ -159,22 +197,17 @@ static int ads1100_set_data_rate(struct ads1100_data = *data, int chan, int rate) =20 size =3D data->supports_data_rate ? ARRAY_SIZE(ads1100_data_rate) : 1; for (i =3D 0; i < size; i++) { - if (ads1100_data_rate[i] =3D=3D rate) + if (data->ads_config->data_rate[i] =3D=3D rate) return ads1100_set_config_bits(data, ADS1100_DR_MASK, - FIELD_PREP(ADS1100_DR_MASK, i)); + FIELD_PREP(ADS1100_DR_MASK, i)); } =20 return -EINVAL; } =20 -static int ads1100_get_vdd_millivolts(struct ads1100_data *data) -{ - return regulator_get_voltage(data->reg_vdd) / (MICRO / MILLI); -} - static void ads1100_calc_scale_avail(struct ads1100_data *data) { - int millivolts =3D ads1100_get_vdd_millivolts(data); + int millivolts =3D ads1100_get_voltage_milivolts(data); unsigned int i; =20 for (i =3D 0; i < ARRAY_SIZE(data->scale_avail) / 2; i++) { @@ -196,7 +229,7 @@ static int ads1100_read_avail(struct iio_dev *indio_dev, switch (mask) { case IIO_CHAN_INFO_SAMP_FREQ: *type =3D IIO_VAL_INT; - *vals =3D ads1100_data_rate; + *vals =3D data->ads_config->data_rate; if (data->supports_data_rate) *length =3D ARRAY_SIZE(ads1100_data_rate); else @@ -233,12 +266,11 @@ static int ads1100_read_raw(struct iio_dev *indio_dev, return IIO_VAL_INT; case IIO_CHAN_INFO_SCALE: /* full-scale is the supply voltage in millivolts */ - *val =3D ads1100_get_vdd_millivolts(data); + *val =3D ads1100_get_voltage_milivolts(data); *val2 =3D 15 + FIELD_GET(ADS1100_PGA_MASK, data->config); return IIO_VAL_FRACTIONAL_LOG2; case IIO_CHAN_INFO_SAMP_FREQ: - *val =3D ads1100_data_rate[FIELD_GET(ADS1100_DR_MASK, - data->config)]; + *val =3D data->ads_config->data_rate[FIELD_GET(ADS1100_DR_MASK, data->co= nfig)]; return IIO_VAL_INT; default: return -EINVAL; @@ -307,6 +339,7 @@ static int ads1100_probe(struct i2c_client *client) struct iio_dev *indio_dev; struct ads1100_data *data; struct device *dev =3D &client->dev; + const struct ads1100_config *model; int ret; =20 indio_dev =3D devm_iio_device_alloc(dev, sizeof(*data)); @@ -338,6 +371,12 @@ static int ads1100_probe(struct i2c_client *client) if (ret) return ret; =20 + model =3D device_get_match_data(dev); + if (!model) + return dev_err_probe(dev, -EINVAL, + "Can't get device data from firmware\n"); + + data->ads_config =3D (struct ads1100_config *)model; ret =3D ads1100_setup(data); if (ret) return dev_err_probe(dev, ret, @@ -400,16 +439,18 @@ static DEFINE_RUNTIME_DEV_PM_OPS(ads1100_pm_ops, NULL); =20 static const struct i2c_device_id ads1100_id[] =3D { - { "ads1100" }, - { "ads1000" }, + { .name =3D "ads1000", .driver_data =3D (kernel_ulong_t)&ads1100_config }, + { .name =3D "ads1100", .driver_data =3D (kernel_ulong_t)&ads1100_config }, + { .name =3D "ads1110", .driver_data =3D (kernel_ulong_t)&ads1110_config }, { } }; =20 MODULE_DEVICE_TABLE(i2c, ads1100_id); =20 static const struct of_device_id ads1100_of_match[] =3D { - {.compatible =3D "ti,ads1100" }, - {.compatible =3D "ti,ads1000" }, + { .compatible =3D "ti,ads1000", .data =3D &ads1100_config }, + { .compatible =3D "ti,ads1100", .data =3D &ads1100_config }, + { .compatible =3D "ti,ads1110", .data =3D &ads1110_config }, { } }; =20 --=20 2.47.3 From nobody Sat Jun 13 23:44:54 2026 Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2ECD739935E for ; Sat, 13 Jun 2026 19:10:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781377843; cv=none; b=HCSXQ0sh1CMk0QJL9nxHcRAIRX98pm3UW79W0ZCTuwOc0mKSqIE0pOusbG4WDZV9eANzQdN+F/LJtZMSTvIKaaNsCZor1VxYVemk2cyuHZ4zvf0SOrf6KcSo9dftVzJ7X/FKH/xj3b+qDVuSH22/os1gL1iMQclFWLn1bvd0c1A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781377843; c=relaxed/simple; bh=P7pHfBuzRGXNEHM0qtcu5fedmFVFkDeg8kglyBrhLbA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZMpLJtg+08GiGynw6p9Az0A59kSDDrAEDwKvGnoZSc3dchv7t6HWyP6MywUEA5xQEab+gSNOoPo3tEbNaujRtDQw3Nyyev5NmHBmSGxd4z+0ae6r60MDDn7IB1aM2ua8bo0tvNOAr3STsEv5snoe9oobj98c/Ol8g4qSEfxvXXQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nEUAXmcj; arc=none smtp.client-ip=209.85.218.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nEUAXmcj" Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-bed2b9bfa02so267893866b.1 for ; Sat, 13 Jun 2026 12:10:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781377841; x=1781982641; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kjXinVBWr5oKzZT7R8oqfYcCkCKQtwdSjnXjkSKyW/w=; b=nEUAXmcjD3ATLqvi+Hu8IBVjxVJwlSTOq7SA+trCzFT/H63cQNEzubMeCFIO15NKQ/ VLwKVmbjBrOaGA8t9zcL6GqdY5HH6r1UaB/Y4ok1zCzEgfZpkvW81vaj4c4vTIlhnn5R 9ymjOCXBORRPhTowj7oq5mSruqyiWtuLe+XX2pPOSsc1ucIrTENaup6WD+i39WQ/qtjt FStphAd52lPYvQfIvnqjmiXvJ+01dGkxfoomja7h63DYM1UDTGu2IBgZOmWZi19XZmTR 4gRFnJfnuHWXh+ViIkfO88fYAzkGq/k7+hEa3ctkRqIy++fMKypmPwfP2kt5o0ReBgXq Cnbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781377841; x=1781982641; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=kjXinVBWr5oKzZT7R8oqfYcCkCKQtwdSjnXjkSKyW/w=; b=YUi7lm9VVa3RVQRU5d5bm8WJUEECpkepdbG8qGIF4K50vYN95AU8QOtnxMCZj9jEVm IHN4Tg0wPgoYzC1JDCGf01OrPjV+CWthnNXAl1QXVADBWL7R9yCSLeh9K9G7KVC1oBaR 1E5zLueHfyJCqw8rphTZ4CFq3Kh10EUAH7MWIl4W9SAD99T6NJj6tnwR/hORcP1bj7du iupB5ZfBK9zYuClBsO20YZl54GWfkSAtfa8CE8vxY6UPpvEjW9GkvKa9/0+Ova11AA1x i2S/qf33/v3eh3ZEx22y8xH88QVCtrE5VHnx5Z9eKsf7MQD822M38hZheWjvghuCV9Y7 wOAw== X-Forwarded-Encrypted: i=1; AFNElJ8jvSbIaPdR2fabyOuxzK2EaHE48XxGQq69XDYVBtC2izSHbb+570LK8ol28QSu6xxZAAvdMpfsYjLXH9w=@vger.kernel.org X-Gm-Message-State: AOJu0Yw0c6uAOj9FQSJiuV0FmxNSg0cnMaoazEJFokcNne6HDci+nl0L 2UpJyXivWtzsQOenXGeX9GieFynArIIg0hVa9Ye+T15rdsMUV0q+U/Ow X-Gm-Gg: Acq92OHo8eeDx+xzShLBKE3tCb44bvQFnisO6aG4dQhmMASdJHH/D0t0piMcpvpM6cg y0uPnwK0Oed1prQ0UCXkGRr19PpXchBcAtGJK1S1Jd/foGwHBeG7JVndeZp+j8cn6zNmEiJ0df0 qp4n1/WrGAtzMFfGpvvMkuRF1olRdY8V4Tm4zgmb9OjQwWjf1v8EA0dpDwXgn9ayuRlFpyzfKmi zh92BaNsTzyhmFUa4wSTYV/Aab8o5IWEbzxdbc7i4ine7fKFT2MJPQuESkY1KJfT067QX/HQo0B Ah1mU4N/xY/QcUDClRm/Ba6+BSecY7sDDqDEJEo8ChQ93DRiow/ATi3KxYh9X58vMdnG6kjB6UF I+TyqAqOHsIhbor9Npt2vzSDCj2ssEs1E01eI9Q/7o4NEyFOwoNIDfHs/nT1AoJSigdWvZ1U4Ns d+EZ+sRqJp7WvjKnKAKRmhvNU9v/lcn+PU+m4doJgFW29BpJ4ZVhFTSs6kJg== X-Received: by 2002:a17:907:9414:b0:beb:7979:47dd with SMTP id a640c23a62f3a-bff4bbfb265mr241347866b.27.1781377840480; Sat, 13 Jun 2026 12:10:40 -0700 (PDT) Received: from MSI-LINUX.kielce.vectranet.pl ([2a02:2a40:27ec:2900:9790:7740:8855:4d8c]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb4b2276fsm237193366b.17.2026.06.13.12.10.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2026 12:10:40 -0700 (PDT) From: Jakub Szczudlo To: linux-iio@vger.kernel.org Cc: andy@kernel.org, antoniu.miclaus@analog.com, conor+dt@kernel.org, devicetree@vger.kernel.org, dlechner@baylibre.com, duje@dujemihanovic.xyz, jic23@kernel.org, jishnu.prakash@oss.qualcomm.com, jorge.marques@analog.com, krzk+dt@kernel.org, linusw@kernel.org, linux-kernel@vger.kernel.org, marcelo.schmitt@analog.com, mazziesaccount@gmail.com, mike.looijmans@topic.nl, nuno.sa@analog.com, robh@kernel.org, sakari.ailus@linux.intel.com, wens@kernel.org, joshua.crofts1@gmail.com, Jakub Szczudlo Subject: [PATCH v3 3/3] iio: adc: Fix incorrect reading when datarate changed in single mode Date: Sat, 13 Jun 2026 21:09:57 +0200 Message-ID: <20260613190957.654798-4-jakubszczudlo40@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260613190957.654798-1-jakubszczudlo40@gmail.com> References: <20260613190957.654798-1-jakubszczudlo40@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When device is suspended and it is in single mode then changing datarate doesn't make it actual wait for new measurement, so to be sure that read after change is correct functions that changes datarate and gain will wait for new data. Signed-off-by: Jakub Szczudlo --- drivers/iio/adc/ti-ads1100.c | 55 ++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/drivers/iio/adc/ti-ads1100.c b/drivers/iio/adc/ti-ads1100.c index 76de2466dc53..195394665cd1 100644 --- a/drivers/iio/adc/ti-ads1100.c +++ b/drivers/iio/adc/ti-ads1100.c @@ -123,6 +123,36 @@ static int ads1100_get_voltage_microvolts(struct ads11= 00_data *data) return ads1100_get_voltage_milivolts(data) * MICRO / MILLI; } =20 +static bool ads1100_new_data_ready(struct ads1100_data *data) +{ + int ret; + u8 buffer[3]; + + ret =3D i2c_master_recv(data->client, (char *)&buffer, sizeof(buffer)); + if (ret < 3) { + dev_err(&data->client->dev, "I2C read fail: %d\n", ret); + return ret; + } + + return FIELD_GET(ADS1100_CFG_ST_BSY, buffer[2]); +} + +static int ads1100_poll_data_ready(struct ads1100_data *data) +{ + u8 buffer[3]; + bool data_ready; + int datarate =3D data->ads_config->data_rate[FIELD_GET(ADS1100_DR_MASK, d= ata->config)]; + // To be sure we wait 5 times more than datarate + unsigned long wait_time =3D DIV_ROUND_CLOSEST(MICRO, 5 * datarate); + + /* To be sure that polled value will have value after config change */ + i2c_master_recv(data->client, (char *)&buffer, sizeof(buffer)); + + return read_poll_timeout(ads1100_new_data_ready, data_ready, + !data_ready, wait_time, + ADS1100_MAX_DRDY_TIMEOUT, false, data); +} + static int ads1100_data_bits(struct ads1100_data *data) { return ads1100_data_rate_bits[FIELD_GET(ADS1100_DR_MASK, data->config)]; @@ -165,6 +194,7 @@ static int ads1100_set_scale(struct ads1100_data *data,= int val, int val2) { int microvolts; int gain; + int ret; =20 /* With Vdd between 2.7 and 5V, the scale is always below 1 */ if (val) @@ -185,21 +215,40 @@ static int ads1100_set_scale(struct ads1100_data *dat= a, int val, int val2) if (gain < BIT(0) || gain > BIT(3)) return -EINVAL; =20 + ret =3D pm_runtime_resume_and_get(&data->client->dev); + if (ret < 0) + return ret; + ads1100_set_config_bits(data, ADS1100_PGA_MASK, ffs(gain) - 1); =20 - return 0; + ret =3D ads1100_poll_data_ready(data); + + pm_runtime_put_autosuspend(&data->client->dev); + + return ret; } =20 static int ads1100_set_data_rate(struct ads1100_data *data, int chan, int = rate) { unsigned int i; unsigned int size; + int ret; =20 size =3D data->supports_data_rate ? ARRAY_SIZE(ads1100_data_rate) : 1; for (i =3D 0; i < size; i++) { - if (data->ads_config->data_rate[i] =3D=3D rate) - return ads1100_set_config_bits(data, ADS1100_DR_MASK, + if (data->ads_config->data_rate[i] !=3D rate) + continue; + + ret =3D pm_runtime_resume_and_get(&data->client->dev); + if (ret < 0) + return ret; + + ads1100_set_config_bits(data, ADS1100_DR_MASK, FIELD_PREP(ADS1100_DR_MASK, i)); + ret =3D ads1100_poll_data_ready(data); + + pm_runtime_put_autosuspend(&data->client->dev); + return ret; } =20 return -EINVAL; --=20 2.47.3