Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp4216670ybi; Tue, 11 Jun 2019 02:59:28 -0700 (PDT) X-Google-Smtp-Source: APXvYqzIZTmHrWhC4OiugXSTx1fO2A3qU3OS38vL7XqQzHaxnASxVQ3t+PjL6OhMAKcUE1t1VMhg X-Received: by 2002:a17:902:2b8a:: with SMTP id l10mr36582943plb.283.1560247168506; Tue, 11 Jun 2019 02:59:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560247168; cv=none; d=google.com; s=arc-20160816; b=BTGKRvCNYX/Me8m6122nc9wWT/dtmkpaXJ4sngodI+8a6PRnG+4BzxnbEfdAMKBwMQ ruPJ/6GVQoy8fBkC8HBzF2qtGCojlyZjRQcRPQfNaKSLx+oUTozCmdlNjsN0/5MKBmNk wevv9JExjIAB0TZZySlokPgMDdwePv9jXhe3KX6AVYvhlv3Zel21JrIZyBrQhTlsuF3w qKmdrEzNa4dhGdxKx0/StpPjRJGBauZCQ+Vvs9bj3evnb6+txt93dpIqhZts6nJKqmqY q2ZgYMelm5u959j6bnsGnDQTQN4eD1F/Mk/fTWhRUgdVksxctyoWB9+vjCMFFJgjy8ti t9zQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=Y0eakYZbx5UuS/LWHUK6zlcZv+cb8xH3NcR2iZy7Ju8=; b=QJoSQ+hlKHHxJLA7EMiGIZNh4F2XoZoCMM73E4xBgzor4B6Km2cHXNhoVXaKG34Rgw CztmTmk/owwo3qWjW/MyzTszIQrExmwz4yQVbPKi1BU149r55cZiCC2USd2be6xoLrs/ MLvGsTZJK8KjJDJa5nTVSYpG1WZbVtyPUwI4Bcky4lC+CB5e8NQO7kbsExvIUGvm1Y+l ykXZRo31Aa58SSlZpOTQdT6V9jaUFE52vA7avfQ99MerfJ9LFS2SXMyXW6iFzfhzQSnD FajKY6EPBz8/4/CzAgYVxkeMutGx/rojyqaF+IBcPg4DsyPpyDXY/YmuhGb0EAWxgFbj coeA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x3si11591395pgr.22.2019.06.11.02.59.13; Tue, 11 Jun 2019 02:59:28 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2405124AbfFKJ5b (ORCPT + 99 others); Tue, 11 Jun 2019 05:57:31 -0400 Received: from relay2-d.mail.gandi.net ([217.70.183.194]:35281 "EHLO relay2-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404919AbfFKJ52 (ORCPT ); Tue, 11 Jun 2019 05:57:28 -0400 X-Originating-IP: 90.88.159.246 Received: from dell-desktop.home (aaubervilliers-681-1-40-246.w90-88.abo.wanadoo.fr [90.88.159.246]) (Authenticated sender: mylene.josserand@bootlin.com) by relay2-d.mail.gandi.net (Postfix) with ESMTPSA id BD70340008; Tue, 11 Jun 2019 09:57:24 +0000 (UTC) From: =?UTF-8?q?Myl=C3=A8ne=20Josserand?= To: peda@axentia.se, jic23@kernel.org, knaack.h@gmx.de, lars@metafoo.de, pmeerw@pmeerw.net, robh+dt@kernel.org, mark.rutland@arm.com Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, thomas.petazzoni@bootlin.com, mylene.josserand@bootlin.com Subject: [PATCH v1 2/3] iio: afe: rescale: Add support of CHAN_INFO_PROCESSED Date: Tue, 11 Jun 2019 11:56:58 +0200 Message-Id: <20190611095659.29845-3-mylene.josserand@bootlin.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190611095659.29845-1-mylene.josserand@bootlin.com> References: <20190611095659.29845-1-mylene.josserand@bootlin.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add the support of the CHAN_INFO_PROCESSED to have directly the processed value (raw * scale). It will be exported as in_voltage0_input in sysfs. Signed-off-by: Mylène Josserand --- drivers/iio/afe/iio-rescale.c | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/drivers/iio/afe/iio-rescale.c b/drivers/iio/afe/iio-rescale.c index 3e689d6eb501..2275571fff64 100644 --- a/drivers/iio/afe/iio-rescale.c +++ b/drivers/iio/afe/iio-rescale.c @@ -63,14 +63,54 @@ static int rescale_convert_scale(struct rescale *rescale, int *val, int *val2) } } +static int rescale_convert_processed(struct rescale *rescale, int raw, + int *val, int *val2) +{ + unsigned long long tmp, scaled; + int ret; + + ret = rescale_convert_scale(rescale, val, val2); + switch (ret) { + case IIO_VAL_FRACTIONAL: + tmp = div_s64((s64)*val * 1000000000LL, *val2); + scaled = tmp * raw; + *val = (int)div_s64_rem(scaled, 1000000000, val2); + return ret; + case IIO_VAL_INT: + return IIO_VAL_FRACTIONAL; + case IIO_VAL_FRACTIONAL_LOG2: + tmp = shift_right((s64)*val * 1000000000LL, *val2); + scaled = tmp * raw; + *val = (int)div_s64_rem(scaled, 1000000000LL, val2); + return ret; + default: + return -EOPNOTSUPP; + } +} + static int rescale_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long mask) { struct rescale *rescale = iio_priv(indio_dev); + unsigned int raw; int ret; switch (mask) { + case IIO_CHAN_INFO_PROCESSED: + /* Read the raw value and the scale */ + ret = iio_read_channel_raw(rescale->source, &raw); + if (!ret) + return ret; + ret = iio_read_channel_scale(rescale->source, val, val2); + if (!ret) + return ret; + /* Process the correct value with raw * scale */ + ret = rescale_convert_processed(rescale, raw, val, val2); + if (!ret) + return ret; + return IIO_VAL_INT; + case IIO_CHAN_INFO_RAW: return iio_read_channel_raw(rescale->source, val); @@ -145,7 +185,7 @@ static int rescale_configure_channel(struct device *dev, } chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | - BIT(IIO_CHAN_INFO_SCALE); + BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_PROCESSED); if (iio_channel_has_available(schan, IIO_CHAN_INFO_RAW)) chan->info_mask_separate_available |= BIT(IIO_CHAN_INFO_RAW); -- 2.11.0