[PATCH 20/29] drm/omap: Notify all devices in the pipeline of output disconnection

Sebastian Reichel sebastian.reichel at collabora.com
Sun Dec 9 22:04:39 UTC 2018


Hi,

On Wed, Dec 05, 2018 at 05:00:13PM +0200, Laurent Pinchart wrote:
> For HDMI pipelines, when the output gets disconnected the device
> handling CEC needs to be notified. Instead of guessing which device that
> would be (and sometimes getting it wrong), notify all devices in the
> pipeline.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---

Reviewed-by: Sebastian Reichel <sebastian.reichel at collabora.com>

-- Sebastian

>  drivers/gpu/drm/omapdrm/omap_connector.c | 28 ++++++++++++++----------
>  1 file changed, 16 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c b/drivers/gpu/drm/omapdrm/omap_connector.c
> index 31b6d6d1def3..8db1f2fbcf43 100644
> --- a/drivers/gpu/drm/omapdrm/omap_connector.c
> +++ b/drivers/gpu/drm/omapdrm/omap_connector.c
> @@ -35,18 +35,22 @@ struct omap_connector {
>  };
>  
>  static void omap_connector_hpd_notify(struct drm_connector *connector,
> -				      struct omap_dss_device *src,
>  				      enum drm_connector_status status)
>  {
> -	if (status == connector_status_disconnected) {
> -		/*
> -		 * If the source is an HDMI encoder, notify it of disconnection.
> -		 * This is required to let the HDMI encoder reset any internal
> -		 * state related to connection status, such as the CEC address.
> -		 */
> -		if (src && src->type == OMAP_DISPLAY_TYPE_HDMI &&
> -		    src->ops->hdmi.lost_hotplug)
> -			src->ops->hdmi.lost_hotplug(src);
> +	struct omap_connector *omap_connector = to_omap_connector(connector);
> +	struct omap_dss_device *dssdev;
> +
> +	if (status != connector_status_disconnected)
> +		return;
> +
> +	/*
> +	 * Notify all devics in the pipeline of disconnection. This is required
> +	 * to let the HDMI encoders reset their internal state related to
> +	 * connection status, such as the CEC address.
> +	 */
> +	for (dssdev = omap_connector->output; dssdev; dssdev = dssdev->next) {
> +		if (dssdev->ops && dssdev->ops->hdmi.lost_hotplug)
> +			dssdev->ops->hdmi.lost_hotplug(dssdev);
>  	}
>  }
>  
> @@ -66,7 +70,7 @@ static void omap_connector_hpd_cb(void *cb_data,
>  	if (old_status == status)
>  		return;
>  
> -	omap_connector_hpd_notify(connector, omap_connector->hpd, status);
> +	omap_connector_hpd_notify(connector, status);
>  
>  	drm_kms_helper_hotplug_event(dev);
>  }
> @@ -127,7 +131,7 @@ static enum drm_connector_status omap_connector_detect(
>  		       ? connector_status_connected
>  		       : connector_status_disconnected;
>  
> -		omap_connector_hpd_notify(connector, dssdev->src, status);
> +		omap_connector_hpd_notify(connector, status);
>  	} else {
>  		switch (connector->connector_type) {
>  		case DRM_MODE_CONNECTOR_DPI:
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20181209/d723d215/attachment.sig>


More information about the dri-devel mailing list