]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
iio: ABI: Add quaternion axis modifier
authorFrancesco Lavra <flavra@baylibre.com>
Tue, 24 Mar 2026 08:47:59 +0000 (09:47 +0100)
committerJonathan Cameron <jic23@kernel.org>
Mon, 27 Apr 2026 08:58:16 +0000 (09:58 +0100)
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>
Documentation/ABI/testing/sysfs-bus-iio
drivers/iio/industrialio-core.c
include/uapi/linux/iio/types.h
tools/iio/iio_event_monitor.c

index 851cfe4f0a05a74c6f68bebdf1835e8a57047541..60dfeff8f2c954091e78e9383c3acfffc3159d57 100644 (file)
@@ -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
index 22eefd048ba92e64affb84006ab3750a402b975f..bd6f4f9f453300eeb4d152bbf57e3f9afbcbc9cc 100644 (file)
@@ -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 */
index 6d269b8442713475c776ed705a56e0bc9c82c5cc..d7c2bb2236518a0d6735cd065fcba1ba5a02202c 100644 (file)
@@ -113,6 +113,7 @@ enum iio_modifier {
        IIO_MOD_ACTIVE,
        IIO_MOD_REACTIVE,
        IIO_MOD_APPARENT,
+       IIO_MOD_QUATERNION_AXIS,
 };
 
 enum iio_event_type {
index 03ca33869ce850c74ad6eb77b6173093ebbe0ac0..df6c43d7738d6b5aecfe738fb56553333ace11b7 100644 (file)
@@ -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)