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@xxxxxxxxxxxxxxxx> > --- Reviewed-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx> -- 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@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel