Rev 5179 | Rev 6104 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5179 | Rev 5271 | ||
---|---|---|---|
Line 36... | Line 36... | ||
36 | extern void dce6_afmt_write_sad_regs(struct drm_encoder *encoder); |
36 | extern void dce6_afmt_write_sad_regs(struct drm_encoder *encoder); |
37 | extern void dce6_afmt_select_pin(struct drm_encoder *encoder); |
37 | extern void dce6_afmt_select_pin(struct drm_encoder *encoder); |
38 | extern void dce6_afmt_write_latency_fields(struct drm_encoder *encoder, |
38 | extern void dce6_afmt_write_latency_fields(struct drm_encoder *encoder, |
39 | struct drm_display_mode *mode); |
39 | struct drm_display_mode *mode); |
Line -... | Line 40... | ||
- | 40 | ||
- | 41 | /* enable the audio stream */ |
|
- | 42 | static void dce4_audio_enable(struct radeon_device *rdev, |
|
- | 43 | struct r600_audio_pin *pin, |
|
- | 44 | u8 enable_mask) |
|
- | 45 | { |
|
- | 46 | u32 tmp = RREG32(AZ_HOT_PLUG_CONTROL); |
|
- | 47 | ||
- | 48 | if (!pin) |
|
- | 49 | return; |
|
- | 50 | ||
- | 51 | if (enable_mask) { |
|
- | 52 | tmp |= AUDIO_ENABLED; |
|
- | 53 | if (enable_mask & 1) |
|
- | 54 | tmp |= PIN0_AUDIO_ENABLED; |
|
- | 55 | if (enable_mask & 2) |
|
- | 56 | tmp |= PIN1_AUDIO_ENABLED; |
|
- | 57 | if (enable_mask & 4) |
|
- | 58 | tmp |= PIN2_AUDIO_ENABLED; |
|
- | 59 | if (enable_mask & 8) |
|
- | 60 | tmp |= PIN3_AUDIO_ENABLED; |
|
- | 61 | } else { |
|
- | 62 | tmp &= ~(AUDIO_ENABLED | |
|
- | 63 | PIN0_AUDIO_ENABLED | |
|
- | 64 | PIN1_AUDIO_ENABLED | |
|
- | 65 | PIN2_AUDIO_ENABLED | |
|
- | 66 | PIN3_AUDIO_ENABLED); |
|
- | 67 | } |
|
- | 68 | ||
- | 69 | WREG32(AZ_HOT_PLUG_CONTROL, tmp); |
|
- | 70 | } |
|
40 | 71 | ||
41 | /* |
72 | /* |
42 | * update the N and CTS parameters for a given pixel clock rate |
73 | * update the N and CTS parameters for a given pixel clock rate |
43 | */ |
74 | */ |
44 | static void evergreen_hdmi_update_ACR(struct drm_encoder *encoder, uint32_t clock) |
75 | static void evergreen_hdmi_update_ACR(struct drm_encoder *encoder, uint32_t clock) |
Line 100... | Line 131... | ||
100 | { |
131 | { |
101 | struct radeon_device *rdev = encoder->dev->dev_private; |
132 | struct radeon_device *rdev = encoder->dev->dev_private; |
102 | struct drm_connector *connector; |
133 | struct drm_connector *connector; |
103 | struct radeon_connector *radeon_connector = NULL; |
134 | struct radeon_connector *radeon_connector = NULL; |
104 | u32 tmp; |
135 | u32 tmp; |
105 | u8 *sadb; |
136 | u8 *sadb = NULL; |
106 | int sad_count; |
137 | int sad_count; |
Line 107... | Line 138... | ||
107 | 138 | ||
108 | list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) { |
139 | list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) { |
109 | if (connector->encoder == encoder) { |
140 | if (connector->encoder == encoder) { |
Line 316... | Line 347... | ||
316 | } |
347 | } |
Line 317... | Line 348... | ||
317 | 348 | ||
318 | /* disable audio prior to setting up hw */ |
349 | /* disable audio prior to setting up hw */ |
319 | if (ASIC_IS_DCE6(rdev)) { |
350 | if (ASIC_IS_DCE6(rdev)) { |
320 | dig->afmt->pin = dce6_audio_get_pin(rdev); |
351 | dig->afmt->pin = dce6_audio_get_pin(rdev); |
321 | dce6_audio_enable(rdev, dig->afmt->pin, false); |
352 | dce6_audio_enable(rdev, dig->afmt->pin, 0); |
322 | } else { |
353 | } else { |
323 | dig->afmt->pin = r600_audio_get_pin(rdev); |
354 | dig->afmt->pin = r600_audio_get_pin(rdev); |
324 | r600_audio_enable(rdev, dig->afmt->pin, false); |
355 | dce4_audio_enable(rdev, dig->afmt->pin, 0); |
Line 325... | Line 356... | ||
325 | } |
356 | } |
Line 326... | Line 357... | ||
326 | 357 | ||
Line 461... | Line 492... | ||
461 | WREG32(AFMT_RAMP_CONTROL2 + offset, 0x00000001); |
492 | WREG32(AFMT_RAMP_CONTROL2 + offset, 0x00000001); |
462 | WREG32(AFMT_RAMP_CONTROL3 + offset, 0x00000001); |
493 | WREG32(AFMT_RAMP_CONTROL3 + offset, 0x00000001); |
Line 463... | Line 494... | ||
463 | 494 | ||
464 | /* enable audio after to setting up hw */ |
495 | /* enable audio after to setting up hw */ |
465 | if (ASIC_IS_DCE6(rdev)) |
496 | if (ASIC_IS_DCE6(rdev)) |
466 | dce6_audio_enable(rdev, dig->afmt->pin, true); |
497 | dce6_audio_enable(rdev, dig->afmt->pin, 1); |
467 | else |
498 | else |
468 | r600_audio_enable(rdev, dig->afmt->pin, true); |
499 | dce4_audio_enable(rdev, dig->afmt->pin, 0xf); |
Line 469... | Line 500... | ||
469 | } |
500 | } |
470 | 501 | ||
- | 502 | void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable) |
|
- | 503 | { |
|
471 | void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable) |
504 | struct drm_device *dev = encoder->dev; |
472 | { |
505 | struct radeon_device *rdev = dev->dev_private; |
Line 473... | Line 506... | ||
473 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); |
506 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); |
474 | struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; |
507 | struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; |
Line 480... | Line 513... | ||
480 | if (enable && dig->afmt->enabled) |
513 | if (enable && dig->afmt->enabled) |
481 | return; |
514 | return; |
482 | if (!enable && !dig->afmt->enabled) |
515 | if (!enable && !dig->afmt->enabled) |
483 | return; |
516 | return; |
Line -... | Line 517... | ||
- | 517 | ||
- | 518 | if (!enable && dig->afmt->pin) { |
|
- | 519 | if (ASIC_IS_DCE6(rdev)) |
|
- | 520 | dce6_audio_enable(rdev, dig->afmt->pin, 0); |
|
- | 521 | else |
|
- | 522 | dce4_audio_enable(rdev, dig->afmt->pin, 0); |
|
- | 523 | dig->afmt->pin = NULL; |
|
- | 524 | } |
|
484 | 525 | ||
Line 485... | Line 526... | ||
485 | dig->afmt->enabled = enable; |
526 | dig->afmt->enabled = enable; |
486 | 527 | ||
487 | DRM_DEBUG("%sabling HDMI interface @ 0x%04X for encoder 0x%x\n", |
528 | DRM_DEBUG("%sabling HDMI interface @ 0x%04X for encoder 0x%x\n", |