From: Oleksij Rempel <o.rempel@pengutronix.de>
To: Sander Vanheule <sander@svanheule.net>
Cc: "Jonathan Cameron" <jic23@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
kernel@pengutronix.de, linux-kernel@vger.kernel.org,
linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
"Andy Shevchenko" <andy@kernel.org>,
"David Lechner" <dlechner@baylibre.com>,
"Nuno Sá" <nuno.sa@analog.com>,
"David Jander" <david@protonic.nl>
Subject: Re: [PATCH v2 5/8] iio: dac: ds4424: convert to regmap
Date: Sun, 1 Feb 2026 17:16:53 +0100 [thread overview]
Message-ID: <aX98dbnCcFnFY3ks@pengutronix.de> (raw)
In-Reply-To: <2cfd142fbaad3ddd3b3fb632c77a4e9f58d50f66.camel@svanheule.net>
Hi Sander,
On Sun, Feb 01, 2026 at 03:42:28PM +0100, Sander Vanheule wrote:
> Hi Oleksij,
>
> On Tue, 2026-01-27 at 07:09 +0100, Oleksij Rempel wrote:
> > Refactor the driver to use the regmap API.
> >
> > Replace the driver-specific mutex and manual shadow buffers with the
> > standard regmap infrastructure for locking and caching.
> >
> > This ensures the cache is populated from hardware at probe, preventing
> > state desynchronization (e.g. across suspend/resume).
>
>
> [...]
>
> > +static const struct regmap_access_table ds44x4_table = {
> > + .yes_ranges = ds44x4_ranges,
> > + .n_yes_ranges = ARRAY_SIZE(ds44x4_ranges),
> > +};
> >
> > -static int ds4424_set_value(struct iio_dev *indio_dev,
> > - int val, struct iio_chan_spec const *chan)
> > +static const struct regmap_config ds44x2_regmap_config = {
> > + .reg_bits = 8,
> > + .val_bits = 8,
> > + .cache_type = REGCACHE_FLAT,
> > + .max_register = DS4424_DAC_ADDR(1),
> > + .rd_table = &ds44x2_table,
> > + .wr_table = &ds44x2_table,
> > +};
>
> Note that REGCACHE_FLAT will allocate 0xF8 unsigned longs you will never use.
> REGCACHE_MAPLE will probably be much closer to the size of the original value
> cache, for a small look-up performance penalty (but always fast compared to the
> I2C bus).
ACK, already migrated to REGCACHE_MAPLE in the v3:
https://lore.kernel.org/all/20260128153824.3679187-8-o.rempel@pengutronix.de/
Which works mostly fine except of the cache initialisation. If I use
num_reg_defaults_raw with REGCACHE_MAPLE as proposed by Andy
Shevchenko, first access to regmap values over debugfs will explode with
NULL pointer etc...
If I remove num_reg_defaults_raw, I need to read register manually
to init defaul values as implemented in v3.
The REGCACHE_FLAT has one more problem, the cache will be inited with
i2c NACKs (0xFF) if used with num_reg_defaults_raw.
> [...]
>
> > @@ -163,49 +184,52 @@ static int ds4424_write_raw(struct iio_dev *indio_dev,
> >
> > static int ds4424_verify_chip(struct iio_dev *indio_dev)
> > {
> > - int ret, val;
> > + struct ds4424_data *data = iio_priv(indio_dev);
> > + u8 raw_values[DS4424_MAX_DAC_CHANNELS];
> > + int ret;
> >
> > - ret = ds4424_get_value(indio_dev, &val, 0);
> > - if (ret < 0)
> > - dev_err(&indio_dev->dev,
> > - "%s failed. ret: %d\n", __func__, ret);
> > + /* Bulk read all channels starting at 0xf8.
> > + * This populates the regmap cache with current HW values.
> > + */
> > + ret = regmap_bulk_read(data->regmap, DS4424_DAC_ADDR(0),
> > + raw_values, indio_dev->num_channels);
>
> Are you forcing a HW-to-cache sync for performance?
See response above.
> Previously this function would just read a single value to verify a reply was
> sent, instead of seeding the cache in data->raw, so that's a change in behavior
> (and purpose) of this function, meaning you may want to change the name if you
> keep this.
>
> You could (should IMHO) use a sparse cache, which is actually aware of its
> content's validity and will transparently access the device on the first access
> to initialize itself. I would recommend REGCACHE_MAPLE as above, but
> REGCACHE_FLAT_S also works. REGCACHE_FLAT is tricky to properly initialize [1],
> and I would not recommend using it in new code.
Ok, thx!
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
next prev parent reply other threads:[~2026-02-01 16:17 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-27 6:09 [PATCH v2 0/8] iio: dac: ds4424: add DS4402/DS4404 support and scale Oleksij Rempel
2026-01-27 6:09 ` [PATCH v2 1/8] dt-bindings: iio: dac: maxim,ds4424: add ds4402/ds4404 Oleksij Rempel
2026-01-27 6:09 ` [PATCH v2 2/8] dt-bindings: iio: dac: maxim,ds4424: add maxim,rfs-ohms property Oleksij Rempel
2026-01-27 19:49 ` Conor Dooley
2026-01-27 19:55 ` Conor Dooley
2026-01-28 8:01 ` David Jander
2026-01-28 17:00 ` Conor Dooley
2026-01-27 6:09 ` [PATCH v2 3/8] iio: dac: ds4424: add DS4402/DS4404 device IDs Oleksij Rempel
2026-01-27 10:27 ` Andy Shevchenko
2026-01-27 6:09 ` [PATCH v2 4/8] iio: dac: ds4424: sort headers alphabetically Oleksij Rempel
2026-01-27 10:30 ` Andy Shevchenko
2026-01-27 6:09 ` [PATCH v2 5/8] iio: dac: ds4424: convert to regmap Oleksij Rempel
2026-01-27 10:39 ` Andy Shevchenko
2026-02-01 14:42 ` Sander Vanheule
2026-02-01 16:16 ` Oleksij Rempel [this message]
2026-02-01 17:24 ` Sander Vanheule
2026-02-03 10:10 ` Andy Shevchenko
2026-02-03 10:13 ` Andy Shevchenko
2026-01-27 6:09 ` [PATCH v2 6/8] iio: dac: ds4424: fix -128 rejection and refactor raw access Oleksij Rempel
2026-01-27 10:42 ` Andy Shevchenko
2026-01-27 10:49 ` Oleksij Rempel
2026-01-27 10:51 ` Andy Shevchenko
2026-01-27 6:09 ` [PATCH v2 7/8] iio: dac: ds4424: add Rfs-based scale and per-variant limits Oleksij Rempel
2026-01-27 10:46 ` Andy Shevchenko
2026-01-27 6:09 ` [PATCH v2 8/8] iio: dac: ds4424: ratelimit read errors and use device context Oleksij Rempel
2026-01-27 10:47 ` Andy Shevchenko
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=aX98dbnCcFnFY3ks@pengutronix.de \
--to=o.rempel@pengutronix.de \
--cc=andy@kernel.org \
--cc=conor+dt@kernel.org \
--cc=david@protonic.nl \
--cc=devicetree@vger.kernel.org \
--cc=dlechner@baylibre.com \
--cc=jic23@kernel.org \
--cc=kernel@pengutronix.de \
--cc=krzk+dt@kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nuno.sa@analog.com \
--cc=robh@kernel.org \
--cc=sander@svanheule.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.