diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2009-10-08 15:09:31 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2009-10-11 23:42:44 -0400 |
commit | 5a9bcacc0a56f0d9577494e834519480018a6cc3 (patch) | |
tree | f46fe410f8c875cf28d3905d23fdffcea4f374c0 /drivers/gpu/drm/radeon/radeon_encoders.c | |
parent | 2606c88608122339cbd5c6b5c149a2eb74ccfe9e (diff) |
drm/radeon/kms/atom: rework crtc modeset
- clean up tv timing handling
- unify SetCRTC_Timing and SetCRTC_UsingDTDTiming
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_encoders.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_encoders.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c index a65ab1a0dad2..3e58c6eccea5 100644 --- a/drivers/gpu/drm/radeon/radeon_encoders.c +++ b/drivers/gpu/drm/radeon/radeon_encoders.c | |||
@@ -31,6 +31,10 @@ | |||
31 | 31 | ||
32 | extern int atom_debug; | 32 | extern int atom_debug; |
33 | 33 | ||
34 | /* evil but including atombios.h is much worse */ | ||
35 | bool radeon_atom_get_tv_timings(struct radeon_device *rdev, int index, | ||
36 | struct drm_display_mode *mode); | ||
37 | |||
34 | uint32_t | 38 | uint32_t |
35 | radeon_get_encoder_id(struct drm_device *dev, uint32_t supported_device, uint8_t dac) | 39 | radeon_get_encoder_id(struct drm_device *dev, uint32_t supported_device, uint8_t dac) |
36 | { | 40 | { |
@@ -219,6 +223,8 @@ static bool radeon_atom_mode_fixup(struct drm_encoder *encoder, | |||
219 | struct drm_display_mode *adjusted_mode) | 223 | struct drm_display_mode *adjusted_mode) |
220 | { | 224 | { |
221 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); | 225 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); |
226 | struct drm_device *dev = encoder->dev; | ||
227 | struct radeon_device *rdev = dev->dev_private; | ||
222 | 228 | ||
223 | drm_mode_set_crtcinfo(adjusted_mode, 0); | 229 | drm_mode_set_crtcinfo(adjusted_mode, 0); |
224 | 230 | ||
@@ -230,6 +236,18 @@ static bool radeon_atom_mode_fixup(struct drm_encoder *encoder, | |||
230 | && (mode->crtc_vsync_start < (mode->crtc_vdisplay + 2))) | 236 | && (mode->crtc_vsync_start < (mode->crtc_vdisplay + 2))) |
231 | adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + 2; | 237 | adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + 2; |
232 | 238 | ||
239 | if (radeon_encoder->active_device & ATOM_DEVICE_TV_SUPPORT) { | ||
240 | struct radeon_encoder_atom_dac *tv_dac = radeon_encoder->enc_priv; | ||
241 | if (tv_dac) { | ||
242 | if (tv_dac->tv_std == TV_STD_NTSC || | ||
243 | tv_dac->tv_std == TV_STD_NTSC_J || | ||
244 | tv_dac->tv_std == TV_STD_PAL_M) | ||
245 | radeon_atom_get_tv_timings(rdev, 0, adjusted_mode); | ||
246 | else | ||
247 | radeon_atom_get_tv_timings(rdev, 1, adjusted_mode); | ||
248 | } | ||
249 | } | ||
250 | |||
233 | return true; | 251 | return true; |
234 | } | 252 | } |
235 | 253 | ||