From: Jonathan Cameron <jic23@kernel.org>
To: Jonathan Santos <Jonathan.Santos@analog.com>
Cc: <linux-iio@vger.kernel.org>, <devicetree@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <linux-gpio@vger.kernel.org>,
<lars@metafoo.de>, <Michael.Hennerich@analog.com>,
<marcelo.schmitt@analog.com>, <robh@kernel.org>,
<krzk+dt@kernel.org>, <conor+dt@kernel.org>,
<linus.walleij@linaro.org>, <brgl@bgdev.pl>,
<lgirdwood@gmail.com>, <broonie@kernel.org>,
<dlechner@baylibre.com>, <marcelo.schmitt1@gmail.com>,
<jonath4nns@gmail.com>
Subject: Re: [PATCH v4 11/17] iio: adc: ad7768-1: add regulator to control VCM output
Date: Sat, 8 Mar 2025 13:38:40 +0000 [thread overview]
Message-ID: <20250308133840.30112a8b@jic23-huawei> (raw)
In-Reply-To: <40c586006b5cee0570ae577db2b58e6e7e36a6e6.1741268122.git.Jonathan.Santos@analog.com>
On Thu, 6 Mar 2025 18:02:59 -0300
Jonathan Santos <Jonathan.Santos@analog.com> wrote:
> The VCM output voltage can be used as a common-mode voltage within the
> amplifier preconditioning circuits external to the AD7768-1.
>
> This change allows the user to configure VCM output using the regulator
> framework.
>
> Signed-off-by: Jonathan Santos <Jonathan.Santos@analog.com>
Looks fine but as likely you will be doing a v5, please switch
to the new iio_device_claim/release_direct() functions.
If I had applied up to here I'd probably just have tweaked this whilst
applying but given a few other tweaks needed, please do this one
as well for v5.
Thanks,
Jonathan
> @@ -644,6 +654,172 @@ static int ad7768_triggered_buffer_alloc(struct iio_dev *indio_dev)
> &ad7768_buffer_ops);
> }
>
> +static int ad7768_vcm_enable(struct regulator_dev *rdev)
> +{
> + struct iio_dev *indio_dev = rdev_get_drvdata(rdev);
> + struct ad7768_state *st = iio_priv(indio_dev);
> + int ret, regval;
> +
> + if (!indio_dev)
> + return -EINVAL;
> +
> + ret = iio_device_claim_direct_mode(indio_dev);
As below.
> + if (ret)
> + return ret;
> +
> + /* To enable, set the last selected output */
> + regval = AD7768_REG_ANALOG2_VCM(st->vcm_output_sel + 1);
> + ret = regmap_update_bits(st->regmap, AD7768_REG_ANALOG2,
> + AD7768_REG_ANALOG2_VCM_MSK, regval);
> + iio_device_release_direct_mode(indio_dev);
> +
> + return ret;
> +}
> +
> +static int ad7768_vcm_disable(struct regulator_dev *rdev)
> +{
> + struct iio_dev *indio_dev = rdev_get_drvdata(rdev);
> + struct ad7768_state *st = iio_priv(indio_dev);
> + int ret;
> +
> + if (!indio_dev)
> + return -EINVAL;
> +
> + ret = iio_device_claim_direct_mode(indio_dev);
As looks likely you'll be doing a v5 for other minor stuff please
rebase on the testing branch of iio.git (as I've picked up some of this
series) or togreg once that is pushed out and use
if (!iio_device_claim_direct(indio_dev))
return -EBUSY;
+ iio_device_release_direct()
to get the variants adjusted to play better with sparse.
> + if (ret)
> + return ret;
> +
> + ret = regmap_update_bits(st->regmap, AD7768_REG_ANALOG2,
> + AD7768_REG_ANALOG2_VCM_MSK, AD7768_VCM_OFF);
> + iio_device_release_direct_mode(indio_dev);
> +
> + return ret;
> +}
> +
> +static int ad7768_vcm_is_enabled(struct regulator_dev *rdev)
> +{
> + struct iio_dev *indio_dev = rdev_get_drvdata(rdev);
> + struct ad7768_state *st = iio_priv(indio_dev);
> + int ret, val;
> +
> + if (!indio_dev)
> + return -EINVAL;
> +
> + ret = iio_device_claim_direct_mode(indio_dev);
As above.
> + if (ret)
> + return ret;
> +
> + ret = regmap_read(st->regmap, AD7768_REG_ANALOG2, &val);
> + if (ret)
> + goto err_release;
> +
> + ret = FIELD_GET(AD7768_REG_ANALOG2_VCM_MSK, val) != AD7768_VCM_OFF;
> +err_release:
> + iio_device_release_direct_mode(indio_dev);
> +
> + return ret;
> +}
> +
> +static int ad7768_set_voltage_sel(struct regulator_dev *rdev,
> + unsigned int selector)
> +{
> + unsigned int regval = AD7768_REG_ANALOG2_VCM(selector + 1);
> + struct iio_dev *indio_dev = rdev_get_drvdata(rdev);
> + struct ad7768_state *st = iio_priv(indio_dev);
> + int ret;
> +
> + if (!indio_dev)
> + return -EINVAL;
> +
> + ret = iio_device_claim_direct_mode(indio_dev);
As above.
> + if (ret)
> + return ret;
> +
> + ret = regmap_update_bits(st->regmap, AD7768_REG_ANALOG2,
> + AD7768_REG_ANALOG2_VCM_MSK, regval);
> + iio_device_release_direct_mode(indio_dev);
> + st->vcm_output_sel = selector;
> +
> + return ret;
> +}
> +
> +static int ad7768_get_voltage_sel(struct regulator_dev *rdev)
> +{
> + struct iio_dev *indio_dev = rdev_get_drvdata(rdev);
> + struct ad7768_state *st = iio_priv(indio_dev);
> + int ret, val;
> +
> + if (!indio_dev)
> + return -EINVAL;
> +
> + ret = iio_device_claim_direct_mode(indio_dev);
As above.
> + if (ret)
> + return ret;
> +
> + ret = regmap_read(st->regmap, AD7768_REG_ANALOG2, &val);
> + if (ret)
> + goto err_release;
> +
> + val = FIELD_GET(AD7768_REG_ANALOG2_VCM_MSK, val);
> + ret = clamp(val, 1, (int)rdev->desc->n_voltages) - 1;
> +err_release:
> + iio_device_release_direct_mode(indio_dev);
> +
> + return ret;
> +}
next prev parent reply other threads:[~2025-03-08 13:38 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-06 21:00 [PATCH v4 00/17] iio: adc: ad7768-1: Add features, improvements, and fixes Jonathan Santos
2025-03-06 21:00 ` [PATCH v4 01/17] iio: adc: ad7768-1: Fix conversion result sign Jonathan Santos
2025-03-08 13:13 ` Jonathan Cameron
2025-03-06 21:00 ` [PATCH v4 02/17] iio: adc: ad7768-1: set MOSI idle state to prevent accidental reset Jonathan Santos
2025-03-07 12:06 ` Marcelo Schmitt
2025-03-08 13:15 ` Jonathan Cameron
2025-03-31 13:16 ` Jonathan Santos
2025-03-06 21:00 ` [PATCH v4 03/17] dt-bindings: iio: adc: ad7768-1: add trigger-sources property Jonathan Santos
2025-03-08 13:17 ` Jonathan Cameron
2025-04-01 16:15 ` David Lechner
2025-03-06 21:01 ` [PATCH v4 04/17] dt-bindings: iio: adc: ad7768-1: Document GPIO controller Jonathan Santos
2025-03-07 13:46 ` Bartosz Golaszewski
2025-03-14 10:22 ` Linus Walleij
2025-03-06 21:01 ` [PATCH v4 05/17] dt-bindings: iio: adc: ad7768-1: document regulator provider property Jonathan Santos
2025-04-01 16:20 ` David Lechner
2025-03-06 21:01 ` [PATCH v4 06/17] Documentation: ABI: add wideband filter type to sysfs-bus-iio Jonathan Santos
2025-03-07 12:45 ` Marcelo Schmitt
2025-03-08 13:20 ` Jonathan Cameron
2025-03-06 21:01 ` [PATCH v4 07/17] iio: adc: ad7768-1: remove unnecessary locking Jonathan Santos
2025-03-08 13:24 ` Jonathan Cameron
2025-03-06 21:02 ` [PATCH v4 08/17] iio: adc: ad7768-1: convert driver to use regmap Jonathan Santos
2025-03-07 13:20 ` Marcelo Schmitt
2025-03-08 13:27 ` Jonathan Cameron
2025-04-01 16:31 ` David Lechner
2025-04-01 16:38 ` David Lechner
2025-03-06 21:02 ` [PATCH v4 09/17] iio: adc: ad7768-1: Add reset gpio Jonathan Santos
2025-03-07 13:42 ` Marcelo Schmitt
2025-03-08 13:30 ` Jonathan Cameron
2025-03-06 21:02 ` [PATCH v4 10/17] iio: adc: ad7768-1: Move buffer allocation to a separate function Jonathan Santos
2025-03-07 13:52 ` Marcelo Schmitt
2025-03-08 13:33 ` Jonathan Cameron
2025-03-06 21:02 ` [PATCH v4 11/17] iio: adc: ad7768-1: add regulator to control VCM output Jonathan Santos
2025-03-07 14:32 ` Marcelo Schmitt
2025-03-08 13:08 ` Jonathan Cameron
2025-03-08 13:38 ` Jonathan Cameron [this message]
2025-03-06 21:03 ` [PATCH v4 12/17] iio: adc: ad7768-1: Add GPIO controller support Jonathan Santos
2025-03-07 13:45 ` Bartosz Golaszewski
2025-03-08 13:41 ` Jonathan Cameron
2025-04-04 21:12 ` Marcelo Schmitt
2025-03-06 21:03 ` [PATCH v4 13/17] iio: adc: ad7768-1: add multiple scan types to support 16-bits mode Jonathan Santos
2025-03-06 21:03 ` [PATCH v4 14/17] iio: adc: ad7768-1: add support for Synchronization over SPI Jonathan Santos
2025-04-01 17:02 ` David Lechner
2025-03-06 21:04 ` [PATCH v4 15/17] iio: adc: ad7768-1: replace manual attribute declaration Jonathan Santos
2025-03-07 14:49 ` Marcelo Schmitt
2025-04-01 17:05 ` David Lechner
2025-03-06 21:04 ` [PATCH v4 16/17] iio: adc: ad7768-1: add filter type and oversampling ratio attributes Jonathan Santos
2025-03-08 13:56 ` Jonathan Cameron
2025-04-01 0:18 ` Jonathan Santos
2025-04-06 10:49 ` Jonathan Cameron
2025-03-06 21:04 ` [PATCH v4 17/17] iio: adc: ad7768-1: add low pass -3dB cutoff attribute Jonathan Santos
2025-03-07 15:12 ` Marcelo Schmitt
2025-04-01 17:12 ` David Lechner
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=20250308133840.30112a8b@jic23-huawei \
--to=jic23@kernel.org \
--cc=Jonathan.Santos@analog.com \
--cc=Michael.Hennerich@analog.com \
--cc=brgl@bgdev.pl \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dlechner@baylibre.com \
--cc=jonath4nns@gmail.com \
--cc=krzk+dt@kernel.org \
--cc=lars@metafoo.de \
--cc=lgirdwood@gmail.com \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marcelo.schmitt1@gmail.com \
--cc=marcelo.schmitt@analog.com \
--cc=robh@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox