dt-bindings: i2c: add support for 'i2c-gate' subnode
authorPeter Rosin <peda@axentia.se>
Fri, 8 Jul 2016 10:13:49 +0000 (12:13 +0200)
committerPeter Rosin <peda@axentia.se>
Thu, 25 Aug 2016 20:11:01 +0000 (22:11 +0200)
Handle i2c gates similarly to how i2c arbitrators are handled.
This gets rid of a pointless 'reg' property for i2c gates.

I.e. this new and more compact style

        some-gate {
                i2c-gate {
                        #address-cells = <1>;
                        #size-cells = <0>;

                        some-i2c-device@50 {
                                reg = <0x50>;
                        };
                };
        };

instead of the old

        some-gate {
                #address-cells = <1>;
                #size-cells = <0>;

                i2c@0 {
                        reg = <0>;

                        #address-cells = <1>;
                        #size-cells = <0>;

                        some-i2c-device@50 {
                                reg = <0x50>;
                        };
                };
        };

Acked-by: Rob Herring <robh@kernel.org>
Reviewed-by: Wolfram Sang <wsa@the-dreams.de>
Signed-off-by: Peter Rosin <peda@axentia.se>
Documentation/devicetree/bindings/i2c/i2c-gate.txt [new file with mode: 0644]
MAINTAINERS

diff --git a/Documentation/devicetree/bindings/i2c/i2c-gate.txt b/Documentation/devicetree/bindings/i2c/i2c-gate.txt
new file mode 100644 (file)
index 0000000..1846d23
--- /dev/null
@@ -0,0 +1,41 @@
+An i2c gate is useful to e.g. reduce the digital noise for RF tuners connected
+to the i2c bus. Gates are similar to arbitrators in that you need to perform
+some kind of operation to access the i2c bus past the arbitrator/gate, but
+there are no competing masters to consider for gates and therefore there is
+no arbitration happening for gates.
+
+Common i2c gate properties.
+
+- i2c-gate child node
+
+Required properties for the i2c-gate child node:
+- #address-cells = <1>;
+- #size-cells = <0>;
+
+Optional properties for i2c-gate child node:
+- Child nodes conforming to i2c bus binding
+
+
+Example :
+
+       /*
+          An Invensense mpu9150 at address 0x68 featuring an on-chip Asahi
+          Kasei ak8975 compass behind a gate.
+        */
+
+       mpu9150@68 {
+               compatible = "invensense,mpu9150";
+               reg = <0x68>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <18 1>;
+
+               i2c-gate {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       ax8975@c {
+                               compatible = "ak,ak8975";
+                               reg = <0x0c>;
+                       };
+               };
+       };
index cde3e729df2cef06faaa63051b3d1b98fc778e1d..353bfe6bbaca5a25abca95330d3a07b5fa28e6a7 100644 (file)
@@ -5668,6 +5668,7 @@ F:        Documentation/i2c/i2c-topology
 F:     Documentation/i2c/muxes/
 F:     Documentation/devicetree/bindings/i2c/i2c-mux*
 F:     Documentation/devicetree/bindings/i2c/i2c-arb*
+F:     Documentation/devicetree/bindings/i2c/i2c-gate*
 F:     drivers/i2c/i2c-mux.c
 F:     drivers/i2c/muxes/
 F:     include/linux/i2c-mux.h