Re: [Letux-kernel] [PATCH 8/8] drm/ingenic: Attach bridge chain to encoders

From: Paul Cercueil
Date: Tue Aug 10 2021 - 03:52:48 EST


Hi Paul,

Le mar., août 10 2021 at 01:17:20 +0200, Paul Boddie <paul@xxxxxxxxxxxxx> a écrit :
On Monday, 9 August 2021 18:22:12 CEST Paul Cercueil wrote:

Le lun., août 9 2021 at 13:14:03 +0200, H. Nikolaus Schaller
<hns@xxxxxxxxxxxxx> a écrit :
>
> quick feedback: our HDMI on top compiles fine after fixing 2 merge
> conflicts, but dos not yet work.
> Will need some spare time with access to the CI20 board to research
> the issue, i.e. can not give feedback immediately.

Alright, no problem. I'll be back home in about 2 weeks and then I can
test on my CI20 as well.

Just for reference, I looked into this initialisation failure. The HDMI
peripheral driver gets initialised satisfactorily...

dw-hdmi-ingenic 10180000.hdmi: Detected HDMI TX controller v1.31a with HDCP
(DWC HDMI 3D TX PHY)
dw-hdmi-ingenic 10180000.hdmi: registered DesignWare HDMI I2C bus driver

But then the reported error occurs in the DRM driver:

ingenic-drm 13050000.lcdc0: Unable to init connector
ingenic-drm: probe of 13050000.lcdc0 failed with error -22

This originates in a call to drm_bridge_connector_init from ingenic_drm_bind:

connector = drm_bridge_connector_init(drm, encoder);

The invoked function iterates over the registered bridges, one of which seems
to be the HDMI peripheral (it has bridge operations defined identically to
those specified in the Synopsys driver), but the type member of the drm_bridge
structure is set to 0 (DRM_MODE_CONNECTOR_Unknown).

I might expect the bridge to expose a type acquired from its connector, but I
don't see this propagation occurring in the Synopsys driver: dw_hdmi_probe
sets the bridge operations and other members of the drm_bridge structure, but
it doesn't set the type.

Also, it might be possible that dw_hdmi_connector_detect (exposed as the
detect operation) is not getting called, and this would explain why the
bridge's connector member does not have the connector_type set, either (since
it is also set to 0).

From what I understand the last bridge in the chained list is supposed to set the connector type. The HDMI driver's probe function should get a pointer to the next bridge in the queue and attach it (see how ite-it66121.c does it). The last bridge in the queue should be "hdmi-connector" (display-connector.c) which will effectively set the connector type.

Cheers,
-Paul