From: Lothar Rubusch <l.rubusch@gmail.com>
To: lars@metafoo.de, Michael.Hennerich@analog.com, jic23@kernel.org
Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
eraretuya@gmail.com, l.rubusch@gmail.com
Subject: [PATCH v1 09/12] iio: accel: adxl345: add double tap suppress bit
Date: Tue, 28 Jan 2025 12:00:57 +0000 [thread overview]
Message-ID: <20250128120100.205523-10-l.rubusch@gmail.com> (raw)
In-Reply-To: <20250128120100.205523-1-l.rubusch@gmail.com>
Add the suppress bit feature to make double tap (in)sensitive to the
configured threshold value for the tap feature. The feature is being
enabled by a sysfs handle for enabling. This is also needed for further
features in follow up patches.
Signed-off-by: Lothar Rubusch <l.rubusch@gmail.com>
---
drivers/iio/accel/adxl345_core.c | 67 ++++++++++++++++++++++++++++++++
1 file changed, 67 insertions(+)
diff --git a/drivers/iio/accel/adxl345_core.c b/drivers/iio/accel/adxl345_core.c
index f9e5f47ba303..ef0a12fd59be 100644
--- a/drivers/iio/accel/adxl345_core.c
+++ b/drivers/iio/accel/adxl345_core.c
@@ -120,6 +120,7 @@
#define ADXL345_INT2 1
#define ADXL345_REG_TAP_AXIS_MSK GENMASK(2, 0)
+#define ADXL345_REG_TAP_SUPPRESS_MSK BIT(3)
enum adxl345_axis {
ADXL345_Z_EN = BIT(0),
@@ -167,6 +168,7 @@ struct adxl345_state {
u32 tap_duration_us;
u32 tap_latent_us;
u32 tap_window_us;
+ bool tap_suppressed;
__le16 fifo_buf[ADXL345_DIRS * ADXL345_FIFO_SIZE + 1] __aligned(IIO_DMA_MINALIGN);
};
@@ -346,6 +348,22 @@ static int adxl345_set_doubletap_en(struct adxl345_state *st, bool en)
return _adxl345_set_tap_int(st, ADXL345_DOUBLE_TAP, en);
}
+static int adxl345_is_suppressed_en(struct adxl345_state *st, bool *en)
+{
+ *en = st->tap_suppressed;
+
+ return 0;
+}
+
+static int adxl345_set_suppressed_en(struct adxl345_state *st, bool en)
+{
+ st->tap_suppressed = en;
+
+ return regmap_update_bits(st->regmap, ADXL345_REG_TAP_AXIS,
+ ADXL345_REG_TAP_SUPPRESS_MSK,
+ en ? ADXL345_TAP_SUPPRESS : ~ADXL345_TAP_SUPPRESS);
+}
+
static int adxl345_set_tap_value(struct adxl345_state *st, u8 val)
{
st->tap_threshold = val;
@@ -693,6 +711,52 @@ static int adxl345_write_raw_get_fmt(struct iio_dev *indio_dev,
}
}
+#define ADXL345_generate_iio_dev_attr_EN(A, B) \
+ static ssize_t in_accel_##A##_##B##_en_show(struct device *dev, \
+ struct device_attribute *attr, \
+ char *buf) \
+ { \
+ struct iio_dev *indio_dev = dev_to_iio_dev(dev); \
+ struct adxl345_state *st = iio_priv(indio_dev); \
+ bool en; \
+ int val, ret; \
+ \
+ ret = adxl345_is_##B##_en(st, &en); \
+ if (ret) \
+ return ret; \
+ val = en ? 1 : 0; \
+ \
+ return iio_format_value(buf, IIO_VAL_INT, 1, &val); \
+ } \
+ \
+ static ssize_t in_accel_##A##_##B##_en_store(struct device *dev, \
+ struct device_attribute *attr, \
+ const char *buf, size_t len) \
+ { \
+ struct iio_dev *indio_dev = dev_to_iio_dev(dev); \
+ struct adxl345_state *st = iio_priv(indio_dev); \
+ int val, ret; \
+ \
+ ret = kstrtoint(buf, 0, &val); \
+ if (ret) \
+ return ret; \
+ \
+ ret = adxl345_set_measure_en(st, false); \
+ if (ret) \
+ return ret; \
+ \
+ ret = adxl345_set_##B##_en(st, val > 0); \
+ if (ret) \
+ return ret; \
+ \
+ ret = adxl345_set_measure_en(st, true); \
+ if (ret) \
+ return ret; \
+ \
+ return len; \
+ } \
+ static IIO_DEVICE_ATTR_RW(in_accel_##A##_##B##_en, 0)
+
#define ADXL345_generate_iio_dev_attr_FRACTIONAL(A, B, C, D, E) \
static ssize_t in_accel_##A##_##C##_##E##_show(struct device *dev, \
struct device_attribute *attr, \
@@ -738,8 +802,11 @@ ADXL345_generate_iio_dev_attr_FRACTIONAL(gesture_singletap, tap, duration, MICRO
ADXL345_generate_iio_dev_attr_FRACTIONAL(gesture_doubletap, tap, window, MICRO, us);
ADXL345_generate_iio_dev_attr_FRACTIONAL(gesture_doubletap, tap, latent, MICRO, us);
+ADXL345_generate_iio_dev_attr_EN(gesture_doubletap, suppressed);
+
static struct attribute *adxl345_event_attrs[] = {
&iio_dev_attr_in_accel_gesture_singletap_duration_us.dev_attr.attr,
+ &iio_dev_attr_in_accel_gesture_doubletap_suppressed_en.dev_attr.attr,
&iio_dev_attr_in_accel_gesture_doubletap_latent_us.dev_attr.attr,
&iio_dev_attr_in_accel_gesture_doubletap_window_us.dev_attr.attr,
NULL
--
2.39.5
next prev parent reply other threads:[~2025-01-28 12:01 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-28 12:00 [PATCH v1 00/12] iio: accel: adxl345: add interrupt based sensor events Lothar Rubusch
2025-01-28 12:00 ` [PATCH v1 01/12] iio: accel: adxl345: migrate constants to core Lothar Rubusch
2025-02-01 16:35 ` Jonathan Cameron
2025-02-04 14:13 ` Lothar Rubusch
2025-02-04 14:46 ` Jonathan Cameron
2025-01-28 12:00 ` [PATCH v1 02/12] iio: accel: adxl345: reorganize measurement enable Lothar Rubusch
2025-02-01 16:37 ` Jonathan Cameron
2025-01-28 12:00 ` [PATCH v1 03/12] iio: accel: adxl345: add debug register access Lothar Rubusch
2025-01-28 12:00 ` [PATCH v1 04/12] iio: accel: adxl345: reorganize irq handler Lothar Rubusch
2025-02-01 16:43 ` Jonathan Cameron
2025-01-28 12:00 ` [PATCH v1 05/12] iio: accel: adxl345: improve access to the interrupt enable register Lothar Rubusch
2025-02-01 16:49 ` Jonathan Cameron
2025-01-28 12:00 ` [PATCH v1 06/12] iio: accel: adxl345: add single tap feature Lothar Rubusch
2025-02-01 17:02 ` Jonathan Cameron
2025-01-28 12:00 ` [PATCH v1 07/12] iio: accel: adxl345: show tap status and direction Lothar Rubusch
2025-02-01 17:09 ` Jonathan Cameron
2025-01-28 12:00 ` [PATCH v1 08/12] iio: accel: adxl345: add double tap feature Lothar Rubusch
2025-02-01 17:15 ` Jonathan Cameron
2025-01-28 12:00 ` Lothar Rubusch [this message]
2025-02-01 17:17 ` [PATCH v1 09/12] iio: accel: adxl345: add double tap suppress bit Jonathan Cameron
2025-01-28 12:00 ` [PATCH v1 10/12] iio: accel: adxl345: add freefall feature Lothar Rubusch
2025-02-01 17:22 ` Jonathan Cameron
2025-01-28 12:00 ` [PATCH v1 11/12] iio: accel: adxl345: add activity feature Lothar Rubusch
2025-02-01 17:27 ` Jonathan Cameron
2025-02-04 13:48 ` Lothar Rubusch
2025-01-28 12:01 ` [PATCH v1 12/12] iio: accel: adxl345: add inactivity feature Lothar Rubusch
2025-02-01 17:41 ` Jonathan Cameron
2025-02-01 17:48 ` [PATCH v1 00/12] iio: accel: adxl345: add interrupt based sensor events Jonathan Cameron
2025-02-04 13:40 ` Lothar Rubusch
2025-02-08 12:57 ` 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=20250128120100.205523-10-l.rubusch@gmail.com \
--to=l.rubusch@gmail.com \
--cc=Michael.Hennerich@analog.com \
--cc=eraretuya@gmail.com \
--cc=jic23@kernel.org \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.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 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.