[PATCH v3 05/50] drm/bridge: Extend bridge API to disable connector creation
Tomi Valkeinen
tomi.valkeinen at ti.com
Tue Dec 17 12:12:59 UTC 2019
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.
Tomi
--
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
More information about the dri-devel
mailing list