mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-27 02:25:20 +07:00
drm/amdgpu/display: Fix reload driver error
Issue: Will have follow error when reload driver: [ 3986.567739] sysfs: cannot create duplicate filename '/devices/pci0000:00/0000:00:07.0/drm_dp_aux_dev' [ 3986.567743] CPU: 6 PID: 1767 Comm: modprobe Tainted: G OE 5.0.0-rc1-custom #1 [ 3986.567745] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014 [ 3986.567746] Call Trace: ...... [ 3986.567808] drm_dp_aux_register_devnode+0xdc/0x140 [drm_kms_helper] ...... [ 3986.569081] kobject_add_internal failed for drm_dp_aux_dev with -EEXIST, don't try to register things with the same name in the same directory. Reproduce sequences: 1.modprobe amdgpu 2.modprobe -r amdgpu 3.modprobe amdgpu Root cause: When unload driver, it doesn't unregister aux. v2: Don't use has_aux Signed-off-by: Emily Deng <Emily.Deng@amd.com> Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
bdb50274d0
commit
526c654a8a
@ -3675,6 +3675,13 @@ int amdgpu_dm_connector_atomic_get_property(struct drm_connector *connector,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void amdgpu_dm_connector_unregister(struct drm_connector *connector)
|
||||||
|
{
|
||||||
|
struct amdgpu_dm_connector *amdgpu_dm_connector = to_amdgpu_dm_connector(connector);
|
||||||
|
|
||||||
|
drm_dp_aux_unregister(&amdgpu_dm_connector->dm_dp_aux.aux);
|
||||||
|
}
|
||||||
|
|
||||||
static void amdgpu_dm_connector_destroy(struct drm_connector *connector)
|
static void amdgpu_dm_connector_destroy(struct drm_connector *connector)
|
||||||
{
|
{
|
||||||
struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
|
struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
|
||||||
@ -3703,6 +3710,11 @@ static void amdgpu_dm_connector_destroy(struct drm_connector *connector)
|
|||||||
drm_dp_cec_unregister_connector(&aconnector->dm_dp_aux.aux);
|
drm_dp_cec_unregister_connector(&aconnector->dm_dp_aux.aux);
|
||||||
drm_connector_unregister(connector);
|
drm_connector_unregister(connector);
|
||||||
drm_connector_cleanup(connector);
|
drm_connector_cleanup(connector);
|
||||||
|
if (aconnector->i2c) {
|
||||||
|
i2c_del_adapter(&aconnector->i2c->base);
|
||||||
|
kfree(aconnector->i2c);
|
||||||
|
}
|
||||||
|
|
||||||
kfree(connector);
|
kfree(connector);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3760,7 +3772,8 @@ static const struct drm_connector_funcs amdgpu_dm_connector_funcs = {
|
|||||||
.atomic_duplicate_state = amdgpu_dm_connector_atomic_duplicate_state,
|
.atomic_duplicate_state = amdgpu_dm_connector_atomic_duplicate_state,
|
||||||
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
|
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
|
||||||
.atomic_set_property = amdgpu_dm_connector_atomic_set_property,
|
.atomic_set_property = amdgpu_dm_connector_atomic_set_property,
|
||||||
.atomic_get_property = amdgpu_dm_connector_atomic_get_property
|
.atomic_get_property = amdgpu_dm_connector_atomic_get_property,
|
||||||
|
.early_unregister = amdgpu_dm_connector_unregister
|
||||||
};
|
};
|
||||||
|
|
||||||
static int get_modes(struct drm_connector *connector)
|
static int get_modes(struct drm_connector *connector)
|
||||||
|
Loading…
Reference in New Issue
Block a user