mirror of
https://github.com/adulau/aha.git
synced 2024-12-30 12:46:17 +00:00
drm/radeon/kms: move active_device setup into encoder fixup()
radeon_encoder->active_device defines the active routing between the encoder and connector. The encoder fixup and dpms functions need to know the active_device to function properly. Setting active_device in the prepare hook was too late in some cases. Signed-off-by: Alex Deucher <alexdeucher@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
fb06ca8f8c
commit
8c2a6d7304
2 changed files with 14 additions and 22 deletions
|
@ -194,6 +194,8 @@ static bool radeon_atom_mode_fixup(struct drm_encoder *encoder,
|
||||||
struct drm_device *dev = encoder->dev;
|
struct drm_device *dev = encoder->dev;
|
||||||
struct radeon_device *rdev = dev->dev_private;
|
struct radeon_device *rdev = dev->dev_private;
|
||||||
|
|
||||||
|
/* set the active encoder to connector routing */
|
||||||
|
radeon_encoder_set_active_device(encoder);
|
||||||
drm_mode_set_crtcinfo(adjusted_mode, 0);
|
drm_mode_set_crtcinfo(adjusted_mode, 0);
|
||||||
|
|
||||||
if (radeon_encoder->rmx_type != RMX_OFF)
|
if (radeon_encoder->rmx_type != RMX_OFF)
|
||||||
|
@ -860,16 +862,9 @@ radeon_atom_encoder_dpms(struct drm_encoder *encoder, int mode)
|
||||||
DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION args;
|
DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION args;
|
||||||
int index = 0;
|
int index = 0;
|
||||||
bool is_dig = false;
|
bool is_dig = false;
|
||||||
int devices;
|
|
||||||
|
|
||||||
memset(&args, 0, sizeof(args));
|
memset(&args, 0, sizeof(args));
|
||||||
|
|
||||||
/* on DPMS off we have no idea if active device is meaningful */
|
|
||||||
if (mode != DRM_MODE_DPMS_ON && !radeon_encoder->active_device)
|
|
||||||
devices = radeon_encoder->devices;
|
|
||||||
else
|
|
||||||
devices = radeon_encoder->active_device;
|
|
||||||
|
|
||||||
DRM_DEBUG("encoder dpms %d to mode %d, devices %08x, active_devices %08x\n",
|
DRM_DEBUG("encoder dpms %d to mode %d, devices %08x, active_devices %08x\n",
|
||||||
radeon_encoder->encoder_id, mode, radeon_encoder->devices,
|
radeon_encoder->encoder_id, mode, radeon_encoder->devices,
|
||||||
radeon_encoder->active_device);
|
radeon_encoder->active_device);
|
||||||
|
@ -900,18 +895,18 @@ radeon_atom_encoder_dpms(struct drm_encoder *encoder, int mode)
|
||||||
break;
|
break;
|
||||||
case ENCODER_OBJECT_ID_INTERNAL_DAC1:
|
case ENCODER_OBJECT_ID_INTERNAL_DAC1:
|
||||||
case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1:
|
case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1:
|
||||||
if (devices & (ATOM_DEVICE_TV_SUPPORT))
|
if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT))
|
||||||
index = GetIndexIntoMasterTable(COMMAND, TV1OutputControl);
|
index = GetIndexIntoMasterTable(COMMAND, TV1OutputControl);
|
||||||
else if (devices & (ATOM_DEVICE_CV_SUPPORT))
|
else if (radeon_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT))
|
||||||
index = GetIndexIntoMasterTable(COMMAND, CV1OutputControl);
|
index = GetIndexIntoMasterTable(COMMAND, CV1OutputControl);
|
||||||
else
|
else
|
||||||
index = GetIndexIntoMasterTable(COMMAND, DAC1OutputControl);
|
index = GetIndexIntoMasterTable(COMMAND, DAC1OutputControl);
|
||||||
break;
|
break;
|
||||||
case ENCODER_OBJECT_ID_INTERNAL_DAC2:
|
case ENCODER_OBJECT_ID_INTERNAL_DAC2:
|
||||||
case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2:
|
case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2:
|
||||||
if (devices & (ATOM_DEVICE_TV_SUPPORT))
|
if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT))
|
||||||
index = GetIndexIntoMasterTable(COMMAND, TV1OutputControl);
|
index = GetIndexIntoMasterTable(COMMAND, TV1OutputControl);
|
||||||
else if (devices & (ATOM_DEVICE_CV_SUPPORT))
|
else if (radeon_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT))
|
||||||
index = GetIndexIntoMasterTable(COMMAND, CV1OutputControl);
|
index = GetIndexIntoMasterTable(COMMAND, CV1OutputControl);
|
||||||
else
|
else
|
||||||
index = GetIndexIntoMasterTable(COMMAND, DAC2OutputControl);
|
index = GetIndexIntoMasterTable(COMMAND, DAC2OutputControl);
|
||||||
|
@ -1254,8 +1249,6 @@ static void radeon_atom_encoder_prepare(struct drm_encoder *encoder)
|
||||||
{
|
{
|
||||||
radeon_atom_output_lock(encoder, true);
|
radeon_atom_output_lock(encoder, true);
|
||||||
radeon_atom_encoder_dpms(encoder, DRM_MODE_DPMS_OFF);
|
radeon_atom_encoder_dpms(encoder, DRM_MODE_DPMS_OFF);
|
||||||
|
|
||||||
radeon_encoder_set_active_device(encoder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void radeon_atom_encoder_commit(struct drm_encoder *encoder)
|
static void radeon_atom_encoder_commit(struct drm_encoder *encoder)
|
||||||
|
|
|
@ -107,8 +107,6 @@ static void radeon_legacy_lvds_prepare(struct drm_encoder *encoder)
|
||||||
else
|
else
|
||||||
radeon_combios_output_lock(encoder, true);
|
radeon_combios_output_lock(encoder, true);
|
||||||
radeon_legacy_lvds_dpms(encoder, DRM_MODE_DPMS_OFF);
|
radeon_legacy_lvds_dpms(encoder, DRM_MODE_DPMS_OFF);
|
||||||
|
|
||||||
radeon_encoder_set_active_device(encoder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void radeon_legacy_lvds_commit(struct drm_encoder *encoder)
|
static void radeon_legacy_lvds_commit(struct drm_encoder *encoder)
|
||||||
|
@ -192,6 +190,8 @@ static bool radeon_legacy_lvds_mode_fixup(struct drm_encoder *encoder,
|
||||||
{
|
{
|
||||||
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
|
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
|
||||||
|
|
||||||
|
/* set the active encoder to connector routing */
|
||||||
|
radeon_encoder_set_active_device(encoder);
|
||||||
drm_mode_set_crtcinfo(adjusted_mode, 0);
|
drm_mode_set_crtcinfo(adjusted_mode, 0);
|
||||||
|
|
||||||
if (radeon_encoder->rmx_type != RMX_OFF)
|
if (radeon_encoder->rmx_type != RMX_OFF)
|
||||||
|
@ -218,7 +218,8 @@ static bool radeon_legacy_primary_dac_mode_fixup(struct drm_encoder *encoder,
|
||||||
struct drm_display_mode *mode,
|
struct drm_display_mode *mode,
|
||||||
struct drm_display_mode *adjusted_mode)
|
struct drm_display_mode *adjusted_mode)
|
||||||
{
|
{
|
||||||
|
/* set the active encoder to connector routing */
|
||||||
|
radeon_encoder_set_active_device(encoder);
|
||||||
drm_mode_set_crtcinfo(adjusted_mode, 0);
|
drm_mode_set_crtcinfo(adjusted_mode, 0);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -272,7 +273,6 @@ static void radeon_legacy_primary_dac_prepare(struct drm_encoder *encoder)
|
||||||
else
|
else
|
||||||
radeon_combios_output_lock(encoder, true);
|
radeon_combios_output_lock(encoder, true);
|
||||||
radeon_legacy_primary_dac_dpms(encoder, DRM_MODE_DPMS_OFF);
|
radeon_legacy_primary_dac_dpms(encoder, DRM_MODE_DPMS_OFF);
|
||||||
radeon_encoder_set_active_device(encoder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void radeon_legacy_primary_dac_commit(struct drm_encoder *encoder)
|
static void radeon_legacy_primary_dac_commit(struct drm_encoder *encoder)
|
||||||
|
@ -468,7 +468,6 @@ static void radeon_legacy_tmds_int_prepare(struct drm_encoder *encoder)
|
||||||
else
|
else
|
||||||
radeon_combios_output_lock(encoder, true);
|
radeon_combios_output_lock(encoder, true);
|
||||||
radeon_legacy_tmds_int_dpms(encoder, DRM_MODE_DPMS_OFF);
|
radeon_legacy_tmds_int_dpms(encoder, DRM_MODE_DPMS_OFF);
|
||||||
radeon_encoder_set_active_device(encoder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void radeon_legacy_tmds_int_commit(struct drm_encoder *encoder)
|
static void radeon_legacy_tmds_int_commit(struct drm_encoder *encoder)
|
||||||
|
@ -593,7 +592,8 @@ static bool radeon_legacy_tmds_ext_mode_fixup(struct drm_encoder *encoder,
|
||||||
struct drm_display_mode *mode,
|
struct drm_display_mode *mode,
|
||||||
struct drm_display_mode *adjusted_mode)
|
struct drm_display_mode *adjusted_mode)
|
||||||
{
|
{
|
||||||
|
/* set the active encoder to connector routing */
|
||||||
|
radeon_encoder_set_active_device(encoder);
|
||||||
drm_mode_set_crtcinfo(adjusted_mode, 0);
|
drm_mode_set_crtcinfo(adjusted_mode, 0);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -636,7 +636,6 @@ static void radeon_legacy_tmds_ext_prepare(struct drm_encoder *encoder)
|
||||||
else
|
else
|
||||||
radeon_combios_output_lock(encoder, true);
|
radeon_combios_output_lock(encoder, true);
|
||||||
radeon_legacy_tmds_ext_dpms(encoder, DRM_MODE_DPMS_OFF);
|
radeon_legacy_tmds_ext_dpms(encoder, DRM_MODE_DPMS_OFF);
|
||||||
radeon_encoder_set_active_device(encoder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void radeon_legacy_tmds_ext_commit(struct drm_encoder *encoder)
|
static void radeon_legacy_tmds_ext_commit(struct drm_encoder *encoder)
|
||||||
|
@ -735,7 +734,8 @@ static bool radeon_legacy_tv_dac_mode_fixup(struct drm_encoder *encoder,
|
||||||
struct drm_display_mode *mode,
|
struct drm_display_mode *mode,
|
||||||
struct drm_display_mode *adjusted_mode)
|
struct drm_display_mode *adjusted_mode)
|
||||||
{
|
{
|
||||||
|
/* set the active encoder to connector routing */
|
||||||
|
radeon_encoder_set_active_device(encoder);
|
||||||
drm_mode_set_crtcinfo(adjusted_mode, 0);
|
drm_mode_set_crtcinfo(adjusted_mode, 0);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -839,7 +839,6 @@ static void radeon_legacy_tv_dac_prepare(struct drm_encoder *encoder)
|
||||||
else
|
else
|
||||||
radeon_combios_output_lock(encoder, true);
|
radeon_combios_output_lock(encoder, true);
|
||||||
radeon_legacy_tv_dac_dpms(encoder, DRM_MODE_DPMS_OFF);
|
radeon_legacy_tv_dac_dpms(encoder, DRM_MODE_DPMS_OFF);
|
||||||
radeon_encoder_set_active_device(encoder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void radeon_legacy_tv_dac_commit(struct drm_encoder *encoder)
|
static void radeon_legacy_tv_dac_commit(struct drm_encoder *encoder)
|
||||||
|
|
Loading…
Reference in a new issue