Since AUX adapters on nouveau have their respective DRM connectors as
parents, we need to make sure that we register then after their connectors.

Signed-off-by: Lyude Paul <ly...@redhat.com>
---
 drivers/gpu/drm/nouveau/nouveau_connector.c | 26 ++++++++++++++-------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c 
b/drivers/gpu/drm/nouveau/nouveau_connector.c
index 61e6d7412505..bfce762adcf0 100644
--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
@@ -905,13 +905,29 @@ nouveau_connector_late_register(struct drm_connector 
*connector)
        int ret;
 
        ret = nouveau_backlight_init(connector);
+       if (ret)
+               return ret;
+
+       if (connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
+           connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
+               ret = drm_dp_aux_register(&nouveau_connector(connector)->aux);
+               if (ret)
+                       goto backlight_fini;
+       }
 
+       return 0;
+backlight_fini:
+       nouveau_backlight_fini(connector);
        return ret;
 }
 
 static void
 nouveau_connector_early_unregister(struct drm_connector *connector)
 {
+       if (connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
+           connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort)
+               drm_dp_aux_unregister(&nouveau_connector(connector)->aux);
+
        nouveau_backlight_fini(connector);
 }
 
@@ -1343,14 +1359,8 @@ nouveau_connector_create(struct drm_device *dev,
                snprintf(aux_name, sizeof(aux_name), "sor-%04x-%04x",
                         dcbe->hasht, dcbe->hashm);
                nv_connector->aux.name = kstrdup(aux_name, GFP_KERNEL);
-               ret = drm_dp_aux_register(&nv_connector->aux);
-               if (ret) {
-                       NV_ERROR(drm, "failed to register aux channel\n");
-                       kfree(nv_connector);
-                       return ERR_PTR(ret);
-               }
-               funcs = &nouveau_connector_funcs;
-               break;
+               drm_dp_aux_init(&nv_connector->aux);
+               fallthrough;
        default:
                funcs = &nouveau_connector_funcs;
                break;
-- 
2.29.2

Reply via email to