Commit | Line | Data |
---|---|---|
9b7a0c40 MR |
1 | GPIO-based I2C Bus Mux |
2 | ||
3 | This binding describes an I2C bus multiplexer that uses GPIOs to | |
4 | route the I2C signals. | |
5 | ||
6 | +-----+ +-----+ | |
7 | | dev | | dev | | |
8 | +------------+ +-----+ +-----+ | |
9 | | SoC | | | | |
10 | | | /--------+--------+ | |
11 | | +------+ | +------+ child bus A, on GPIO value set to 0 | |
12 | | | I2C |-|--| Mux | | |
13 | | +------+ | +--+---+ child bus B, on GPIO value set to 1 | |
14 | | | | \----------+--------+--------+ | |
15 | | +------+ | | | | | | |
16 | | | GPIO |-|-----+ +-----+ +-----+ +-----+ | |
17 | | +------+ | | dev | | dev | | dev | | |
18 | +------------+ +-----+ +-----+ +-----+ | |
19 | ||
20 | Required properties: | |
21 | - compatible: i2c-mux-gpio | |
22 | - i2c-parent: The phandle of the I2C bus that this multiplexer's master-side | |
23 | port is connected to. | |
24 | - mux-gpios: list of gpios used to control the muxer | |
2e932849 SH |
25 | * Standard I2C mux properties. See i2c-mux.txt in this directory. |
26 | * I2C child bus nodes. See i2c-mux.txt in this directory. | |
9b7a0c40 MR |
27 | |
28 | Optional properties: | |
29 | - idle-state: value to set the muxer to when idle. When no value is | |
30 | given, it defaults to the last value used. | |
31 | ||
32 | For each i2c child node, an I2C child bus will be created. They will | |
33 | be numbered based on their order in the device tree. | |
34 | ||
35 | Whenever an access is made to a device on a child bus, the value set | |
2e932849 | 36 | in the relevant node's reg property will be output using the list of |
9b7a0c40 MR |
37 | GPIOs, the first in the list holding the least-significant value. |
38 | ||
39 | If an idle state is defined, using the idle-state (optional) property, | |
40 | whenever an access is not being made to a device on a child bus, the | |
41 | GPIOs will be set according to the idle value. | |
42 | ||
43 | If an idle state is not defined, the most recently used value will be | |
44 | left programmed into hardware whenever no access is being made to a | |
45 | device on a child bus. | |
46 | ||
47 | Example: | |
48 | i2cmux { | |
49 | compatible = "i2c-mux-gpio"; | |
50 | #address-cells = <1>; | |
51 | #size-cells = <0>; | |
52 | mux-gpios = <&gpio1 22 0 &gpio1 23 0>; | |
53 | i2c-parent = <&i2c1>; | |
54 | ||
55 | i2c@1 { | |
56 | reg = <1>; | |
57 | #address-cells = <1>; | |
58 | #size-cells = <0>; | |
59 | ||
60 | ssd1307: oled@3c { | |
61 | compatible = "solomon,ssd1307fb-i2c"; | |
62 | reg = <0x3c>; | |
63 | pwms = <&pwm 4 3000>; | |
64 | reset-gpios = <&gpio2 7 1>; | |
65 | reset-active-low; | |
66 | }; | |
67 | }; | |
68 | ||
69 | i2c@3 { | |
70 | reg = <3>; | |
71 | #address-cells = <1>; | |
72 | #size-cells = <0>; | |
73 | ||
74 | pca9555: pca9555@20 { | |
75 | compatible = "nxp,pca9555"; | |
76 | gpio-controller; | |
77 | #gpio-cells = <2>; | |
78 | reg = <0x20>; | |
79 | }; | |
80 | }; | |
81 | }; |