Commit e2a02434 authored by Timur Kristóf's avatar Timur Kristóf Committed by Alex Deucher
Browse files

drm/amd/display: Initialize DAC in DCE link encoder using VBIOS



The VBIOS DAC1EncoderControl() function can initialize the DAC,
by writing board-specific values to certain registers.
Call this at link encoder hardware initialization time similarly
to how the equivalent UNIPHYTransmitterControl initialization
is done.

This fixes DAC output on the Radeon HD 7790.

Also remove the ENCODER_CONTROL_SETUP enum from the
dac_encoder_control_prepare_params function which is actually
not a supported operation for DAC encoders.

Fixes: 0fbe321a ("drm/amd/display: Implement DCE analog link encoders (v2)")
Signed-off-by: default avatarTimur Kristóf <timur.kristof@gmail.com>
Tested-by: default avatarMauro Rossi <issor.oruam@gmail.com>
Suggested-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarAlex Hung <alex.hung@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent e021ee99
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -1874,8 +1874,7 @@ static void dac_encoder_control_prepare_params(
	uint8_t dac_standard)
{
	params->ucDacStandard = dac_standard;
	if (action == ENCODER_CONTROL_SETUP ||
	    action == ENCODER_CONTROL_INIT)
	if (action == ENCODER_CONTROL_INIT)
		params->ucAction = ATOM_ENCODER_INIT;
	else if (action == ENCODER_CONTROL_ENABLE)
		params->ucAction = ATOM_ENABLE;
+10 −0
Original line number Diff line number Diff line
@@ -1036,6 +1036,16 @@ void dce110_link_encoder_hw_init(
	cntl.coherent = false;
	cntl.hpd_sel = enc110->base.hpd_source;

	if (enc110->base.analog_engine != ENGINE_ID_UNKNOWN) {
		result = link_dac_encoder_control(enc110, ENCODER_CONTROL_INIT, 0);
		if (result != BP_RESULT_OK) {
			DC_LOG_ERROR("%s: Failed to execute VBIOS command table for DAC!\n",
				__func__);
			BREAK_TO_DEBUGGER();
			return;
		}
	}

	/* The code below is only applicable to encoders with a digital transmitter. */
	if (enc110->base.transmitter == TRANSMITTER_UNKNOWN)
		return;