blob: 5d4242bae3f01fa2557daf4a290555a5c82e1e38 [file] [log] [blame]
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.