Back to home page

OSCL-LXR

 
 

    


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         };