Received: by 10.223.164.221 with SMTP id h29csp1002120wrb; Sat, 28 Oct 2017 14:14:40 -0700 (PDT) X-Google-Smtp-Source: ABhQp+SOOYakGgVaQ7b6SvkgiwF+37SI0vSpF9le0dSC2N8pJXadTtyusAy5dSY4Lkh1SdPiD7To X-Received: by 10.99.182.66 with SMTP id v2mr3860546pgt.325.1509225280316; Sat, 28 Oct 2017 14:14:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1509225280; cv=none; d=google.com; s=arc-20160816; b=KklsgvDROqRsgFFanf3KE5jGw9V6Cm83Nvi53lKDNd1xtNvpoQvLOyptdzQR/c1oSI BclVGwkMt/H0ogHmiXcSRB4cgnwD3suYE6HkS3i8Y9MrQLesZtCtD0SnwlfIRVVDecAf 82Fr1ZB/1Kso9uDqstDuKxx4TUulHO78wZFxLjUlQMrZqSWccAhVP2i7pZ8SNd8JQ8KZ mSC082BM7w3CQMGb03pnVzCqeWa1P7XnAcsZyS2RQX9W8B9xhujzQQbgEGx8ukUsZW+8 5xaYtUEFvdYqqP8gx9cc9aVVHI94jRiJddh08IaBdJFikZFtWVQOgttH14cXE3mu87DI 4ECQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:content-transfer-encoding :mime-version:references:in-reply-to:date:subject:cc:to:from :arc-authentication-results; bh=DWK1VE07YCs7CdM95l6lziEIP6rt6LabpLotCbs2O7g=; b=HbSJiy/BvkVhQUUKTh0QSuKNBGD0yX7WDZBxsXVQ4JpvCvzYz6r1cBKygymlXGW79k FxBU9q27OznTbXVroLRwTfUYZVawIZwoe6Qh5ibNVl89btjjRTOmIQIKtgwdIxLfezdS vkKOCeKywIPY1OXAW0gpBuewIboHkvc8niVoqsm745zwxKRZPef3M8/29YqZ4lahjFpT 9pJw3bjHrNa3/cvBqfZGIajeWxAstXS7/VMpFcuWX2V3/pLVl6NKwn9Wf3/9v29Y8Cv6 wg3kKIsxrzm2HREF/SROjS62bLFkUnlKmOJ5d6aCyNMlnX51W1pAbHy8GQy9L76gVMZu B2DA== 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 r21si6920889pgo.705.2017.10.28.14.14.27; Sat, 28 Oct 2017 14:14:40 -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 S1751907AbdJ1VNd (ORCPT + 99 others); Sat, 28 Oct 2017 17:13:33 -0400 Received: from mail-out-1.itc.rwth-aachen.de ([134.130.5.46]:9675 "EHLO mail-out-1.itc.rwth-aachen.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751619AbdJ1VNI (ORCPT ); Sat, 28 Oct 2017 17:13:08 -0400 X-IronPort-AV: E=Sophos;i="5.44,310,1505772000"; d="scan'208";a="20968941" Received: from rwthex-w2-a.rwth-ad.de ([134.130.26.158]) by mail-in-1.itc.rwth-aachen.de with ESMTP; 28 Oct 2017 23:13:04 +0200 Received: from pebbles.fritz.box (77.182.144.95) by rwthex-w2-a.rwth-ad.de (2002:8682:1a9e::8682:1a9e) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1034.26; Sat, 28 Oct 2017 23:12:59 +0200 From: =?UTF-8?q?Stefan=20Br=C3=BCns?= To: CC: Peter Meerwald-Stadler , =?UTF-8?q?Stefan=20Br=C3=BCns?= , , "Andrew F . Davis" , "Lars-Peter Clausen" , Jonathan Cameron , "Hartmut Knaack" , Javier Martinez Canillas Subject: [PATCH v2 1/3] iio: adc: ina2xx: Shift bus voltage register to mask flag bits Date: Sat, 28 Oct 2017 23:12:46 +0200 X-Mailer: git-send-email 2.14.3 In-Reply-To: <20171028211249.24148-1-stefan.bruens@rwth-aachen.de> References: <20171028211249.24148-1-stefan.bruens@rwth-aachen.de> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [77.182.144.95] X-ClientProxiedBy: rwthex-w3-a.rwth-ad.de (2002:8682:1aa2::8682:1aa2) To rwthex-w2-a.rwth-ad.de (2002:8682:1a9e::8682:1a9e) Message-ID: <875c664a-9000-4121-acf5-e3ab254cf061@rwthex-w2-a.rwth-ad.de> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Lower bits of the INA219/220 bus voltage register are conversion status flags, properly shift the value. When reading via IIO buffer, the value is passed on unaltered, shifting is the responsibility of the user. Signed-off-by: Stefan BrĂ¼ns --- Changes in v2: - Apply to the shunt voltage, not bus voltage register - Shift instead of masking the LSBs drivers/iio/adc/ina2xx-adc.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/drivers/iio/adc/ina2xx-adc.c b/drivers/iio/adc/ina2xx-adc.c index 3aff9556678f..84094235ff7e 100644 --- a/drivers/iio/adc/ina2xx-adc.c +++ b/drivers/iio/adc/ina2xx-adc.c @@ -44,7 +44,6 @@ #define INA226_MASK_ENABLE 0x06 #define INA226_CVRF BIT(3) -#define INA219_CNVR BIT(1) #define INA2XX_MAX_REGISTERS 8 @@ -79,6 +78,11 @@ #define INA226_ITS_MASK GENMASK(5, 3) #define INA226_SHIFT_ITS(val) ((val) << 3) +/* INA219 Bus voltage register, low bits are flags */ +#define INA219_OVF BIT(0) +#define INA219_CNVR BIT(1) +#define INA219_BUS_VOLTAGE_SHIFT 3 + /* Cosmetic macro giving the sampling period for a full P=UxI cycle */ #define SAMPLING_PERIOD(c) ((c->int_time_vbus + c->int_time_vshunt) \ * c->avg) @@ -112,7 +116,7 @@ struct ina2xx_config { u16 config_default; int calibration_factor; int shunt_div; - int bus_voltage_shift; + int bus_voltage_shift; /* position of lsb */ int bus_voltage_lsb; /* uV */ int power_lsb; /* uW */ enum ina2xx_ids chip_id; @@ -135,7 +139,7 @@ static const struct ina2xx_config ina2xx_config[] = { .config_default = INA219_CONFIG_DEFAULT, .calibration_factor = 40960000, .shunt_div = 100, - .bus_voltage_shift = 3, + .bus_voltage_shift = INA219_BUS_VOLTAGE_SHIFT, .bus_voltage_lsb = 4000, .power_lsb = 20000, .chip_id = ina219, @@ -170,6 +174,9 @@ static int ina2xx_read_raw(struct iio_dev *indio_dev, else *val = regval; + if (chan->address == INA2XX_BUS_VOLTAGE) + *val >>= chip->config->bus_voltage_shift; + return IIO_VAL_INT; case IIO_CHAN_INFO_OVERSAMPLING_RATIO: @@ -203,9 +210,9 @@ static int ina2xx_read_raw(struct iio_dev *indio_dev, return IIO_VAL_FRACTIONAL; case INA2XX_BUS_VOLTAGE: - /* processed (mV) = raw*lsb (uV) / (1000 << shift) */ + /* processed (mV) = raw * lsb (uV) / 1000 */ *val = chip->config->bus_voltage_lsb; - *val2 = 1000 << chip->config->bus_voltage_shift; + *val2 = 1000; return IIO_VAL_FRACTIONAL; case INA2XX_POWER: @@ -532,7 +539,7 @@ static ssize_t ina2xx_shunt_resistor_store(struct device *dev, * Sampling Freq is a consequence of the integration times of * the Voltage channels. */ -#define INA219_CHAN_VOLTAGE(_index, _address) { \ +#define INA219_CHAN_VOLTAGE(_index, _address, _shift) { \ .type = IIO_VOLTAGE, \ .address = (_address), \ .indexed = 1, \ @@ -544,7 +551,8 @@ static ssize_t ina2xx_shunt_resistor_store(struct device *dev, .scan_index = (_index), \ .scan_type = { \ .sign = 'u', \ - .realbits = 16, \ + .shift = _shift, \ + .realbits = 16 - _shift, \ .storagebits = 16, \ .endianness = IIO_LE, \ } \ @@ -579,8 +587,8 @@ static const struct iio_chan_spec ina226_channels[] = { }; static const struct iio_chan_spec ina219_channels[] = { - INA219_CHAN_VOLTAGE(0, INA2XX_SHUNT_VOLTAGE), - INA219_CHAN_VOLTAGE(1, INA2XX_BUS_VOLTAGE), + INA219_CHAN_VOLTAGE(0, INA2XX_SHUNT_VOLTAGE, 0), + INA219_CHAN_VOLTAGE(1, INA2XX_BUS_VOLTAGE, INA219_BUS_VOLTAGE_SHIFT), INA219_CHAN(IIO_POWER, 2, INA2XX_POWER), INA219_CHAN(IIO_CURRENT, 3, INA2XX_CURRENT), IIO_CHAN_SOFT_TIMESTAMP(4), -- 2.14.3 From 1584517575485148011@xxx Sun Nov 19 17:48:35 +0000 2017 X-GM-THRID: 1584517575485148011 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread