Commit 65bf2cf9 authored by Oleg Vasilev's avatar Oleg Vasilev Committed by Maarten Lankhorst

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: default avatarJeevan B <jeevan.b@intel.com>
Signed-off-by: default avatarOleg Vasilev <oleg.vasilev@intel.com>
Reviewed-by: default avatarEmil Velikov <emil.velikov@collabora.com>
Acked-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/1587732655-17544-4-git-send-email-jeevan.b@intel.com
parent fb823134
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <drm/drm_edid.h> #include <drm/drm_edid.h>
#include <drm/drm_fb_helper.h> #include <drm/drm_fb_helper.h>
#include <drm/drm_dp_helper.h>
#include <drm/drm_probe_helper.h> #include <drm/drm_probe_helper.h>
#include <drm/amdgpu_drm.h> #include <drm/amdgpu_drm.h>
#include "amdgpu.h" #include "amdgpu.h"
...@@ -1405,6 +1406,10 @@ amdgpu_connector_dp_detect(struct drm_connector *connector, bool force) ...@@ -1405,6 +1406,10 @@ amdgpu_connector_dp_detect(struct drm_connector *connector, bool force)
pm_runtime_put_autosuspend(connector->dev->dev); 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; return ret;
} }
...@@ -1951,6 +1956,11 @@ amdgpu_connector_add(struct amdgpu_device *adev, ...@@ -1951,6 +1956,11 @@ amdgpu_connector_add(struct amdgpu_device *adev,
if (has_aux) if (has_aux)
amdgpu_atombios_dp_aux_init(amdgpu_connector); 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; return;
failed: failed:
......
...@@ -469,6 +469,7 @@ struct amdgpu_encoder { ...@@ -469,6 +469,7 @@ struct amdgpu_encoder {
struct amdgpu_connector_atom_dig { struct amdgpu_connector_atom_dig {
/* displayport */ /* displayport */
u8 dpcd[DP_RECEIVER_CAP_SIZE]; u8 dpcd[DP_RECEIVER_CAP_SIZE];
u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS];
u8 dp_sink_type; u8 dp_sink_type;
int dp_clock; int dp_clock;
int dp_lane_count; int dp_lane_count;
......
...@@ -328,6 +328,22 @@ static void amdgpu_atombios_dp_probe_oui(struct amdgpu_connector *amdgpu_connect ...@@ -328,6 +328,22 @@ static void amdgpu_atombios_dp_probe_oui(struct amdgpu_connector *amdgpu_connect
buf[0], buf[1], buf[2]); 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) int amdgpu_atombios_dp_get_dpcd(struct amdgpu_connector *amdgpu_connector)
{ {
struct amdgpu_connector_atom_dig *dig_connector = amdgpu_connector->con_priv; 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) ...@@ -343,7 +359,7 @@ int amdgpu_atombios_dp_get_dpcd(struct amdgpu_connector *amdgpu_connector)
dig_connector->dpcd); dig_connector->dpcd);
amdgpu_atombios_dp_probe_oui(amdgpu_connector); amdgpu_atombios_dp_probe_oui(amdgpu_connector);
amdgpu_atombios_dp_ds_ports(amdgpu_connector);
return 0; return 0;
} }
......
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