OSDN Git Service

drm/bridge_connector: rely on drm_kms_helper_poll_* for HPD enablement
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Wed, 2 Nov 2022 18:07:01 +0000 (21:07 +0300)
committerNeil Armstrong <neil.armstrong@linaro.org>
Thu, 5 Jan 2023 13:59:44 +0000 (14:59 +0100)
Use drm_connector's helpers enable_hpd and disable_hpd to enable and
disable HPD automatically by the means of drm_kms_helper_poll_*
functions. As the drm_bridge_connector_enable_hpd() and
drm_bridge_connector_disable_hpd() functions are now unused, replace
them with stubs to ease driver migration.

Enabling the HPD from drm_bridge_connector_init() can happen too early,
before the driver is prepared to handle HPD events. As the
drm_bridge_connector_enable_hpd() is empty anyway, drop this call
anyway.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20221102180705.459294-4-dmitry.baryshkov@linaro.org
drivers/gpu/drm/drm_bridge_connector.c

index 1c7d936..0e13bc8 100644 (file)
@@ -137,6 +137,11 @@ static void drm_bridge_connector_hpd_cb(void *cb_data,
  */
 void drm_bridge_connector_enable_hpd(struct drm_connector *connector)
 {
+}
+EXPORT_SYMBOL_GPL(drm_bridge_connector_enable_hpd);
+
+static void _drm_bridge_connector_enable_hpd(struct drm_connector *connector)
+{
        struct drm_bridge_connector *bridge_connector =
                to_drm_bridge_connector(connector);
        struct drm_bridge *hpd = bridge_connector->bridge_hpd;
@@ -145,7 +150,6 @@ void drm_bridge_connector_enable_hpd(struct drm_connector *connector)
                drm_bridge_hpd_enable(hpd, drm_bridge_connector_hpd_cb,
                                      bridge_connector);
 }
-EXPORT_SYMBOL_GPL(drm_bridge_connector_enable_hpd);
 
 /**
  * drm_bridge_connector_disable_hpd - Disable hot-plug detection for the
@@ -157,6 +161,11 @@ EXPORT_SYMBOL_GPL(drm_bridge_connector_enable_hpd);
  */
 void drm_bridge_connector_disable_hpd(struct drm_connector *connector)
 {
+}
+EXPORT_SYMBOL_GPL(drm_bridge_connector_disable_hpd);
+
+static void _drm_bridge_connector_disable_hpd(struct drm_connector *connector)
+{
        struct drm_bridge_connector *bridge_connector =
                to_drm_bridge_connector(connector);
        struct drm_bridge *hpd = bridge_connector->bridge_hpd;
@@ -164,7 +173,6 @@ void drm_bridge_connector_disable_hpd(struct drm_connector *connector)
        if (hpd)
                drm_bridge_hpd_disable(hpd);
 }
-EXPORT_SYMBOL_GPL(drm_bridge_connector_disable_hpd);
 
 /* -----------------------------------------------------------------------------
  * Bridge Connector Functions
@@ -305,6 +313,8 @@ static int drm_bridge_connector_get_modes(struct drm_connector *connector)
 static const struct drm_connector_helper_funcs drm_bridge_connector_helper_funcs = {
        .get_modes = drm_bridge_connector_get_modes,
        /* No need for .mode_valid(), the bridges are checked by the core. */
+       .enable_hpd = _drm_bridge_connector_enable_hpd,
+       .disable_hpd = _drm_bridge_connector_disable_hpd,
 };
 
 /* -----------------------------------------------------------------------------
@@ -387,10 +397,8 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
                                    connector_type, ddc);
        drm_connector_helper_add(connector, &drm_bridge_connector_helper_funcs);
 
-       if (bridge_connector->bridge_hpd) {
+       if (bridge_connector->bridge_hpd)
                connector->polled = DRM_CONNECTOR_POLL_HPD;
-               drm_bridge_connector_enable_hpd(connector);
-       }
        else if (bridge_connector->bridge_detect)
                connector->polled = DRM_CONNECTOR_POLL_CONNECT
                                  | DRM_CONNECTOR_POLL_DISCONNECT;