From: Janani Sunil <janani.sunil@analog.com>
To: "Nuno Sá" <nuno.sa@analog.com>,
"Michael Hennerich" <Michael.Hennerich@analog.com>,
"Jonathan Cameron" <jic23@kernel.org>,
"David Lechner" <dlechner@baylibre.com>,
"Andy Shevchenko" <andy@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Olivier Moysan" <olivier.moysan@foss.st.com>,
"Philipp Zabel" <p.zabel@pengutronix.de>,
"Linus Walleij" <linusw@kernel.org>,
"Bartosz Golaszewski" <brgl@kernel.org>,
"Jonathan Corbet" <corbet@lwn.net>,
"Shuah Khan" <skhan@linuxfoundation.org>,
"Michael Walle" <mwalle@kernel.org>
Cc: linux@analog.com, linux-iio@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-gpio@vger.kernel.org, linux-doc@vger.kernel.org,
jananisunil.dev@gmail.com,
"Uwe Kleine-König" <u.kleine-koenig@baylibre.com>,
"Janani Sunil" <janani.sunil@analog.com>
Subject: [PATCH v5 07/20] iio: adc: ad7768: Add power mode helper
Date: Fri, 28 Aug 2026 17:30:30 +0200 [thread overview]
Message-ID: <20260828-ad7768-driver-v5-7-e33ca6f841a2@analog.com> (raw)
In-Reply-To: <20260828-ad7768-driver-v5-0-e33ca6f841a2@analog.com>
Describe each power mode and its internal master-clock divisor in a
table. Replace the open-coded fast-mode setup with a helper that records
the active mode, preparing for dynamic mode selection.
Signed-off-by: Janani Sunil <janani.sunil@analog.com>
---
drivers/iio/adc/ad7768.c | 52 +++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 45 insertions(+), 7 deletions(-)
diff --git a/drivers/iio/adc/ad7768.c b/drivers/iio/adc/ad7768.c
index ccd457c75224..67db6f4971a2 100644
--- a/drivers/iio/adc/ad7768.c
+++ b/drivers/iio/adc/ad7768.c
@@ -43,6 +43,8 @@
#define AD7768_REG_POWER_MODE 0x04
#define AD7768_SLEEP_MODE_MSK BIT(7)
#define AD7768_POWER_MODE_POWER_MODE_MSK GENMASK(5, 4)
+#define AD7768_POWER_MODE_POWER_MODE_LOW 0x0
+#define AD7768_POWER_MODE_POWER_MODE_MEDIAN 0x2
#define AD7768_POWER_MODE_POWER_MODE_FAST 0x3
#define AD7768_POWER_MODE_LVDS_ENABLE BIT(3)
#define AD7768_POWER_MODE_MCLK_DIV_MSK GENMASK(1, 0)
@@ -112,6 +114,17 @@ enum ad7768_clock_source {
AD7768_CLOCK_SOURCE_LVDS,
};
+struct ad7768_power_mode_info {
+ unsigned int mode;
+ unsigned int mclk_div;
+};
+
+static const struct ad7768_power_mode_info ad7768_power_modes[] = {
+ { .mode = AD7768_POWER_MODE_POWER_MODE_LOW, .mclk_div = 32 },
+ { .mode = AD7768_POWER_MODE_POWER_MODE_MEDIAN, .mclk_div = 8 },
+ { .mode = AD7768_POWER_MODE_POWER_MODE_FAST, .mclk_div = 4 },
+};
+
struct ad7768_precharge_config {
bool prebufp_en;
bool prebufn_en;
@@ -136,6 +149,7 @@ struct ad7768_state {
struct clk *mclk;
unsigned int datalines;
enum ad7768_clock_source clock_source;
+ unsigned int power_mode_idx;
const struct ad7768_chip_info *chip_info;
struct iio_backend *back;
unsigned int vref_uV[2];
@@ -333,6 +347,36 @@ static int ad7768_sync(struct ad7768_state *st)
AD7768_DATA_CONTROL_SPI_SYNC);
}
+static int ad7768_set_power_mode(struct ad7768_state *st,
+ unsigned int mode_idx)
+{
+ const struct ad7768_power_mode_info *mode_info;
+ int ret;
+
+ mode_info = &ad7768_power_modes[mode_idx];
+ ret = regmap_update_bits(st->regmap, AD7768_REG_POWER_MODE,
+ AD7768_POWER_MODE_POWER_MODE_MSK,
+ FIELD_PREP(AD7768_POWER_MODE_POWER_MODE_MSK,
+ mode_info->mode));
+ if (ret)
+ return ret;
+
+ ret = regmap_update_bits(st->regmap, AD7768_REG_POWER_MODE,
+ AD7768_POWER_MODE_MCLK_DIV_MSK,
+ FIELD_PREP(AD7768_POWER_MODE_MCLK_DIV_MSK,
+ mode_info->mode));
+ if (ret)
+ return ret;
+
+ ret = ad7768_sync(st);
+ if (ret)
+ return ret;
+
+ st->power_mode_idx = mode_idx;
+
+ return 0;
+}
+
static int ad7768_update_scan_mode(struct iio_dev *indio_dev,
const unsigned long *scan_mask)
{
@@ -482,13 +526,7 @@ static int ad7768_configure_capture(struct ad7768_state *st)
unsigned int dclk_div;
int ret;
- ret = regmap_update_bits(st->regmap, AD7768_REG_POWER_MODE,
- AD7768_POWER_MODE_POWER_MODE_MSK |
- AD7768_POWER_MODE_MCLK_DIV_MSK,
- FIELD_PREP(AD7768_POWER_MODE_POWER_MODE_MSK,
- AD7768_POWER_MODE_POWER_MODE_FAST) |
- FIELD_PREP(AD7768_POWER_MODE_MCLK_DIV_MSK,
- AD7768_POWER_MODE_POWER_MODE_FAST));
+ ret = ad7768_set_power_mode(st, ARRAY_SIZE(ad7768_power_modes) - 1);
if (ret)
return ret;
--
2.43.0
next prev parent reply other threads:[~2026-08-28 15:31 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-28 15:30 [PATCH v5 00/20] iio: adc: Add AD7768/AD7768-4 ADC driver support Janani Sunil
2026-08-28 15:30 ` [PATCH v5 01/20] iio: adc: adi-axi-adc: Initialize state mutex Janani Sunil
2026-08-28 15:30 ` [PATCH v5 02/20] dt-bindings: iio: adc: Add AD7768 Janani Sunil
2026-08-28 15:30 ` [PATCH v5 03/20] iio: backend: Add support for CRC Janani Sunil
2026-08-28 15:30 ` [PATCH v5 04/20] iio: adc: adi-axi-adc: " Janani Sunil
2026-08-28 15:30 ` [PATCH v5 05/20] iio: adc: Add AD7768 and AD7768-4 core support Janani Sunil
2026-08-31 9:04 ` Andy Shevchenko
2026-08-31 15:20 ` Janani Sunil
2026-09-01 7:19 ` Andy Shevchenko
2026-08-28 15:30 ` [PATCH v5 06/20] iio: adc: ad7768: Validate master clock rate Janani Sunil
2026-08-28 15:30 ` Janani Sunil [this message]
2026-08-31 4:44 ` [PATCH v5 07/20] iio: adc: ad7768: Add power mode helper Andy Shevchenko
2026-08-28 15:30 ` [PATCH v5 08/20] iio: adc: ad7768: Derive output data rates Janani Sunil
2026-08-31 8:09 ` Andy Shevchenko
2026-08-28 15:30 ` [PATCH v5 09/20] iio: adc: ad7768: Configure channel sampling profiles Janani Sunil
2026-08-31 8:18 ` Andy Shevchenko
2026-08-28 15:30 ` [PATCH v5 10/20] iio: adc: ad7768: Add sampling frequency controls Janani Sunil
2026-08-31 8:24 ` Andy Shevchenko
2026-08-28 15:30 ` [PATCH v5 11/20] iio: adc: ad7768: Add per-channel filter controls Janani Sunil
2026-08-28 15:30 ` [PATCH v5 12/20] iio: adc: ad7768: Wait for digital filters to settle Janani Sunil
2026-08-31 7:45 ` Andy Shevchenko
2026-08-28 15:30 ` [PATCH v5 13/20] iio: adc: ad7768: Add calibration controls Janani Sunil
2026-08-31 8:26 ` Andy Shevchenko
2026-08-28 15:30 ` [PATCH v5 14/20] iio: adc: ad7768: Add per-channel conversion delay Janani Sunil
2026-08-31 8:30 ` Andy Shevchenko
2026-08-28 15:30 ` [PATCH v5 15/20] iio: adc: ad7768: Add VCM regulator support Janani Sunil
2026-08-28 15:30 ` [PATCH v5 16/20] iio: adc: ad7768: Register GPIO auxiliary device Janani Sunil
2026-08-31 8:33 ` Andy Shevchenko
2026-08-28 15:30 ` [PATCH v5 17/20] gpio: regmap: Use regmap_test_bits() for single bit reads Janani Sunil
2026-09-02 13:48 ` Bartosz Golaszewski
2026-09-03 12:08 ` Janani Sunil
2026-08-28 15:30 ` [PATCH v5 18/20] gpio: regmap: Add optional runtime PM support Janani Sunil
2026-08-31 7:15 ` Andy Shevchenko
2026-08-28 15:30 ` [PATCH v5 19/20] gpio: ad7768: Add AD7768 GPIO auxiliary driver Janani Sunil
2026-08-28 15:30 ` [PATCH v5 20/20] Documentation: iio: Add AD7768 Documentation Janani Sunil
2026-08-29 18:19 ` [PATCH v5 00/20] iio: adc: Add AD7768/AD7768-4 ADC driver support Jonathan Cameron
2026-08-30 7:12 ` Andy Shevchenko
2026-09-01 8:32 ` Bartosz Golaszewski
2026-09-01 15:44 ` 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=20260828-ad7768-driver-v5-7-e33ca6f841a2@analog.com \
--to=janani.sunil@analog.com \
--cc=Michael.Hennerich@analog.com \
--cc=andy@kernel.org \
--cc=brgl@kernel.org \
--cc=conor+dt@kernel.org \
--cc=corbet@lwn.net \
--cc=devicetree@vger.kernel.org \
--cc=dlechner@baylibre.com \
--cc=jananisunil.dev@gmail.com \
--cc=jic23@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linusw@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@analog.com \
--cc=mwalle@kernel.org \
--cc=nuno.sa@analog.com \
--cc=olivier.moysan@foss.st.com \
--cc=p.zabel@pengutronix.de \
--cc=robh@kernel.org \
--cc=skhan@linuxfoundation.org \
--cc=u.kleine-koenig@baylibre.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.