[PATCH v4 05/51] drm/bridge: Extend bridge API to disable connector creation

Tomi Valkeinen tomi.valkeinen at ti.com
Wed Jan 8 16:18:21 UTC 2020


On 19/12/2019 12:44, 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) {
> +		DRM_ERROR("Fix bridge driver to make connector optional!");
> +		return -EINVAL;
> +	}
> +
>   	S1
>   	...
>   }
> 
> @ depends on rule1 @
> identifier rule1.fn;
> identifier bridge, flags;
> expression E1, E2, E3;
> @@
>   int fn(
>   	struct drm_bridge *bridge,
>   	enum drm_bridge_attach_flags flags
>   ) {
>   <...
>   drm_bridge_attach(E1, E2, E3
> +	, flags
>   )
>   ...>
>   }
> 
> @@
> expression E1, E2, E3;
> @@
>   drm_bridge_attach(E1, E2, E3
> +	, 0
>   )
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> Reviewed-by: Boris Brezillon <boris.brezillon at collabora.com>
> Acked-by: Sam Ravnborg <sam at ravnborg.org>

Reviewed-by: Tomi Valkeinen <tomi.valkeinen at ti.com>

  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