From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6515C1D0DEE for ; Mon, 20 Jul 2026 00:55:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784508936; cv=none; b=SSuWw6z1v+U65pwcGHaw0Xfpf/NodDJeiNeDXYL5XXzD1qQsPwhYF/H1VDGjxaf3Mo64nMoyrsg8KWmkpOPKd67HhiHvEpHH+FRmfIKJg1yK7c2caLbJoISoEYDsrEEC527kX8+Yeo1ASPKdypS+H5plfqBHMelyztacjc59TQs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784508936; c=relaxed/simple; bh=VYUkCWQuG8/KJqlHmM1Pj70tvXSM4Ihz5MTh7te4/q4=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=aUBhQ8vNCGKc8JQCthwykt+m1S6qPb33Tzo1jrKmGTclmcROjVG79994X3nokTEYQ40KVWHBdpvFU8gtFeLbJCmi9GuIBEqzRrGq8irduJvs0GGjvoOIa/n2VcGADq7r4Qpa3vFVKeRK8x3d82dlGywq1I2YwZj1lYy8cDp18zg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=cKmuOqcZ; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=FB7Va7HO; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="cKmuOqcZ"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="FB7Va7HO" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66JNukuF916812 for ; Mon, 20 Jul 2026 00:55:34 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 6V8CuGzHGXoJURAt4SDpDqNmiiYOtTmZFicDejSPp9c=; b=cKmuOqcZ8u6YHNu2 +O/X6oX5+IWUd3q0cgJf1pKo3pcsegtoL1esJT/rVX6uym2AM04vuDMzl8MirCvF YoirH7k7am+4v7QpC94/s+6cI13E2S7gTG55F9nEdoNNQzgec14X5lYfzXRqEgTU Bh/ZB7DG7JylAs29vWwg0t4oRDaZei/y/I3nO9/dgLdkg3MvUxE8AtrTmk22YLJ1 d/VXagUKdprzawN2p1OF2pklI9cANbyaJLRPGyuufMCGRpvqkUFq0p5FxjHU6u/S GYVXHNpyyVByYUV4FIha5ek+y0VNintaaMm+Vs1kQSu9M4fQsaHZaCLcCLC+4p/P WSzaOw== Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fg2af3sth-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 20 Jul 2026 00:55:33 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-37fca5f21b1so2970386a91.0 for ; Sun, 19 Jul 2026 17:55:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784508933; x=1785113733; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:subject:cc:to:from:date:from:to:cc:subject :date:message-id:reply-to:content-type; bh=6V8CuGzHGXoJURAt4SDpDqNmiiYOtTmZFicDejSPp9c=; b=FB7Va7HO4dKDDTHIfKMtCjpo2WirCKNtB/vaWoIGHlBOIrnVVUSig2bisALhjjfqrm KCpXevweOY87uALalkfX+khiK9bEuZEYkoWUpVjG3AsrUFiqbbh/NWaCmssqANQbnww/ mjidYY9V8isWe57DxuSyr1/0ibIiDMvv4xVi5y7xGNDUcpdi7TJlr+Ng4TanI2GqImCB FrFcqNno0GF0bXJe9/enL2+8XKiO57jkEHqmbvT/HSilowqPu18d3EIj3A0dVwJQdeJy Qf4QjU3MmwevUe6TlUBPdz+p7tHf9GN641YEd3BG08SXeEvFfnp6U46EQvEaP5ay/KBL FYaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784508933; x=1785113733; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=6V8CuGzHGXoJURAt4SDpDqNmiiYOtTmZFicDejSPp9c=; b=ULw/enPtXBE+zrwAyYqOWaVSaB0ph/UzWgRWM276en2iKktM/3tbaQmZjJUVNv1FTO GDuSrqGGl9u+T/Bd3NqG6wqokZY2rm9WLvP1+mf+BLhjxwtHhbqE2MRSq+8Rp6KlhViN 7a1rvnYgeyZh4LesnELOyvYTkYvKL/t06bMGv8PWbzBhJqGQjjNN96XTyYq8XP+hb8zl jEtMbG3zV1NO8Fpmz80ijdHMGYMNyNhdGF+KWKT17EKa4BZHvK2ppqJz0AS4kuw9oDE0 TAqgpasJvhAzpZdVl50qADt5JrjSqEPVO1cLc2o1Bg4U73vNwiT3pbWXtMpsthmKIZJ0 sZCA== X-Forwarded-Encrypted: i=1; AHgh+RqHHCTtpqInIyGU1X8U2EYYmbk7baBmO1WeuHKgQcn5nvuYv4ln9KD7jYwC1nbQv48EDMlHJoNJ1fnruME=@vger.kernel.org X-Gm-Message-State: AOJu0YwS0CvAPUyd7YUNvMdP1EgE5mgIIOk8l4iP8rQPqnJIy6rT52to vq8cb+ahkIwnYmu0nrg2bf3fJfnSt78As+bs81+i4vn7zIx9pzmQcRoQYdTCTYwN6einuHH8P8x EUT6NMRFIo1BiRtiene38lEHdWh+JWZ6RABNqvLeG+PDm0LbtEGV7wkudF0lgbXpI5aY= X-Gm-Gg: AfdE7cmRRnhXHTDj8PFZ2Ltnt/WUjex69TXdA780tjMnhUYvMhyf74YmB1T4X1xX99k bzFyAmO2wp6nfFb11ds82qlVi2+T2OGmvlm/SHucwhKtr+C9wLz/RSLe9aqLIw0frA3GA8yeX84 L+fNrjC24XkWh03SYhd/xGASUUZaaMDmuoF4gm3y+RleE9nmXaoWCTVQsz9J0CNioGbXedn3+3E ZTpUalHmuKhN0wNBiLULJG+Irtm02lk3FdE+SXbiQ1dcu1hhD30p0Stx2r21s7l0NZ+WLkM13hC ZTvmn4Q+7cglgnyVOpWg8yMz0Y19HFKQtsIddC1g0b1mzFtb0kT2IqIIaUG6o13e9TATlF5rhBt 4htfewqM4043ulEqu X-Received: by 2002:a17:90b:3c91:b0:38e:4e61:c9e with SMTP id 98e67ed59e1d1-38e4e61a52fmr10821932a91.21.1784508932785; Sun, 19 Jul 2026 17:55:32 -0700 (PDT) X-Received: by 2002:a17:90b:3c91:b0:38e:4e61:c9e with SMTP id 98e67ed59e1d1-38e4e61a52fmr10821899a91.21.1784508932240; Sun, 19 Jul 2026 17:55:32 -0700 (PDT) Received: from jic23-huawei ([50.35.46.84]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38e39deab2dsm6746847a91.1.2026.07.19.17.55.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Jul 2026 17:55:31 -0700 (PDT) Date: Mon, 20 Jul 2026 01:55:27 +0100 From: Jonathan Cameron To: "David Lechner (TI)" Cc: Nuno =?UTF-8?B?U8Oh?= , Andy Shevchenko , Chris Hall , Patrick Edwards , Kurt Borja , Nguyen Minh Tien , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 3/3] iio: adc: ti-ads112c14: add support for buffered read Message-ID: <20260720015527.0ccc543d@jic23-huawei> In-Reply-To: <20260714-iio-adc-ti-ads112c14-buffered-read-v1-3-fe6e1c971288@baylibre.com> References: <20260714-iio-adc-ti-ads112c14-buffered-read-v1-0-fe6e1c971288@baylibre.com> <20260714-iio-adc-ti-ads112c14-buffered-read-v1-3-fe6e1c971288@baylibre.com> X-Mailer: Claws Mail 4.4.0 (GTK 3.24.52; x86_64-pc-linux-gnu) 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=US-ASCII Content-Transfer-Encoding: 7bit X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIwMDAwNCBTYWx0ZWRfX50q/fxH1lRa2 HBlsiRdXuapz4FxFvJYMM3uyDsNa+mPK+nV0GvQVUd3z2tj6Bs3lyMo4sjoZfUgikxT1aMyxezl 5d8C/Sz+AFJmXiU4sfdAVWeapGVNORI= X-Proofpoint-GUID: clFE2Kl8Eg4jTF4_hGOvLPF-qNRkzSTF X-Proofpoint-ORIG-GUID: clFE2Kl8Eg4jTF4_hGOvLPF-qNRkzSTF X-Authority-Analysis: v=2.4 cv=a+sAM0SF c=1 sm=1 tr=0 ts=6a5d7206 cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=qC1CW/w66vtJz1P9yTJxNA==:17 a=kj9zAlcOel0A:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=IpJZQVW2AAAA:8 a=pteTUHka6Q4YKNZ8nnAA:9 a=CjuIK1q_8ugA:10 a=uKXjsCUrEbL0IQVhDsJ9:22 a=IawgGOuG5U0WyFbmm1f5:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIwMDAwNCBTYWx0ZWRfX00lifaPV7aaD VYjL2vD6KXvxdnafltjzQHry9B1tUBj6lOqnmNa97QycDG0iJGVYP1Vom8cwwpuRQK7lxj0vSsO Pk1kt1NgzM6OT65aIfZLTxHskr3gUR7x8lLoedSLlOLkM4qeLiHQiJsUd/RlSMRxADDLzJaBVwd CVv7tIOPZabAo4NTTAQlgjqhISRmFTTZ1+JxmrBJDMMYrIZJ/G0ylvIx+aml84FTPZ7ntLhWkF+ ySf4H9eVho5pnJYeFpU/n2Wzzaary85f7mhTseutUnXFaGx7tLZrRowxVfkyl/CMBohfWcmoLyT zOFu07+Qob8+6MRalwrXd8cAvAXW8JMmmeuXQRWtWA7gIMi+b21TgZ57wblM9x6uGdr0FAFdnvN e1Tm4EaFJshp5weoc7h4DwKMc6T5EeuZ9NFbTyBfdPVIsFjQIhgPyiqfYC4oY3qtNU9Qrew9yDk vBJpAmXl4s4lyyXZM+A== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-19_08,2026-07-17_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 clxscore=1015 impostorscore=0 malwarescore=0 spamscore=0 phishscore=0 priorityscore=1501 lowpriorityscore=0 adultscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607200004 On Tue, 14 Jul 2026 19:19:32 -0500 "David Lechner (TI)" wrote: > Add support for buffered reads using a triggered buffer. > > The device has a continuous conversion mode, but that can only be used > with one channel at a time since there is nothing like a sequencer to > support that in hardware. Instead, we use single-shot reads like we do > for direct reads to be able to read multiple channels. > > Support for continuous conversion mode could be added in the future if > needed via a 2nd buffer. How about enabling that if only one channel is requested? I vaguely recall us doing that for another driver (though I might be dreaming :) I did see your comment in the cover letter about it affecting timing and that making life complex. Fine to leave considering this for another day but maybe don't suggest a particular solution here. Talk a little in here about why you parse the crc on to userspace. I think that makes sense but good to have a record of your reasoning. We aren't telling userspace it is there afterall, it's just in some left over space! > > Signed-off-by: David Lechner (TI) > --- > drivers/iio/adc/ti-ads112c14.c | 103 +++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 99 insertions(+), 4 deletions(-) > > diff --git a/drivers/iio/adc/ti-ads112c14.c b/drivers/iio/adc/ti-ads112c14.c > index 99ccacd6d56f..1404ca31324b 100644 > --- a/drivers/iio/adc/ti-ads112c14.c > +++ b/drivers/iio/adc/ti-ads112c14.c > @@ -15,7 +15,10 @@ > #include > #include > #include > +#include > #include > +#include > +#include > #include > #include > #include > @@ -29,6 +32,9 @@ > #include > #include > > +/* Arbitrary limit since channels are dynamic. */ > +#define ADS112C14_MAX_MEASUREMENT_CHANNELS 16 > + > /* Datasheet t_d(RST) - time to wait after reset before next I2C use. */ > #define ADS112C14_DELAY_RESET_US 500 > > @@ -255,6 +261,8 @@ struct ads112c14_data { > u32 num_measurements; > u8 sys_mon_chan_short_gain_val; > int sys_mon_chan_short_scale_available[ARRAY_SIZE(ads112c14_pga_gains_x10)][2]; > + IIO_DECLARE_BUFFER_WITH_TS(__be32, scan, ADS112C14_MAX_MEASUREMENT_CHANNELS + > + ARRAY_SIZE(ads112c14_sys_mon_channels)); > }; > > static bool ads112c14_writeable_reg(struct device *dev, unsigned int reg) > @@ -575,7 +583,7 @@ static int ads112c14_prepare_sys_mon_channel(struct ads112c14_data *data, > > static int ads112c14_single_conversion(struct ads112c14_data *data, > const struct iio_chan_spec *chan, > - u8 *buf) > + u8 *buf, bool for_scan) > { > struct i2c_client *client = to_i2c_client(regmap_get_device(data->regmap)); > u32 reg_val; > @@ -605,6 +613,22 @@ static int ads112c14_single_conversion(struct ads112c14_data *data, > if (ret) > return ret; > > + /* > + * When doing buffered read, we don't check the CRC, but rather pass it > + * along with the raw data. Perhaps say why. > + */ > + if (for_scan) { > + u8 len = BITS_TO_BYTES(data->chip_info->resolution_bits) + > + (data->i2c_crc_enabled ? 1 : 0); > + > + ret = i2c_smbus_read_i2c_block_data(client, ADS112C14_CMD_RDATA, > + len, buf); > + if (ret < 0) > + return ret; > + > + return 0; > + } > + > @@ -908,7 +967,7 @@ static int ads112c14_parse_channels(struct iio_dev *indio_dev, > return -ENOMEM; > > channels = devm_kcalloc(dev, num_child_nodes + > - ARRAY_SIZE(ads112c14_sys_mon_channels), > + ARRAY_SIZE(ads112c14_sys_mon_channels) + 1, > sizeof(*channels), GFP_KERNEL); > if (!channels) > return -ENOMEM; > @@ -1069,14 +1128,44 @@ static int ads112c14_parse_channels(struct iio_dev *indio_dev, > if (spec->type == IIO_RESISTANCE) > spec->differential = 0; > > + spec->scan_type = (struct iio_scan_type){ > + .format = measurement->bipolar ? > + IIO_SCAN_FORMAT_SIGNED_INT : > + IIO_SCAN_FORMAT_UNSIGNED_INT, > + .realbits = data->chip_info->resolution_bits, > + .storagebits = 32, > + .shift = 32 - data->chip_info->resolution_bits, > + .endianness = IIO_BE, > + }; > + > i++; > } > > data->num_measurements = i; > + if (data->num_measurements >= ADS112C14_MAX_MEASUREMENT_CHANNELS) > + return dev_err_probe(dev, -EINVAL, > + "too many measurement channels defined\n"); > + > memcpy(channels + i, ads112c14_sys_mon_channels, sizeof(ads112c14_sys_mon_channels)); > > + for (u32 j = 0; j < ARRAY_SIZE(ads112c14_sys_mon_channels); j++) { > + struct iio_chan_spec *spec = &channels[i + j]; > + Add a comment to say this is updating elements of the template. > + spec->scan_index = i + j; > + spec->scan_type = (struct iio_scan_type){ > + .format = IIO_SCAN_FORMAT_SIGNED_INT, > + .realbits = data->chip_info->resolution_bits, > + .storagebits = 32, > + .shift = 32 - data->chip_info->resolution_bits, > + .endianness = IIO_BE, > + }; > + } > + > indio_dev->channels = channels; > - indio_dev->num_channels = i + ARRAY_SIZE(ads112c14_sys_mon_channels); > + indio_dev->num_channels = i + ARRAY_SIZE(ads112c14_sys_mon_channels) + 1; > + > + i = indio_dev->num_channels - 1; If this is different from doing i += ARRAY_SIZE(ads112c14_sys_mon_channels); and using that above and here (with a increment after to account for this) then add a comment on why. Otherwise I'd prefer that form as it puts it in the same scheme as the channel increments above. > + channels[i] = IIO_CHAN_SOFT_TIMESTAMP(i); > > return 0; > }