| .. | .. |
|---|
| 16 | 16 | host. Experience shows that this is true for the large majority of setups. |
|---|
| 17 | 17 | |
|---|
| 18 | 18 | DSI host |
|---|
| 19 | | --------- |
|---|
| 19 | +======== |
|---|
| 20 | 20 | |
|---|
| 21 | 21 | In addition to the standard properties and those defined by the parent bus of |
|---|
| 22 | 22 | a DSI host, the following properties apply to a node representing a DSI host. |
|---|
| .. | .. |
|---|
| 29 | 29 | - #size-cells: Should be 0. There are cases where it makes sense to use a |
|---|
| 30 | 30 | different value here. See below. |
|---|
| 31 | 31 | |
|---|
| 32 | | -DSI peripheral |
|---|
| 33 | | --------------- |
|---|
| 32 | +Optional properties: |
|---|
| 33 | +- clock-master: boolean. Should be enabled if the host is being used in |
|---|
| 34 | + conjunction with another DSI host to drive the same peripheral. Hardware |
|---|
| 35 | + supporting such a configuration generally requires the data on both the busses |
|---|
| 36 | + to be driven by the same clock. Only the DSI host instance controlling this |
|---|
| 37 | + clock should contain this property. |
|---|
| 34 | 38 | |
|---|
| 35 | | -Peripherals are represented as child nodes of the DSI host's node. Properties |
|---|
| 36 | | -described here apply to all DSI peripherals, but individual bindings may want |
|---|
| 37 | | -to define additional, device-specific properties. |
|---|
| 39 | +DSI peripheral |
|---|
| 40 | +============== |
|---|
| 41 | + |
|---|
| 42 | +Peripherals with DSI as control bus, or no control bus |
|---|
| 43 | +------------------------------------------------------ |
|---|
| 44 | + |
|---|
| 45 | +Peripherals with the DSI bus as the primary control bus, or peripherals with |
|---|
| 46 | +no control bus but use the DSI bus to transmit pixel data are represented |
|---|
| 47 | +as child nodes of the DSI host's node. Properties described here apply to all |
|---|
| 48 | +DSI peripherals, but individual bindings may want to define additional, |
|---|
| 49 | +device-specific properties. |
|---|
| 38 | 50 | |
|---|
| 39 | 51 | Required properties: |
|---|
| 40 | 52 | - reg: The virtual channel number of a DSI peripheral. Must be in the range |
|---|
| .. | .. |
|---|
| 49 | 61 | property is the number of the first virtual channel and the second cell is |
|---|
| 50 | 62 | the number of consecutive virtual channels. |
|---|
| 51 | 63 | |
|---|
| 52 | | -Example |
|---|
| 53 | | -------- |
|---|
| 64 | +Peripherals with a different control bus |
|---|
| 65 | +---------------------------------------- |
|---|
| 54 | 66 | |
|---|
| 67 | +There are peripherals that have I2C/SPI (or some other non-DSI bus) as the |
|---|
| 68 | +primary control bus, but are also connected to a DSI bus (mostly for the data |
|---|
| 69 | +path). Connections between such peripherals and a DSI host can be represented |
|---|
| 70 | +using the graph bindings [1], [2]. |
|---|
| 71 | + |
|---|
| 72 | +Peripherals that support dual channel DSI |
|---|
| 73 | +----------------------------------------- |
|---|
| 74 | + |
|---|
| 75 | +Peripherals with higher bandwidth requirements can be connected to 2 DSI |
|---|
| 76 | +busses. Each DSI bus/channel drives some portion of the pixel data (generally |
|---|
| 77 | +left/right half of each line of the display, or even/odd lines of the display). |
|---|
| 78 | +The graph bindings should be used to represent the multiple DSI busses that are |
|---|
| 79 | +connected to this peripheral. Each DSI host's output endpoint can be linked to |
|---|
| 80 | +an input endpoint of the DSI peripheral. |
|---|
| 81 | + |
|---|
| 82 | +[1] Documentation/devicetree/bindings/graph.txt |
|---|
| 83 | +[2] Documentation/devicetree/bindings/media/video-interfaces.txt |
|---|
| 84 | + |
|---|
| 85 | +Examples |
|---|
| 86 | +======== |
|---|
| 87 | +- (1), (2) and (3) are examples of a DSI host and peripheral on the DSI bus |
|---|
| 88 | + with different virtual channel configurations. |
|---|
| 89 | +- (4) is an example of a peripheral on a I2C control bus connected to a |
|---|
| 90 | + DSI host using of-graph bindings. |
|---|
| 91 | +- (5) is an example of 2 DSI hosts driving a dual-channel DSI peripheral, |
|---|
| 92 | + which uses I2C as its primary control bus. |
|---|
| 93 | + |
|---|
| 94 | +1) |
|---|
| 55 | 95 | dsi-host { |
|---|
| 56 | 96 | ... |
|---|
| 57 | 97 | |
|---|
| .. | .. |
|---|
| 67 | 107 | ... |
|---|
| 68 | 108 | }; |
|---|
| 69 | 109 | |
|---|
| 110 | +2) |
|---|
| 70 | 111 | dsi-host { |
|---|
| 71 | 112 | ... |
|---|
| 72 | 113 | |
|---|
| .. | .. |
|---|
| 82 | 123 | ... |
|---|
| 83 | 124 | }; |
|---|
| 84 | 125 | |
|---|
| 126 | +3) |
|---|
| 85 | 127 | dsi-host { |
|---|
| 86 | 128 | ... |
|---|
| 87 | 129 | |
|---|
| .. | .. |
|---|
| 96 | 138 | |
|---|
| 97 | 139 | ... |
|---|
| 98 | 140 | }; |
|---|
| 141 | + |
|---|
| 142 | +4) |
|---|
| 143 | + i2c-host { |
|---|
| 144 | + ... |
|---|
| 145 | + |
|---|
| 146 | + dsi-bridge@35 { |
|---|
| 147 | + compatible = "..."; |
|---|
| 148 | + reg = <0x35>; |
|---|
| 149 | + |
|---|
| 150 | + ports { |
|---|
| 151 | + ... |
|---|
| 152 | + |
|---|
| 153 | + port { |
|---|
| 154 | + bridge_mipi_in: endpoint { |
|---|
| 155 | + remote-endpoint = <&host_mipi_out>; |
|---|
| 156 | + }; |
|---|
| 157 | + }; |
|---|
| 158 | + }; |
|---|
| 159 | + }; |
|---|
| 160 | + }; |
|---|
| 161 | + |
|---|
| 162 | + dsi-host { |
|---|
| 163 | + ... |
|---|
| 164 | + |
|---|
| 165 | + ports { |
|---|
| 166 | + ... |
|---|
| 167 | + |
|---|
| 168 | + port { |
|---|
| 169 | + host_mipi_out: endpoint { |
|---|
| 170 | + remote-endpoint = <&bridge_mipi_in>; |
|---|
| 171 | + }; |
|---|
| 172 | + }; |
|---|
| 173 | + }; |
|---|
| 174 | + }; |
|---|
| 175 | + |
|---|
| 176 | +5) |
|---|
| 177 | + i2c-host { |
|---|
| 178 | + dsi-bridge@35 { |
|---|
| 179 | + compatible = "..."; |
|---|
| 180 | + reg = <0x35>; |
|---|
| 181 | + |
|---|
| 182 | + ports { |
|---|
| 183 | + #address-cells = <1>; |
|---|
| 184 | + #size-cells = <0>; |
|---|
| 185 | + |
|---|
| 186 | + port@0 { |
|---|
| 187 | + reg = <0>; |
|---|
| 188 | + dsi0_in: endpoint { |
|---|
| 189 | + remote-endpoint = <&dsi0_out>; |
|---|
| 190 | + }; |
|---|
| 191 | + }; |
|---|
| 192 | + |
|---|
| 193 | + port@1 { |
|---|
| 194 | + reg = <1>; |
|---|
| 195 | + dsi1_in: endpoint { |
|---|
| 196 | + remote-endpoint = <&dsi1_out>; |
|---|
| 197 | + }; |
|---|
| 198 | + }; |
|---|
| 199 | + }; |
|---|
| 200 | + }; |
|---|
| 201 | + }; |
|---|
| 202 | + |
|---|
| 203 | + dsi0-host { |
|---|
| 204 | + ... |
|---|
| 205 | + |
|---|
| 206 | + /* |
|---|
| 207 | + * this DSI instance drives the clock for both the host |
|---|
| 208 | + * controllers |
|---|
| 209 | + */ |
|---|
| 210 | + clock-master; |
|---|
| 211 | + |
|---|
| 212 | + ports { |
|---|
| 213 | + ... |
|---|
| 214 | + |
|---|
| 215 | + port { |
|---|
| 216 | + dsi0_out: endpoint { |
|---|
| 217 | + remote-endpoint = <&dsi0_in>; |
|---|
| 218 | + }; |
|---|
| 219 | + }; |
|---|
| 220 | + }; |
|---|
| 221 | + }; |
|---|
| 222 | + |
|---|
| 223 | + dsi1-host { |
|---|
| 224 | + ... |
|---|
| 225 | + |
|---|
| 226 | + ports { |
|---|
| 227 | + ... |
|---|
| 228 | + |
|---|
| 229 | + port { |
|---|
| 230 | + dsi1_out: endpoint { |
|---|
| 231 | + remote-endpoint = <&dsi1_in>; |
|---|
| 232 | + }; |
|---|
| 233 | + }; |
|---|
| 234 | + }; |
|---|
| 235 | + }; |
|---|