On Thu, 24 Dec 2015 12:36:10 +0000 Russell King - ARM Linux linux@arm.linux.org.uk wrote:
It seems that you're trying to work around a limitation in Linux by modifying the hardware representation...
Sorry to come back to this topic, but I think you are wrong.
Looking at the imx6 DTs, the problem comes from the display-subsystem node which is a pure Linux specific software entity.
If you want to describe only the hardware in the DT, everything is simple.
A IPU is a image controller with its sub-devices. Seen from the system, it is like a 'board' with its devices (LCDs, camera...).
When 2 IPUs, there are 2 independant boards.
Here is what could be a pure hardware DT:
/* no display-subsystem */
ipu1: ipu@02400000 { /* image controller / board 1 */ compatible = "fsl,imx6q-ipu"; ... ports = <&ipu1_di0>, <&ipu1_di1>; }; ipu1_di0: di@0 { /* display interface / crtc 1 */ compatible = "fsl,imx6q-di"; ... ipu1_di0_hdmi: endpoint@1 { remote-endpoint = <&hdmi_mux_0>; }; ipu1_di0_mipi: endpoint@2 { remote-endpoint = <&mipi_mux_0>; } ... }; ipu1_di1: di@1 { /* display interface / crtc 2 */ compatible = "fsl,imx6q-di"; ... ipu1_di1_hdmi: endpoint@1 { remote-endpoint = <&hdmi_mux_1>; }; ipu1_di1_mipi: endpoint@2 { remote-endpoint = <&mipi_mux_1>; } ... };
ipu2: ipu@02800000 { /* image controller / board 2 */ compatible = "fsl,imx6q-ipu"; ... ports = <&ipu2_di0>, <&ipu2_di1>; }; ipu2_di0: di@0 { /* display interface / crtc 1 */ compatible = "fsl,imx6q-di"; ... ipu2_di0_hdmi: endpoint@1 { remote-endpoint = <&hdmi_mux_2>; }; ipu2_di0_mipi: endpoint@2 { remote-endpoint = <&mipi_mux_2>; } ... }; ipu2_di1: di@1 { /* display interface / crtc 2 */ compatible = "fsl,imx6q-di"; ... ipu2_di1_hdmi: endpoint@1 { remote-endpoint = <&hdmi_mux_3>; }; ipu2_di1_mipi: endpoint@2 { remote-endpoint = <&mipi_mux_3>; } ... };
Then, a standard component binding (port->parent) works fine...
(you may note that the same problem exists with audio: the 'simple-card' is also a pure Linux specific software entity)