~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/devicetree/bindings/i2c/i2c-arb-gpio-challenge.yaml

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 # SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
  2 %YAML 1.2
  3 ---
  4 $id: http://devicetree.org/schemas/i2c/i2c-arb-gpio-challenge.yaml#
  5 $schema: http://devicetree.org/meta-schemas/core.yaml#
  6 
  7 title: GPIO-based I2C Arbitration Using a Challenge & Response Mechanism
  8 
  9 maintainers:
 10   - Doug Anderson <dianders@chromium.org>
 11   - Peter Rosin <peda@axentia.se>
 12 
 13 description: |
 14   This uses GPIO lines and a challenge & response mechanism to arbitrate who is
 15   the master of an I2C bus in a multimaster situation.
 16 
 17   In many cases using GPIOs to arbitrate is not needed and a design can use the
 18   standard I2C multi-master rules.  Using GPIOs is generally useful in the case
 19   where there is a device on the bus that has errata and/or bugs that makes
 20   standard multimaster mode not feasible.
 21 
 22   Note that this scheme works well enough but has some downsides:
 23    * It is nonstandard (not using standard I2C multimaster)
 24    * Having two masters on a bus in general makes it relatively hard to debug
 25      problems (hard to tell if i2c issues were caused by one master, another,
 26      or some device on the bus).
 27 
 28   Algorithm:
 29   All masters on the bus have a 'bus claim' line which is an output that the
 30   others can see. These are all active low with pull-ups enabled.  We'll
 31   describe these lines as:
 32    * OUR_CLAIM: output from us signaling to other hosts that we want the bus
 33    * THEIR_CLAIMS: output from others signaling that they want the bus
 34 
 35   The basic algorithm is to assert your line when you want the bus, then make
 36   sure that the other side doesn't want it also.  A detailed explanation is
 37   best done with an example.
 38 
 39   Let's say we want to claim the bus.  We:
 40   1. Assert OUR_CLAIM.
 41   2. Waits a little bit for the other sides to notice (slew time, say 10
 42      microseconds).
 43   3. Check THEIR_CLAIMS.  If none are asserted then the we have the bus and we
 44      are done.
 45   4. Otherwise, wait for a few milliseconds and see if THEIR_CLAIMS are released.
 46   5. If not, back off, release the claim and wait for a few more milliseconds.
 47   6. Go back to 1 (until retry time has expired).
 48 
 49 properties:
 50   compatible:
 51     const: i2c-arb-gpio-challenge
 52 
 53   i2c-parent:
 54     $ref: /schemas/types.yaml#/definitions/phandle
 55     description:
 56       The I2C bus that this multiplexer's master-side port is connected to.
 57 
 58   our-claim-gpios:
 59     maxItems: 1
 60     description:
 61       The GPIO that we use to claim the bus.
 62 
 63   slew-delay-us:
 64     default: 10
 65     description:
 66       Time to wait for a GPIO to go high.
 67 
 68   their-claim-gpios:
 69     minItems: 1
 70     maxItems: 8
 71     description:
 72       The GPIOs that the other sides use to claim the bus.  Note that some
 73       implementations may only support a single other master.
 74 
 75   wait-free-us:
 76     default: 50000
 77     description:
 78       We'll give up after this many microseconds.
 79 
 80   wait-retry-us:
 81     default: 3000
 82     description:
 83       We'll attempt another claim after this many microseconds.
 84 
 85   i2c-arb:
 86     type: object
 87     $ref: /schemas/i2c/i2c-controller.yaml
 88     unevaluatedProperties: false
 89     description:
 90       I2C arbitration bus node.
 91 
 92 required:
 93   - compatible
 94   - i2c-arb
 95   - our-claim-gpios
 96   - their-claim-gpios
 97 
 98 additionalProperties: false
 99 
100 examples:
101   - |
102     #include <dt-bindings/gpio/gpio.h>
103     #include <dt-bindings/interrupt-controller/irq.h>
104 
105     i2c-arbitrator {
106         compatible = "i2c-arb-gpio-challenge";
107         i2c-parent = <&i2c_4>;
108 
109         our-claim-gpios = <&gpf0 3 GPIO_ACTIVE_LOW>;
110         their-claim-gpios = <&gpe0 4 GPIO_ACTIVE_LOW>;
111         slew-delay-us = <10>;
112         wait-retry-us = <3000>;
113         wait-free-us = <50000>;
114 
115         i2c-arb {
116             #address-cells = <1>;
117             #size-cells = <0>;
118 
119             sbs-battery@b {
120                 compatible = "sbs,sbs-battery";
121                 reg = <0xb>;
122                 sbs,poll-retry-count = <1>;
123             };
124 
125             embedded-controller@1e {
126                 compatible = "google,cros-ec-i2c";
127                 reg = <0x1e>;
128                 interrupts = <6 IRQ_TYPE_LEVEL_HIGH>;
129                 interrupt-parent = <&gpx1>;
130                 pinctrl-names = "default";
131                 pinctrl-0 = <&ec_irq>;
132                 wakeup-source;
133             };
134         };
135     };

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php