summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancesco Lavra <flavra@baylibre.com>2026-03-24 09:47:59 +0100
committerJonathan Cameron <jic23@kernel.org>2026-04-27 09:58:16 +0100
commitdd59392a3ec23dbe3a3fabadcf3bb847e9592ccd (patch)
treec40486de119f36dd3ff2c2113c90faf743a01fad
parentb29f00ef08a7afdedc0b36cc0bead579d6977ced (diff)
downloadlinux-dd59392a3ec23dbe3a3fabadcf3bb847e9592ccd.tar.gz
linux-dd59392a3ec23dbe3a3fabadcf3bb847e9592ccd.zip
iio: ABI: Add quaternion axis modifier
This modifier applies to the IIO_ROT channel type, and indicates a data representation that specifies the {x, y, z} components of the normalized quaternion vector. Signed-off-by: Francesco Lavra <flavra@baylibre.com> Reviewed-by: David Lechner <dlechner@baylibre.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
-rw-r--r--Documentation/ABI/testing/sysfs-bus-iio15
-rw-r--r--drivers/iio/industrialio-core.c1
-rw-r--r--include/uapi/linux/iio/types.h1
-rw-r--r--tools/iio/iio_event_monitor.c1
4 files changed, 18 insertions, 0 deletions
diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/testing/sysfs-bus-iio
index 851cfe4f0a05..60dfeff8f2c9 100644
--- a/Documentation/ABI/testing/sysfs-bus-iio
+++ b/Documentation/ABI/testing/sysfs-bus-iio
@@ -1755,6 +1755,21 @@ Description:
measurement from channel Y. Units after application of scale and
offset are milliamps.
+What: /sys/bus/iio/devices/iio:deviceX/in_rot_quaternionaxis_raw
+KernelVersion: 7.1
+Contact: linux-iio@vger.kernel.org
+Description:
+ Raw value of {x, y, z} components of the quaternion vector. These
+ components represent the axis about which a rotation occurs, and are
+ subject to the following constraints:
+
+ - the quaternion vector is normalized, i.e. w^2 + x^2 + y^2 + z^2 = 1
+ - the rotation angle is within the [-pi, pi] range, i.e. the w
+ component (which represents the amount of rotation) is non-negative
+
+ These constraints allow the w value to be calculated from the other
+ components: w = sqrt(1 - (x^2 + y^2 + z^2)).
+
What: /sys/.../iio:deviceX/in_energy_en
What: /sys/.../iio:deviceX/in_distance_en
What: /sys/.../iio:deviceX/in_velocity_sqrt(x^2+y^2+z^2)_en
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index 22eefd048ba9..bd6f4f9f4533 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -157,6 +157,7 @@ static const char * const iio_modifier_names[] = {
[IIO_MOD_ACTIVE] = "active",
[IIO_MOD_REACTIVE] = "reactive",
[IIO_MOD_APPARENT] = "apparent",
+ [IIO_MOD_QUATERNION_AXIS] = "quaternionaxis",
};
/* relies on pairs of these shared then separate */
diff --git a/include/uapi/linux/iio/types.h b/include/uapi/linux/iio/types.h
index 6d269b844271..d7c2bb223651 100644
--- a/include/uapi/linux/iio/types.h
+++ b/include/uapi/linux/iio/types.h
@@ -113,6 +113,7 @@ enum iio_modifier {
IIO_MOD_ACTIVE,
IIO_MOD_REACTIVE,
IIO_MOD_APPARENT,
+ IIO_MOD_QUATERNION_AXIS,
};
enum iio_event_type {
diff --git a/tools/iio/iio_event_monitor.c b/tools/iio/iio_event_monitor.c
index 03ca33869ce8..df6c43d7738d 100644
--- a/tools/iio/iio_event_monitor.c
+++ b/tools/iio/iio_event_monitor.c
@@ -145,6 +145,7 @@ static const char * const iio_modifier_names[] = {
[IIO_MOD_ACTIVE] = "active",
[IIO_MOD_REACTIVE] = "reactive",
[IIO_MOD_APPARENT] = "apparent",
+ [IIO_MOD_QUATERNION_AXIS] = "quaternionaxis",
};
static bool event_is_known(struct iio_event_data *event)