Commit fd43ad9d authored by Lyude Paul's avatar Lyude Paul

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.comReviewed-by: default avatarDave Airlie <airlied@redhat.com>
parent eaf8974e
...@@ -401,7 +401,6 @@ nouveau_connector_destroy(struct drm_connector *connector) ...@@ -401,7 +401,6 @@ nouveau_connector_destroy(struct drm_connector *connector)
drm_connector_cleanup(connector); drm_connector_cleanup(connector);
if (nv_connector->aux.transfer) { if (nv_connector->aux.transfer) {
drm_dp_cec_unregister_connector(&nv_connector->aux); drm_dp_cec_unregister_connector(&nv_connector->aux);
drm_dp_aux_unregister(&nv_connector->aux);
kfree(nv_connector->aux.name); kfree(nv_connector->aux.name);
} }
kfree(connector); kfree(connector);
...@@ -905,13 +904,29 @@ nouveau_connector_late_register(struct drm_connector *connector) ...@@ -905,13 +904,29 @@ nouveau_connector_late_register(struct drm_connector *connector)
int ret; int ret;
ret = nouveau_backlight_init(connector); 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; return ret;
} }
static void static void
nouveau_connector_early_unregister(struct drm_connector *connector) 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); nouveau_backlight_fini(connector);
} }
...@@ -1343,14 +1358,14 @@ nouveau_connector_create(struct drm_device *dev, ...@@ -1343,14 +1358,14 @@ nouveau_connector_create(struct drm_device *dev,
snprintf(aux_name, sizeof(aux_name), "sor-%04x-%04x", snprintf(aux_name, sizeof(aux_name), "sor-%04x-%04x",
dcbe->hasht, dcbe->hashm); dcbe->hasht, dcbe->hashm);
nv_connector->aux.name = kstrdup(aux_name, GFP_KERNEL); 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) { 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); kfree(nv_connector);
return ERR_PTR(ret); return ERR_PTR(ret);
} }
funcs = &nouveau_connector_funcs; fallthrough;
break;
default: default:
funcs = &nouveau_connector_funcs; funcs = &nouveau_connector_funcs;
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment