On 12/13/2012 11:09 PM, Terje Bergström wrote:
On 13.12.2012 19:58, Stephen Warren wrote:
On 12/13/2012 01:57 AM, Thierry Reding wrote:
After some more discussion with Stephen on IRC we came to the conclusion that the easiest might be to have tegra-drm call into host1x with something like:
void host1x_set_drm_device(struct host1x *host1x, struct device *dev);
If host1x is registering the dummy device that causes tegradrm to be instantiated, then presumably there's no need for the API above, since host1x will already have the struct device * for tegradrm, since it created it?
I didn't add the dummy device in my latest patch set. I first set out to add it, and moved the drm global data to be drvdata of that device. Then I noticed that it doesn't actually help at all.
The critical accesses to the global data are from probes of DC, HDMI, etc.
OK
They want to get the global data by getting drvdata of their parent.
There's no reason that /has/ to be so; they can get any information from wherever it is, rather than trying to require it to be somewhere it isn't.
The dummy device is not their parent - host1x is. There's no connection between the dummy and the real client devices.
It's quite possible for the client devices to ask their actual parent (host1x) for the tegradrm struct device *, by calling a host1x API, and have host1x implement that API by returning the dummy/virtual device that it created. That should be just 1-2 lines of code to implement in host1x, plus maybe a couple more to correctly return -EPROBE_DEFERRED when appropriate.