From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.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 89A002DCC1C for ; Thu, 26 Feb 2026 09:32:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772098325; cv=none; b=UAYGuRu892jwSGvQEVJeT/EXf5GFl3K2bDVWqbOv72HLg7feTI/8aR8TVmmVfZFb4FA6AfIjSY4J6ziTmRfy3m/z8XrVMLKd3aaXeSQvkLWbYH7qgMi0XQ2BH5K2m5x/bsORuR9AvGrqKfRbbBbo7c3oXgPmPEoLEeo4Z9EAr8c= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772098325; c=relaxed/simple; bh=VDoXj22Oqfb6AlLbLMDpWxYxX5vDi0/YRFdcwWhluRI=; h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References: Content-Type:MIME-Version; b=TRJDJMHzMHAdfu7xvyIEen7japOEp2aAnIZgu1BV5wZHTtzjlM/f3QiGP4T0T9JghG1vlWREQBf/tIO7bDkj6IfR0WKge6/oBVaNID+43SMMJXGwxTHNHPtihEhBbJMqvf1QE1N4KNF4yEBI/ZREgksU6/6fvHyM5VLD7aMiXvg= 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=cxy2vN9b; arc=none smtp.client-ip=209.85.221.52 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="cxy2vN9b" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-43991cc3155so623105f8f.0 for ; Thu, 26 Feb 2026 01:32:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772098323; x=1772703123; darn=vger.kernel.org; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:from:to:cc:subject :date:message-id:reply-to; bh=L81So1ONkp6t2Vs8xDqcWZCIsJZWaTlxD48UJI4eGtM=; b=cxy2vN9bs6o+hH37fk2V/kXPrRWjO+rmiNILPnVMC8xHHE7aIka8vAYyETeE/qln/q 7sejwOevqEhFLcz0ly4VVnfyjzaa3Q18FCJ7ZLGAt2UigVma2BeYQrEXVekKL9s4eAj1 U6TqPyQUX4w6y46daPHyh//yeTdVwz3mcntrx5jQ0RVy9vq3/MRXSbmxTnmRryOswf6U RntqyZFY47YRzz6MaWjvvo06zqczK3ozI6oQ6kKbPBPzBoi2Iccy0VEHzXbkFzfsYWsU k0fC5gVPvJtrH96zpq8G+fzPf8EwM1k5BLGYxOagGsedqLDjdJsxzdH3nKCTOlprpeda T5Ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772098323; x=1772703123; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=L81So1ONkp6t2Vs8xDqcWZCIsJZWaTlxD48UJI4eGtM=; b=NjqOCxJX5NJhm6WGztl1mAM5Wu002R3Xwa0D6YyqAzTNyf6b9W+GTR9X2O+DCJnR9Y xZgsa3X6JLAd7rIePmOraSKfcu5ovAW+J28diAnUKQn4QzyN3nLl/c3DVa2uv2FKmFuu UZ3NTFQUF0+CaiGsHGuDSnfwhwnZ4K/goZdc7kOpqGd6N8V8LIUL1xcrlMBx62AT25KB B/bv67LK6A0xHGdAmxXZvwEFoupiOfcNSzYXiZFUF4dZOfHy/LQ4kuYWwPlNquJjZ0hW fjmf3ihepH1mRuGRAM2NtWyFKLejVG2MrVLSYS9T4estuah1K7gy58268jni2FFtChBg hQIQ== X-Forwarded-Encrypted: i=1; AJvYcCV3u49jAWTS24dguQH3khqr9V2zfPjUaIWMgCJqFAKmj9WSn1BnvqDUAhzqVuD8fklh5uFtqIUgFlrVebc=@vger.kernel.org X-Gm-Message-State: AOJu0Ywnr7IKsYZfgsUjUIY9WDAp+0BP0d1UPtU3HTHg7bODzMLDpdjn mLXxyc0y9AhFzT6Sxa3TYZDmEHKeSaPOKAlNMrTMY3ikKxL4CBTMSVFO X-Gm-Gg: ATEYQzwGSCnn5a2eJbEGXqd5htQ3YHqwE2jhpmr/xdjoY+AXAuCm4a0ljWmsi3xbxCL 8NbojNtt4kNI7CTNKIReiuteriO1GMPRPI/5VRqpfdFKu9dm/4C1OONJjkUkLe/A3JwI2uxCIAh Wr/qbGY5sxHIeOuHfzLNHfA3I+8KG6bXPciT7ffplDRl/X7YwGkmoI5QTWN4l3ZDZQnIBrvjV8H l3hGpKvhw6z52cNh13jxTCPRfKcYNl2LsnsIEZ2LBlqRRuIvIwUHYO/1OEOUv9InB6TVizyyX00 FTHc90hFfbJhs5X0QdqbDwVhOFo3Bq/vuazSTfP0EZUWP9DK3TWFc9KdIGZT2WbLs45exQS2XHy vN42Z45QN2NK5WsA55FDbFCQ+R2DHdS+dd47K4XnfK0eM9H1iHGZqgANlXheuTR5N7FXRlI/rcs oNj7oksKlZibwc0G1LASC3TZVRms62Ztw= X-Received: by 2002:a05:6000:144c:b0:437:7268:8e1e with SMTP id ffacd0b85a97d-43997f4145emr2841521f8f.51.1772098322654; Thu, 26 Feb 2026 01:32:02 -0800 (PST) Received: from [192.168.1.187] ([148.63.225.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4398a09aad0sm15400640f8f.2.2026.02.26.01.32.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Feb 2026 01:32:02 -0800 (PST) Message-ID: <446c20d78f9e990a90bf9d75ee82d056be6bfca8.camel@gmail.com> Subject: Re: [PATCH RFC] iio: adc: ad4030: fix calibscale read/write unit mismatch From: Nuno =?ISO-8859-1?Q?S=E1?= To: David Lechner , Marcelo Schmitt , Giorgi Tchankvetadze Cc: antoniu.miclaus@analog.com, lars@metafoo.de, Michael.Hennerich@analog.com, jic23@kernel.org, nuno.sa@analog.com, andy@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org Date: Thu, 26 Feb 2026 09:32:45 +0000 In-Reply-To: <436cefe2-2ccb-41f6-89ec-921e234dfa32@baylibre.com> References: <20260225113102.84568-2-giorgitchankvetadze1997@gmail.com> <436cefe2-2ccb-41f6-89ec-921e234dfa32@baylibre.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.58.3 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 On Wed, 2026-02-25 at 09:20 -0600, David Lechner wrote: > On 2/25/26 5:53 AM, Marcelo Schmitt wrote: > > On 02/25, Giorgi Tchankvetadze wrote: > > > The read path returns calibscale in IIO_VAL_INT_PLUS_NANO but the wri= te > > > path treats it as MICRO. Since no write_raw_get_fmt is provided, the > > > IIO core defaults to MICRO when parsing userspace input. > > >=20 > > > This means reading calibscale and writing it back results in a ~1000x > > > gain error. > > >=20 > > > Change the read path and available range to use MICRO to match the > > > write path. > >=20 > > The updates to ad4030 driver will add write_raw_get_fmt() [1]. > > [1]: > > https://lore.kernel.org/linux-iio/516cccc47e917bd26be29b016907f50a244a6= 8b9.1771865684.git.marcelo.schmitt@analog.com/ > >=20 > > At first glance, I think this could instead add a case to write_raw_get= _fmt(), > > keeping calibscale nano precision (unless nano precision doesn't make s= ense > > for ad4030 calibscale (don't recall from top of my mind)). >=20 > Since this is a fix and needs to be backported, it probably make sense > to not depend on a patch that is adding new features. >=20 +1 - Nuno S=C3=A1 > I'm sure Jonathan will have an opinion about how he would like to handle > a conflict between the fixes and testing branches though. >=20 > >=20 > > >=20 > > > Fixes: 0cb8b324852f ("iio: adc: ad4030: add driver for ad4030-24") > > > Signed-off-by: Giorgi Tchankvetadze > > > --- > > > =C2=A0drivers/iio/adc/ad4030.c | 10 +++++----- > > > =C2=A01 file changed, 5 insertions(+), 5 deletions(-) > > >=20 > > > diff --git a/drivers/iio/adc/ad4030.c b/drivers/iio/adc/ad4030.c > > > index def3e1d01ceb..3d823648371d 100644 > > > --- a/drivers/iio/adc/ad4030.c > > > +++ b/drivers/iio/adc/ad4030.c > > > @@ -423,10 +423,10 @@ static int ad4030_get_chan_calibscale(struct ii= o_dev *indio_dev, > > > =C2=A0 > > > =C2=A0 /* From datasheet: multiplied output =3D input =C3=97 gain wor= d/0x8000 */ > > > =C2=A0 *val =3D gain / AD4030_GAIN_MIDLE_POINT; > > > - *val2 =3D mul_u64_u32_div(gain % AD4030_GAIN_MIDLE_POINT, NANO, > > > + *val2 =3D mul_u64_u32_div(gain % AD4030_GAIN_MIDLE_POINT, MICRO, > > > =C2=A0 AD4030_GAIN_MIDLE_POINT); > > > =C2=A0 > > > - return IIO_VAL_INT_PLUS_NANO; > > > + return IIO_VAL_INT_PLUS_MICRO; > > > =C2=A0} > > > =C2=A0 > > > =C2=A0/* Returns the offset where 1 LSB =3D (VREF/2^precision_bits - = 1)/gain */ > > > @@ -720,8 +720,8 @@ static irqreturn_t ad4030_trigger_handler(int irq= , void *p) > > > =C2=A0 > > > =C2=A0static const int ad4030_gain_avail[3][2] =3D { > > > =C2=A0 { 0, 0 }, > > > - { 0, 30518 }, > > > - { 1, 999969482 }, > > > + { 0, 30 }, > > > + { 1, 999969 }, >=20 > This loses precision. Instead I would change the write to IIO_VAL_INT_PLU= S_NANO > to match the read. >=20 > > > =C2=A0}; > > > =C2=A0 > > > =C2=A0static int ad4030_read_avail(struct iio_dev *indio_dev, > > > @@ -739,7 +739,7 @@ static int ad4030_read_avail(struct iio_dev *indi= o_dev, > > > =C2=A0 > > > =C2=A0 case IIO_CHAN_INFO_CALIBSCALE: > > > =C2=A0 *vals =3D (void *)ad4030_gain_avail; > > > - *type =3D IIO_VAL_INT_PLUS_NANO; > > > + *type =3D IIO_VAL_INT_PLUS_MICRO; > > > =C2=A0 return IIO_AVAIL_RANGE; > > > =C2=A0 > > > =C2=A0 case IIO_CHAN_INFO_OVERSAMPLING_RATIO: > > > --=20 > > > 2.52.0 > > >=20 > > >=20