[PATCH (repost) 4/5] drm/nouveau: add DisplayPort CEC-Tunneling-over-AUX support

Lyude Paul lyude at redhat.com
Mon Aug 20 18:58:39 UTC 2018


On Fri, 2018-08-17 at 16:11 +0200, Hans Verkuil wrote:
> From: Hans Verkuil <hans.verkuil at cisco.com>
> 
> Add DisplayPort CEC-Tunneling-over-AUX support to nouveau.
> 
> Signed-off-by: Hans Verkuil <hans.verkuil at cisco.com>
> ---
>  drivers/gpu/drm/nouveau/nouveau_connector.c | 17 +++++++++++++++--
>  1 file changed, 15 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c
> b/drivers/gpu/drm/nouveau/nouveau_connector.c
> index 51932c72334e..eb4f766b5958 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_connector.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
> @@ -400,8 +400,10 @@ nouveau_connector_destroy(struct drm_connector
> *connector)
>  	kfree(nv_connector->edid);
>  	drm_connector_unregister(connector);
>  	drm_connector_cleanup(connector);
> -	if (nv_connector->aux.transfer)
> +	if (nv_connector->aux.transfer) {
With the comments I made about this on patch 1 addressed/resolved:

Reviewed-by: Lyude Paul <lyude at redhat.com>

> +		drm_dp_cec_unregister_connector(&nv_connector->aux);
>  		drm_dp_aux_unregister(&nv_connector->aux);
> +	}
>  	kfree(connector);
>  }
>  
> @@ -608,6 +610,7 @@ nouveau_connector_detect(struct drm_connector *connector,
> bool force)
>  
>  		nouveau_connector_set_encoder(connector, nv_encoder);
>  		conn_status = connector_status_connected;
> +		drm_dp_cec_set_edid(&nv_connector->aux, nv_connector->edid);
>  		goto out;
>  	}
>  
> @@ -1108,11 +1111,14 @@ nouveau_connector_hotplug(struct nvif_notify *notify)
>  
>  	if (rep->mask & NVIF_NOTIFY_CONN_V0_IRQ) {
>  		NV_DEBUG(drm, "service %s\n", name);
> +		drm_dp_cec_irq(&nv_connector->aux);
>  		if ((nv_encoder = find_encoder(connector, DCB_OUTPUT_DP)))
>  			nv50_mstm_service(nv_encoder->dp.mstm);
>  	} else {
>  		bool plugged = (rep->mask != NVIF_NOTIFY_CONN_V0_UNPLUG);
>  
> +		if (!plugged)
> +			drm_dp_cec_unset_edid(&nv_connector->aux);
>  		NV_DEBUG(drm, "%splugged %s\n", plugged ? "" : "un", name);
>  		if ((nv_encoder = find_encoder(connector, DCB_OUTPUT_DP))) {
>  			if (!plugged)
> @@ -1302,7 +1308,6 @@ nouveau_connector_create(struct drm_device *dev, int
> index)
>  			kfree(nv_connector);
>  			return ERR_PTR(ret);
>  		}
> -
>  		funcs = &nouveau_connector_funcs;
>  		break;
>  	default:
> @@ -1356,6 +1361,14 @@ nouveau_connector_create(struct drm_device *dev, int
> index)
>  		break;
>  	}
>  
> +	switch (type) {
> +	case DRM_MODE_CONNECTOR_DisplayPort:
> +	case DRM_MODE_CONNECTOR_eDP:
> +		drm_dp_cec_register_connector(&nv_connector->aux,
> +					      connector->name, dev->dev);
> +		break;
> +	}
> +
>  	ret = nvif_notify_init(&disp->disp.object, nouveau_connector_hotplug,
>  			       true, NV04_DISP_NTFY_CONN,
>  			       &(struct nvif_notify_conn_req_v0) {



More information about the dri-devel mailing list