[PATCH v3 05/50] drm/bridge: Extend bridge API to disable connector creation
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Wed Dec 18 01:17:53 UTC 2019
Hi Tomi,
On Tue, Dec 17, 2019 at 02:12:59PM +0200, Tomi Valkeinen wrote:
> On 11/12/2019 00:57, Laurent Pinchart wrote:
> > Most bridge drivers create a DRM connector to model the connector at the
> > output of the bridge. This model is historical and has worked pretty
> > well so far, but causes several issues:
> >
> > - It prevents supporting more complex display pipelines where DRM
> > connector operations are split over multiple components. For instance a
> > pipeline with a bridge connected to the DDC signals to read EDID data,
> > and another one connected to the HPD signal to detect connection and
> > disconnection, will not be possible to support through this model.
> >
> > - It requires every bridge driver to implement similar connector
> > handling code, resulting in code duplication.
> >
> > - It assumes that a bridge will either be wired to a connector or to
> > another bridge, but doesn't support bridges that can be used in both
> > positions very well (although there is some ad-hoc support for this in
> > the analogix_dp bridge driver).
> >
> > In order to solve these issues, ownership of the connector should be
> > moved to the display controller driver (where it can be implemented
> > using helpers provided by the core).
> >
> > Extend the bridge API to allow disabling connector creation in bridge
> > drivers as a first step towards the new model. The new flags argument to
> > the bridge .attach() operation allows instructing the bridge driver to
> > skip creating a connector. Unconditionally set the new flags argument to
> > 0 for now to keep the existing behaviour, and modify all existing bridge
> > drivers to return an error when connector creation is not requested as
> > they don't support this feature yet.
> >
> > The change is based on the following semantic patch, with manual review
> > and edits.
> >
> > @ rule1 @
> > identifier funcs;
> > identifier fn;
> > @@
> > struct drm_bridge_funcs funcs = {
> > ...,
> > .attach = fn
> > };
> >
> > @ depends on rule1 @
> > identifier rule1.fn;
> > identifier bridge;
> > statement S, S1;
> > @@
> > int fn(
> > struct drm_bridge *bridge
> > + , enum drm_bridge_attach_flags flags
> > )
> > {
> > ... when != S
> > + if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)
> > + return -EINVAL;
> > +
>
> Should there be a dev_err or such here? This should only happen when your setting up a new board,
> and you try to use a bridge that doesn't support no-connector-mode yet, right?
>
> I hit this when trying out AM4 EVM with SiI9022 driver. It wasn't too difficult to pinpoint where
> the failure happens, but an error would have made it immediately obvious.
I hate that you're right as it forces me to re-review the change
manually :-) I'll fix this.
--
Regards,
Laurent Pinchart
More information about the dri-devel
mailing list