From: Jonathan Cameron <jic23@kernel.org>
To: Mircea Caprioru <mircea.caprioru@analog.com>
Cc: <Michael.Hennerich@analog.com>, <stefan.popa@analog.com>,
<lars@metafoo.de>, <gregkh@linuxfoundation.org>,
<linux-kernel@vger.kernel.org>, <linux-iio@vger.kernel.org>,
<devicetree@vger.kernel.org>, <robh+dt@kernel.org>
Subject: Re: [PATCH V3 3/4] staging: iio: adc: ad7192: Add system calibration support
Date: Sun, 18 Aug 2019 19:40:17 +0100 [thread overview]
Message-ID: <20190818194017.7ba2fc97@archlinux> (raw)
In-Reply-To: <20190814073150.4602-3-mircea.caprioru@analog.com>
On Wed, 14 Aug 2019 10:31:49 +0300
Mircea Caprioru <mircea.caprioru@analog.com> wrote:
> This patch will add a system calibration attribute for each channel. Using
> this option the user will have the ability to calibrate each channel for
> zero scale and full scale. It uses the iio_chan_spec_ext_info and IIO_ENUM
> to implement the functionality.
>
> Signed-off-by: Mircea Caprioru <mircea.caprioru@analog.com>
Hi,
This introduces new ABI so needs documentation in
Documentation/ABI/testing/...
I'm not particularly keen on a write to what might be considered
a mode select register resulting in a calibration starting.
That is rather non obvious, I'd prefer to either two attributes
to trigger the two modes, or a mode attr and some sort of calibrate
now attribute.
I'll back out patch 2 for now, as it was there to support this.
Thanks,
Jonathan
> ---
> Changelog V2:
> - no changes here
>
> Changelog V3:
> - no changes here
>
> drivers/staging/iio/adc/ad7192.c | 55 +++++++++++++++++++++++++++++++-
> 1 file changed, 54 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
> index d58ce08f3693..731072830f30 100644
> --- a/drivers/staging/iio/adc/ad7192.c
> +++ b/drivers/staging/iio/adc/ad7192.c
> @@ -155,6 +155,11 @@
> * The DOUT/RDY output must also be wired to an interrupt capable GPIO.
> */
>
> +enum {
> + AD7192_SYSCALIB_ZERO_SCALE,
> + AD7192_SYSCALIB_FULL_SCALE,
> +};
> +
> struct ad7192_state {
> struct regulator *avdd;
> struct regulator *dvdd;
> @@ -169,10 +174,56 @@ struct ad7192_state {
> u8 devid;
> u8 clock_sel;
> struct mutex lock; /* protect sensor state */
> + u8 syscalib_mode[8];
>
> struct ad_sigma_delta sd;
> };
>
> +static const char * const ad7192_syscalib_modes[] = {
> + [AD7192_SYSCALIB_ZERO_SCALE] = "zero_scale",
> + [AD7192_SYSCALIB_FULL_SCALE] = "full_scale",
> +};
> +
> +static int ad7192_set_syscalib_mode(struct iio_dev *indio_dev,
> + const struct iio_chan_spec *chan,
> + unsigned int mode)
> +{
> + struct ad7192_state *st = iio_priv(indio_dev);
> + int ret;
> +
> + st->syscalib_mode[chan->channel] = mode;
> +
> + if (mode == AD7192_SYSCALIB_ZERO_SCALE)
> + ret = ad_sd_calibrate(&st->sd, AD7192_MODE_CAL_SYS_ZERO,
> + chan->address);
> + else
> + ret = ad_sd_calibrate(&st->sd, AD7192_MODE_CAL_SYS_FULL,
> + chan->address);
> +
> + return ret;
> +}
> +
> +static int ad7192_get_syscalib_mode(struct iio_dev *indio_dev,
> + const struct iio_chan_spec *chan)
> +{
> + struct ad7192_state *st = iio_priv(indio_dev);
> +
> + return st->syscalib_mode[chan->channel];
> +}
> +
> +static const struct iio_enum ad7192_syscalib_mode_enum = {
> + .items = ad7192_syscalib_modes,
> + .num_items = ARRAY_SIZE(ad7192_syscalib_modes),
> + .set = ad7192_set_syscalib_mode,
> + .get = ad7192_get_syscalib_mode
> +};
> +
> +static const struct iio_chan_spec_ext_info ad7192_calibsys_ext_info[] = {
> + IIO_ENUM("system_calibration", IIO_SEPARATE, &ad7192_syscalib_mode_enum),
> + IIO_ENUM_AVAILABLE("system_calibration", &ad7192_syscalib_mode_enum),
> + {}
> +};
> +
> static struct ad7192_state *ad_sigma_delta_to_ad7192(struct ad_sigma_delta *sd)
> {
> return container_of(sd, struct ad7192_state, sd);
> @@ -769,9 +820,11 @@ static int ad7192_channels_config(struct iio_dev *indio_dev)
> *chan = channels[i];
> chan->info_mask_shared_by_all |=
> BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY);
> - if (chan->type != IIO_TEMP)
> + if (chan->type != IIO_TEMP) {
> chan->info_mask_shared_by_type_available |=
> BIT(IIO_CHAN_INFO_SCALE);
> + chan->ext_info = ad7192_calibsys_ext_info;
> + }
> chan++;
> }
>
WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron <jic23@kernel.org>
To: Mircea Caprioru <mircea.caprioru@analog.com>
Cc: Michael.Hennerich@analog.com, stefan.popa@analog.com,
lars@metafoo.de, gregkh@linuxfoundation.org,
linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org,
devicetree@vger.kernel.org, robh+dt@kernel.org
Subject: Re: [PATCH V3 3/4] staging: iio: adc: ad7192: Add system calibration support
Date: Sun, 18 Aug 2019 19:40:17 +0100 [thread overview]
Message-ID: <20190818194017.7ba2fc97@archlinux> (raw)
In-Reply-To: <20190814073150.4602-3-mircea.caprioru@analog.com>
On Wed, 14 Aug 2019 10:31:49 +0300
Mircea Caprioru <mircea.caprioru@analog.com> wrote:
> This patch will add a system calibration attribute for each channel. Using
> this option the user will have the ability to calibrate each channel for
> zero scale and full scale. It uses the iio_chan_spec_ext_info and IIO_ENUM
> to implement the functionality.
>
> Signed-off-by: Mircea Caprioru <mircea.caprioru@analog.com>
Hi,
This introduces new ABI so needs documentation in
Documentation/ABI/testing/...
I'm not particularly keen on a write to what might be considered
a mode select register resulting in a calibration starting.
That is rather non obvious, I'd prefer to either two attributes
to trigger the two modes, or a mode attr and some sort of calibrate
now attribute.
I'll back out patch 2 for now, as it was there to support this.
Thanks,
Jonathan
> ---
> Changelog V2:
> - no changes here
>
> Changelog V3:
> - no changes here
>
> drivers/staging/iio/adc/ad7192.c | 55 +++++++++++++++++++++++++++++++-
> 1 file changed, 54 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
> index d58ce08f3693..731072830f30 100644
> --- a/drivers/staging/iio/adc/ad7192.c
> +++ b/drivers/staging/iio/adc/ad7192.c
> @@ -155,6 +155,11 @@
> * The DOUT/RDY output must also be wired to an interrupt capable GPIO.
> */
>
> +enum {
> + AD7192_SYSCALIB_ZERO_SCALE,
> + AD7192_SYSCALIB_FULL_SCALE,
> +};
> +
> struct ad7192_state {
> struct regulator *avdd;
> struct regulator *dvdd;
> @@ -169,10 +174,56 @@ struct ad7192_state {
> u8 devid;
> u8 clock_sel;
> struct mutex lock; /* protect sensor state */
> + u8 syscalib_mode[8];
>
> struct ad_sigma_delta sd;
> };
>
> +static const char * const ad7192_syscalib_modes[] = {
> + [AD7192_SYSCALIB_ZERO_SCALE] = "zero_scale",
> + [AD7192_SYSCALIB_FULL_SCALE] = "full_scale",
> +};
> +
> +static int ad7192_set_syscalib_mode(struct iio_dev *indio_dev,
> + const struct iio_chan_spec *chan,
> + unsigned int mode)
> +{
> + struct ad7192_state *st = iio_priv(indio_dev);
> + int ret;
> +
> + st->syscalib_mode[chan->channel] = mode;
> +
> + if (mode == AD7192_SYSCALIB_ZERO_SCALE)
> + ret = ad_sd_calibrate(&st->sd, AD7192_MODE_CAL_SYS_ZERO,
> + chan->address);
> + else
> + ret = ad_sd_calibrate(&st->sd, AD7192_MODE_CAL_SYS_FULL,
> + chan->address);
> +
> + return ret;
> +}
> +
> +static int ad7192_get_syscalib_mode(struct iio_dev *indio_dev,
> + const struct iio_chan_spec *chan)
> +{
> + struct ad7192_state *st = iio_priv(indio_dev);
> +
> + return st->syscalib_mode[chan->channel];
> +}
> +
> +static const struct iio_enum ad7192_syscalib_mode_enum = {
> + .items = ad7192_syscalib_modes,
> + .num_items = ARRAY_SIZE(ad7192_syscalib_modes),
> + .set = ad7192_set_syscalib_mode,
> + .get = ad7192_get_syscalib_mode
> +};
> +
> +static const struct iio_chan_spec_ext_info ad7192_calibsys_ext_info[] = {
> + IIO_ENUM("system_calibration", IIO_SEPARATE, &ad7192_syscalib_mode_enum),
> + IIO_ENUM_AVAILABLE("system_calibration", &ad7192_syscalib_mode_enum),
> + {}
> +};
> +
> static struct ad7192_state *ad_sigma_delta_to_ad7192(struct ad_sigma_delta *sd)
> {
> return container_of(sd, struct ad7192_state, sd);
> @@ -769,9 +820,11 @@ static int ad7192_channels_config(struct iio_dev *indio_dev)
> *chan = channels[i];
> chan->info_mask_shared_by_all |=
> BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY);
> - if (chan->type != IIO_TEMP)
> + if (chan->type != IIO_TEMP) {
> chan->info_mask_shared_by_type_available |=
> BIT(IIO_CHAN_INFO_SCALE);
> + chan->ext_info = ad7192_calibsys_ext_info;
> + }
> chan++;
> }
>
next prev parent reply other threads:[~2019-08-18 18:40 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-14 7:31 [PATCH V3 1/4] staging: iio: adc: ad7192: Add low_pass_3db_filter_frequency Mircea Caprioru
2019-08-14 7:31 ` Mircea Caprioru
2019-08-14 7:31 ` [PATCH V3 2/4] iio: adc: ad_sigma_delta: Export ad_sd_calibrate Mircea Caprioru
2019-08-14 7:31 ` Mircea Caprioru
2019-08-18 18:35 ` Jonathan Cameron
2019-08-18 18:35 ` Jonathan Cameron
2019-08-14 7:31 ` [PATCH V3 3/4] staging: iio: adc: ad7192: Add system calibration support Mircea Caprioru
2019-08-14 7:31 ` Mircea Caprioru
2019-08-18 18:40 ` Jonathan Cameron [this message]
2019-08-18 18:40 ` Jonathan Cameron
2019-08-14 7:31 ` [PATCH V3 4/4] dt-bindings: iio: adc: ad7192: Add binding documentation for AD7192 Mircea Caprioru
2019-08-14 7:31 ` Mircea Caprioru
2019-08-15 2:39 ` Rob Herring
2019-08-18 18:46 ` Jonathan Cameron
2019-08-18 19:07 ` Jonathan Cameron
2019-08-18 18:34 ` [PATCH V3 1/4] staging: iio: adc: ad7192: Add low_pass_3db_filter_frequency Jonathan Cameron
2019-08-18 18:34 ` 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=20190818194017.7ba2fc97@archlinux \
--to=jic23@kernel.org \
--cc=Michael.Hennerich@analog.com \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mircea.caprioru@analog.com \
--cc=robh+dt@kernel.org \
--cc=stefan.popa@analog.com \
/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.