drm/nouveau/kms/nv50-: Move AUX adapter reg to connector late register/early unregister
[platform/kernel/linux-starfive.git] / drivers / gpu / drm / nouveau / nouveau_connector.c
index 61e6d74..c04044b 100644 (file)
@@ -401,7 +401,6 @@ nouveau_connector_destroy(struct drm_connector *connector)
        drm_connector_cleanup(connector);
        if (nv_connector->aux.transfer) {
                drm_dp_cec_unregister_connector(&nv_connector->aux);
-               drm_dp_aux_unregister(&nv_connector->aux);
                kfree(nv_connector->aux.name);
        }
        kfree(connector);
@@ -905,13 +904,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 +1358,14 @@ 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);
+               drm_dp_aux_init(&nv_connector->aux);
                if (ret) {
-                       NV_ERROR(drm, "failed to register aux channel\n");
+                       NV_ERROR(drm, "Failed to init AUX adapter for sor-%04x-%04x: %d\n",
+                                dcbe->hasht, dcbe->hashm, ret);
                        kfree(nv_connector);
                        return ERR_PTR(ret);
                }
-               funcs = &nouveau_connector_funcs;
-               break;
+               fallthrough;
        default:
                funcs = &nouveau_connector_funcs;
                break;