Commit fd43ad9d authored by Lyude Paul's avatar Lyude Paul
Browse files

drm/nouveau/kms/nv50-: Move AUX adapter reg to connector late register/early unregister



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: default avatarLyude Paul <lyude@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210423184309.207645-3-lyude@redhat.com


Reviewed-by: default avatarDave Airlie <airlied@redhat.com>
parent eaf8974e
Loading
Loading
Loading
Loading
+20 −5
Original line number Diff line number Diff line
@@ -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;