linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Lothar Rubusch <l.rubusch@gmail.com>
To: Jonathan Cameron <jic23@kernel.org>
Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org,
	corbet@lwn.net,  lucas.p.stankus@gmail.com, lars@metafoo.de,
	Michael.Hennerich@analog.com,  bagasdotme@gmail.com,
	linux-iio@vger.kernel.org, linux-doc@vger.kernel.org,
	 linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 03/11] iio: accel: adxl313: make use of regmap cache
Date: Wed, 11 Jun 2025 15:48:25 +0200	[thread overview]
Message-ID: <CAFXKEHY5SmtTrxy-8AWxGNqkPUAZjitgYDg2pR7acTAt-tFWdQ@mail.gmail.com> (raw)
In-Reply-To: <20250608163812.4a1a93df@jic23-huawei>

On Sun, Jun 8, 2025 at 5:38 PM Jonathan Cameron <jic23@kernel.org> wrote:
>
> On Sun, 8 Jun 2025 16:22:15 +0100
> Jonathan Cameron <jic23@kernel.org> wrote:
>
> > On Sun,  1 Jun 2025 17:21:31 +0000
> > Lothar Rubusch <l.rubusch@gmail.com> wrote:
> >
> > > Setup regmap cache to cache register configuration. This is a preparatory
> > > step for follow up patches. Using cached settings will help at inerrupt
> > > handling, to generate activity and inactivity events.
> >
> > The regmap cache will reduce traffic to the device for things like reading
> > back sampling frequency, so no need to justify this patch with 'future'
> > stuff.  Justify it with current.   I've applied with the description of
> > simply
> >
> > "Setup regmap cache to cache register configuration, reducing bus traffic
> > for repeated accesses to non volatile registers."
> >
> Dropped again.  The is_volatile should include all volatile registers
> not just ones we happen to be using so far.
>

I see among the patches, REG_INT_SOURCE is added later. For a v5 then
I'll prepare a patch which sets up all registers - including
REG_INT_SOURCE right away. Correct?

Then it should be added the following line:
bool adxl313_is_volatile_reg(struct device *dev, unsigned int reg)
{
    switch (reg) {
    case ADXL313_REG_DATA_AXIS(0):
    case ADXL313_REG_DATA_AXIS(1):
    case ADXL313_REG_DATA_AXIS(2):
    case ADXL313_REG_DATA_AXIS(3):
    case ADXL313_REG_DATA_AXIS(4):
    case ADXL313_REG_DATA_AXIS(5):
    case ADXL313_REG_FIFO_STATUS:
+    case ADXL313_REG_INT_SOURCE:
        return true;
    default:
        return false;
    }
}

> You added debug accesses in previous patch which will not take the volatile
> nature into account unless the register is in that switch statement.

This is not quite clear to me. What am I missing here?

When I try to find iio drivers using "debugfs" and having a
"volatile_reg" called specification (using either ranges or by a
function), I could only identify the following drivers:
./drivers/iio/accel/msa311.c
./drivers/iio/adc/ad7380.c
./drivers/iio/adc/ina2xx-adc.c
./drivers/iio/imu/bno055/bno055.c
./drivers/iio/light/gp2ap020a00f.c

I tried to find if there is a special declaration of debug registers
in the volatile_reg list, but could not find any.

Most interesting here was:
./drivers/iio/adc/ad7380.c

It seems to claim a kind of a "direct" access specifier. Should I use
similar calls to `iio_device_claim_direct()` and
`iio_device_release_direct()` here?

 999
1000 static int ad7380_debugfs_reg_access(struct iio_dev *indio_dev,
u32 reg,
1001                                      u32 writeval, u32 *readval)
1002 {
1003         struct ad7380_state *st = iio_priv(indio_dev);
1004         int ret;
1005
1006         if (!iio_device_claim_direct(indio_dev))
1007                 return -EBUSY;
1008
1009         if (readval)
1010                 ret = regmap_read(st->regmap, reg, readval);
1011         else
1012                 ret = regmap_write(st->regmap, reg, writeval);
1013
1014         iio_device_release_direct(indio_dev);
1015
1016         return ret;
1017 }
1018

>
> Put the all in from the start.
>

I guess, in the ADXL313 I'm doing the same approach as for the
ADXL345. If it's wrong / incomplete here, it will need to be fixed in
the ADXL345 as well. Or did I understand something wrong?

> Jonathan
>
> > >
> > > Signed-off-by: Lothar Rubusch <l.rubusch@gmail.com>
> > > ---
> > >  drivers/iio/accel/adxl313.h      |  2 ++
> > >  drivers/iio/accel/adxl313_core.c | 17 +++++++++++++++++
> > >  drivers/iio/accel/adxl313_i2c.c  |  6 ++++++
> > >  drivers/iio/accel/adxl313_spi.c  |  6 ++++++
> > >  4 files changed, 31 insertions(+)
> > >
> > > diff --git a/drivers/iio/accel/adxl313.h b/drivers/iio/accel/adxl313.h
> > > index 72f624af4686..fc937bdf83b6 100644
> > > --- a/drivers/iio/accel/adxl313.h
> > > +++ b/drivers/iio/accel/adxl313.h
> > > @@ -54,6 +54,8 @@ extern const struct regmap_access_table adxl312_writable_regs_table;
> > >  extern const struct regmap_access_table adxl313_writable_regs_table;
> > >  extern const struct regmap_access_table adxl314_writable_regs_table;
> > >
> > > +bool adxl313_is_volatile_reg(struct device *dev, unsigned int reg);
> > > +
> > >  enum adxl313_device_type {
> > >     ADXL312,
> > >     ADXL313,
> > > diff --git a/drivers/iio/accel/adxl313_core.c b/drivers/iio/accel/adxl313_core.c
> > > index 06a771bb4726..0c893c286017 100644
> > > --- a/drivers/iio/accel/adxl313_core.c
> > > +++ b/drivers/iio/accel/adxl313_core.c
> > > @@ -46,6 +46,23 @@ const struct regmap_access_table adxl314_readable_regs_table = {
> > >  };
> > >  EXPORT_SYMBOL_NS_GPL(adxl314_readable_regs_table, IIO_ADXL313);
> > >
> > > +bool adxl313_is_volatile_reg(struct device *dev, unsigned int reg)
> > > +{
> > > +   switch (reg) {
> > > +   case ADXL313_REG_DATA_AXIS(0):
> > > +   case ADXL313_REG_DATA_AXIS(1):
> > > +   case ADXL313_REG_DATA_AXIS(2):
> > > +   case ADXL313_REG_DATA_AXIS(3):
> > > +   case ADXL313_REG_DATA_AXIS(4):
> > > +   case ADXL313_REG_DATA_AXIS(5):
> > > +   case ADXL313_REG_FIFO_STATUS:
> > > +           return true;
> > > +   default:
> > > +           return false;
> > > +   }
> > > +}
> > > +EXPORT_SYMBOL_NS_GPL(adxl313_is_volatile_reg, "IIO_ADXL313");
> > > +
> > >  static int adxl312_check_id(struct device *dev,
> > >                         struct adxl313_data *data)
> > >  {
> > > diff --git a/drivers/iio/accel/adxl313_i2c.c b/drivers/iio/accel/adxl313_i2c.c
> > > index a4cf0cf2c5aa..e8636e8ab14f 100644
> > > --- a/drivers/iio/accel/adxl313_i2c.c
> > > +++ b/drivers/iio/accel/adxl313_i2c.c
> > > @@ -21,6 +21,8 @@ static const struct regmap_config adxl31x_i2c_regmap_config[] = {
> > >             .rd_table       = &adxl312_readable_regs_table,
> > >             .wr_table       = &adxl312_writable_regs_table,
> > >             .max_register   = 0x39,
> > > +           .volatile_reg   = adxl313_is_volatile_reg,
> > > +           .cache_type     = REGCACHE_MAPLE,
> > >     },
> > >     [ADXL313] = {
> > >             .reg_bits       = 8,
> > > @@ -28,6 +30,8 @@ static const struct regmap_config adxl31x_i2c_regmap_config[] = {
> > >             .rd_table       = &adxl313_readable_regs_table,
> > >             .wr_table       = &adxl313_writable_regs_table,
> > >             .max_register   = 0x39,
> > > +           .volatile_reg   = adxl313_is_volatile_reg,
> > > +           .cache_type     = REGCACHE_MAPLE,
> > >     },
> > >     [ADXL314] = {
> > >             .reg_bits       = 8,
> > > @@ -35,6 +39,8 @@ static const struct regmap_config adxl31x_i2c_regmap_config[] = {
> > >             .rd_table       = &adxl314_readable_regs_table,
> > >             .wr_table       = &adxl314_writable_regs_table,
> > >             .max_register   = 0x39,
> > > +           .volatile_reg   = adxl313_is_volatile_reg,
> > > +           .cache_type     = REGCACHE_MAPLE,
> > >     },
> > >  };
> > >
> > > diff --git a/drivers/iio/accel/adxl313_spi.c b/drivers/iio/accel/adxl313_spi.c
> > > index 9a16b40bff34..68e323e81aeb 100644
> > > --- a/drivers/iio/accel/adxl313_spi.c
> > > +++ b/drivers/iio/accel/adxl313_spi.c
> > > @@ -24,6 +24,8 @@ static const struct regmap_config adxl31x_spi_regmap_config[] = {
> > >             .max_register   = 0x39,
> > >             /* Setting bits 7 and 6 enables multiple-byte read */
> > >             .read_flag_mask = BIT(7) | BIT(6),
> > > +           .volatile_reg   = adxl313_is_volatile_reg,
> > > +           .cache_type     = REGCACHE_MAPLE,
> > >     },
> > >     [ADXL313] = {
> > >             .reg_bits       = 8,
> > > @@ -33,6 +35,8 @@ static const struct regmap_config adxl31x_spi_regmap_config[] = {
> > >             .max_register   = 0x39,
> > >             /* Setting bits 7 and 6 enables multiple-byte read */
> > >             .read_flag_mask = BIT(7) | BIT(6),
> > > +           .volatile_reg   = adxl313_is_volatile_reg,
> > > +           .cache_type     = REGCACHE_MAPLE,
> > >     },
> > >     [ADXL314] = {
> > >             .reg_bits       = 8,
> > > @@ -42,6 +46,8 @@ static const struct regmap_config adxl31x_spi_regmap_config[] = {
> > >             .max_register   = 0x39,
> > >             /* Setting bits 7 and 6 enables multiple-byte read */
> > >             .read_flag_mask = BIT(7) | BIT(6),
> > > +           .volatile_reg   = adxl313_is_volatile_reg,
> > > +           .cache_type     = REGCACHE_MAPLE,
> > >     },
> > >  };
> > >
> >
>

  reply	other threads:[~2025-06-11 13:49 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-01 17:21 [PATCH v4 00/11] iio: accel: adxl313: add power-save on activity/inactivity Lothar Rubusch
2025-06-01 17:21 ` [PATCH v4 01/11] iio: accel: adxl313: add debug register Lothar Rubusch
2025-06-01 19:06   ` Andy Shevchenko
2025-06-08 15:14     ` Jonathan Cameron
2025-06-01 17:21 ` [PATCH v4 02/11] iio: accel: adxl313: introduce channel buffer Lothar Rubusch
2025-06-01 19:08   ` Andy Shevchenko
2025-06-11  8:01     ` Lothar Rubusch
2025-06-11  8:42       ` Andy Shevchenko
2025-06-08 15:17   ` Jonathan Cameron
2025-06-01 17:21 ` [PATCH v4 03/11] iio: accel: adxl313: make use of regmap cache Lothar Rubusch
2025-06-01 19:09   ` Andy Shevchenko
2025-06-08 15:22   ` Jonathan Cameron
2025-06-08 15:38     ` Jonathan Cameron
2025-06-11 13:48       ` Lothar Rubusch [this message]
2025-06-11 15:04         ` Jonathan Cameron
2025-06-01 17:21 ` [PATCH v4 04/11] iio: accel: adxl313: add function to enable measurement Lothar Rubusch
2025-06-01 19:12   ` Andy Shevchenko
2025-06-08 15:27   ` Jonathan Cameron
2025-06-11  8:55     ` Lothar Rubusch
2025-06-11 15:05       ` Jonathan Cameron
2025-06-01 17:21 ` [PATCH v4 05/11] iio: accel: adxl313: prepare interrupt handling Lothar Rubusch
2025-06-01 19:21   ` Andy Shevchenko
2025-06-11  8:26     ` Lothar Rubusch
2025-06-01 17:21 ` [PATCH v4 06/11] iio: accel: adxl313: add basic interrupt handling for FIFO watermark Lothar Rubusch
2025-06-01 19:26   ` Andy Shevchenko
2025-06-08 15:30     ` Jonathan Cameron
2025-06-08 15:44   ` Jonathan Cameron
2025-06-01 17:21 ` [PATCH v4 07/11] iio: accel: adxl313: add activity sensing Lothar Rubusch
2025-06-01 19:38   ` Andy Shevchenko
2025-06-11 14:49     ` Lothar Rubusch
2025-06-11 15:05       ` Andy Shevchenko
2025-06-11 15:15       ` Jonathan Cameron
2025-06-11 15:23         ` Andy Shevchenko
2025-06-08 16:08   ` Jonathan Cameron
2025-06-11 15:06     ` Lothar Rubusch
2025-06-11 16:47       ` Jonathan Cameron
2025-06-01 17:21 ` [PATCH v4 08/11] iio: accel: adxl313: add inactivity sensing Lothar Rubusch
2025-06-01 19:45   ` Andy Shevchenko
2025-06-11 15:36     ` Lothar Rubusch
2025-06-11 16:52       ` Jonathan Cameron
2025-06-08 16:14   ` Jonathan Cameron
2025-06-01 17:21 ` [PATCH v4 09/11] iio: accel: adxl313: implement power-save on inactivity Lothar Rubusch
2025-06-08 16:15   ` Jonathan Cameron
2025-06-01 17:21 ` [PATCH v4 10/11] iio: accel: adxl313: add AC coupled activity/inactivity events Lothar Rubusch
2025-06-01 19:53   ` Andy Shevchenko
2025-06-11 17:12     ` Lothar Rubusch
2025-06-08 16:23   ` Jonathan Cameron
2025-06-11 19:58     ` Lothar Rubusch
2025-06-14 13:33       ` Jonathan Cameron
2025-06-01 17:21 ` [PATCH v4 11/11] docs: iio: add ADXL313 accelerometer Lothar Rubusch
2025-06-02  1:07 ` [PATCH v4 00/11] iio: accel: adxl313: add power-save on activity/inactivity Bagas Sanjaya
2025-06-11 20:04   ` Lothar Rubusch
2025-06-12 12:41     ` 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=CAFXKEHY5SmtTrxy-8AWxGNqkPUAZjitgYDg2pR7acTAt-tFWdQ@mail.gmail.com \
    --to=l.rubusch@gmail.com \
    --cc=Michael.Hennerich@analog.com \
    --cc=andy@kernel.org \
    --cc=bagasdotme@gmail.com \
    --cc=corbet@lwn.net \
    --cc=dlechner@baylibre.com \
    --cc=jic23@kernel.org \
    --cc=lars@metafoo.de \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lucas.p.stankus@gmail.com \
    --cc=nuno.sa@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).