Here's a new proposal that should address all issues collected during the discussion of the previous one: From tegra20.dtsi: host1x { compatible = "nvidia,tegra20-host1x", "simple-bus"; reg = <0x50000000 0x00024000>; interrupts = <0 65 0x04 /* mpcore syncpt */ 0 67 0x04>; /* mpcore general */ #address-cells = <1>; #size-cells = <1>; ranges = <0x54000000 0x54000000 0x04000000>; /* video-encoding/decoding */ mpe { reg = <0x54040000 0x00040000>; interrupts = <0 68 0x04>; }; /* video input */ vi { reg = <0x54080000 0x00040000>; interrupts = <0 69 0x04>; }; /* EPP */ epp { reg = <0x540c0000 0x00040000>; interrupts = <0 70 0x04>; }; /* ISP */ isp { reg = <0x54100000 0x00040000>; interrupts = <0 71 0x04>; }; /* 2D engine */ gr2d { reg = <0x54140000 0x00040000>; interrupts = <0 72 0x04>; }; /* 3D engine */ gr3d { reg = <0x54180000 0x00040000>; }; /* display controllers */ dc@54200000 { compatible = "nvidia,tegra20-dc"; reg = <0x54200000 0x00040000>; interrupts = <0 73 0x04>; rgb { status = "disabled"; }; }; dc@54240000 { compatible = "nvidia,tegra20-dc"; reg = <0x54240000 0x00040000>; interrupts = <0 74 0x04>; rgb { status = "disabled"; }; }; /* outputs */ hdmi { compatible = "nvidia,tegra20-hdmi"; reg = <0x54280000 0x00040000>; interrupts = <0 75 0x04>; status = "disabled"; }; tvo { compatible = "nvidia,tegra20-tvo"; reg = <0x542c0000 0x00040000>; interrupts = <0 76 0x04>; status = "disabled"; }; dsi { compatible = "nvidia,tegra20-dsi"; reg = <0x54300000 0x00040000>; status = "disabled"; }; }; From tegra20-medcom.dts: host1x { dc@54200000 { rgb { nvidia,edid = /incbin/("tegra20-medcom.edid"); status = "okay"; }; }; }; From tegra20-plutux.dts: host1x { hdmi { vdd-supply = <&ldo7_reg>; pll-supply = <&ldo8_reg>; nvidia,hpd-gpio = <&gpio 111 0>; /* PN7 */ nvidia,ddc-i2c-bus = <&ddc>; status = "okay"; }; }; One problem I've come across when trying to get some rudimentary code working with this is that there's no longer a device which the DRM driver can bind to, because the top-level device (host1x) now has a separate driver. I've briefly discussed this with Dave Airlie on IRC and there are basically two solutions: a) Use a fake platform device, instantiated from the device tree or at module initialization time, so that the drm_platform_init() function can be used. b) Implement a custom drm_bus and reimplement most of the functionality provided by drm_platform_init(). Alternative a) is what Sascha has been doing for i.MX and is the most straightforward. One variant of this would be to add another virtual device node below host1x that groups gr2d, gr3d, both dcs and the three output nodes. The down-side of this being that it doesn't describe the hardware of course, and therefore really shouldn't go into the device tree. Instantiating at module initalization time has the disadvantage that the parent-child relationship is lost. Using b) isn't optimal either because DRM requires at least a struct device which can be associated with the drm_device. So the question is which struct device that should be? Thierry
Attachment:
pgpH2h7CitDKC.pgp
Description: PGP signature
_______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel