1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
Northwest Logic MIPI-DSI bridge bindings
The MIPI-DSI host controller drives the video signals from
display controller to video peripherals using DSI protocol.
This is an un-managed DSI bridge. In order to use this bridge, an encoder
or bridge must be implemented to manage the platform specific initializations.
Required properties:
- compatible: "nwl,mipi-dsi"
- reg: the register range of the MIPI-DSI controller
- interrupts: the interrupt number for this module
- clock, clock-names: phandles to the MIPI-DSI clocks
"phy_ref" - PHY_REF clock
"tx_esc" - TX_ESC clock (used in escape mode)
"rx_esc" - RX_ESC clock (used in escape mode)
- assigned-clocks: phandles to clocks that requires initial configuration
- assigned-clock-rates: rates of the clocks that requires initial configuration
The following clocks needs to have an initial configuration:
"tx_esc" and "rx_esc"
- port: input and output port nodes with endpoint definitions as
defined in Documentation/devicetree/bindings/graph.txt;
the input port should be connected to an encoder or a
bridge that manages this MIPI-DSI host and the output
port should be connected to a panel or a bridge input
port
- phys: phandle to the phy module representing the DPHY
inside MIPI-DSI IP block
- phy-names: should be "dphy"
Optional properties:
- power-domains phandle to the power domain
- interrupt-parent phandle to the interrupt parent, if there is one;
usually, on i.MX8qm and i.MX8qxp there is an irq
steer handling the MIPI DSI interrupts
- assigned-clock-parents phandles to parent clocks that needs to be assigned as
parents to clocks defined in assigned-clocks
* The clock assignments must follow the rules defined in:
Documentation/devicetree/bindings/clock/clock-bindings.txt
Example:
mipi_dsi_bridge1: mipi_dsi_bridge@56228000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "nwl,mipi-dsi";
reg = <0x0 0x56228000 0x0 0x300>;
interrupts = <16 IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&irqsteer_dsi0>;
clocks =
<&clk IMX8QM_CLK_DUMMY>,
<&clk IMX8QM_MIPI0_DSI_TX_ESC_CLK>,
<&clk IMX8QM_MIPI0_DSI_RX_ESC_CLK>;
clock-names = "phy_ref", "tx_esc", "rx_esc";
assigned-clocks = <&clk IMX8QM_MIPI0_DSI_TX_ESC_DIV>,
<&clk IMX8QM_MIPI0_DSI_RX_ESC_DIV>;
assigned-clock-rates = <18000000>, <72000000>;
power-domains = <&pd_mipi0>;
phys = <&mipi_dsi_phy1>;
phy-names = "dphy";
port@0 {
mipi_dsi_bridge1_in: endpoint {
remote-endpoint = <&mipi_dsi1_out>;
};
};
port@1 {
mipi_dsi0_out: endpoint {
remote-endpoint = <&adv7535_0_in>;
};
};
};
Another example, for a platform with a complex clock tree, like 8QXP:
mipi_dsi_bridge1: mipi_dsi_bridge@56228000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "nwl,mipi-dsi";
reg = <0x0 0x56228000 0x0 0x300>;
interrupts = <16 IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&irqsteer_mipi_lvds0>;
clocks =
<&clk IMX8QXP_CLK_DUMMY>,
<&clk IMX8QXP_MIPI0_DSI_TX_ESC_CLK>,
<&clk IMX8QXP_MIPI0_DSI_RX_ESC_CLK>;
clock-names = "phy_ref", "tx_esc", "rx_esc";
assigned-clocks =
<&clk IMX8QXP_MIPI0_DSI_TX_ESC_SEL>,
<&clk IMX8QXP_MIPI0_DSI_RX_ESC_SEL>,
<&clk IMX8QXP_MIPI0_DSI_TX_ESC_CLK>,
<&clk IMX8QXP_MIPI0_DSI_RX_ESC_CLK>;
assigned-clock-rates = <0>, <0>, <18000000>, <72000000>;
assigned-clock-parents =
<&clk IMX8QXP_MIPI0_DSI_PLL_DIV2_CLK>,
<&clk IMX8QXP_MIPI0_DSI_PLL_DIV2_CLK>;
power-domains = <&pd_mipi_dsi0>;
phys = <&mipi_dsi_phy1>;
phy-names = "dphy";
port@0 {
mipi_dsi_bridge1_in: endpoint {
remote-endpoint = <&mipi_dsi1_out>;
};
};
port@1 {
mipi_dsi0_out: endpoint {
remote-endpoint = <&adv7535_0_in>;
};
};
};
* Here, we set the clock parents for the *_SEL clocks (which are the sources of
the *_CLK clocks) and also the clock rate of the *_CLK clocks.
|