On Mon, 10 Feb 2025 11:01:11 +0000 Lothar Rubusch <l.rubusch@xxxxxxxxx> wrote: > Add the double tap feature of the sensor. The interrupt handler needs > to catch and forward the event to the IIO channel. The single tap > implementation now is extended to deal with double tap as well. > > Signed-off-by: Lothar Rubusch <l.rubusch@xxxxxxxxx> > --- > drivers/iio/accel/adxl345_core.c | 102 ++++++++++++++++++++++++++++++- > 1 file changed, 100 insertions(+), 2 deletions(-) > > diff --git a/drivers/iio/accel/adxl345_core.c b/drivers/iio/accel/adxl345_core.c > index 304147a4ca60..cf35a8f9f432 100644 > --- a/drivers/iio/accel/adxl345_core.c > +++ b/drivers/iio/accel/adxl345_core.c > @@ -46,17 +46,23 @@ enum adxl345_axis { > /* single/double tap */ > enum adxl345_tap_type { > ADXL345_SINGLE_TAP, > + ADXL345_DOUBLE_TAP, > }; > > static const unsigned int adxl345_tap_int_reg[2] = { Ah. Here comes the rest. Just use [] so no need to update. This size should only matter the other way around where you are doing an ARRAY_SIZE() or similar (might not even need that!) > [ADXL345_SINGLE_TAP] = ADXL345_INT_SINGLE_TAP, > + [ADXL345_DOUBLE_TAP] = ADXL345_INT_DOUBLE_TAP, > }; > > enum adxl345_tap_time_type { > + ADXL345_TAP_TIME_LATENT, > + ADXL345_TAP_TIME_WINDOW, > ADXL345_TAP_TIME_DUR, > }; > > static const unsigned int adxl345_tap_time_reg[3] = { > + [ADXL345_TAP_TIME_LATENT] = ADXL345_REG_LATENT, > + [ADXL345_TAP_TIME_WINDOW] = ADXL345_REG_WINDOW, > [ADXL345_TAP_TIME_DUR] = ADXL345_REG_DUR, > }; > > @@ -73,6 +79,8 @@ struct adxl345_state { > u32 tap_axis_ctrl; > u8 tap_threshold; > u32 tap_duration_us; > + u32 tap_latent_us; > + u32 tap_window_us; > > __le16 fifo_buf[ADXL345_DIRS * ADXL345_FIFO_SIZE + 1] __aligned(IIO_DMA_MINALIGN); > }; > @@ -86,6 +94,14 @@ static struct iio_event_spec adxl345_events[] = { > .mask_shared_by_type = BIT(IIO_EV_INFO_VALUE) | > BIT(IIO_EV_INFO_TIMEOUT), > }, > + { > + /* double tap */ Kind of obvious comment given the dir, so could just not mention it. > + .type = IIO_EV_TYPE_GESTURE, > + .dir = IIO_EV_DIR_DOUBLETAP, > + .mask_shared_by_type = BIT(IIO_EV_INFO_ENABLE) | > + BIT(IIO_EV_INFO_RESET_TIMEOUT) | > + BIT(IIO_EV_INFO_TAP2_MIN_DELAY), > + }, > }; > +