mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
drm/amdgpu: utilize subconnector property for DP through atombios
Since DP-specific information is stored in driver's structures, every driver needs to implement subconnector property by itself. v2: rebase v3: renamed a function call Cc: Alex Deucher <alexander.deucher@amd.com> Cc: Christian König <christian.koenig@amd.com> Cc: David (ChunMing) Zhou <David1.Zhou@amd.com> Cc: amd-gfx@lists.freedesktop.org Signed-off-by: Jeevan B <jeevan.b@intel.com> Signed-off-by: Oleg Vasilev <oleg.vasilev@intel.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/1587732655-17544-4-git-send-email-jeevan.b@intel.com
This commit is contained in:
parent
fb82313462
commit
65bf2cf95d
@ -26,6 +26,7 @@
|
||||
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_dp_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/amdgpu_drm.h>
|
||||
#include "amdgpu.h"
|
||||
@ -1405,6 +1406,10 @@ amdgpu_connector_dp_detect(struct drm_connector *connector, bool force)
|
||||
pm_runtime_put_autosuspend(connector->dev->dev);
|
||||
}
|
||||
|
||||
drm_dp_set_subconnector_property(&amdgpu_connector->base,
|
||||
ret,
|
||||
amdgpu_dig_connector->dpcd,
|
||||
amdgpu_dig_connector->downstream_ports);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -1951,6 +1956,11 @@ amdgpu_connector_add(struct amdgpu_device *adev,
|
||||
if (has_aux)
|
||||
amdgpu_atombios_dp_aux_init(amdgpu_connector);
|
||||
|
||||
if (connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
|
||||
connector_type == DRM_MODE_CONNECTOR_eDP) {
|
||||
drm_connector_attach_dp_subconnector_property(&amdgpu_connector->base);
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
failed:
|
||||
|
@ -469,6 +469,7 @@ struct amdgpu_encoder {
|
||||
struct amdgpu_connector_atom_dig {
|
||||
/* displayport */
|
||||
u8 dpcd[DP_RECEIVER_CAP_SIZE];
|
||||
u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS];
|
||||
u8 dp_sink_type;
|
||||
int dp_clock;
|
||||
int dp_lane_count;
|
||||
|
@ -328,6 +328,22 @@ static void amdgpu_atombios_dp_probe_oui(struct amdgpu_connector *amdgpu_connect
|
||||
buf[0], buf[1], buf[2]);
|
||||
}
|
||||
|
||||
static void amdgpu_atombios_dp_ds_ports(struct amdgpu_connector *amdgpu_connector)
|
||||
{
|
||||
struct amdgpu_connector_atom_dig *dig_connector = amdgpu_connector->con_priv;
|
||||
int ret;
|
||||
|
||||
if (dig_connector->dpcd[DP_DPCD_REV] > 0x10) {
|
||||
ret = drm_dp_dpcd_read(&amdgpu_connector->ddc_bus->aux,
|
||||
DP_DOWNSTREAM_PORT_0,
|
||||
dig_connector->downstream_ports,
|
||||
DP_MAX_DOWNSTREAM_PORTS);
|
||||
if (ret)
|
||||
memset(dig_connector->downstream_ports, 0,
|
||||
DP_MAX_DOWNSTREAM_PORTS);
|
||||
}
|
||||
}
|
||||
|
||||
int amdgpu_atombios_dp_get_dpcd(struct amdgpu_connector *amdgpu_connector)
|
||||
{
|
||||
struct amdgpu_connector_atom_dig *dig_connector = amdgpu_connector->con_priv;
|
||||
@ -343,7 +359,7 @@ int amdgpu_atombios_dp_get_dpcd(struct amdgpu_connector *amdgpu_connector)
|
||||
dig_connector->dpcd);
|
||||
|
||||
amdgpu_atombios_dp_probe_oui(amdgpu_connector);
|
||||
|
||||
amdgpu_atombios_dp_ds_ports(amdgpu_connector);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user