Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
[cascardo/linux.git] / drivers / gpu / drm / radeon / dce6_afmt.c
index 44480c1..7520727 100644 (file)
@@ -76,16 +76,35 @@ static void dce6_afmt_get_connected_pins(struct radeon_device *rdev)
 
 struct r600_audio_pin *dce6_audio_get_pin(struct radeon_device *rdev)
 {
-       int i;
+       struct drm_encoder *encoder;
+       struct radeon_encoder *radeon_encoder;
+       struct radeon_encoder_atom_dig *dig;
+       struct r600_audio_pin *pin = NULL;
+       int i, pin_count;
 
        dce6_afmt_get_connected_pins(rdev);
 
        for (i = 0; i < rdev->audio.num_pins; i++) {
-               if (rdev->audio.pin[i].connected)
-                       return &rdev->audio.pin[i];
+               if (rdev->audio.pin[i].connected) {
+                       pin = &rdev->audio.pin[i];
+                       pin_count = 0;
+
+                       list_for_each_entry(encoder, &rdev->ddev->mode_config.encoder_list, head) {
+                               if (radeon_encoder_is_digital(encoder)) {
+                                       radeon_encoder = to_radeon_encoder(encoder);
+                                       dig = radeon_encoder->enc_priv;
+                                       if (dig->pin == pin)
+                                               pin_count++;
+                               }
+                       }
+
+                       if (pin_count == 0)
+                               return pin;
+               }
        }
-       DRM_ERROR("No connected audio pins found!\n");
-       return NULL;
+       if (!pin)
+               DRM_ERROR("No connected audio pins found!\n");
+       return pin;
 }
 
 void dce6_afmt_select_pin(struct drm_encoder *encoder)