Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d0465208 authored by Alex Deucher's avatar Alex Deucher
Browse files

drm/radeon/dce6: assign different audio pins to each encoder



This allows you to send different audio to each audio capable
display.

Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 294947a5
Loading
Loading
Loading
Loading
+24 −5
Original line number Diff line number Diff line
@@ -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;
		}
	}
	if (!pin)
		DRM_ERROR("No connected audio pins found!\n");
	return NULL;
	return pin;
}

void dce6_afmt_select_pin(struct drm_encoder *encoder)