diff options
author | Stephen Warren <swarren@nvidia.com> | 2012-05-18 11:29:34 -0400 |
---|---|---|
committer | Wolfram Sang <w.sang@pengutronix.de> | 2012-06-04 10:49:43 -0400 |
commit | ae58d1e406986f31d1e88b32f5ac601506c196d8 (patch) | |
tree | 85f8973189b8e7bab81bdc235eeb1fb48176bb9d /Documentation/devicetree | |
parent | f8f5701bdaf9134b1f90e5044a82c66324d2073f (diff) |
i2c: Add generic I2C multiplexer using pinctrl API
This is useful for SoCs whose I2C module's signals can be routed to
different sets of pins at run-time, using the pinctrl API.
+-----+ +-----+
| dev | | dev |
+------------------------+ +-----+ +-----+
| SoC | | |
| /----|------+--------+
| +---+ +------+ | child bus A, on first set of pins
| |I2C|---|Pinmux| |
| +---+ +------+ | child bus B, on second set of pins
| \----|------+--------+--------+
| | | | |
+------------------------+ +-----+ +-----+ +-----+
| dev | | dev | | dev |
+-----+ +-----+ +-----+
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Rob Herring <rob.herring@calxeda.com>
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Diffstat (limited to 'Documentation/devicetree')
-rw-r--r-- | Documentation/devicetree/bindings/i2c/i2c-mux-pinctrl.txt | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/Documentation/devicetree/bindings/i2c/i2c-mux-pinctrl.txt b/Documentation/devicetree/bindings/i2c/i2c-mux-pinctrl.txt new file mode 100644 index 000000000000..ae8af1694e95 --- /dev/null +++ b/Documentation/devicetree/bindings/i2c/i2c-mux-pinctrl.txt | |||
@@ -0,0 +1,93 @@ | |||
1 | Pinctrl-based I2C Bus Mux | ||
2 | |||
3 | This binding describes an I2C bus multiplexer that uses pin multiplexing to | ||
4 | route the I2C signals, and represents the pin multiplexing configuration | ||
5 | using the pinctrl device tree bindings. | ||
6 | |||
7 | +-----+ +-----+ | ||
8 | | dev | | dev | | ||
9 | +------------------------+ +-----+ +-----+ | ||
10 | | SoC | | | | ||
11 | | /----|------+--------+ | ||
12 | | +---+ +------+ | child bus A, on first set of pins | ||
13 | | |I2C|---|Pinmux| | | ||
14 | | +---+ +------+ | child bus B, on second set of pins | ||
15 | | \----|------+--------+--------+ | ||
16 | | | | | | | ||
17 | +------------------------+ +-----+ +-----+ +-----+ | ||
18 | | dev | | dev | | dev | | ||
19 | +-----+ +-----+ +-----+ | ||
20 | |||
21 | Required properties: | ||
22 | - compatible: i2c-mux-pinctrl | ||
23 | - i2c-parent: The phandle of the I2C bus that this multiplexer's master-side | ||
24 | port is connected to. | ||
25 | |||
26 | Also required are: | ||
27 | |||
28 | * Standard pinctrl properties that specify the pin mux state for each child | ||
29 | bus. See ../pinctrl/pinctrl-bindings.txt. | ||
30 | |||
31 | * Standard I2C mux properties. See mux.txt in this directory. | ||
32 | |||
33 | * I2C child bus nodes. See mux.txt in this directory. | ||
34 | |||
35 | For each named state defined in the pinctrl-names property, an I2C child bus | ||
36 | will be created. I2C child bus numbers are assigned based on the index into | ||
37 | the pinctrl-names property. | ||
38 | |||
39 | The only exception is that no bus will be created for a state named "idle". If | ||
40 | such a state is defined, it must be the last entry in pinctrl-names. For | ||
41 | example: | ||
42 | |||
43 | pinctrl-names = "ddc", "pta", "idle" -> ddc = bus 0, pta = bus 1 | ||
44 | pinctrl-names = "ddc", "idle", "pta" -> Invalid ("idle" not last) | ||
45 | pinctrl-names = "idle", "ddc", "pta" -> Invalid ("idle" not last) | ||
46 | |||
47 | Whenever an access is made to a device on a child bus, the relevant pinctrl | ||
48 | state will be programmed into hardware. | ||
49 | |||
50 | If an idle state is defined, whenever an access is not being made to a device | ||
51 | on a child bus, the idle pinctrl state will be programmed into hardware. | ||
52 | |||
53 | If an idle state is not defined, the most recently used pinctrl state will be | ||
54 | left programmed into hardware whenever no access is being made of a device on | ||
55 | a child bus. | ||
56 | |||
57 | Example: | ||
58 | |||
59 | i2cmux { | ||
60 | compatible = "i2c-mux-pinctrl"; | ||
61 | #address-cells = <1>; | ||
62 | #size-cells = <0>; | ||
63 | |||
64 | i2c-parent = <&i2c1>; | ||
65 | |||
66 | pinctrl-names = "ddc", "pta", "idle"; | ||
67 | pinctrl-0 = <&state_i2cmux_ddc>; | ||
68 | pinctrl-1 = <&state_i2cmux_pta>; | ||
69 | pinctrl-2 = <&state_i2cmux_idle>; | ||
70 | |||
71 | i2c@0 { | ||
72 | reg = <0>; | ||
73 | #address-cells = <1>; | ||
74 | #size-cells = <0>; | ||
75 | |||
76 | eeprom { | ||
77 | compatible = "eeprom"; | ||
78 | reg = <0x50>; | ||
79 | }; | ||
80 | }; | ||
81 | |||
82 | i2c@1 { | ||
83 | reg = <1>; | ||
84 | #address-cells = <1>; | ||
85 | #size-cells = <0>; | ||
86 | |||
87 | eeprom { | ||
88 | compatible = "eeprom"; | ||
89 | reg = <0x50>; | ||
90 | }; | ||
91 | }; | ||
92 | }; | ||
93 | |||