Hi,
Le mar., sept. 28 2021 at 14:06:03 +0200, H. Nikolaus Schaller
<hns@xxxxxxxxxxxxx> a écrit :
Hi Paul,
Am 28.09.2021 um 12:21 schrieb H. Nikolaus Schaller
<hns@xxxxxxxxxxxxx>:
@@ -1492,10 +1555,16 @@ static int ingenic_drm_init(void)
{
int err;
+ if (IS_ENABLED(CONFIG_DRM_INGENIC_DW_HDMI)) {
+ err = platform_driver_register(ingenic_dw_hdmi_driver_ptr);
+ if (err)
+ return err;
+ }
I don't see why you need to register the ingenic-dw-hdmi driver
here. Just register it in the ingenic-dw-hdmi driver.
Ok, I never though about this (as the code was not from me). We
apparently just followed the IPU code pattern (learning by example).
It indeed looks not necessary and would also avoid the
ingenic_dw_hdmi_driver_ptr dependency.
But: what is ingenic_ipu_driver_ptr then good for?
It's done this way because ingenic-drm-drv.c and ingenic-ipu.c are both
compiled within the same module ingenic-drm.
I'm not sure this is still required, maybe ingenic-ipu.c can be its own
module now.
If we can get rid of this as well, we can drop patch 1/10
("drm/ingenic: Fix drm_init error path if IPU was registered")
completely.
A quick test shows that it *is* required. At least if I configure
everything as modules.
But like you I can't explain why.
Well, a quick test here shows that it is not required, at least when
configuring with everything built-in.
-Paul
Well, just a very rough idea (may be wrong): the bridge chain is not
like an i2c bus and
clients are not automatically loaded/probed if linked in the device
tree. Therefore the
consumer (ingenic_drm_drv) must register the "clients" like IPU and
HDMI.
BR,
Nikolaus