From: Remi Buisson <remi.buisson@tdk.com>
Document the ICM-45600 devices devicetree bindings.
Signed-off-by: Remi Buisson <remi.buisson@tdk.com>
---
.../bindings/iio/imu/invensense,icm45600.yaml | 138 +++++++++++++++++++++
1 file changed, 138 insertions(+)
diff --git a/Documentation/devicetree/bindings/iio/imu/invensense,icm45600.yaml b/Documentation/devicetree/bindings/iio/imu/invensense,icm45600.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a651878791ffae8d1c8d6c8ff1e4becfc56af79f
--- /dev/null
+++ b/Documentation/devicetree/bindings/iio/imu/invensense,icm45600.yaml
@@ -0,0 +1,138 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/iio/imu/invensense,icm45600.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: InvenSense ICM-45600 Inertial Measurement Unit
+
+maintainers:
+ - Remi Buisson <remi.buisson@tdk.com>
+
+description: |
+ 6-axis MotionTracking device that combines a 3-axis gyroscope and a 3-axis
+ accelerometer.
+
+ It has a configurable host interface that supports I3C, I2C and SPI serial
+ communication, features up to 8kB FIFO and 2 programmable interrupts with
+ ultra-low-power wake-on-motion support to minimize system power consumption.
+
+ Other industry-leading features include InvenSense on-chip APEX Motion
+ Processing engine for gesture recognition, activity classification, and
+ pedometer, along with programmable digital filters, and an embedded
+ temperature sensor.
+
+ https://invensense.tdk.com/wp-content/uploads/documentation/DS-000576_ICM-45605.pdf
+
+properties:
+ compatible:
+ enum:
+ - invensense,icm45605
+ - invensense,icm45606
+ - invensense,icm45608
+ - invensense,icm45634
+ - invensense,icm45686
+ - invensense,icm45687
+ - invensense,icm45688p
+ - invensense,icm45689
+
+ reg:
+ maxItems: 1
+
+ interrupts:
+ minItems: 1
+ maxItems: 2
+
+ interrupt-names:
+ minItems: 1
+ maxItems: 2
+ items:
+ enum:
+ - INT1
+ - INT2
+ description: Choose chip interrupt pin to be used as interrupt input.
+
+ drive-open-drain:
+ type: boolean
+
+ vdd-supply:
+ description: Regulator that provides power to the sensor
+
+ vddio-supply:
+ description: Regulator that provides power to the bus
+
+ mount-matrix:
+ description: an optional 3x3 mounting rotation matrix
+
+required:
+ - compatible
+ - reg
+ - interrupts
+ - interrupt-names
+
+allOf:
+ - $ref: /schemas/spi/spi-peripheral-props.yaml#
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+ #include <dt-bindings/interrupt-controller/irq.h>
+ i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ icm45605@68 {
+ compatible = "invensense,icm45605";
+ reg = <0x68>;
+ interrupt-parent = <&gpio2>;
+ interrupt-names = "INT1";
+ interrupts = <7 IRQ_TYPE_EDGE_RISING>;
+ vdd-supply = <&vdd>;
+ vddio-supply = <&vddio>;
+ mount-matrix = "0", "-1", "0",
+ "1", "0", "0",
+ "0", "0", "1";
+ };
+ };
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+ #include <dt-bindings/interrupt-controller/irq.h>
+ spi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ icm45605@0 {
+ compatible = "invensense,icm45605";
+ reg = <0>;
+ spi-max-frequency = <24000000>;
+ interrupt-parent = <&gpio1>;
+ interrupt-names = "INT1";
+ interrupts = <6 IRQ_TYPE_EDGE_RISING>;
+ vdd-supply = <&vdd>;
+ vddio-supply = <&vddio>;
+ mount-matrix = "0", "-1", "0",
+ "1", "0", "0",
+ "0", "0", "1";
+ };
+ };
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+ #include <dt-bindings/interrupt-controller/irq.h>
+ i3c {
+ #address-cells = <3>;
+ #size-cells = <0>;
+
+ icm45606@68,46A00000084 {
+ reg = <0x68 0x46A 0x84>;
+ interrupt-parent = <&gpio1>;
+ interrupt-names = "INT1";
+ interrupts = <5 IRQ_TYPE_EDGE_RISING>;
+ vdd-supply = <&vdd>;
+ vddio-supply = <&vddio>;
+ mount-matrix = "0", "-1", "0",
+ "1", "0", "0",
+ "0", "0", "1";
+ };
+ };
--
2.34.1
On 10/07/2025 10:57, Remi Buisson via B4 Relay wrote: > + > + reg: > + maxItems: 1 > + > + interrupts: > + minItems: 1 > + maxItems: 2 > + > + interrupt-names: > + minItems: 1 > + maxItems: 2 > + items: > + enum: > + - INT1 > + - INT2 This can be simpler minItems: 1 items: - enum: [ int1, int2 ] - const: int 2 and use lowercase anyway. > + description: Choose chip interrupt pin to be used as interrupt input. > + > + drive-open-drain: > + type: boolean > + > + vdd-supply: > + description: Regulator that provides power to the sensor > + > + vddio-supply: > + description: Regulator that provides power to the bus > + > + mount-matrix: > + description: an optional 3x3 mounting rotation matrix > + > +required: > + - compatible > + - reg > + - interrupts > + - interrupt-names Missing supplies > + > +allOf: > + - $ref: /schemas/spi/spi-peripheral-props.yaml# > + > +unevaluatedProperties: false > + > +examples: > + - | > + #include <dt-bindings/gpio/gpio.h> > + #include <dt-bindings/interrupt-controller/irq.h> > + i2c { > + #address-cells = <1>; > + #size-cells = <0>; > + > + icm45605@68 { It does not look like you tested the DTS against bindings. Please run `make dtbs_check W=1` (see Documentation/devicetree/bindings/writing-schema.rst or https://www.linaro.org/blog/tips-and-tricks-for-validating-devicetree-sources-with-the-devicetree-schema/ for instructions). Maybe you need to update your dtschema and yamllint. Don't rely on distro packages for dtschema and be sure you are using the latest released dtschema. (see how other bindings or DTS call this type of device) > + compatible = "invensense,icm45605"; > + reg = <0x68>; > + interrupt-parent = <&gpio2>; > + interrupt-names = "INT1"; > + interrupts = <7 IRQ_TYPE_EDGE_RISING>; > + vdd-supply = <&vdd>; > + vddio-supply = <&vddio>; > + mount-matrix = "0", "-1", "0", > + "1", "0", "0", > + "0", "0", "1"; > + }; Best regards, Krzysztof
On Thu, Jul 10, 2025 at 08:57:56AM +0000, Remi Buisson wrote: > Document the ICM-45600 devices devicetree bindings. > > Signed-off-by: Remi Buisson <remi.buisson@tdk.com> > --- > .../bindings/iio/imu/invensense,icm45600.yaml | 138 +++++++++++++++++++++ > 1 file changed, 138 insertions(+) > > diff --git a/Documentation/devicetree/bindings/iio/imu/invensense,icm45600.yaml b/Documentation/devicetree/bindings/iio/imu/invensense,icm45600.yaml > new file mode 100644 > index 0000000000000000000000000000000000000000..a651878791ffae8d1c8d6c8ff1e4becfc56af79f > --- /dev/null > +++ b/Documentation/devicetree/bindings/iio/imu/invensense,icm45600.yaml > @@ -0,0 +1,138 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/iio/imu/invensense,icm45600.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: InvenSense ICM-45600 Inertial Measurement Unit > + > +maintainers: > + - Remi Buisson <remi.buisson@tdk.com> > + > +description: | > + 6-axis MotionTracking device that combines a 3-axis gyroscope and a 3-axis > + accelerometer. > + > + It has a configurable host interface that supports I3C, I2C and SPI serial > + communication, features up to 8kB FIFO and 2 programmable interrupts with > + ultra-low-power wake-on-motion support to minimize system power consumption. > + > + Other industry-leading features include InvenSense on-chip APEX Motion > + Processing engine for gesture recognition, activity classification, and > + pedometer, along with programmable digital filters, and an embedded > + temperature sensor. > + > + https://invensense.tdk.com/wp-content/uploads/documentation/DS-000576_ICM-45605.pdf > + > +properties: > + compatible: > + enum: > + - invensense,icm45605 > + - invensense,icm45606 > + - invensense,icm45608 > + - invensense,icm45634 > + - invensense,icm45686 > + - invensense,icm45687 > + - invensense,icm45688p > + - invensense,icm45689 > + > + reg: > + maxItems: 1 > + > + interrupts: > + minItems: 1 > + maxItems: 2 > + > + interrupt-names: > + minItems: 1 > + maxItems: 2 > + items: > + enum: > + - INT1 > + - INT2 > + description: Choose chip interrupt pin to be used as interrupt input. > + > + drive-open-drain: > + type: boolean > + > + vdd-supply: > + description: Regulator that provides power to the sensor > + > + vddio-supply: > + description: Regulator that provides power to the bus > + > + mount-matrix: > + description: an optional 3x3 mounting rotation matrix > + > +required: > + - compatible > + - reg > + - interrupts > + - interrupt-names > + > +allOf: > + - $ref: /schemas/spi/spi-peripheral-props.yaml# > + > +unevaluatedProperties: false > + > +examples: > + - | > + #include <dt-bindings/gpio/gpio.h> > + #include <dt-bindings/interrupt-controller/irq.h> > + i2c { > + #address-cells = <1>; > + #size-cells = <0>; > + > + icm45605@68 { > + compatible = "invensense,icm45605"; > + reg = <0x68>; > + interrupt-parent = <&gpio2>; > + interrupt-names = "INT1"; > + interrupts = <7 IRQ_TYPE_EDGE_RISING>; > + vdd-supply = <&vdd>; > + vddio-supply = <&vddio>; > + mount-matrix = "0", "-1", "0", > + "1", "0", "0", > + "0", "0", "1"; > + }; > + }; > + - | > + #include <dt-bindings/gpio/gpio.h> > + #include <dt-bindings/interrupt-controller/irq.h> > + spi { > + #address-cells = <1>; > + #size-cells = <0>; > + > + icm45605@0 { > + compatible = "invensense,icm45605"; > + reg = <0>; > + spi-max-frequency = <24000000>; > + interrupt-parent = <&gpio1>; > + interrupt-names = "INT1"; > + interrupts = <6 IRQ_TYPE_EDGE_RISING>; > + vdd-supply = <&vdd>; > + vddio-supply = <&vddio>; > + mount-matrix = "0", "-1", "0", > + "1", "0", "0", > + "0", "0", "1"; > + }; > + }; > + - | > + #include <dt-bindings/gpio/gpio.h> > + #include <dt-bindings/interrupt-controller/irq.h> > + i3c { > + #address-cells = <3>; > + #size-cells = <0>; > + > + icm45606@68,46A00000084 { > + reg = <0x68 0x46A 0x84>; > + interrupt-parent = <&gpio1>; > + interrupt-names = "INT1"; > + interrupts = <5 IRQ_TYPE_EDGE_RISING>; > + vdd-supply = <&vdd>; > + vddio-supply = <&vddio>; > + mount-matrix = "0", "-1", "0", > + "1", "0", "0", > + "0", "0", "1"; > + }; > + }; I don't think we need 3 examples just for different buses being the only diff. Rob
© 2016 - 2025 Red Hat, Inc.