From: Taha Ed-Dafili <0rayn.dev@gmail.com>
To: linux-iio@vger.kernel.org, jic23@kernel.org
Cc: dlechner@baylibre.com, rdunlap@infradead.org,
skhan@linuxfoundation.org,
linux-kernel-mentees-archive@lists.linuxfoundation.org,
nuno.sa@analog.com, andy@kernel.org, corbet@lwn.net,
lars@metafoo.de, Michael.Hennerich@analog.com,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
Taha Ed-Dafili <0rayn.dev@gmail.com>
Subject: [PATCH v5 4/5] iio: accel: adxl345: Implement event scaling for ABI compliance
Date: Tue, 24 Feb 2026 14:03:47 +0000 [thread overview]
Message-ID: <20260224140351.27288-5-0rayn.dev@gmail.com> (raw)
In-Reply-To: <20260224140351.27288-1-0rayn.dev@gmail.com>
The ADXL345 uses a fixed threshold resolution of 62.5 mg/LSB for
event-related registers. Previously, the driver reported raw
values without a scale factor.
Implement IIO_EV_INFO_SCALE for all event types to provide the
conversion factor (0.612915 m/s^2) as required by the IIO ABI.
Consequently, remove the obsolete comment in adxl345_read_event_value()
which stated that the scale factor is not applied.
Add explicit write rejection for IIO_EV_INFO_SCALE in
adxl345_write_event_value() returning -EINVAL.
Suggested-by: Jonathan Cameron <jic23@kernel.org>
Signed-off-by: Taha Ed-Dafili <0rayn.dev@gmail.com>
---
drivers/iio/accel/adxl345_core.c | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)
diff --git a/drivers/iio/accel/adxl345_core.c b/drivers/iio/accel/adxl345_core.c
index 1ac99263ad8e..722b5018757e 100644
--- a/drivers/iio/accel/adxl345_core.c
+++ b/drivers/iio/accel/adxl345_core.c
@@ -213,7 +213,8 @@ static const struct iio_event_spec adxl345_events[] = {
.dir = IIO_EV_DIR_RISING,
.mask_shared_by_type =
BIT(IIO_EV_INFO_ENABLE) |
- BIT(IIO_EV_INFO_VALUE),
+ BIT(IIO_EV_INFO_VALUE) |
+ BIT(IIO_EV_INFO_SCALE),
},
{
/* activity, ac bit set */
@@ -221,14 +222,17 @@ static const struct iio_event_spec adxl345_events[] = {
.dir = IIO_EV_DIR_RISING,
.mask_shared_by_type =
BIT(IIO_EV_INFO_ENABLE) |
- BIT(IIO_EV_INFO_VALUE),
+ BIT(IIO_EV_INFO_VALUE) |
+ BIT(IIO_EV_INFO_SCALE),
},
{
/* single tap */
.type = IIO_EV_TYPE_GESTURE,
.dir = IIO_EV_DIR_SINGLETAP,
.mask_separate = BIT(IIO_EV_INFO_ENABLE),
- .mask_shared_by_type = BIT(IIO_EV_INFO_VALUE) |
+ .mask_shared_by_type =
+ BIT(IIO_EV_INFO_VALUE) |
+ BIT(IIO_EV_INFO_SCALE) |
BIT(IIO_EV_INFO_TIMEOUT),
},
{
@@ -238,6 +242,7 @@ static const struct iio_event_spec adxl345_events[] = {
.mask_shared_by_type =
BIT(IIO_EV_INFO_ENABLE) |
BIT(IIO_EV_INFO_VALUE) |
+ BIT(IIO_EV_INFO_SCALE) |
BIT(IIO_EV_INFO_RESET_TIMEOUT) |
BIT(IIO_EV_INFO_TAP2_MIN_DELAY),
},
@@ -277,6 +282,7 @@ static const struct iio_event_spec adxl345_fake_chan_events[] = {
.mask_separate = BIT(IIO_EV_INFO_ENABLE),
.mask_shared_by_type =
BIT(IIO_EV_INFO_VALUE) |
+ BIT(IIO_EV_INFO_SCALE) |
BIT(IIO_EV_INFO_PERIOD),
},
{
@@ -286,6 +292,7 @@ static const struct iio_event_spec adxl345_fake_chan_events[] = {
.mask_separate = BIT(IIO_EV_INFO_ENABLE),
.mask_shared_by_type =
BIT(IIO_EV_INFO_VALUE) |
+ BIT(IIO_EV_INFO_SCALE) |
BIT(IIO_EV_INFO_PERIOD),
},
};
@@ -1343,6 +1350,16 @@ static int adxl345_read_event_value(struct iio_dev *indio_dev,
unsigned int tap_threshold;
int ret;
+ /*
+ * The event threshold LSB is fixed at 62.5 mg/LSB
+ * 0.0625 * 9.80665 = 0.612915625 m/s^2
+ */
+ if (info == IIO_EV_INFO_SCALE) {
+ *val = 0;
+ *val2 = 612915;
+ return IIO_VAL_INT_PLUS_MICRO;
+ }
+
switch (type) {
case IIO_EV_TYPE_MAG:
return adxl345_read_mag_value(st, dir, info,
@@ -1357,12 +1374,6 @@ static int adxl345_read_event_value(struct iio_dev *indio_dev,
case IIO_EV_TYPE_GESTURE:
switch (info) {
case IIO_EV_INFO_VALUE:
- /*
- * The scale factor would be 62.5mg/LSB (i.e. 0xFF = 16g) but
- * not applied here. In context of this general purpose sensor,
- * what imports is rather signal intensity than the absolute
- * measured g value.
- */
ret = regmap_read(st->regmap, ADXL345_REG_THRESH_TAP,
&tap_threshold);
if (ret)
@@ -1403,6 +1414,9 @@ static int adxl345_write_event_value(struct iio_dev *indio_dev,
if (ret)
return ret;
+ if (info == IIO_EV_INFO_SCALE)
+ return -EINVAL;
+
switch (type) {
case IIO_EV_TYPE_MAG:
ret = adxl345_write_mag_value(st, dir, info,
--
2.47.3
next prev parent reply other threads:[~2026-02-24 14:04 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-24 14:03 [PATCH v5 0/5] iio: accel: adxl345: Implement event scaling and ABI compliance Taha Ed-Dafili
2026-02-24 14:03 ` [PATCH v5 1/5] docs: iio: adxl345: grammar and formatting cleanups Taha Ed-Dafili
2026-02-24 14:03 ` [PATCH v5 2/5] iio: core: Add IIO_EV_INFO_SCALE to event info Taha Ed-Dafili
2026-02-24 14:03 ` [PATCH v5 3/5] iio: accel: adxl345: Expose IIO_EV_INFO_VALUE for double tap Taha Ed-Dafili
2026-02-24 14:55 ` Andy Shevchenko
2026-02-24 15:03 ` Andy Shevchenko
2026-02-26 15:03 ` Taha Ed-Dafili
2026-02-26 16:02 ` Andy Shevchenko
2026-02-24 14:03 ` Taha Ed-Dafili [this message]
2026-02-24 14:58 ` [PATCH v5 4/5] iio: accel: adxl345: Implement event scaling for ABI compliance Andy Shevchenko
2026-02-24 14:03 ` [PATCH v5 5/5] docs: iio: adxl345: update event attributes and scaling math Taha Ed-Dafili
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=20260224140351.27288-5-0rayn.dev@gmail.com \
--to=0rayn.dev@gmail.com \
--cc=Michael.Hennerich@analog.com \
--cc=andy@kernel.org \
--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-mentees-archive@lists.linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nuno.sa@analog.com \
--cc=rdunlap@infradead.org \
--cc=skhan@linuxfoundation.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 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.