diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2011-10-28 18:18:50 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-11-01 12:05:12 -0400 |
commit | 24153dd35edda344936ebf0f00ce477f7ed7df3b (patch) | |
tree | 3ac05521092a14bc0c1de8f6e8e863f98655cc4d /drivers | |
parent | 3f03ced88087923863aa96a5773072ef2417bbed (diff) |
drm/radeon/kms: make atombios_dvo_setup() version based
Use table version numbers for param setup.
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/radeon/atombios_encoders.c | 59 |
1 files changed, 38 insertions, 21 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c index 36274fac48ac..7d91d3ca9c69 100644 --- a/drivers/gpu/drm/radeon/atombios_encoders.c +++ b/drivers/gpu/drm/radeon/atombios_encoders.c | |||
@@ -239,32 +239,49 @@ atombios_dvo_setup(struct drm_encoder *encoder, int action) | |||
239 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); | 239 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); |
240 | union dvo_encoder_control args; | 240 | union dvo_encoder_control args; |
241 | int index = GetIndexIntoMasterTable(COMMAND, DVOEncoderControl); | 241 | int index = GetIndexIntoMasterTable(COMMAND, DVOEncoderControl); |
242 | uint8_t frev, crev; | ||
242 | 243 | ||
243 | memset(&args, 0, sizeof(args)); | 244 | memset(&args, 0, sizeof(args)); |
244 | 245 | ||
245 | if (ASIC_IS_DCE3(rdev)) { | 246 | if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) |
246 | /* DCE3+ */ | 247 | return; |
247 | args.dvo_v3.ucAction = action; | ||
248 | args.dvo_v3.usPixelClock = cpu_to_le16(radeon_encoder->pixel_clock / 10); | ||
249 | args.dvo_v3.ucDVOConfig = 0; /* XXX */ | ||
250 | } else if (ASIC_IS_DCE2(rdev)) { | ||
251 | /* DCE2 (pre-DCE3 R6xx, RS600/690/740 */ | ||
252 | args.dvo.sDVOEncoder.ucAction = action; | ||
253 | args.dvo.sDVOEncoder.usPixelClock = cpu_to_le16(radeon_encoder->pixel_clock / 10); | ||
254 | /* DFP1, CRT1, TV1 depending on the type of port */ | ||
255 | args.dvo.sDVOEncoder.ucDeviceType = ATOM_DEVICE_DFP1_INDEX; | ||
256 | |||
257 | if (radeon_encoder->pixel_clock > 165000) | ||
258 | args.dvo.sDVOEncoder.usDevAttr.sDigAttrib.ucAttribute |= PANEL_ENCODER_MISC_DUAL; | ||
259 | } else { | ||
260 | /* R4xx, R5xx */ | ||
261 | args.ext_tmds.sXTmdsEncoder.ucEnable = action; | ||
262 | 248 | ||
263 | if (radeon_encoder->pixel_clock > 165000) | 249 | switch (frev) { |
264 | args.ext_tmds.sXTmdsEncoder.ucMisc |= PANEL_ENCODER_MISC_DUAL; | 250 | case 1: |
251 | switch (crev) { | ||
252 | case 1: | ||
253 | /* R4xx, R5xx */ | ||
254 | args.ext_tmds.sXTmdsEncoder.ucEnable = action; | ||
255 | |||
256 | if (radeon_encoder->pixel_clock > 165000) | ||
257 | args.ext_tmds.sXTmdsEncoder.ucMisc |= PANEL_ENCODER_MISC_DUAL; | ||
258 | |||
259 | args.ext_tmds.sXTmdsEncoder.ucMisc |= ATOM_PANEL_MISC_888RGB; | ||
260 | break; | ||
261 | case 2: | ||
262 | /* RS600/690/740 */ | ||
263 | args.dvo.sDVOEncoder.ucAction = action; | ||
264 | args.dvo.sDVOEncoder.usPixelClock = cpu_to_le16(radeon_encoder->pixel_clock / 10); | ||
265 | /* DFP1, CRT1, TV1 depending on the type of port */ | ||
266 | args.dvo.sDVOEncoder.ucDeviceType = ATOM_DEVICE_DFP1_INDEX; | ||
265 | 267 | ||
266 | /*if (pScrn->rgbBits == 8)*/ | 268 | if (radeon_encoder->pixel_clock > 165000) |
267 | args.ext_tmds.sXTmdsEncoder.ucMisc |= ATOM_PANEL_MISC_888RGB; | 269 | args.dvo.sDVOEncoder.usDevAttr.sDigAttrib.ucAttribute |= PANEL_ENCODER_MISC_DUAL; |
270 | break; | ||
271 | case 3: | ||
272 | /* R6xx */ | ||
273 | args.dvo_v3.ucAction = action; | ||
274 | args.dvo_v3.usPixelClock = cpu_to_le16(radeon_encoder->pixel_clock / 10); | ||
275 | args.dvo_v3.ucDVOConfig = 0; /* XXX */ | ||
276 | break; | ||
277 | default: | ||
278 | DRM_ERROR("Unknown table version %d, %d\n", frev, crev); | ||
279 | break; | ||
280 | } | ||
281 | break; | ||
282 | default: | ||
283 | DRM_ERROR("Unknown table version %d, %d\n", frev, crev); | ||
284 | break; | ||
268 | } | 285 | } |
269 | 286 | ||
270 | atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); | 287 | atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); |