0001 MIPI DSI (Display Serial Interface) busses
0002 ==========================================
0003
0004 The MIPI Display Serial Interface specifies a serial bus and a protocol for
0005 communication between a host and up to four peripherals. This document will
0006 define the syntax used to represent a DSI bus in a device tree.
0007
0008 This document describes DSI bus-specific properties only or defines existing
0009 standard properties in the context of the DSI bus.
0010
0011 Each DSI host provides a DSI bus. The DSI host controller's node contains a
0012 set of properties that characterize the bus. Child nodes describe individual
0013 peripherals on that bus.
0014
0015 The following assumes that only a single peripheral is connected to a DSI
0016 host. Experience shows that this is true for the large majority of setups.
0017
0018 DSI host
0019 ========
0020
0021 In addition to the standard properties and those defined by the parent bus of
0022 a DSI host, the following properties apply to a node representing a DSI host.
0023
0024 Required properties:
0025 - #address-cells: The number of cells required to represent an address on the
0026 bus. DSI peripherals are addressed using a 2-bit virtual channel number, so
0027 a maximum of 4 devices can be addressed on a single bus. Hence the value of
0028 this property should be 1.
0029 - #size-cells: Should be 0. There are cases where it makes sense to use a
0030 different value here. See below.
0031
0032 Optional properties:
0033 - clock-master: boolean. Should be enabled if the host is being used in
0034 conjunction with another DSI host to drive the same peripheral. Hardware
0035 supporting such a configuration generally requires the data on both the busses
0036 to be driven by the same clock. Only the DSI host instance controlling this
0037 clock should contain this property.
0038
0039 DSI peripheral
0040 ==============
0041
0042 Peripherals with DSI as control bus, or no control bus
0043 ------------------------------------------------------
0044
0045 Peripherals with the DSI bus as the primary control bus, or peripherals with
0046 no control bus but use the DSI bus to transmit pixel data are represented
0047 as child nodes of the DSI host's node. Properties described here apply to all
0048 DSI peripherals, but individual bindings may want to define additional,
0049 device-specific properties.
0050
0051 Required properties:
0052 - reg: The virtual channel number of a DSI peripheral. Must be in the range
0053 from 0 to 3.
0054
0055 Some DSI peripherals respond to more than a single virtual channel. In that
0056 case two alternative representations can be chosen:
0057 - The reg property can take multiple entries, one for each virtual channel
0058 that the peripheral responds to.
0059 - If the virtual channels that a peripheral responds to are consecutive, the
0060 #size-cells can be set to 1. The first cell of each entry in the reg
0061 property is the number of the first virtual channel and the second cell is
0062 the number of consecutive virtual channels.
0063
0064 Peripherals with a different control bus
0065 ----------------------------------------
0066
0067 There are peripherals that have I2C/SPI (or some other non-DSI bus) as the
0068 primary control bus, but are also connected to a DSI bus (mostly for the data
0069 path). Connections between such peripherals and a DSI host can be represented
0070 using the graph bindings [1], [2].
0071
0072 Peripherals that support dual channel DSI
0073 -----------------------------------------
0074
0075 Peripherals with higher bandwidth requirements can be connected to 2 DSI
0076 busses. Each DSI bus/channel drives some portion of the pixel data (generally
0077 left/right half of each line of the display, or even/odd lines of the display).
0078 The graph bindings should be used to represent the multiple DSI busses that are
0079 connected to this peripheral. Each DSI host's output endpoint can be linked to
0080 an input endpoint of the DSI peripheral.
0081
0082 [1] Documentation/devicetree/bindings/graph.txt
0083 [2] Documentation/devicetree/bindings/media/video-interfaces.txt
0084
0085 Examples
0086 ========
0087 - (1), (2) and (3) are examples of a DSI host and peripheral on the DSI bus
0088 with different virtual channel configurations.
0089 - (4) is an example of a peripheral on a I2C control bus connected to a
0090 DSI host using of-graph bindings.
0091 - (5) is an example of 2 DSI hosts driving a dual-channel DSI peripheral,
0092 which uses I2C as its primary control bus.
0093
0094 1)
0095 dsi-host {
0096 ...
0097
0098 #address-cells = <1>;
0099 #size-cells = <0>;
0100
0101 /* peripheral responds to virtual channel 0 */
0102 peripheral@0 {
0103 compatible = "...";
0104 reg = <0>;
0105 };
0106
0107 ...
0108 };
0109
0110 2)
0111 dsi-host {
0112 ...
0113
0114 #address-cells = <1>;
0115 #size-cells = <0>;
0116
0117 /* peripheral responds to virtual channels 0 and 2 */
0118 peripheral@0 {
0119 compatible = "...";
0120 reg = <0, 2>;
0121 };
0122
0123 ...
0124 };
0125
0126 3)
0127 dsi-host {
0128 ...
0129
0130 #address-cells = <1>;
0131 #size-cells = <1>;
0132
0133 /* peripheral responds to virtual channels 1, 2 and 3 */
0134 peripheral@1 {
0135 compatible = "...";
0136 reg = <1 3>;
0137 };
0138
0139 ...
0140 };
0141
0142 4)
0143 i2c-host {
0144 ...
0145
0146 dsi-bridge@35 {
0147 compatible = "...";
0148 reg = <0x35>;
0149
0150 ports {
0151 ...
0152
0153 port {
0154 bridge_mipi_in: endpoint {
0155 remote-endpoint = <&host_mipi_out>;
0156 };
0157 };
0158 };
0159 };
0160 };
0161
0162 dsi-host {
0163 ...
0164
0165 ports {
0166 ...
0167
0168 port {
0169 host_mipi_out: endpoint {
0170 remote-endpoint = <&bridge_mipi_in>;
0171 };
0172 };
0173 };
0174 };
0175
0176 5)
0177 i2c-host {
0178 dsi-bridge@35 {
0179 compatible = "...";
0180 reg = <0x35>;
0181
0182 ports {
0183 #address-cells = <1>;
0184 #size-cells = <0>;
0185
0186 port@0 {
0187 reg = <0>;
0188 dsi0_in: endpoint {
0189 remote-endpoint = <&dsi0_out>;
0190 };
0191 };
0192
0193 port@1 {
0194 reg = <1>;
0195 dsi1_in: endpoint {
0196 remote-endpoint = <&dsi1_out>;
0197 };
0198 };
0199 };
0200 };
0201 };
0202
0203 dsi0-host {
0204 ...
0205
0206 /*
0207 * this DSI instance drives the clock for both the host
0208 * controllers
0209 */
0210 clock-master;
0211
0212 ports {
0213 ...
0214
0215 port {
0216 dsi0_out: endpoint {
0217 remote-endpoint = <&dsi0_in>;
0218 };
0219 };
0220 };
0221 };
0222
0223 dsi1-host {
0224 ...
0225
0226 ports {
0227 ...
0228
0229 port {
0230 dsi1_out: endpoint {
0231 remote-endpoint = <&dsi1_in>;
0232 };
0233 };
0234 };
0235 };