[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