diff mbox

drm/radeon: fix dpms on/off on trinity/aruba v2

Message ID 1343163971-1101-1-git-send-email-j.glisse@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jerome Glisse July 24, 2012, 9:06 p.m. UTC
From: Jerome Glisse <jglisse@redhat.com>

The external encoder need to be setup again before enabling the
transmiter. This seems to be only needed on some trinity/aruba
to fix dpms on.

v2: Add comment, only setup again on dce6 ie aruba or newer.

Cc: <stable@kernel.org>
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
---
 drivers/gpu/drm/radeon/atombios_encoders.c |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

Comments

Alex Deucher July 24, 2012, 9:42 p.m. UTC | #1
On Tue, Jul 24, 2012 at 5:06 PM,  <j.glisse@gmail.com> wrote:
> From: Jerome Glisse <jglisse@redhat.com>
>
> The external encoder need to be setup again before enabling the
> transmiter. This seems to be only needed on some trinity/aruba
> to fix dpms on.
>
> v2: Add comment, only setup again on dce6 ie aruba or newer.
>
> Cc: <stable@kernel.org>
> Signed-off-by: Jerome Glisse <jglisse@redhat.com>

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

> ---
>  drivers/gpu/drm/radeon/atombios_encoders.c |   12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
> index 486ccdf..8676b1b 100644
> --- a/drivers/gpu/drm/radeon/atombios_encoders.c
> +++ b/drivers/gpu/drm/radeon/atombios_encoders.c
> @@ -1392,10 +1392,18 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode)
>         case DRM_MODE_DPMS_ON:
>                 /* some early dce3.2 boards have a bug in their transmitter control table */
>                 if ((rdev->family == CHIP_RV710) || (rdev->family == CHIP_RV730) ||
> -                   ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev))
> +                   ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev)) {
> +                       if (ASIC_IS_DCE6(rdev)) {
> +                               /* It seems we need to call ATOM_ENCODER_CMD_SETUP again
> +                                * before reenabling encoder on DPMS ON, otherwise we never
> +                                * get picture
> +                                */
> +                               atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_SETUP, 0);
> +                       }
>                         atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);
> -               else
> +               } else {
>                         atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
> +               }
>                 if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) {
>                         if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
>                                 atombios_set_edp_panel_power(connector,
> --
> 1.7.10.4
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
diff mbox

Patch

diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
index 486ccdf..8676b1b 100644
--- a/drivers/gpu/drm/radeon/atombios_encoders.c
+++ b/drivers/gpu/drm/radeon/atombios_encoders.c
@@ -1392,10 +1392,18 @@  radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode)
 	case DRM_MODE_DPMS_ON:
 		/* some early dce3.2 boards have a bug in their transmitter control table */
 		if ((rdev->family == CHIP_RV710) || (rdev->family == CHIP_RV730) ||
-		    ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev))
+		    ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev)) {
+			if (ASIC_IS_DCE6(rdev)) {
+				/* It seems we need to call ATOM_ENCODER_CMD_SETUP again
+				 * before reenabling encoder on DPMS ON, otherwise we never
+				 * get picture
+				 */
+				atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_SETUP, 0);
+			}
 			atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);
-		else
+		} else {
 			atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
+		}
 		if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) {
 			if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
 				atombios_set_edp_panel_power(connector,