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

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
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -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 @@ out:
		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:
+1 −0
Original line number Diff line number Diff line
@@ -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;
+17 −1
Original line number Diff line number Diff line
@@ -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;
	}