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.pinch...@ideasonboard.com>
> ---

Reviewed-by: Sebastian Reichel <sebastian.reic...@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@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

Attachment: signature.asc
Description: PGP signature

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to