From: Jonathan Cameron <jic23@kernel.org>
To: Andrea Merello <andrea.merello@gmail.com>
Cc: Hartmut Knaack <knaack.h@gmx.de>,
Lars-Peter Clausen <lars@metafoo.de>,
Peter Meerwald-Stadler <pmeerw@pmeerw.net>,
Colin Ian King <colin.king@canonical.com>,
Patrick Havelange <patrick.havelange@essensium.com>,
Matt Weber <matthew.weber@rockwellcollins.com>,
Matt Ranostay <matt.ranostay@konsulko.com>,
Chuhong Yuan <hslester96@gmail.com>,
Daniel Gomez <dagmcr@gmail.com>,
linux-iio@vger.kernel.org
Subject: Re: [v3 3/9] iio: max31856: add support for configuring the HW averaging
Date: Sat, 23 Nov 2019 12:32:04 +0000 [thread overview]
Message-ID: <20191123123204.49fe367b@archlinux> (raw)
In-Reply-To: <20191120144756.28424-4-andrea.merello@gmail.com>
On Wed, 20 Nov 2019 15:47:50 +0100
Andrea Merello <andrea.merello@gmail.com> wrote:
> This sensor can perform samples averaging in hardware, but currently the
> driver leaves this setting alone (default is no averaging).
>
> This patch binds this HW setting to the "oversampling_ratio" IIO attribute
> and allows the user to set the averaging as desired (the HW supports
> averaging of 2, 5, 8 or 16 samples; in-between values are rounded up).
>
> Cc: Hartmut Knaack <knaack.h@gmx.de>
> Cc: Lars-Peter Clausen <lars@metafoo.de>
> Cc: Peter Meerwald-Stadler <pmeerw@pmeerw.net>
> Cc: Colin Ian King <colin.king@canonical.com>
> Cc: Patrick Havelange <patrick.havelange@essensium.com>
> Cc: Matt Weber <matthew.weber@rockwellcollins.com>
> Cc: Matt Ranostay <matt.ranostay@konsulko.com>
> Cc: Chuhong Yuan <hslester96@gmail.com>
> Cc: Daniel Gomez <dagmcr@gmail.com>
> Cc: linux-iio@vger.kernel.org
> Signed-off-by: Andrea Merello <andrea.merello@gmail.com>
Applied. Thanks,
Jonathan
> ---
> drivers/iio/temperature/max31856.c | 43 ++++++++++++++++++++++++++++++
> 1 file changed, 43 insertions(+)
>
> diff --git a/drivers/iio/temperature/max31856.c b/drivers/iio/temperature/max31856.c
> index d97ba9ee1598..8457ca9ae326 100644
> --- a/drivers/iio/temperature/max31856.c
> +++ b/drivers/iio/temperature/max31856.c
> @@ -12,6 +12,7 @@
> #include <linux/spi/spi.h>
> #include <linux/iio/iio.h>
> #include <linux/iio/sysfs.h>
> +#include <linux/util_macros.h>
> #include <dt-bindings/iio/temperature/thermocouple.h>
> /*
> * The MSB of the register value determines whether the following byte will
> @@ -24,6 +25,8 @@
> #define MAX31856_CR0_OCFAULT BIT(4)
> #define MAX31856_CR0_OCFAULT_MASK GENMASK(5, 4)
> #define MAX31856_CR0_FILTER_50HZ BIT(0)
> +#define MAX31856_AVERAGING_MASK GENMASK(6, 4)
> +#define MAX31856_AVERAGING_SHIFT 4
> #define MAX31856_TC_TYPE_MASK GENMASK(3, 0)
> #define MAX31856_FAULT_OVUV BIT(1)
> #define MAX31856_FAULT_OPEN BIT(0)
> @@ -51,6 +54,8 @@ static const struct iio_chan_spec max31856_channels[] = {
> .type = IIO_TEMP,
> .info_mask_separate =
> BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
> + .info_mask_shared_by_type =
> + BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO)
> },
> { /* Cold Junction Temperature */
> .type = IIO_TEMP,
> @@ -58,6 +63,8 @@ static const struct iio_chan_spec max31856_channels[] = {
> .modified = 1,
> .info_mask_separate =
> BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
> + .info_mask_shared_by_type =
> + BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO)
> },
> };
>
> @@ -65,6 +72,7 @@ struct max31856_data {
> struct spi_device *spi;
> u32 thermocouple_type;
> bool filter_50hz;
> + int averaging;
> };
>
> static int max31856_read(struct max31856_data *data, u8 reg,
> @@ -109,6 +117,10 @@ static int max31856_init(struct max31856_data *data)
>
> reg_cr1_val &= ~MAX31856_TC_TYPE_MASK;
> reg_cr1_val |= data->thermocouple_type;
> +
> + reg_cr1_val &= ~MAX31856_AVERAGING_MASK;
> + reg_cr1_val |= data->averaging << MAX31856_AVERAGING_SHIFT;
> +
> ret = max31856_write(data, MAX31856_CR1_REG, reg_cr1_val);
> if (ret)
> return ret;
> @@ -217,6 +229,9 @@ static int max31856_read_raw(struct iio_dev *indio_dev,
> return IIO_VAL_INT_PLUS_MICRO;
> }
> break;
> + case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
> + *val = 1 << data->averaging;
> + return IIO_VAL_INT;
> default:
> ret = -EINVAL;
> break;
> @@ -225,6 +240,33 @@ static int max31856_read_raw(struct iio_dev *indio_dev,
> return ret;
> }
>
> +static int max31856_write_raw(struct iio_dev *indio_dev,
> + struct iio_chan_spec const *chan,
> + int val, int val2, long mask)
> +{
> + struct max31856_data *data = iio_priv(indio_dev);
> + int msb;
> +
> + switch (mask) {
> + case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
> + if (val > 16 || val < 1)
> + return -EINVAL;
> + msb = fls(val) - 1;
> + /* Round up to next 2pow if needed */
> + if (BIT(msb) < val)
> + msb++;
> +
> + data->averaging = msb;
> + max31856_init(data);
> + break;
> +
> + default:
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> static ssize_t show_fault(struct device *dev, u8 faultbit, char *buf)
> {
> struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> @@ -313,6 +355,7 @@ static const struct attribute_group max31856_group = {
>
> static const struct iio_info max31856_info = {
> .read_raw = max31856_read_raw,
> + .write_raw = max31856_write_raw,
> .attrs = &max31856_group,
> };
>
next prev parent reply other threads:[~2019-11-23 12:32 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-23 12:17 [PATCH 0/3] iio: max31856: provide more configuration options Andrea Merello
2019-09-23 12:17 ` [PATCH 1/3] iio: max31856: add option for setting mains filter rejection frequency Andrea Merello
2019-10-06 7:54 ` Jonathan Cameron
2019-10-16 13:14 ` Andrea Merello
2019-10-17 12:32 ` Jonathan Cameron
2019-10-18 13:46 ` Andrea Merello
2019-10-22 9:34 ` Jonathan Cameron
2019-10-23 8:29 ` Andrea Merello
2019-10-27 9:22 ` Jonathan Cameron
2019-10-28 7:32 ` Andrea Merello
2019-11-02 14:17 ` Jonathan Cameron
2019-11-04 13:51 ` Andrea Merello
2019-09-23 12:17 ` [PATCH 2/3] iio: max31856: add support for configuring the HW averaging Andrea Merello
2019-10-06 7:55 ` Jonathan Cameron
2019-10-16 13:33 ` Andrea Merello
2019-10-17 12:34 ` Jonathan Cameron
2019-10-18 13:47 ` Andrea Merello
2019-09-23 12:17 ` [PATCH 3/3] iio: max31856: add support for runtime-configuring the thermocouple type Andrea Merello
2019-10-06 7:58 ` Jonathan Cameron
2019-10-16 13:43 ` Andrea Merello
2019-10-17 12:35 ` Jonathan Cameron
2019-10-18 13:48 ` Andrea Merello
2019-11-11 15:35 ` [v2 0/9] iio: max31856: provide more configuration options Andrea Merello
2019-11-11 15:35 ` [v2 1/9] iio: max31856: add option for setting mains filter rejection frequency Andrea Merello
2019-11-11 22:59 ` Matt Ranostay
2019-11-16 14:29 ` Jonathan Cameron
2019-11-11 15:35 ` [v2 2/9] Documentation: ABI: document IIO in_temp_filter_notch_center_frequency file Andrea Merello
2019-11-11 15:35 ` [v2 3/9] iio: max31856: add support for configuring the HW averaging Andrea Merello
2019-11-11 23:01 ` Matt Ranostay
2019-11-11 15:35 ` [v2 4/9] RFC: iio: core: add char type for sysfs attributes Andrea Merello
2019-11-16 14:45 ` Jonathan Cameron
2019-11-11 15:35 ` [v2 5/9] iio: core: add thermocouple_type standard attribute Andrea Merello
2019-11-11 15:35 ` [v2 6/9] Documentation: ABI: document IIO thermocouple_type file Andrea Merello
2019-11-16 14:47 ` Jonathan Cameron
2019-11-11 15:35 ` [v2 7/9] iio: max31856: add support for runtime-configuring the thermocouple type Andrea Merello
2019-11-16 14:49 ` Jonathan Cameron
2019-11-11 15:35 ` [v2 8/9] RFC/RFT: iio: maxim_thermocouple: add thermocouple_type sysfs attribute Andrea Merello
2019-11-16 14:51 ` Jonathan Cameron
2019-11-11 15:35 ` [v2 9/9] dt-bindings: iio: maxim_thermocouple: document new 'compatible' strings Andrea Merello
2019-11-14 22:12 ` Rob Herring
2019-11-20 14:47 ` [v3 0/9] iio: max31856: provide more configuration options Andrea Merello
2019-11-20 14:47 ` [v3 1/9] iio: max31856: add option for setting mains filter rejection frequency Andrea Merello
2019-11-23 12:30 ` Jonathan Cameron
2019-11-20 14:47 ` [v3 2/9] Documentation: ABI: document IIO in_temp_filter_notch_center_frequency file Andrea Merello
2019-11-23 12:31 ` Jonathan Cameron
2019-11-20 14:47 ` [v3 3/9] iio: max31856: add support for configuring the HW averaging Andrea Merello
2019-11-23 12:32 ` Jonathan Cameron [this message]
2019-11-20 14:47 ` [v3 4/9] RFC: iio: core: add char type for sysfs attributes Andrea Merello
2019-11-23 12:33 ` Jonathan Cameron
2019-11-20 14:47 ` [v3 5/9] iio: core: add thermocouple_type standard attribute Andrea Merello
2019-11-23 12:36 ` Jonathan Cameron
2019-11-20 14:47 ` [v3 6/9] Documentation: ABI: document IIO thermocouple_type file Andrea Merello
2019-11-23 12:37 ` Jonathan Cameron
2019-11-20 14:47 ` [v3 7/9] iio: max31856: add support for runtime-configuring the thermocouple type Andrea Merello
2019-11-23 12:40 ` Jonathan Cameron
2019-11-23 12:41 ` Jonathan Cameron
2019-11-20 14:47 ` [v3 8/9] RFC/RFT: iio: maxim_thermocouple: add thermocouple_type sysfs attribute Andrea Merello
2019-11-23 12:46 ` Jonathan Cameron
2019-11-20 14:47 ` [v3 9/9] dt-bindings: iio: maxim_thermocouple: document new 'compatible' strings Andrea Merello
2019-11-23 12:46 ` Jonathan Cameron
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191123123204.49fe367b@archlinux \
--to=jic23@kernel.org \
--cc=andrea.merello@gmail.com \
--cc=colin.king@canonical.com \
--cc=dagmcr@gmail.com \
--cc=hslester96@gmail.com \
--cc=knaack.h@gmx.de \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=matt.ranostay@konsulko.com \
--cc=matthew.weber@rockwellcollins.com \
--cc=patrick.havelange@essensium.com \
--cc=pmeerw@pmeerw.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.