From nobody Tue Dec 2 02:20:17 2025 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B7FF6327BF0 for ; Thu, 20 Nov 2025 08:26:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763627192; cv=none; b=kD+gewpBk6sV1LMAWZqaiowaY9WhLvTOasF4NElBEvvpNMI/kKHP2TWNxE1/TvpRIpMhCYaH7PnVqEIBDXdjyKRgodOqkoc0bf3nfZtoEYQS8SqQ3eDHk6ZNPJkDREbAE+yu/bx+18FnP6Bl2AWMR/LyjCNcWLmRhEdvzidOC3c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763627192; c=relaxed/simple; bh=rCueut8oKenLkzP/pdx8S5ZQVc/azzywTOOlHs8t1/A=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=NwByzUY+r3R4aWSqjoeZfztQgCQxRz41LzMOh0RnQY+o105xA7YbLeOXFk8ESACDD1XVu+Tg4A414yNKjjmHHJQIJgJlKq+Kd7CwJL3JzHWjbKbGhHnhz9Kjsw8ME7zsqgcS2M+Bkzs4/nsZpKg5n5BTggnYYXY2IX70W4seBVA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=PV//OcXK; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="PV//OcXK" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-429c82bf86bso345553f8f.1 for ; Thu, 20 Nov 2025 00:26:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1763627188; x=1764231988; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=PX6DdzcBdAgazqaRtWaoP1G3y29Y/m2GG3jReyS8qiU=; b=PV//OcXKLO49qFfNi8bUQ7lQ7Qq62Y9+fOqVpd7C8PX5qlbKz2PxbL3e2mDmvqCmgI sslje1OwtS6oHidVezw/E0zqdxfItcyRsCke/+2sZk4YGeXQNpXsLBqBBf+Uv2Yy8pJX x1CS+pISI8SPrJeub2zNimsuthPD8lylcuQzcJydP69sNQFM/kEkgpFWQmEQscgzBK3D UaIJHV6Py9Ui58sR6J2Pf45854JT/KjBkChMVZExKSPxZ6CWMAAOmf2aPdQP+z+ToxA8 vGwfBJuOJ4fXgOvuuVtw9yDYPQAXZpOcI7xRnWjdEq3fShKMg/kS9yRGrquNS8l/H6JF 1wlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763627188; x=1764231988; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=PX6DdzcBdAgazqaRtWaoP1G3y29Y/m2GG3jReyS8qiU=; b=H2VbmKkSiVpRpSOALFWgYD/g5zKbhLqVtyyTzp6de/lXU2/wk/4MlZljBxl7GiJmbK z8yAT7PK8KDcw4GSNWoL01rxLUBUJl4MiB0h3iNwTaeT3qza74WElLUeEQa6jGusX+Aq 4uvJY2LcXBCsHnaln/Ap1m98q1FVQ2d2E+C07SEVHjHLpfXFRE9/3ek1fjf71fKF+lfW SOGMPy1z2qf+85agIXYZaT9PH0DF06j8rM0VObuVUwbvZ0RFmcZzCGdOG32MSjnQ5D0Y /MSq2wCqiqxA42tJEcFWXgqCtfKoxvcZHwR5gWcjM7BbcUIof40spFPDBfg3M/RMnh38 HKOg== X-Forwarded-Encrypted: i=1; AJvYcCXr/I1PreDC9LMTqZPCMIo5FNMbt6mnmRPvEEt5EZ+CQsbbLAd6+F9W+Ou3bAAwlB4zJCNymKH45ctux4o=@vger.kernel.org X-Gm-Message-State: AOJu0YzL0Smaa2fQJJXGedFqYl+mhFFCGAyX9MwG8e5D0wgQI4hK3XXe TZ6xnwkiM74XcNrkHsCL43pDExnRe9vo1ZUcx/PtIq2ByF5DeansJLx3ug7e5cOMZSE= X-Gm-Gg: ASbGncsfFL52heOmS4wtF5ZvxzaqAqAFxkAc7Y8wwf0/wc9QsXLtD5XWOtXYZXlRqao 6wgkotJXOA8DV7WvtkkVwdlzt/2WMyU/C7vU3alVpmwPUKv83aVvo+wOD7KrPIPnOXXU07SyHRU R2QnXQRCuWK4MdmSAXeg8XQ1iTltUF55seRvEaCHT1D9LpAbAGXrbD93Wrh/olYSa40WYKbgE6e boUY5fZryY6BMLuuSjTqhHN+68zaUSCE9HUxVDsAXnOjP9ldg5Axamws0BEEde9RqfP7Ug3694x TC/uXd+B0/eS/loGmpevDoTNmGH1DJLpBRmqpBBHzGfEl4P8WyK8Dnex2ZkJZ4MwHcpqRU5d3CX Lncj8nk4RQ+izfUyw/lOPlwmYLVecjAnRt16/8OcGhu7fG1xdTD+oifk= X-Google-Smtp-Source: AGHT+IG802Gei6CAzXsOaDNbdW60lD9/nV5nK8bJuNWbFp6TGJvXHnh57A2zHwT6/ty7W1wS6XC4qw== X-Received: by 2002:a05:6000:428a:b0:42b:3bfc:d5cb with SMTP id ffacd0b85a97d-42cb9a55986mr1634050f8f.51.1763627188022; Thu, 20 Nov 2025 00:26:28 -0800 (PST) Received: from localhost ([151.35.219.2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-42cb7fa35c2sm3670859f8f.25.2025.11.20.00.26.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Nov 2025 00:26:27 -0800 (PST) From: Francesco Lavra To: Lorenzo Bianconi , Jonathan Cameron , David Lechner , =?UTF-8?q?Nuno=20S=C3=A1?= , Andy Shevchenko , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 9/9] iio: imu: st_lsm6dsx: add tap event detection Date: Thu, 20 Nov 2025 09:26:15 +0100 Message-Id: <20251120082615.3263892-10-flavra@baylibre.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251120082615.3263892-1-flavra@baylibre.com> References: <20251120082615.3263892-1-flavra@baylibre.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=4455; i=flavra@baylibre.com; h=from:subject; bh=rCueut8oKenLkzP/pdx8S5ZQVc/azzywTOOlHs8t1/A=; b=owEB7QES/pANAwAKAe3xO3POlDZfAcsmYgBpHtB8QOA8X/mB6mZ0YURPf5zlC0oGj0Ne0K+Cg YtUsyRJXr+JAbMEAAEKAB0WIQSGV4VPlTvcox7DFObt8TtzzpQ2XwUCaR7QfAAKCRDt8TtzzpQ2 Xx1/C/4+y62W1GV5v+dJYV9rWI6c9J4mRTAuH2Qf1wbrvJWk/wn+EDMbfzeErWGUyO8j7Qdk9Nl CvITr106a3DmMvl4OfucJD2bTo3S8v1C4Gz5cDAjs43S3162o8RNLp8LfLLupKvIl37mWCrTIbU 198/ndh6P0IJnGEIjAWaTsIjjaXWSNApSvOpg8e78eLN4os4MXe9SLXEeAroD+T2j2bmufPeo9d 9wHxGP6vj95lfp5Ont8UlYc2HyA8IeaELU/abvGRJB+6GdMwHM+AOcENJAhRH48euoR6iEuPs8R S5KV1eLp9m+UYtd6l+MFWJpi4v6NnmcZzhJSYaEsFmq8YMjdLHVIzPER9IV8Dy/qvuITMgImOuy jXIdgEH4eWzGpJasZHhBLE/ewUnxBE0AHQFXu+lqKcaNdfdoO7cHNcoTNtYuV0k8P53FgNkoJOh A6/lYE9q1ZB05RLSk6R88mPg3bqh3YSdx525CqQNvYOfryRibZ+AA+mxDb3YfQ6hIJ7wk= X-Developer-Key: i=flavra@baylibre.com; a=openpgp; fpr=8657854F953BDCA31EC314E6EDF13B73CE94365F Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In order to allow sensors to advertise tap event capability and report tap events, define a new struct iio_event_spec array that includes a tap event spec, and a new struct iio_chan_spec array that references the new iio_event_spec array; for the LSM6DSV chip family, use the new iio_chan_spec array and define an event source for tap events. Tested on LSMDSV16X. Signed-off-by: Francesco Lavra Acked-by: Lorenzo Bianconi --- drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h | 1 + drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 55 +++++++++++++++++++- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h b/drivers/iio/imu/st_l= sm6dsx/st_lsm6dsx.h index 3b90261e6bb1..5d820f2a0bce 100644 --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h @@ -245,6 +245,7 @@ struct st_lsm6dsx_shub_settings { =20 enum st_lsm6dsx_event_id { ST_LSM6DSX_EVENT_WAKEUP, + ST_LSM6DSX_EVENT_TAP, ST_LSM6DSX_EVENT_MAX }; =20 diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c b/drivers/iio/imu= /st_lsm6dsx/st_lsm6dsx_core.c index 562544636f36..55cd63643c52 100644 --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c @@ -105,6 +105,21 @@ static const struct iio_event_spec st_lsm6dsx_ev_motio= n[] =3D { }, }; =20 +static const struct iio_event_spec st_lsm6dsx_ev_motion_tap[] =3D { + { + .type =3D IIO_EV_TYPE_THRESH, + .dir =3D IIO_EV_DIR_EITHER, + .mask_separate =3D BIT(IIO_EV_INFO_VALUE) | + BIT(IIO_EV_INFO_ENABLE), + }, + { + .type =3D IIO_EV_TYPE_GESTURE, + .dir =3D IIO_EV_DIR_SINGLETAP, + .mask_separate =3D BIT(IIO_EV_INFO_VALUE) | + BIT(IIO_EV_INFO_ENABLE), + }, +}; + static const struct iio_chan_spec st_lsm6dsx_acc_channels[] =3D { ST_LSM6DSX_CHANNEL_ACC(0x28, IIO_MOD_X, 0, st_lsm6dsx_ev_motion), ST_LSM6DSX_CHANNEL_ACC(0x2a, IIO_MOD_Y, 1, st_lsm6dsx_ev_motion), @@ -119,6 +134,13 @@ static const struct iio_chan_spec st_lsm6ds0_acc_chann= els[] =3D { IIO_CHAN_SOFT_TIMESTAMP(3), }; =20 +static const struct iio_chan_spec st_lsm6dsx_acc_tap_channels[] =3D { + ST_LSM6DSX_CHANNEL_ACC(0x28, IIO_MOD_X, 0, st_lsm6dsx_ev_motion_tap), + ST_LSM6DSX_CHANNEL_ACC(0x2a, IIO_MOD_Y, 1, st_lsm6dsx_ev_motion_tap), + ST_LSM6DSX_CHANNEL_ACC(0x2c, IIO_MOD_Z, 2, st_lsm6dsx_ev_motion_tap), + IIO_CHAN_SOFT_TIMESTAMP(3), +}; + static const struct iio_chan_spec st_lsm6dsx_gyro_channels[] =3D { ST_LSM6DSX_CHANNEL(IIO_ANGL_VEL, 0x22, IIO_MOD_X, 0), ST_LSM6DSX_CHANNEL(IIO_ANGL_VEL, 0x24, IIO_MOD_Y, 1), @@ -1250,8 +1272,8 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_se= nsor_settings[] =3D { }, .channels =3D { [ST_LSM6DSX_ID_ACC] =3D { - .chan =3D st_lsm6dsx_acc_channels, - .len =3D ARRAY_SIZE(st_lsm6dsx_acc_channels), + .chan =3D st_lsm6dsx_acc_tap_channels, + .len =3D ARRAY_SIZE(st_lsm6dsx_acc_tap_channels), }, [ST_LSM6DSX_ID_GYRO] =3D { .chan =3D st_lsm6dsx_gyro_channels, @@ -1426,6 +1448,30 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_s= ensor_settings[] =3D { .status_y_mask =3D BIT(1), .status_x_mask =3D BIT(2), }, + [ST_LSM6DSX_EVENT_TAP] =3D { + .x_value =3D { + .addr =3D 0x57, + .mask =3D GENMASK(4, 0), + }, + .y_value =3D { + .addr =3D 0x58, + .mask =3D GENMASK(4, 0), + }, + .z_value =3D { + .addr =3D 0x59, + .mask =3D GENMASK(4, 0), + }, + .enable_mask =3D BIT(6), + .enable_axis_reg =3D 0x56, + .enable_x_mask =3D BIT(3), + .enable_y_mask =3D BIT(2), + .enable_z_mask =3D BIT(1), + .status_reg =3D 0x46, + .status_mask =3D BIT(5), + .status_x_mask =3D BIT(2), + .status_y_mask =3D BIT(1), + .status_z_mask =3D BIT(0), + }, }, }, }, @@ -1939,6 +1985,8 @@ st_lsm6dsx_get_event_id(enum iio_event_type type) switch (type) { case IIO_EV_TYPE_THRESH: return ST_LSM6DSX_EVENT_WAKEUP; + case IIO_EV_TYPE_GESTURE: + return ST_LSM6DSX_EVENT_TAP; default: return ST_LSM6DSX_EVENT_MAX; } @@ -2606,6 +2654,9 @@ static bool st_lsm6dsx_report_motion_event(struct st_= lsm6dsx_hw *hw) events_found =3D st_lsm6dsx_report_events(hw, ST_LSM6DSX_EVENT_WAKEUP, IIO_EV_TYPE_THRESH, IIO_EV_DIR_EITHER); + events_found |=3D st_lsm6dsx_report_events(hw, ST_LSM6DSX_EVENT_TAP, + IIO_EV_TYPE_GESTURE, + IIO_EV_DIR_SINGLETAP); =20 return events_found; } --=20 2.39.5