From patchwork Tue Aug 7 20:07:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Frey X-Patchwork-Id: 10559127 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B1667157B for ; Tue, 7 Aug 2018 20:03:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A19F12A5E2 for ; Tue, 7 Aug 2018 20:03:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 95F902A5ED; Tue, 7 Aug 2018 20:03:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F054B2A5E2 for ; Tue, 7 Aug 2018 20:03:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727822AbeHGWTn (ORCPT ); Tue, 7 Aug 2018 18:19:43 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:36351 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726027AbeHGWTn (ORCPT ); Tue, 7 Aug 2018 18:19:43 -0400 Received: by mail-pf1-f196.google.com with SMTP id b11-v6so9102841pfo.3 for ; Tue, 07 Aug 2018 13:03:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=0LrG9jK8Bmttqmwc0zd15/TvYJ57U7J0Jh74dz4tY+E=; b=sLnmHnEtbpsTm6vs/0H0CmE8chDQ00KBBfXvEr5BB7gGTRqnsc+VY1Q4PlmLKe4e49 gCGQ0GxSX6HudUSBaDhsyHjC1gDAqeZc+crueFyo/ANGAbRiyDVt2kEA3MdsdOyonNp4 Mfrr6PRdzdx/aqS/ytSNtQljJ3gnwPn6Es32bR3zn2agkf5acj99T8BYzCpxc7c1C5ke p9i5hMB/TlJvIRpnvp/wVJgEer/1d91ypkipYdTPi9PqhZHxAFVu2mmCvzKUG6uoKJg8 rSvc+PS5hPv9VsMMH9AdbZwX8tq/8iOm6CEFYWL5Y19etmzLORd9gb5zYuBesp11wMXw SZEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=0LrG9jK8Bmttqmwc0zd15/TvYJ57U7J0Jh74dz4tY+E=; b=ddrEAPlRaBIvFxxCgWscpuWzFRLuzV5N0Xr+qhHdUBSdxhdN320Qjps066EGmo7dBs W6NlSQJ9myaTKQpcTKTyFHE/5Bg8P3QC3UHS4dM7RdD9PO/CFvyKhIh8+umA51bOAs/e P+ujrNpT/hnK/qL8pzVF5n6LswL0ThtOaLXrE8BBz/OKOevJ19OiLQrhyt9qfqmQ9kaS dIL+duG3xa5sI+R/Jhu4dQZ+Nd0UqADH91DtZnNiMd61m6utkrR5apsS9ocvC78P1Xjg tG4Sa50UMW1hPpWaFOZA/nD2eMgGJn9I7G1aikb8LOczWar4velHgi6lebQOd7/pLfaU +osg== X-Gm-Message-State: AOUpUlE7vSRmaaIsRhiL3XtKVk3qPEFDMHsGqhZgaMzLLXgozo1IINub B7o6qXMwJYiq2anmH5En5fg3LRg9 X-Google-Smtp-Source: AAOMgpfI/TS3++VaS1Pz7BmQgSgFLFIbLTgnoM1iEdWAqDa+43KQX7lhOZxMLiEA9hDRHOmIoIWXqg== X-Received: by 2002:a63:df04:: with SMTP id u4-v6mr19819779pgg.434.1533672222074; Tue, 07 Aug 2018 13:03:42 -0700 (PDT) Received: from dfrey-debian-linux.sierrawireless.local ([185.153.179.9]) by smtp.gmail.com with ESMTPSA id x24-v6sm2851348pfh.67.2018.08.07.13.03.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 07 Aug 2018 13:03:41 -0700 (PDT) From: David Frey To: linux-iio@vger.kernel.org, himanshujha199640@gmail.com Cc: David Frey Subject: [PATCH 1/2] iio: bme680: perform cosmetic cleanup Date: Tue, 7 Aug 2018 13:07:20 -0700 Message-Id: <20180807200721.22033-2-dpfrey@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180807200721.22033-1-dpfrey@gmail.com> References: <20180807200721.22033-1-dpfrey@gmail.com> Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP * use consistent naming for masks. _MSK -> _MASK * use GEN_MASK to define masks rather than hex constants * consistently indent masks and values under the corresponding register define * use FIELD_GET instead of explicit mask and shift * Join split lines in bme680_read_calib() which can fit in 80 chars * Make use clamp macro Signed-off-by: David Frey --- drivers/iio/chemical/bme680.h | 17 +++++++------- drivers/iio/chemical/bme680_core.c | 45 +++++++++++++------------------------- 2 files changed, 23 insertions(+), 39 deletions(-) diff --git a/drivers/iio/chemical/bme680.h b/drivers/iio/chemical/bme680.h index e049323f209a..a9f2a9a6abc5 100644 --- a/drivers/iio/chemical/bme680.h +++ b/drivers/iio/chemical/bme680.h @@ -4,10 +4,10 @@ #define BME680_REG_CHIP_I2C_ID 0xD0 #define BME680_REG_CHIP_SPI_ID 0x50 -#define BME680_CHIP_ID_VAL 0x61 +#define BME680_CHIP_ID_VAL 0x61 #define BME680_REG_SOFT_RESET_I2C 0xE0 #define BME680_REG_SOFT_RESET_SPI 0x60 -#define BME680_CMD_SOFTRESET 0xB6 +#define BME680_CMD_SOFTRESET 0xB6 #define BME680_REG_STATUS 0x73 #define BME680_SPI_MEM_PAGE_BIT BIT(4) #define BME680_SPI_MEM_PAGE_1_VAL 1 @@ -18,6 +18,7 @@ #define BME680_REG_GAS_MSB 0x2A #define BME680_REG_GAS_R_LSB 0x2B #define BME680_GAS_STAB_BIT BIT(4) +#define BME680_GAS_RANGE_MASK GENMASK(3, 0) #define BME680_REG_CTRL_HUMIDITY 0x72 #define BME680_OSRS_HUMIDITY_MASK GENMASK(2, 0) @@ -26,9 +27,8 @@ #define BME680_OSRS_TEMP_MASK GENMASK(7, 5) #define BME680_OSRS_PRESS_MASK GENMASK(4, 2) #define BME680_MODE_MASK GENMASK(1, 0) - -#define BME680_MODE_FORCED 1 -#define BME680_MODE_SLEEP 0 +#define BME680_MODE_FORCED 1 +#define BME680_MODE_SLEEP 0 #define BME680_REG_CONFIG 0x75 #define BME680_FILTER_MASK GENMASK(4, 2) @@ -39,16 +39,15 @@ #define BME680_MAX_OVERFLOW_VAL 0x40000000 #define BME680_HUM_REG_SHIFT_VAL 4 -#define BME680_BIT_H1_DATA_MSK 0x0F +#define BME680_BIT_H1_DATA_MASK GENMASK(3, 0) #define BME680_REG_RES_HEAT_RANGE 0x02 -#define BME680_RHRANGE_MSK 0x30 +#define BME680_RHRANGE_MASK GENMASK(5, 4) #define BME680_REG_RES_HEAT_VAL 0x00 #define BME680_REG_RANGE_SW_ERR 0x04 -#define BME680_RSERROR_MSK 0xF0 +#define BME680_RSERROR_MASK GENMASK(7, 4) #define BME680_REG_RES_HEAT_0 0x5A #define BME680_REG_GAS_WAIT_0 0x64 -#define BME680_GAS_RANGE_MASK 0x0F #define BME680_ADC_GAS_RES_SHIFT 6 #define BME680_AMB_TEMP 25 diff --git a/drivers/iio/chemical/bme680_core.c b/drivers/iio/chemical/bme680_core.c index 7d9bb62baa3f..0e79d03ecc40 100644 --- a/drivers/iio/chemical/bme680_core.c +++ b/drivers/iio/chemical/bme680_core.c @@ -102,16 +102,14 @@ static int bme680_read_calib(struct bme680_data *data, __le16 buf; /* Temperature related coefficients */ - ret = regmap_bulk_read(data->regmap, BME680_T1_LSB_REG, - (u8 *) &buf, 2); + ret = regmap_bulk_read(data->regmap, BME680_T1_LSB_REG, (u8 *) &buf, 2); if (ret < 0) { dev_err(dev, "failed to read BME680_T1_LSB_REG\n"); return ret; } calib->par_t1 = le16_to_cpu(buf); - ret = regmap_bulk_read(data->regmap, BME680_T2_LSB_REG, - (u8 *) &buf, 2); + ret = regmap_bulk_read(data->regmap, BME680_T2_LSB_REG, (u8 *) &buf, 2); if (ret < 0) { dev_err(dev, "failed to read BME680_T2_LSB_REG\n"); return ret; @@ -126,16 +124,14 @@ static int bme680_read_calib(struct bme680_data *data, calib->par_t3 = tmp; /* Pressure related coefficients */ - ret = regmap_bulk_read(data->regmap, BME680_P1_LSB_REG, - (u8 *) &buf, 2); + ret = regmap_bulk_read(data->regmap, BME680_P1_LSB_REG, (u8 *) &buf, 2); if (ret < 0) { dev_err(dev, "failed to read BME680_P1_LSB_REG\n"); return ret; } calib->par_p1 = le16_to_cpu(buf); - ret = regmap_bulk_read(data->regmap, BME680_P2_LSB_REG, - (u8 *) &buf, 2); + ret = regmap_bulk_read(data->regmap, BME680_P2_LSB_REG, (u8 *) &buf, 2); if (ret < 0) { dev_err(dev, "failed to read BME680_P2_LSB_REG\n"); return ret; @@ -149,16 +145,14 @@ static int bme680_read_calib(struct bme680_data *data, } calib->par_p3 = tmp; - ret = regmap_bulk_read(data->regmap, BME680_P4_LSB_REG, - (u8 *) &buf, 2); + ret = regmap_bulk_read(data->regmap, BME680_P4_LSB_REG, (u8 *) &buf, 2); if (ret < 0) { dev_err(dev, "failed to read BME680_P4_LSB_REG\n"); return ret; } calib->par_p4 = le16_to_cpu(buf); - ret = regmap_bulk_read(data->regmap, BME680_P5_LSB_REG, - (u8 *) &buf, 2); + ret = regmap_bulk_read(data->regmap, BME680_P5_LSB_REG, (u8 *) &buf, 2); if (ret < 0) { dev_err(dev, "failed to read BME680_P5_LSB_REG\n"); return ret; @@ -179,16 +173,14 @@ static int bme680_read_calib(struct bme680_data *data, } calib->par_p7 = tmp; - ret = regmap_bulk_read(data->regmap, BME680_P8_LSB_REG, - (u8 *) &buf, 2); + ret = regmap_bulk_read(data->regmap, BME680_P8_LSB_REG, (u8 *) &buf, 2); if (ret < 0) { dev_err(dev, "failed to read BME680_P8_LSB_REG\n"); return ret; } calib->par_p8 = le16_to_cpu(buf); - ret = regmap_bulk_read(data->regmap, BME680_P9_LSB_REG, - (u8 *) &buf, 2); + ret = regmap_bulk_read(data->regmap, BME680_P9_LSB_REG, (u8 *) &buf, 2); if (ret < 0) { dev_err(dev, "failed to read BME680_P9_LSB_REG\n"); return ret; @@ -208,30 +200,26 @@ static int bme680_read_calib(struct bme680_data *data, dev_err(dev, "failed to read BME680_H1_MSB_REG\n"); return ret; } - ret = regmap_read(data->regmap, BME680_H1_LSB_REG, &tmp_lsb); if (ret < 0) { dev_err(dev, "failed to read BME680_H1_LSB_REG\n"); return ret; } - calib->par_h1 = (tmp_msb << BME680_HUM_REG_SHIFT_VAL) | - (tmp_lsb & BME680_BIT_H1_DATA_MSK); + (tmp_lsb & BME680_BIT_H1_DATA_MASK); ret = regmap_read(data->regmap, BME680_H2_MSB_REG, &tmp_msb); if (ret < 0) { dev_err(dev, "failed to read BME680_H2_MSB_REG\n"); return ret; } - ret = regmap_read(data->regmap, BME680_H2_LSB_REG, &tmp_lsb); if (ret < 0) { dev_err(dev, "failed to read BME680_H2_LSB_REG\n"); return ret; } - calib->par_h2 = (tmp_msb << BME680_HUM_REG_SHIFT_VAL) | - (tmp_lsb >> BME680_HUM_REG_SHIFT_VAL); + (tmp_lsb >> BME680_HUM_REG_SHIFT_VAL); ret = regmap_read(data->regmap, BME680_H3_REG, &tmp); if (ret < 0) { @@ -276,8 +264,8 @@ static int bme680_read_calib(struct bme680_data *data, } calib->par_gh1 = tmp; - ret = regmap_bulk_read(data->regmap, BME680_GH2_LSB_REG, - (u8 *) &buf, 2); + ret = regmap_bulk_read(data->regmap, BME680_GH2_LSB_REG, (u8 *) &buf, + 2); if (ret < 0) { dev_err(dev, "failed to read BME680_GH2_LSB_REG\n"); return ret; @@ -297,7 +285,7 @@ static int bme680_read_calib(struct bme680_data *data, dev_err(dev, "failed to read resistance heat range\n"); return ret; } - calib->res_heat_range = (tmp & BME680_RHRANGE_MSK) / 16; + calib->res_heat_range = FIELD_GET(BME680_RHRANGE_MASK, tmp); ret = regmap_read(data->regmap, BME680_REG_RES_HEAT_VAL, &tmp); if (ret < 0) { @@ -311,7 +299,7 @@ static int bme680_read_calib(struct bme680_data *data, dev_err(dev, "failed to read range software error\n"); return ret; } - calib->range_sw_err = (tmp & BME680_RSERROR_MSK) / 16; + calib->range_sw_err = FIELD_GET(BME680_RSERROR_MASK, tmp); return 0; } @@ -408,10 +396,7 @@ static u32 bme680_compensate_humid(struct bme680_data *data, var6 = (var4 * var5) >> 1; calc_hum = (((var3 + var6) >> 10) * 1000) >> 12; - if (calc_hum > 100000) /* Cap at 100%rH */ - calc_hum = 100000; - else if (calc_hum < 0) - calc_hum = 0; + calc_hum = clamp(calc_hum, 0, 100000); /* clamp between 0-100 %rH */ return calc_hum; } From patchwork Tue Aug 7 20:07:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Frey X-Patchwork-Id: 10559129 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 486991390 for ; Tue, 7 Aug 2018 20:03:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 39A1B2A5E2 for ; Tue, 7 Aug 2018 20:03:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2D9152A5ED; Tue, 7 Aug 2018 20:03:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C307B2A5E2 for ; Tue, 7 Aug 2018 20:03:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727874AbeHGWTp (ORCPT ); Tue, 7 Aug 2018 18:19:45 -0400 Received: from mail-pg1-f194.google.com ([209.85.215.194]:44251 "EHLO mail-pg1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726027AbeHGWTp (ORCPT ); Tue, 7 Aug 2018 18:19:45 -0400 Received: by mail-pg1-f194.google.com with SMTP id r1-v6so8321527pgp.11 for ; Tue, 07 Aug 2018 13:03:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=vcgE34CdVH5itln/u8VQ5buLzsawlxqWxidCEH8QDYA=; b=tcxpXe7Jh8f4/oBxyDDOd303evnRdOvF0LxpXewdtRmIgl8MDuoUmimmRorhfIPnIh tKWsuVTkRxvTyhdVQhVifGkk0V7sKSPYZNcchm2m9FyTfZJZ0FtpPxYSwSH5AUZOzLz1 mXILapkEJzd7yDv6q8QoKfL+YaODKtvy/xTeMVBQodsIrrwNyLo8A86SXqEiJbYEaVnV 2Dx6eO84WNU0JmlpiYPihEe9Xon6E4g4DpWUYNvfd+S0WpKn6mCwDg69hoEVpE3hTFg1 TtmO0CRfTURzSqgcHZI1uJUBa24IR4mykTu3luYlInYh+bXch/cL/k7ir9IThzXHg6Px 8QJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=vcgE34CdVH5itln/u8VQ5buLzsawlxqWxidCEH8QDYA=; b=O+4ZxjUknYteNwl6p73goiE5psi+INsVfmoLBA4XYfs58e+uUvIHfWqwGGnDbu4Ewn EGms92lvXPZxvuadd6vzWseVfjkmvex1oGmpaRSXgbv/q1BRjmQbzYDiFhsUB/zPrjM4 PBPvAsg/t/NS7G1p5xzZtwuC/bvds1X3bZUwe2V8Piwzvi7YgubEmJ+P1qll1pRzAM6X nZ6nN1oayJfJ1/9GLmN9Ck2xG58V6Ri3+BYaN9gCkyPmf9TZ7zllsWo5uP5C47Fbl+9b KibPvp7Qt6cI6nY90AKjEpEbue83xKWV1RMwWZK2jNQlblcZ8J6gvPKR1MwjQwDPrkE3 wxlQ== X-Gm-Message-State: AOUpUlEV6ixLLXfKE7N/ia1Ip6gJekUg/xSfyTlNR5vBRBIPP2WrnomN kT/UMxDESEuhT95+Bb8fPmCZ2gHq X-Google-Smtp-Source: AAOMgpcPt40NDVJEPvOh2RQs8HT7i1GWxNMSXxexDtNSAm/kpqZ6XV9YlJcjN9mzl23jRa3dqZROrw== X-Received: by 2002:a63:3444:: with SMTP id b65-v6mr19899133pga.396.1533672223787; Tue, 07 Aug 2018 13:03:43 -0700 (PDT) Received: from dfrey-debian-linux.sierrawireless.local ([185.153.179.9]) by smtp.gmail.com with ESMTPSA id x24-v6sm2851348pfh.67.2018.08.07.13.03.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 07 Aug 2018 13:03:42 -0700 (PDT) From: David Frey To: linux-iio@vger.kernel.org, himanshujha199640@gmail.com Cc: David Frey Subject: [PATCH 2/2] iio: bme680: simplify oversampling handling Date: Tue, 7 Aug 2018 13:07:21 -0700 Message-Id: <20180807200721.22033-3-dpfrey@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180807200721.22033-1-dpfrey@gmail.com> References: <20180807200721.22033-1-dpfrey@gmail.com> Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Temperature, pressure and humidity all expose and oversampling setting that works in the same way. Provide common handling for the oversampling sysfs attributes. Signed-off-by: David Frey --- drivers/iio/chemical/bme680_core.c | 65 +++++++++++--------------------------- 1 file changed, 19 insertions(+), 46 deletions(-) diff --git a/drivers/iio/chemical/bme680_core.c b/drivers/iio/chemical/bme680_core.c index 0e79d03ecc40..446cf1cbef23 100644 --- a/drivers/iio/chemical/bme680_core.c +++ b/drivers/iio/chemical/bme680_core.c @@ -91,8 +91,6 @@ static const struct iio_chan_spec bme680_channels[] = { }, }; -static const int bme680_oversampling_avail[] = { 1, 2, 4, 8, 16 }; - static int bme680_read_calib(struct bme680_data *data, struct bme680_calib *calib) { @@ -783,49 +781,14 @@ static int bme680_read_raw(struct iio_dev *indio_dev, } } -static int bme680_write_oversampling_ratio_temp(struct bme680_data *data, - int val) -{ - int i; - - for (i = 0; i < ARRAY_SIZE(bme680_oversampling_avail); i++) { - if (bme680_oversampling_avail[i] == val) { - data->oversampling_temp = ilog2(val); - - return bme680_chip_config(data); - } - } - - return -EINVAL; -} - -static int bme680_write_oversampling_ratio_press(struct bme680_data *data, - int val) -{ - int i; - - for (i = 0; i < ARRAY_SIZE(bme680_oversampling_avail); i++) { - if (bme680_oversampling_avail[i] == val) { - data->oversampling_press = ilog2(val); - - return bme680_chip_config(data); - } - } - - return -EINVAL; -} - -static int bme680_write_oversampling_ratio_humid(struct bme680_data *data, - int val) +static int bme680_oversampling_value_to_setting(int value) { int i; - - for (i = 0; i < ARRAY_SIZE(bme680_oversampling_avail); i++) { - if (bme680_oversampling_avail[i] == val) { - data->oversampling_humid = ilog2(val); - - return bme680_chip_config(data); - } + /* valid values are 2^n where n >=0 && n <= 4 */ + for (i = 0; i <= 4; i++) { + u8 setting = (1 << i); + if (setting == value) + return setting; } return -EINVAL; @@ -839,16 +802,26 @@ static int bme680_write_raw(struct iio_dev *indio_dev, switch (mask) { case IIO_CHAN_INFO_OVERSAMPLING_RATIO: + { + int os_setting = bme680_oversampling_value_to_setting(val); + if (os_setting < 0) + return -EINVAL; + switch (chan->type) { case IIO_TEMP: - return bme680_write_oversampling_ratio_temp(data, val); + data->oversampling_temp = os_setting; + break; case IIO_PRESSURE: - return bme680_write_oversampling_ratio_press(data, val); + data->oversampling_press = os_setting; + break; case IIO_HUMIDITYRELATIVE: - return bme680_write_oversampling_ratio_humid(data, val); + data->oversampling_humid = os_setting; + break; default: return -EINVAL; } + return bme680_chip_config(data); + } default: return -EINVAL; }