Commit 9f0e7b51 authored by Joshua Peisach's avatar Joshua Peisach Committed by Alex Deucher
Browse files

drm/amdgpu/amdgpu_connectors: use struct drm_edid instead of struct edid



Some amdgpu code is still using deprecated edid functions. Switch to
the newer functions and update the amdgpu_connector struct's edid type
to the drm_edid type.

At the same time, use the raw EDID when we need to for speaker
allocations and for determining if the input is digital.

Signed-off-by: default avatarJoshua Peisach <jpeisach@ubuntu.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 829f21e9
Loading
Loading
Loading
Loading
+16 −16
Original line number Diff line number Diff line
@@ -246,10 +246,10 @@ amdgpu_connector_find_encoder(struct drm_connector *connector,
	return NULL;
}

static struct edid *
static const struct drm_edid *
amdgpu_connector_get_hardcoded_edid(struct amdgpu_device *adev)
{
	return drm_edid_duplicate(drm_edid_raw(adev->mode_info.bios_hardcoded_edid));
	return drm_edid_dup(adev->mode_info.bios_hardcoded_edid);
}

static void amdgpu_connector_get_edid(struct drm_connector *connector)
@@ -268,7 +268,7 @@ static void amdgpu_connector_get_edid(struct drm_connector *connector)
	if ((amdgpu_connector_encoder_get_dp_bridge_encoder_id(connector) !=
	     ENCODER_OBJECT_ID_NONE) &&
	    amdgpu_connector->ddc_bus->has_aux) {
		amdgpu_connector->edid = drm_get_edid(connector,
		amdgpu_connector->edid = drm_edid_read_ddc(connector,
							  &amdgpu_connector->ddc_bus->aux.ddc);
	} else if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
		   (connector->connector_type == DRM_MODE_CONNECTOR_eDP)) {
@@ -277,13 +277,13 @@ static void amdgpu_connector_get_edid(struct drm_connector *connector)
		if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT ||
		     dig->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) &&
		    amdgpu_connector->ddc_bus->has_aux)
			amdgpu_connector->edid = drm_get_edid(connector,
			amdgpu_connector->edid = drm_edid_read_ddc(connector,
								  &amdgpu_connector->ddc_bus->aux.ddc);
		else if (amdgpu_connector->ddc_bus)
			amdgpu_connector->edid = drm_get_edid(connector,
			amdgpu_connector->edid = drm_edid_read_ddc(connector,
								  &amdgpu_connector->ddc_bus->adapter);
	} else if (amdgpu_connector->ddc_bus) {
		amdgpu_connector->edid = drm_get_edid(connector,
		amdgpu_connector->edid = drm_edid_read_ddc(connector,
							  &amdgpu_connector->ddc_bus->adapter);
	}

@@ -292,7 +292,7 @@ static void amdgpu_connector_get_edid(struct drm_connector *connector)
		if (((connector->connector_type == DRM_MODE_CONNECTOR_LVDS) ||
		     (connector->connector_type == DRM_MODE_CONNECTOR_eDP))) {
			amdgpu_connector->edid = amdgpu_connector_get_hardcoded_edid(adev);
			drm_connector_update_edid_property(connector, amdgpu_connector->edid);
			drm_edid_connector_update(connector, amdgpu_connector->edid);
		}
	}
}
@@ -311,11 +311,11 @@ static int amdgpu_connector_ddc_get_modes(struct drm_connector *connector)
	int ret;

	if (amdgpu_connector->edid) {
		drm_connector_update_edid_property(connector, amdgpu_connector->edid);
		ret = drm_add_edid_modes(connector, amdgpu_connector->edid);
		drm_edid_connector_update(connector, amdgpu_connector->edid);
		ret = drm_edid_connector_add_modes(connector);
		return ret;
	}
	drm_connector_update_edid_property(connector, NULL);
	drm_edid_connector_update(connector, NULL);
	return 0;
}

@@ -883,7 +883,7 @@ amdgpu_connector_vga_detect(struct drm_connector *connector, bool force)
			ret = connector_status_connected;
		} else {
			amdgpu_connector->use_digital =
				!!(amdgpu_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
				drm_edid_is_digital(amdgpu_connector->edid);

			/* some oems have boards with separate digital and analog connectors
			 * with a shared ddc line (often vga + hdmi)
@@ -1063,7 +1063,7 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force)
			broken_edid = true; /* defer use_digital to later */
		} else {
			amdgpu_connector->use_digital =
				!!(amdgpu_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
				drm_edid_is_digital(amdgpu_connector->edid);

			/* some oems have boards with separate digital and analog connectors
			 * with a shared ddc line (often vga + hdmi)
+1 −1
Original line number Diff line number Diff line
@@ -624,7 +624,7 @@ struct amdgpu_connector {
	bool use_digital;
	/* we need to mind the EDID between detect
	   and get modes due to analog/digital/tvencoder */
	struct edid *edid;
	const struct drm_edid *edid;
	void *con_priv;
	bool dac_load_detect;
	bool detected_by_load; /* if the connection status was determined by load */
+2 −2
Original line number Diff line number Diff line
@@ -1298,7 +1298,7 @@ static void dce_v10_0_audio_write_speaker_allocation(struct drm_encoder *encoder
		return;
	}

	sad_count = drm_edid_to_speaker_allocation(amdgpu_connector->edid, &sadb);
	sad_count = drm_edid_to_speaker_allocation(drm_edid_raw(amdgpu_connector->edid), &sadb);
	if (sad_count < 0) {
		DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
		sad_count = 0;
@@ -1368,7 +1368,7 @@ static void dce_v10_0_audio_write_sad_regs(struct drm_encoder *encoder)
		return;
	}

	sad_count = drm_edid_to_sad(amdgpu_connector->edid, &sads);
	sad_count = drm_edid_to_sad(drm_edid_raw(amdgpu_connector->edid), &sads);
	if (sad_count < 0)
		DRM_ERROR("Couldn't read SADs: %d\n", sad_count);
	if (sad_count <= 0)
+2 −2
Original line number Diff line number Diff line
@@ -1265,7 +1265,7 @@ static void dce_v6_0_audio_write_speaker_allocation(struct drm_encoder *encoder)
		return;
	}

	sad_count = drm_edid_to_speaker_allocation(amdgpu_connector->edid, &sadb);
	sad_count = drm_edid_to_speaker_allocation(drm_edid_raw(amdgpu_connector->edid), &sadb);
	if (sad_count < 0) {
		DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
		sad_count = 0;
@@ -1346,7 +1346,7 @@ static void dce_v6_0_audio_write_sad_regs(struct drm_encoder *encoder)
		return;
	}

	sad_count = drm_edid_to_sad(amdgpu_connector->edid, &sads);
	sad_count = drm_edid_to_sad(drm_edid_raw(amdgpu_connector->edid), &sads);
	if (sad_count < 0)
		DRM_ERROR("Couldn't read SADs: %d\n", sad_count);
	if (sad_count <= 0)
+2 −2
Original line number Diff line number Diff line
@@ -1271,7 +1271,7 @@ static void dce_v8_0_audio_write_speaker_allocation(struct drm_encoder *encoder)
		return;
	}

	sad_count = drm_edid_to_speaker_allocation(amdgpu_connector->edid, &sadb);
	sad_count = drm_edid_to_speaker_allocation(drm_edid_raw(amdgpu_connector->edid), &sadb);
	if (sad_count < 0) {
		DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
		sad_count = 0;
@@ -1339,7 +1339,7 @@ static void dce_v8_0_audio_write_sad_regs(struct drm_encoder *encoder)
		return;
	}

	sad_count = drm_edid_to_sad(amdgpu_connector->edid, &sads);
	sad_count = drm_edid_to_sad(drm_edid_raw(amdgpu_connector->edid), &sads);
	if (sad_count < 0)
		DRM_ERROR("Couldn't read SADs: %d\n", sad_count);
	if (sad_count <= 0)