From nobody Sat Sep 26 13:50:48 2026 Received: from mail-ot1-f52.google.com (mail-ot1-f52.google.com [209.85.210.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 98CD33BED01 for ; Mon, 31 Aug 2026 22:33:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788215629; cv=none; b=UFqb+8EEu4JR2a0VLhIvpMCVwaTwxCda+3gqanUXq8ZBJgYlEGDGTlGyZ+E+gsiL46os0mbA4BkJaIN4Wwrfw88mVqq2V/8rw1M3QE1PAOMzeUE8ju73l2bX3up+1V3nLQrDz6btxHzSxej7SH+2eJvwY61qlaKoSw/b/AbyIc0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788215629; c=relaxed/simple; bh=NDSDpivYarXePwTSDpiVgkViP53hrWoSMytekojHNS0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dp8D75IdqI+iXY+gBtHb9HEOrkvQAA9iQyDTSJ32hcPMbinPXBGSsbdDbcclLH6wkbIv/Q4NOvmv4LxoxY4TrLbzdap5f19MU1SEQP9QUYJgu70114pHoQCIP8l7hLSieJTjTHZO7lO3Djp9On9R59EcilCTshtdYT0Do+jgrGY= 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 header.i=@baylibre.com header.b=Q1kaeiw7; arc=none smtp.client-ip=209.85.210.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="Q1kaeiw7" Received: by mail-ot1-f52.google.com with SMTP id 46e09a7af769-7f5a781972fso2354627a34.3 for ; Mon, 31 Aug 2026 15:33:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1788215626; x=1788820426; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=iNTRuf05CTvv6ajYQ262DYaZCyLOnZ0DLR4E2AczWeM=; b=Q1kaeiw7xTe/mxxX0Zfbv5UULdBruD6h5CKghw5SuG/VAad25xXTf9nUv6N0h0J63b mNoYGK3zTsgDLtry48Bc48pJMmr0vb5IMnF7z4r1HSmvzkjebUbTgYV/JwVaw4cx9Pjo XO2ePD3m73SUyTUSMK373pnb4u9x5wajjawcGNlbzB/d6GXMcyWGyWHdIJFu5AmYtLf5 HQpmaYx+kT82anwOIanj+Fb4vx29QpnHT9NIuvX7QpVnE1LKc17S/936znnkaUZggbKq xPCyZLuPOboD9qhnCTgugs3bRE6XVLMUFWZ/QQyScS6Ow9UVwf1VvYJC1you8PNsGkQR JT7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788215626; x=1788820426; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=iNTRuf05CTvv6ajYQ262DYaZCyLOnZ0DLR4E2AczWeM=; b=bAW1vXLmLqr5NYJu7JuERCRxWR0xX6/08o7pKiaoFX5xPAA4FUzVOc30dWzt0NdUet UY4u+onWS3V5DNuUigUuu3OR2XtGJuaxU080PfesQmP7beKENsVtalmbyfvxEyu1GHnX YzbKeqwsmze/l14dMKEYJTP17TYJGW4VCKbSSEqxbyB2LJrHkzP0J7fka4q6BtWAdqpH hivonrYeRDC9tvyh8dOZBVindjeRDTMrVryL0yRZKPelT5wRi48vNTDBFJmiT8PMHPNK Szx1Zob1Gj728/LzRQb0O3gBgT3KWa/P8/aktMCLPLSoUfY/0lt3zIhy73NuTYg1rkeP 7fwQ== X-Forwarded-Encrypted: i=1; AHgh+RpgYQwjKBRLnKKFwIQHH2YK5QFIQeRz2QD4f/bIITtz3+DmnEb+l9kMlD++AriDlp85M5U+IZnaEHolPlM=@vger.kernel.org X-Gm-Message-State: AFuF++n0TCGYbQGUceIEeDoAfpvQYlCONzyIVWwFwqcRBdHqsAJnP1OH mEjM4Fp0ULUxFzdX2lfohc2WIhPPvzO+W9+AQyKXDh0ia80Ox004i9TaAyhBBuuY9PCJkD8q0dH vBPdj X-Gm-Gg: AR+sD125s37lq6MOIOU0CQVnqgceoNr3QDcvmSX9tCqKOZ9o1hVsOWDz6B0YX/qaloF Oia7XAdERlNyHj/DgR3ob95WWlk8Mnxz/5Zk/Q9dM1hpvLRHczbPHyGY4LtMD8gnGiBNhgpyftu Zfq0qSZ8SChZ3fjsaKqX8ix8+wr8AApyRRCSn5Pi17/I0VAjeQ3RmKmcqYeewGSdr0ZQM3pAGBT k4rKCKYCfeRNldGQ8fizwgQI1iS/G9FETjImQG4w0qAw8FQXuMs80GB5aOxZWJneWXtgoU/RDtU jDlpqOHX0viC+wcKIeEzh5ZGGAwa5G1mIllKVNoDuIgRMgFLzxA+bJ+NXrBpEGEHLr1TLqD+SQK jGYjg9n9ysOhLEEbG/pYY/rBC6fwi4oDwVuPNQoOg1hXnrWeJE4NuEbJS60TQO4RotojNNvVkzE PreZEpbsvAIx3uaJu8pXgh7GORAwXXuwLtSfmb0Ij5KKWBG0eUvCMxBzCX7NUp9nfWfQ== X-Received: by 2002:a05:6830:2117:b0:7e7:8dc0:3951 with SMTP id 46e09a7af769-7f6879f9436mr5424341a34.8.1788215625827; Mon, 31 Aug 2026 15:33:45 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:500:778b:da9:a8a1:bc78]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7f4fa7efe09sm9190551a34.11.2026.08.31.15.33.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 15:33:45 -0700 (PDT) From: "David Lechner (TI)" Date: Mon, 31 Aug 2026 17:33:05 -0500 Subject: [PATCH v5 1/3] iio: adc: ti-ads112c14: add DRDY interrupt 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: <20260831-iio-adc-ti-ads112c14-continuous-mode-v5-1-76f80a04b94f@baylibre.com> References: <20260831-iio-adc-ti-ads112c14-continuous-mode-v5-0-76f80a04b94f@baylibre.com> In-Reply-To: <20260831-iio-adc-ti-ads112c14-continuous-mode-v5-0-76f80a04b94f@baylibre.com> To: Jonathan Cameron , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko Cc: Chris Hall , Patrick Edwards , Kurt Borja , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, "David Lechner (TI)" X-Mailer: b4 0.17-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=6047; i=dlechner@baylibre.com; h=from:subject:message-id; bh=NDSDpivYarXePwTSDpiVgkViP53hrWoSMytekojHNS0=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBqlgEpK+CHXZEgZyX1eY20//e+JjIuqN/diYxeS PFRBARhmw+JATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCapYBKQAKCRDCzCAB/wGP wIa/B/9Kaa7VniIy4q2e3CBryijGHVAOgB4nJ5l3/Y8jzDGSvPt6wcH5ELV/8h3PVaeb4USMRMB K6Tk2j8zQ10j9vo8imSjuD7Nj0qtbZg8gQ0A18f2mWJUOTL37IOTqOmVBsPmneoG0Yb0t4m65LO hJVFeNj1sJACs2jl3wYnekdHJz09zKEVEo07QaIFNbsCvgw4cOEgUH/lPEV1GOMUFIy9bBozl9C tKmv/8K5SsgPWMm5phnKz7oF3tXWwXcvYzT9VpON9BKbpovM+/zFQaezipHAl72Iz4Ea//7AqrW 2/G6b6OuxylfYllrw8IgP99nyIaHTd2iTgBKL/upocvsumrF X-Developer-Key: i=dlechner@baylibre.com; a=openpgp; fpr=8A73D82A6A1F509907F373881F8AF88C82F77C03 Add handling for the DRDY interrupt to wait for data ready events rather than polling (only when it is wired up). Signed-off-by: David Lechner (TI) --- Small note: the hard-coded 100 ms timeout will be replaced in a future series with a dynamic value, so I didn't bother with a macro or comments to explain why the value was chosen. And passing indio_dev instead of data to irq is intentional as it will be used in the next patch. --- drivers/iio/adc/ti-ads112c14.c | 100 ++++++++++++++++++++++++++++++++++++-= ---- 1 file changed, 90 insertions(+), 10 deletions(-) diff --git a/drivers/iio/adc/ti-ads112c14.c b/drivers/iio/adc/ti-ads112c14.c index 60eab4852ba2..63b819339788 100644 --- a/drivers/iio/adc/ti-ads112c14.c +++ b/drivers/iio/adc/ti-ads112c14.c @@ -10,6 +10,7 @@ =20 #include #include +#include #include #include #include @@ -19,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -117,9 +119,15 @@ #define ADS112C14_GPIO_CFG_GPIO2_CFG GENMASK(5, 4) #define ADS112C14_GPIO_CFG_GPIO1_CFG GENMASK(3, 2) #define ADS112C14_GPIO_CFG_GPIO0_CFG GENMASK(1, 0) +#define ADS112C14_GPIO_CFG_GPIO_CFG_DISABLED 0 +#define ADS112C14_GPIO_CFG_GPIO_CFG_INPUT 1 +#define ADS112C14_GPIO_CFG_GPIO_CFG_OUTPUT_PUSH_PULL 2 +#define ADS112C14_GPIO_CFG_GPIO_CFG_OUTPUT_OPEN_DRAIN 3 =20 #define ADS112C14_REG_GPIO_DATA_OUTPUT 0x0C #define ADS112C14_GPIO_DATA_OUTPUT_GPIO3_SRC BIT(7) +#define ADS112C14_GPIO_DATA_OUTPUT_GPIO3_SRC_DAT_OUT 0 +#define ADS112C14_GPIO_DATA_OUTPUT_GPIO3_SRC_DRDY 1 #define ADS112C14_GPIO_DATA_OUTPUT_GPIO2_SRC BIT(6) #define ADS112C14_GPIO_DATA_OUTPUT_GPIO3_DAT_OUT BIT(3) #define ADS112C14_GPIO_DATA_OUTPUT_GPIO2_DAT_OUT BIT(2) @@ -251,6 +259,8 @@ struct ads112c14_data { struct regmap *regmap; /* Synchronizes access to register value fields. */ struct mutex lock; + int drdy_irq; + struct completion drdy_completion; bool i2c_crc_enabled; u32 avdd_uV; u32 ext_ref_uV; @@ -265,6 +275,16 @@ struct ads112c14_data { ARRAY_SIZE(ads112c14_sys_mon_channels)); }; =20 +static irqreturn_t ads112c14_drdy_irq_handler(int irq, void *private) +{ + struct iio_dev *indio_dev =3D private; + struct ads112c14_data *data =3D iio_priv(indio_dev); + + complete(&data->drdy_completion); + + return IRQ_HANDLED; +} + static bool ads112c14_writeable_reg(struct device *dev, unsigned int reg) { switch (reg) { @@ -581,12 +601,45 @@ static int ads112c14_prepare_sys_mon_channel(struct a= ds112c14_data *data, return 0; } =20 +static int ads112c14_wait_for_conversion_irq(struct ads112c14_data *data) +{ + unsigned long remaining; + int ret; + + reinit_completion(&data->drdy_completion); + + ret =3D regmap_write(data->regmap, ADS112C14_REG_CONVERSION_CTRL, + ADS112C14_CONVERSION_CTRL_START); + if (ret) + return ret; + + remaining =3D wait_for_completion_timeout(&data->drdy_completion, + msecs_to_jiffies(100)); + + return remaining ? 0 : -ETIMEDOUT; +} + +static int ads112c14_wait_for_conversion_poll(struct ads112c14_data *data) +{ + u32 reg_val; + int ret; + + ret =3D regmap_write(data->regmap, ADS112C14_REG_CONVERSION_CTRL, + ADS112C14_CONVERSION_CTRL_START); + if (ret) + return ret; + + return regmap_read_poll_timeout(data->regmap, + ADS112C14_REG_STATUS_MSB, reg_val, + FIELD_GET(ADS112C14_STATUS_MSB_DRDY, reg_val), + 1 * USEC_PER_MSEC, 100 * USEC_PER_MSEC); +} + static int ads112c14_single_conversion(struct ads112c14_data *data, const struct iio_chan_spec *chan, u8 *buf, bool for_scan) { struct i2c_client *client =3D to_i2c_client(regmap_get_device(data->regma= p)); - u32 reg_val; int ret; =20 guard(mutex)(&data->lock); @@ -601,15 +654,10 @@ static int ads112c14_single_conversion(struct ads112c= 14_data *data, return ret; } =20 - ret =3D regmap_write(data->regmap, ADS112C14_REG_CONVERSION_CTRL, - ADS112C14_CONVERSION_CTRL_START); - if (ret) - return ret; - - ret =3D regmap_read_poll_timeout(data->regmap, - ADS112C14_REG_STATUS_MSB, reg_val, - FIELD_GET(ADS112C14_STATUS_MSB_DRDY, reg_val), - 1 * USEC_PER_MSEC, 100 * USEC_PER_MSEC); + if (data->drdy_irq) + ret =3D ads112c14_wait_for_conversion_irq(data); + else + ret =3D ads112c14_wait_for_conversion_poll(data); if (ret) return ret; =20 @@ -1391,6 +1439,38 @@ static int ads112c14_probe(struct i2c_client *client) if (ret) return ret; =20 + if (device_property_present(dev, "interrupt-names")) { + data->drdy_irq =3D fwnode_irq_get_byname(dev_fwnode(dev), "drdy"); + if (data->drdy_irq < 0) + return dev_err_probe(dev, data->drdy_irq, + "failed to get drdy interrupt\n"); + + /* + * REVISIT: would probably need to implement a pin controller in + * order to support open drain option here. + */ + ret =3D regmap_update_bits(data->regmap, ADS112C14_REG_GPIO_CFG, + ADS112C14_GPIO_CFG_GPIO3_CFG, + FIELD_PREP(ADS112C14_GPIO_CFG_GPIO3_CFG, + ADS112C14_GPIO_CFG_GPIO_CFG_OUTPUT_PUSH_PULL)); + if (ret) + return ret; + + ret =3D regmap_update_bits(data->regmap, ADS112C14_REG_GPIO_DATA_OUTPUT, + ADS112C14_GPIO_DATA_OUTPUT_GPIO3_SRC, + FIELD_PREP(ADS112C14_GPIO_DATA_OUTPUT_GPIO3_SRC, + ADS112C14_GPIO_DATA_OUTPUT_GPIO3_SRC_DRDY)); + if (ret) + return ret; + + init_completion(&data->drdy_completion); + + ret =3D devm_request_irq(dev, data->drdy_irq, ads112c14_drdy_irq_handler, + 0, dev_name(dev), indio_dev); + if (ret) + return ret; + } + ads112c14_populate_tables(data); =20 indio_dev->name =3D info->name; --=20 2.43.0 From nobody Sat Sep 26 13:50:48 2026 Received: from mail-ot1-f50.google.com (mail-ot1-f50.google.com [209.85.210.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5B4D03B8413 for ; Mon, 31 Aug 2026 22:33:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788215630; cv=none; b=WYR0UW5FDGC5ztmqWOBakwo/Yo8J+QDtvIsGkxpRTFZPRsy0PnQ0/rWA3WgmBM98M9gOpEeCZwmnVNcFBGrqQS4+5yUJnYLpjiLBnJxSEPtPQQJcOCokUF5+S19kGcqclsJznpWqZ2RMT3meXwazYL+46q8YiK5ib8D1iufSoFs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788215630; c=relaxed/simple; bh=0jleKfSV4x8zSuizbp6O6ni4ujngh47YqjL22y19AbA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EwlrVEfhzRh5LTZQSGNMS/t9ii0bs1zUzavew2axhrE4h+twdhEa3CZMef/SAPin4A+XDWl3qgpW2ol6K1AgOVBijYDyn/bUqA6FioBDAFDzC9fwiMjPgl4MQmMmz6jc7JWJepQDFaXa4ARJGoGGI22dvyDC35yhKpnDnB/7fCY= 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 header.i=@baylibre.com header.b=bcak9rcC; arc=none smtp.client-ip=209.85.210.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="bcak9rcC" Received: by mail-ot1-f50.google.com with SMTP id 46e09a7af769-7eb6573bd52so3940947a34.3 for ; Mon, 31 Aug 2026 15:33:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1788215627; x=1788820427; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=cEY7r8lduCT2nc4feVvWUral7NtsjaDfgRTqImYybck=; b=bcak9rcCdTn+FzUmIuL+onyCyoZfIKuzd4mIAhotwnzg0OMeMCYDDT37++oauu1bMW YgAmm+I8ZDY9weoMJ49My0xTBln8QsTj+PqlgYp7Cap+PShZ4/gOnja16Bk2rHOmSHu5 iXM6K+TMnpP7wvy8zn5kV4pX8S9isMdoQtqmZDtRDAbBSek4QhBD2lIACFB4nBh/IAHA z1yEMc9ZxjugS7JF9R22Tk55o4+6dWcaquuvMVnrD8aWUB62W5HgOQTzpH2f21dwaNnV k9scCyGabIzhulGzoO0zPSfb2BlXia/yjy2oPlFaf65FO2VdrTZmCJO8JqkIxYqacBVC X28A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788215627; x=1788820427; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=cEY7r8lduCT2nc4feVvWUral7NtsjaDfgRTqImYybck=; b=Vw+NH3AC29uFkZ1KQHkXWA+wmhEbR+zCrvTnveztX5RnufG3VFL6Sh9BsnA4U2RsYr GBV2Ot1zQ9gPEZ1xne3fuFaCdMpekzlL8MqqJDDW64EhphZ/RXxOzUq0iFdnLdFL8hZB 9MPtfLFqKt4iNP6ibJwLkv6FeOywFGXUI3/DF9sQ3MkCA4wlUD4DKmtXb1SxrHlRZjyg kecnWNlNf9P++VWnsWYrm/QKnUdoyU837Ywot4iPBP8JEQIBSBQSZGMn1hSCeQQ52x9s p2xpK/LYI1pGFvRyS6H/AJKPf0X6DR8vLGC6vpsQjMZ4d8hPkvd7g+oIipn1Wu1NA1hT 2ugg== X-Forwarded-Encrypted: i=1; AHgh+Rp5H01As9RAQh8XmaQDiLLSxnSx4Qmjb+icYsjFJdRm3k02uiZD5Ws+xNvzQGuFz8IBrB00FbTEc3kWddY=@vger.kernel.org X-Gm-Message-State: AFuF++lZbw/Tm6Z3xcSGErgKPVEiH4MVV99rY1fOM/X0FZaLwLBifNKO Z0oxj2sSCFjKoMVIfOJ9/sIeqKCK8B7/vFdei1LvczO4SIMr1E3yFhcbl1OG5QJeSeu/sr5EVLU 3/8gH X-Gm-Gg: AR+sD12WlO1eHkAu4NXAIE/3ZqpvRx5bzdajTbexAdTtGQ0qQa6rv4iqfgNdqKmW802 EHm+andjz9jmQkefIKQDVaFBQoa5ozKtcG6gEcvsB6KaUVV56YXvhgQs8GpaHhqBvBwmTb2AVE7 RiLEsHQp7NjNTudQVD2Tj7TBwZyGIDXfKuBCktNKrw5cz8+8bmz19Kp1fzb4NqtmfQmBnn5DFWD ZYSYeNZlCrKtQ3cHJ2h6R4ZMqbpRK4cTEvWi4LZGjLNEESLid977aqXoIbBHCtOBYKAGp6vw6Wr JKMLmGsICLcPYf8T8cSRbTys+E+JiPWW9vCmahzeMpdnT/b1p3iJvK9OQUVfmyijvSUEJ5L0dZF 0+ngviKPoSzz9JmDXxTf9B1Xw4R0N/KnQLt89D2iuk790sHRD+MvNWeu0kzOkGQ1cpCcPfKJcPm 6qN17yVb64YlqVW10+Sn/Ip4LBXIqBLbQeSF9yKVbTtgl0nLwG0rcvmSfgz0XqeLQE X-Received: by 2002:a05:6830:2b0b:b0:7f4:daae:401d with SMTP id 46e09a7af769-7f6878a21f0mr5338278a34.8.1788215626889; Mon, 31 Aug 2026 15:33:46 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:500:778b:da9:a8a1:bc78]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7f4fa7efe09sm9190551a34.11.2026.08.31.15.33.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 15:33:46 -0700 (PDT) From: "David Lechner (TI)" Date: Mon, 31 Aug 2026 17:33:06 -0500 Subject: [PATCH v5 2/3] iio: adc: ti-ads112c14: create data read helper functions 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: <20260831-iio-adc-ti-ads112c14-continuous-mode-v5-2-76f80a04b94f@baylibre.com> References: <20260831-iio-adc-ti-ads112c14-continuous-mode-v5-0-76f80a04b94f@baylibre.com> In-Reply-To: <20260831-iio-adc-ti-ads112c14-continuous-mode-v5-0-76f80a04b94f@baylibre.com> To: Jonathan Cameron , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko Cc: Chris Hall , Patrick Edwards , Kurt Borja , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, "David Lechner (TI)" X-Mailer: b4 0.17-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=2657; i=dlechner@baylibre.com; h=from:subject:message-id; bh=0jleKfSV4x8zSuizbp6O6ni4ujngh47YqjL22y19AbA=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBqlgEx+aahE+cYocqs2efmRZVEAwCyLE4ueayOX YCZ4zl5g4uJATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCapYBMQAKCRDCzCAB/wGP wAAKB/9xHTeXLzRpeOEtix20REwMw6zmGeJg51rZOWxL7X05ayKgnlN1M5Mh0juAwfUQS0UScTq +kNh7PBZiBAIFfX+mnxguDvtPNZdw0lEQNLTLm/FWnaw4qPQplpQwJUEJXY4u76ObGhIlAupSQ6 IGBrnbcVmmPgSYNKymnSEDJRQP55cHd2g4CBaQoekfQ8zTrjyKwfKxZdIgYljZAUsKMdUqKda5Y 9HtcQ7u2tDjFXjVOIgm1adYjVf/JqZD+aMQ0mLfYJWSd7dI1wLYRIo62VTDl21ZhdsGoTEUYMua M/p+gTs2+NhTPoEGzoeVyLos1aO5JhIJDheH5p7wg0X2VOhY X-Developer-Key: i=dlechner@baylibre.com; a=openpgp; fpr=8A73D82A6A1F509907F373881F8AF88C82F77C03 Refactor a few bits of code into helper functions. These will be reused when continuous mode support is added in a later patch. Signed-off-by: David Lechner (TI) --- drivers/iio/adc/ti-ads112c14.c | 51 +++++++++++++++++++++++++-------------= ---- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/drivers/iio/adc/ti-ads112c14.c b/drivers/iio/adc/ti-ads112c14.c index 63b819339788..23f15be303fb 100644 --- a/drivers/iio/adc/ti-ads112c14.c +++ b/drivers/iio/adc/ti-ads112c14.c @@ -601,6 +601,32 @@ static int ads112c14_prepare_sys_mon_channel(struct ad= s112c14_data *data, return 0; } =20 +static int ads112c14_prepare_channel(struct ads112c14_data *data, + const struct iio_chan_spec *chan) +{ + if (chan->channel < ADS112C14_SYS_MON_CHANNEL_BASE) + return ads112c14_prepare_measurement_channel(data, chan); + + return ads112c14_prepare_sys_mon_channel(data, chan); +} + +static int ads112c14_scan_read(struct ads112c14_data *data, u8 *buf) +{ + struct i2c_client *client =3D to_i2c_client(regmap_get_device(data->regma= p)); + int ret; + u8 len; + + len =3D BITS_TO_BYTES(data->chip_info->resolution_bits); + if (data->i2c_crc_enabled) + len +=3D 1; + + ret =3D i2c_smbus_read_i2c_block_data(client, ADS112C14_CMD_RDATA, len, b= uf); + if (ret < 0) + return ret; + + return 0; +} + static int ads112c14_wait_for_conversion_irq(struct ads112c14_data *data) { unsigned long remaining; @@ -644,15 +670,9 @@ static int ads112c14_single_conversion(struct ads112c1= 4_data *data, =20 guard(mutex)(&data->lock); =20 - if (chan->channel < ADS112C14_SYS_MON_CHANNEL_BASE) { - ret =3D ads112c14_prepare_measurement_channel(data, chan); - if (ret) - return ret; - } else { - ret =3D ads112c14_prepare_sys_mon_channel(data, chan); - if (ret) - return ret; - } + ret =3D ads112c14_prepare_channel(data, chan); + if (ret) + return ret; =20 if (data->drdy_irq) ret =3D ads112c14_wait_for_conversion_irq(data); @@ -667,17 +687,8 @@ static int ads112c14_single_conversion(struct ads112c1= 4_data *data, * with CRC errors, but rather leave it to userspace to decide what to * do. */ - if (for_scan) { - u8 len =3D BITS_TO_BYTES(data->chip_info->resolution_bits) + - (data->i2c_crc_enabled ? 1 : 0); - - ret =3D i2c_smbus_read_i2c_block_data(client, ADS112C14_CMD_RDATA, - len, buf); - if (ret < 0) - return ret; - - return 0; - } + if (for_scan) + return ads112c14_scan_read(data, buf); =20 return ads112c14_i2c_read_bytes(client, ADS112C14_CMD_RDATA, buf, BITS_TO_BYTES(data->chip_info->resolution_bits), --=20 2.43.0 From nobody Sat Sep 26 13:50:48 2026 Received: from mail-ot1-f48.google.com (mail-ot1-f48.google.com [209.85.210.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 3AA423BE64C for ; Mon, 31 Aug 2026 22:33:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788215632; cv=none; b=g9jtxfFhTJF16NRK7MZuemuY6waTeM0eBEhsFaWuFX6TPcYOtbr7VTGGMPasVpTnD1pt8iLlm3QZQy2vl2BFnbu6u9WkueB54/29Dw8bPfrpCoQ6HfT0H0VFOH93k8sJsW9CVI1BfMNwuXytdPd5/tsii36RmkxNuFF7e0F8aPU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788215632; c=relaxed/simple; bh=l9Q45b3Na0r37AULknN0n4Ws7BStWk9ckJ7bJVedIH4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pINawAFp/ECRxQLbQ9T8S3gHs+LsNselJ4ebm3DMZdHfypbB6GLkzZ4uDL0SoSkO21S5LiB2zA0P/LojN70E1/My9Tk9ZHE5AOL4Z8nhMMaDveZVzQvNvKr1YRndc1vydLbOG7/2djhaUeo6RsYDf1DX68+M4qc68RlVbQ08o3k= 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 header.i=@baylibre.com header.b=gNi1i6IV; arc=none smtp.client-ip=209.85.210.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 header.i=@baylibre.com header.b="gNi1i6IV" Received: by mail-ot1-f48.google.com with SMTP id 46e09a7af769-7f4df360cc9so492184a34.1 for ; Mon, 31 Aug 2026 15:33:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1788215628; x=1788820428; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=CkINITabsJkMFaMz+O6WBQXk3MjQkP9P7TfGAk4KvJ8=; b=gNi1i6IV3dG4epcJfUbss/9HaJPKAixHz668vmeHy2jgWmdwmK/QSbXQ+mCufXhmDG heArvqmehf1b0FUGKvJYxX/eaDxoLDvSTRD/9zE1c80rWWd/5c7JazdSsLGejMzzmieO OOe1TXLMWnmfm2AiPx1eterdY04IdZhM51yAER06jJ51zYms7qWh8bGUIml22RD3pMD7 TFV7lw6M5e58dLbwKYTogIWQdUoi22YocS8Iek09tqFVG9oVQYXqOEJ/AbL68EBMG8XO Mg5xmLXhM3j0qhlz4jgz8OCdEpHSFsqppsFSPuVu98sYIJbezEVhR8CFycMFaRTMqbCY QpoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788215628; x=1788820428; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=CkINITabsJkMFaMz+O6WBQXk3MjQkP9P7TfGAk4KvJ8=; b=ZuicK91i9mBc+Y3YSe9TXfv0HdnwR+8Xsa3VwgvWMAWXbX/C5LlqZA6yWlxnOD2vwd GCVrwm3Gtq5WdoODomFXXLDTIo3QKfNMizUsFSitw2/9B3g3I4XaB9sAVQ0UrQjQiIW3 S4Wu1joOlsrzIcRNXwDabCSwp5P+qzHxzhAW9wUgKYVzPjnf+Q9QRfJo898+nY0PTJTa Tptmde4BBR76L8hVuux79HBBJAwf2bLjH1ISyocQdx4BpTmlevF5hpqK7BAoFIln+VjZ zjSCzvdOcP1J54viLqWeWoMle51FDPQtGSpCMvpitXF6JQpyylyZ121z0jSHaLwDuPn7 2leQ== X-Forwarded-Encrypted: i=1; AHgh+RpgSsGNE+Jq424YP9oyqSpuDI5BDHCMY/bFYK75TQqbiL6kvp+8EVJA3TOI5FtYxI5GvaWellKRZlB+kvY=@vger.kernel.org X-Gm-Message-State: AFuF++lpRbT13lX2pHEaTSj4sGAE6yeHOI41ltdrm7EdHfCUw1xC8+au XuWVNhyk2OW41so45KJtlORjV65JblwI53uUKMjjGkedlrymyXoYgknMe5G5WhDWTwP29/be/nZ Tsxs4 X-Gm-Gg: AR+sD10GFhTytRfWFlxv1lCUttOdQZ0qheUznrv/yAusJ91SHzX4018aGAR+hLyfAJU girV7Eik7XWW7D0lxYcFTBZZjTzoe5lcOLkFgSvMxZ2kTSaiQdDejxGvKIb9vYBhg+tptvj7Rwe 5Xj2wVZ3CBSurrDfhjKdVH+9ibZwBXysgip+oNkrT4SqSiZxEBGBYCLdz3/Qts7Vd3GooCstn7c z92fNcO19qun7SKKeOgSyEIj5eUndTA831vtC1SDdlg+D40xiGAnx8KDo6Yv9vC14YsO6MCy7Df bN8m85zMDJmxinzkQpi56KUq/7gOPsZH3QDk5B9PJwxqeGMD8Z1PQM9vFrHC53kXAb9Bl/S5NDG bPA8VR0AII8EHBOebaP3JaxsLpIvX7ooNRlkt41hQ/EL46Fc23Kw0iTf7qXrFMzSvxZHLWEhNIu VpK21fG9ZgJ8X/WkTJKQzfyu9b1jyPjQ9k5bHT8c0KEzz3uFsf8mJMxJFuvtZ7sQek X-Received: by 2002:a05:6830:380c:b0:7f5:b445:d830 with SMTP id 46e09a7af769-7f68f81e792mr1405861a34.14.1788215627884; Mon, 31 Aug 2026 15:33:47 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:500:778b:da9:a8a1:bc78]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7f4fa7efe09sm9190551a34.11.2026.08.31.15.33.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 15:33:47 -0700 (PDT) From: "David Lechner (TI)" Date: Mon, 31 Aug 2026 17:33:07 -0500 Subject: [PATCH v5 3/3] iio: adc: ti-ads112c14: add continuous mode 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: <20260831-iio-adc-ti-ads112c14-continuous-mode-v5-3-76f80a04b94f@baylibre.com> References: <20260831-iio-adc-ti-ads112c14-continuous-mode-v5-0-76f80a04b94f@baylibre.com> In-Reply-To: <20260831-iio-adc-ti-ads112c14-continuous-mode-v5-0-76f80a04b94f@baylibre.com> To: Jonathan Cameron , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko Cc: Chris Hall , Patrick Edwards , Kurt Borja , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, "David Lechner (TI)" X-Mailer: b4 0.17-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=8104; i=dlechner@baylibre.com; h=from:subject:message-id; bh=l9Q45b3Na0r37AULknN0n4Ws7BStWk9ckJ7bJVedIH4=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBqlgE4KhjYkFlMzTFVs/Nrso7TWSrX6XuRUPU9D 1uvxHQy8UaJATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCapYBOAAKCRDCzCAB/wGP wAygCACCVvJbYxLpCkYkPFxmBBrIa+wHl+YRDQ9/B4V9aeWvfO+c84Ksw+eqHOPSMrBnc+dzeya KQBuNjJQowB/yJxyL0cN7jBLRTVpIipW8N/6f6yivgMbTCtVcHGXUh908x4o7Cqa6se26Z6lQi/ gI2ClpHXHBVPML0Cb8nfWPNrITXpVpDODb4b+Yn4qt6c/euOJxWRL0N+UMhBlpFiQ7wqITe/+WC zsq/bByXNgKho6vUZv5LOzfrrx11GBLYpGNEt/HPKWioZWB/f2e1onj0qrP/KWdVYDMky0HqFaQ sJOPEzqDoSLRFD7I8QJI9bv3Dflh6CzBxaOnaDBVLcQJZmX5 X-Developer-Key: i=dlechner@baylibre.com; a=openpgp; fpr=8A73D82A6A1F509907F373881F8AF88C82F77C03 Add support for continuous mode in the TI ADS112C14 ADC driver. In this mode the ADC itself is starting each conversion, so we add a trigger based on the DRDY interrupt to read each sample. This mode is also limited in that only one channel can be enabled at a time since the chip does not have a sequencer or simultaneous sampling capability. Continuous mode will only be used when this new trigger is the current trigger. Signed-off-by: David Lechner (TI) --- drivers/iio/adc/ti-ads112c14.c | 153 +++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 151 insertions(+), 2 deletions(-) diff --git a/drivers/iio/adc/ti-ads112c14.c b/drivers/iio/adc/ti-ads112c14.c index 23f15be303fb..06b962fbde5e 100644 --- a/drivers/iio/adc/ti-ads112c14.c +++ b/drivers/iio/adc/ti-ads112c14.c @@ -9,6 +9,7 @@ */ =20 #include +#include #include #include #include @@ -18,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -257,10 +259,12 @@ struct ads112c14_measurement { struct ads112c14_data { const struct ads112c14_chip_info *chip_info; struct regmap *regmap; + struct iio_trigger *drdy_trig; /* Synchronizes access to register value fields. */ struct mutex lock; int drdy_irq; struct completion drdy_completion; + bool continuous_mode; bool i2c_crc_enabled; u32 avdd_uV; u32 ext_ref_uV; @@ -280,11 +284,18 @@ static irqreturn_t ads112c14_drdy_irq_handler(int irq= , void *private) struct iio_dev *indio_dev =3D private; struct ads112c14_data *data =3D iio_priv(indio_dev); =20 - complete(&data->drdy_completion); + if (READ_ONCE(data->continuous_mode)) + iio_trigger_poll(data->drdy_trig); + else + complete(&data->drdy_completion); =20 return IRQ_HANDLED; } =20 +static const struct iio_trigger_ops ads112c14_trigger_ops =3D { + .validate_device =3D iio_trigger_validate_own_device, +}; + static bool ads112c14_writeable_reg(struct device *dev, unsigned int reg) { switch (reg) { @@ -695,6 +706,13 @@ static int ads112c14_single_conversion(struct ads112c1= 4_data *data, data->i2c_crc_enabled); } =20 +static bool ads112c14_using_drdy_trigger(struct iio_dev *indio_dev) +{ + struct ads112c14_data *data =3D iio_priv(indio_dev); + + return data->drdy_trig && indio_dev->trig =3D=3D data->drdy_trig; +} + static int ads112c14_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long mask) @@ -898,6 +916,19 @@ static int ads112c14_write_raw_get_fmt(struct iio_dev = *indio_dev, } } =20 +static int ads112c14_update_scan_mode(struct iio_dev *indio_dev, + const unsigned long *scan_mask) +{ + /* Only continuous mode is limited to a single channel. */ + if (!ads112c14_using_drdy_trigger(indio_dev)) + return 0; + + if (!iio_validate_scan_mask_onehot(indio_dev, scan_mask)) + return -EINVAL; + + return 0; +} + static int ads112c14_debugfs_reg_access(struct iio_dev *indio_dev, unsigned int reg, unsigned int writeval, @@ -952,6 +983,19 @@ static int ads112c14_read_label(struct iio_dev *indio_= dev, return sysfs_emit(label, "%s\n", label_source); } =20 +static const struct iio_chan_spec * +ads112c14_first_active_channel(struct iio_dev *indio_dev) +{ + unsigned int scan_mask_len =3D iio_get_masklength(indio_dev); + unsigned int i; + + i =3D find_first_bit(indio_dev->active_scan_mask, scan_mask_len); + if (i =3D=3D scan_mask_len) + return NULL; + + return &indio_dev->channels[i]; +} + static irqreturn_t ads112c14_trigger_handler(int irq, void *private) { struct iio_poll_func *pf =3D private; @@ -961,6 +1005,26 @@ static irqreturn_t ads112c14_trigger_handler(int irq,= void *private) u32 i; int ret; =20 + if (ads112c14_using_drdy_trigger(indio_dev)) { + const struct iio_chan_spec *chan; + + chan =3D ads112c14_first_active_channel(indio_dev); + if (!chan) + goto out; + + ret =3D ads112c14_scan_read(data, (u8 *)&data->scan[0]); + if (ret) { + dev_err_once(indio_dev->dev.parent, + "failed to read channel %d: %pe; additional errors will be suppre= ssed\n", + chan->channel, ERR_PTR(ret)); + goto out; + } + + iio_push_to_buffers_with_ts(indio_dev, data->scan, + sizeof(data->scan), pf->timestamp); + goto out; + } + iio_for_each_active_channel(indio_dev, i) { const struct iio_chan_spec *chan =3D &indio_dev->channels[i]; =20 @@ -988,10 +1052,81 @@ static const struct iio_info ads112c14_info =3D { .read_avail =3D ads112c14_read_avail, .write_raw =3D ads112c14_write_raw, .write_raw_get_fmt =3D ads112c14_write_raw_get_fmt, + .update_scan_mode =3D ads112c14_update_scan_mode, .debugfs_reg_access =3D ads112c14_debugfs_reg_access, .read_label =3D ads112c14_read_label, }; =20 +static int ads112c14_buffer_postenable(struct iio_dev *indio_dev) +{ + struct ads112c14_data *data =3D iio_priv(indio_dev); + const struct iio_chan_spec *chan; + int ret; + + if (!ads112c14_using_drdy_trigger(indio_dev)) + return 0; + + chan =3D ads112c14_first_active_channel(indio_dev); + if (!chan) + return -EINVAL; + + guard(mutex)(&data->lock); + + ret =3D ads112c14_prepare_channel(data, chan); + if (ret) + return ret; + + ret =3D regmap_update_bits(data->regmap, ADS112C14_REG_DEVICE_CFG, + ADS112C14_DEVICE_CFG_CONV_MODE, + FIELD_PREP(ADS112C14_DEVICE_CFG_CONV_MODE, + ADS112C14_DEVICE_CFG_CONV_MODE_CONTINUOUS)); + if (ret) + return ret; + + WRITE_ONCE(data->continuous_mode, true); + + ret =3D regmap_write(data->regmap, ADS112C14_REG_CONVERSION_CTRL, + ADS112C14_CONVERSION_CTRL_START); + if (ret) { + WRITE_ONCE(data->continuous_mode, false); + regmap_update_bits(data->regmap, ADS112C14_REG_DEVICE_CFG, + ADS112C14_DEVICE_CFG_CONV_MODE, + FIELD_PREP(ADS112C14_DEVICE_CFG_CONV_MODE, + ADS112C14_DEVICE_CFG_CONV_MODE_SINGLE_SHOT)); + return ret; + } + + return 0; +} + +static int ads112c14_buffer_predisable(struct iio_dev *indio_dev) +{ + struct ads112c14_data *data =3D iio_priv(indio_dev); + int ret; + + if (!ads112c14_using_drdy_trigger(indio_dev)) + return 0; + + guard(mutex)(&data->lock); + + WRITE_ONCE(data->continuous_mode, false); + + ret =3D regmap_write(data->regmap, ADS112C14_REG_CONVERSION_CTRL, + ADS112C14_CONVERSION_CTRL_STOP); + if (ret) + return ret; + + return regmap_update_bits(data->regmap, ADS112C14_REG_DEVICE_CFG, + ADS112C14_DEVICE_CFG_CONV_MODE, + FIELD_PREP(ADS112C14_DEVICE_CFG_CONV_MODE, + ADS112C14_DEVICE_CFG_CONV_MODE_SINGLE_SHOT)); +} + +static const struct iio_buffer_setup_ops ads112c14_buffer_setup_ops =3D { + .postenable =3D ads112c14_buffer_postenable, + .predisable =3D ads112c14_buffer_predisable, +}; + static int ads112c14_populate_idac_mag(u32 current_nA, u8 *idac_mag) { u32 current_uA =3D current_nA / (NANO / MICRO); @@ -1480,6 +1615,19 @@ static int ads112c14_probe(struct i2c_client *client) 0, dev_name(dev), indio_dev); if (ret) return ret; + + data->drdy_trig =3D devm_iio_trigger_alloc(dev, "%s-dev%d-drdy", + info->name, + iio_device_id(indio_dev)); + if (!data->drdy_trig) + return -ENOMEM; + + data->drdy_trig->ops =3D &ads112c14_trigger_ops; + iio_trigger_set_drvdata(data->drdy_trig, indio_dev); + + ret =3D devm_iio_trigger_register(dev, data->drdy_trig); + if (ret) + return ret; } =20 ads112c14_populate_tables(data); @@ -1490,7 +1638,8 @@ static int ads112c14_probe(struct i2c_client *client) =20 ret =3D devm_iio_triggered_buffer_setup(dev, indio_dev, iio_pollfunc_store_time, - ads112c14_trigger_handler, NULL); + ads112c14_trigger_handler, + &ads112c14_buffer_setup_ops); if (ret) return ret; =20 --=20 2.43.0