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: Lyude Paul <lyude@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210423184309.207645-3-lyude@redhat.com Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
eaf8974ea2
commit
fd43ad9d47
1 changed files with 20 additions and 5 deletions
|
@ -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)
|
||||||
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,
|
||||||
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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue