diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_legacy_encoders.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_legacy_encoders.c | 71 |
1 files changed, 17 insertions, 54 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c index a1d9d29319b2..ae554bfa0548 100644 --- a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c +++ b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c | |||
@@ -184,9 +184,9 @@ static void radeon_legacy_lvds_mode_set(struct drm_encoder *encoder, | |||
184 | radeon_combios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); | 184 | radeon_combios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); |
185 | } | 185 | } |
186 | 186 | ||
187 | static bool radeon_legacy_lvds_mode_fixup(struct drm_encoder *encoder, | 187 | static bool radeon_legacy_mode_fixup(struct drm_encoder *encoder, |
188 | struct drm_display_mode *mode, | 188 | struct drm_display_mode *mode, |
189 | struct drm_display_mode *adjusted_mode) | 189 | struct drm_display_mode *adjusted_mode) |
190 | { | 190 | { |
191 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); | 191 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); |
192 | 192 | ||
@@ -194,15 +194,22 @@ static bool radeon_legacy_lvds_mode_fixup(struct drm_encoder *encoder, | |||
194 | radeon_encoder_set_active_device(encoder); | 194 | radeon_encoder_set_active_device(encoder); |
195 | drm_mode_set_crtcinfo(adjusted_mode, 0); | 195 | drm_mode_set_crtcinfo(adjusted_mode, 0); |
196 | 196 | ||
197 | if (radeon_encoder->rmx_type != RMX_OFF) | 197 | /* get the native mode for LVDS */ |
198 | radeon_rmx_mode_fixup(encoder, mode, adjusted_mode); | 198 | if (radeon_encoder->active_device & (ATOM_DEVICE_LCD_SUPPORT)) { |
199 | struct drm_display_mode *native_mode = &radeon_encoder->native_mode; | ||
200 | int mode_id = adjusted_mode->base.id; | ||
201 | *adjusted_mode = *native_mode; | ||
202 | adjusted_mode->hdisplay = mode->hdisplay; | ||
203 | adjusted_mode->vdisplay = mode->vdisplay; | ||
204 | adjusted_mode->base.id = mode_id; | ||
205 | } | ||
199 | 206 | ||
200 | return true; | 207 | return true; |
201 | } | 208 | } |
202 | 209 | ||
203 | static const struct drm_encoder_helper_funcs radeon_legacy_lvds_helper_funcs = { | 210 | static const struct drm_encoder_helper_funcs radeon_legacy_lvds_helper_funcs = { |
204 | .dpms = radeon_legacy_lvds_dpms, | 211 | .dpms = radeon_legacy_lvds_dpms, |
205 | .mode_fixup = radeon_legacy_lvds_mode_fixup, | 212 | .mode_fixup = radeon_legacy_mode_fixup, |
206 | .prepare = radeon_legacy_lvds_prepare, | 213 | .prepare = radeon_legacy_lvds_prepare, |
207 | .mode_set = radeon_legacy_lvds_mode_set, | 214 | .mode_set = radeon_legacy_lvds_mode_set, |
208 | .commit = radeon_legacy_lvds_commit, | 215 | .commit = radeon_legacy_lvds_commit, |
@@ -214,17 +221,6 @@ static const struct drm_encoder_funcs radeon_legacy_lvds_enc_funcs = { | |||
214 | .destroy = radeon_enc_destroy, | 221 | .destroy = radeon_enc_destroy, |
215 | }; | 222 | }; |
216 | 223 | ||
217 | static bool radeon_legacy_primary_dac_mode_fixup(struct drm_encoder *encoder, | ||
218 | struct drm_display_mode *mode, | ||
219 | struct drm_display_mode *adjusted_mode) | ||
220 | { | ||
221 | /* set the active encoder to connector routing */ | ||
222 | radeon_encoder_set_active_device(encoder); | ||
223 | drm_mode_set_crtcinfo(adjusted_mode, 0); | ||
224 | |||
225 | return true; | ||
226 | } | ||
227 | |||
228 | static void radeon_legacy_primary_dac_dpms(struct drm_encoder *encoder, int mode) | 224 | static void radeon_legacy_primary_dac_dpms(struct drm_encoder *encoder, int mode) |
229 | { | 225 | { |
230 | struct drm_device *dev = encoder->dev; | 226 | struct drm_device *dev = encoder->dev; |
@@ -410,7 +406,7 @@ static enum drm_connector_status radeon_legacy_primary_dac_detect(struct drm_enc | |||
410 | 406 | ||
411 | static const struct drm_encoder_helper_funcs radeon_legacy_primary_dac_helper_funcs = { | 407 | static const struct drm_encoder_helper_funcs radeon_legacy_primary_dac_helper_funcs = { |
412 | .dpms = radeon_legacy_primary_dac_dpms, | 408 | .dpms = radeon_legacy_primary_dac_dpms, |
413 | .mode_fixup = radeon_legacy_primary_dac_mode_fixup, | 409 | .mode_fixup = radeon_legacy_mode_fixup, |
414 | .prepare = radeon_legacy_primary_dac_prepare, | 410 | .prepare = radeon_legacy_primary_dac_prepare, |
415 | .mode_set = radeon_legacy_primary_dac_mode_set, | 411 | .mode_set = radeon_legacy_primary_dac_mode_set, |
416 | .commit = radeon_legacy_primary_dac_commit, | 412 | .commit = radeon_legacy_primary_dac_commit, |
@@ -423,17 +419,6 @@ static const struct drm_encoder_funcs radeon_legacy_primary_dac_enc_funcs = { | |||
423 | .destroy = radeon_enc_destroy, | 419 | .destroy = radeon_enc_destroy, |
424 | }; | 420 | }; |
425 | 421 | ||
426 | static bool radeon_legacy_tmds_int_mode_fixup(struct drm_encoder *encoder, | ||
427 | struct drm_display_mode *mode, | ||
428 | struct drm_display_mode *adjusted_mode) | ||
429 | { | ||
430 | /* set the active encoder to connector routing */ | ||
431 | radeon_encoder_set_active_device(encoder); | ||
432 | drm_mode_set_crtcinfo(adjusted_mode, 0); | ||
433 | |||
434 | return true; | ||
435 | } | ||
436 | |||
437 | static void radeon_legacy_tmds_int_dpms(struct drm_encoder *encoder, int mode) | 422 | static void radeon_legacy_tmds_int_dpms(struct drm_encoder *encoder, int mode) |
438 | { | 423 | { |
439 | struct drm_device *dev = encoder->dev; | 424 | struct drm_device *dev = encoder->dev; |
@@ -585,7 +570,7 @@ static void radeon_legacy_tmds_int_mode_set(struct drm_encoder *encoder, | |||
585 | 570 | ||
586 | static const struct drm_encoder_helper_funcs radeon_legacy_tmds_int_helper_funcs = { | 571 | static const struct drm_encoder_helper_funcs radeon_legacy_tmds_int_helper_funcs = { |
587 | .dpms = radeon_legacy_tmds_int_dpms, | 572 | .dpms = radeon_legacy_tmds_int_dpms, |
588 | .mode_fixup = radeon_legacy_tmds_int_mode_fixup, | 573 | .mode_fixup = radeon_legacy_mode_fixup, |
589 | .prepare = radeon_legacy_tmds_int_prepare, | 574 | .prepare = radeon_legacy_tmds_int_prepare, |
590 | .mode_set = radeon_legacy_tmds_int_mode_set, | 575 | .mode_set = radeon_legacy_tmds_int_mode_set, |
591 | .commit = radeon_legacy_tmds_int_commit, | 576 | .commit = radeon_legacy_tmds_int_commit, |
@@ -597,17 +582,6 @@ static const struct drm_encoder_funcs radeon_legacy_tmds_int_enc_funcs = { | |||
597 | .destroy = radeon_enc_destroy, | 582 | .destroy = radeon_enc_destroy, |
598 | }; | 583 | }; |
599 | 584 | ||
600 | static bool radeon_legacy_tmds_ext_mode_fixup(struct drm_encoder *encoder, | ||
601 | struct drm_display_mode *mode, | ||
602 | struct drm_display_mode *adjusted_mode) | ||
603 | { | ||
604 | /* set the active encoder to connector routing */ | ||
605 | radeon_encoder_set_active_device(encoder); | ||
606 | drm_mode_set_crtcinfo(adjusted_mode, 0); | ||
607 | |||
608 | return true; | ||
609 | } | ||
610 | |||
611 | static void radeon_legacy_tmds_ext_dpms(struct drm_encoder *encoder, int mode) | 585 | static void radeon_legacy_tmds_ext_dpms(struct drm_encoder *encoder, int mode) |
612 | { | 586 | { |
613 | struct drm_device *dev = encoder->dev; | 587 | struct drm_device *dev = encoder->dev; |
@@ -742,7 +716,7 @@ static void radeon_ext_tmds_enc_destroy(struct drm_encoder *encoder) | |||
742 | 716 | ||
743 | static const struct drm_encoder_helper_funcs radeon_legacy_tmds_ext_helper_funcs = { | 717 | static const struct drm_encoder_helper_funcs radeon_legacy_tmds_ext_helper_funcs = { |
744 | .dpms = radeon_legacy_tmds_ext_dpms, | 718 | .dpms = radeon_legacy_tmds_ext_dpms, |
745 | .mode_fixup = radeon_legacy_tmds_ext_mode_fixup, | 719 | .mode_fixup = radeon_legacy_mode_fixup, |
746 | .prepare = radeon_legacy_tmds_ext_prepare, | 720 | .prepare = radeon_legacy_tmds_ext_prepare, |
747 | .mode_set = radeon_legacy_tmds_ext_mode_set, | 721 | .mode_set = radeon_legacy_tmds_ext_mode_set, |
748 | .commit = radeon_legacy_tmds_ext_commit, | 722 | .commit = radeon_legacy_tmds_ext_commit, |
@@ -754,17 +728,6 @@ static const struct drm_encoder_funcs radeon_legacy_tmds_ext_enc_funcs = { | |||
754 | .destroy = radeon_ext_tmds_enc_destroy, | 728 | .destroy = radeon_ext_tmds_enc_destroy, |
755 | }; | 729 | }; |
756 | 730 | ||
757 | static bool radeon_legacy_tv_dac_mode_fixup(struct drm_encoder *encoder, | ||
758 | struct drm_display_mode *mode, | ||
759 | struct drm_display_mode *adjusted_mode) | ||
760 | { | ||
761 | /* set the active encoder to connector routing */ | ||
762 | radeon_encoder_set_active_device(encoder); | ||
763 | drm_mode_set_crtcinfo(adjusted_mode, 0); | ||
764 | |||
765 | return true; | ||
766 | } | ||
767 | |||
768 | static void radeon_legacy_tv_dac_dpms(struct drm_encoder *encoder, int mode) | 731 | static void radeon_legacy_tv_dac_dpms(struct drm_encoder *encoder, int mode) |
769 | { | 732 | { |
770 | struct drm_device *dev = encoder->dev; | 733 | struct drm_device *dev = encoder->dev; |
@@ -1281,7 +1244,7 @@ static enum drm_connector_status radeon_legacy_tv_dac_detect(struct drm_encoder | |||
1281 | 1244 | ||
1282 | static const struct drm_encoder_helper_funcs radeon_legacy_tv_dac_helper_funcs = { | 1245 | static const struct drm_encoder_helper_funcs radeon_legacy_tv_dac_helper_funcs = { |
1283 | .dpms = radeon_legacy_tv_dac_dpms, | 1246 | .dpms = radeon_legacy_tv_dac_dpms, |
1284 | .mode_fixup = radeon_legacy_tv_dac_mode_fixup, | 1247 | .mode_fixup = radeon_legacy_mode_fixup, |
1285 | .prepare = radeon_legacy_tv_dac_prepare, | 1248 | .prepare = radeon_legacy_tv_dac_prepare, |
1286 | .mode_set = radeon_legacy_tv_dac_mode_set, | 1249 | .mode_set = radeon_legacy_tv_dac_mode_set, |
1287 | .commit = radeon_legacy_tv_dac_commit, | 1250 | .commit = radeon_legacy_tv_dac_commit, |