Hi,
On Fri, May 14, 2021 at 4:16 AM Jani Nikula jani.nikula@intel.com wrote:
On Fri, 07 May 2021, Lyude Paul lyude@redhat.com wrote:
On Fri, 2021-05-07 at 17:00 -0500, Bjorn Andersson wrote:
On Fri 07 May 16:18 CDT 2021, Lyude Paul wrote:
Adding ville from Intel to also get their take on this.
In general we've been trying to move DRM to a design where we don't expose any devices until everything is ready. That's pretty much the main reason that we register things during bridge attach time. Note though that even before the DDC bus is registered it should still be usable, just things like get_device() won't work.
This isn't the first time we've run into a problem like the one you're trying to solve though, Tegra currently has a similar issue. Something we discussed as a possible long-term solution for this was splitting i2c_add_adapter() into a minimal initialization function and a registration function. Linux's device core already allows for this (device_initialize() and device_add(), which are called together when device_register() is called). Would this be a solution that might work for you (and even better, would you possibly be willing to write the patches? :)
It's not enough that the adapter is half-baked, because the bridge's initialization depends on that the panel device is done probing, and the panel driver will only complete its probe if it can find it's resources.
So we need a mechanism to fully create the resources exposed by the bridge chip (i2c bus, gpio chip and (soon) a pwm chip), then allow the panel to probe and after that initialize the bridge.
We did discuss possible ways to register these resources and then "sleep for a while" before resolving the panel, but what we came up with was definitely suboptimal - and ugly.
Sigh, I'm really starting to wonder if we should reconsider the rules on exposing ddc adapters early...
Danvet, Jani, and/or airlied: can I get your take on this?
Granted, I did not study this in detail, but it sounds like we'd need to be able to add and use an i2c adapter in kernel, before deciding to register it with the userspace. But that does not seem to be as trivial as making it possible to call the now-static i2c_register_adapter() separately.
To close the loop: I think the point is now moot in v7. Now crossing my fingers that approach can gain momentum. If not, I might come back here. ;-)
-Doug