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

Commit bfc1f97d authored by Slava Grigorev's avatar Slava Grigorev Committed by Alex Deucher
Browse files

radeon/audio: consolidate audio_init() functions

parent 49ead33b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -81,7 +81,7 @@ radeon-y += radeon_device.o radeon_asic.o radeon_kms.o \
	rv770_smc.o cypress_dpm.o btc_dpm.o sumo_dpm.o sumo_smc.o trinity_dpm.o \
	trinity_smc.o ni_dpm.o si_smc.o si_dpm.o kv_smc.o kv_dpm.o ci_smc.o \
	ci_dpm.o dce6_afmt.o radeon_vm.o radeon_ucode.o radeon_ib.o radeon_mn.o \
	radeon_sync.o
	radeon_sync.o radeon_audio.o

# add async DMA block
radeon-y += \
+2 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include "drmP.h"
#include "radeon.h"
#include "radeon_asic.h"
#include "radeon_audio.h"
#include "cikd.h"
#include "atom.h"
#include "cik_blit_shaders.h"
@@ -8517,7 +8518,7 @@ static int cik_startup(struct radeon_device *rdev)
		return r;
	}

	r = dce6_audio_init(rdev);
	r = radeon_audio_init(rdev);
	if (r)
		return r;

+0 −54
Original line number Diff line number Diff line
@@ -277,11 +277,6 @@ void dce6_afmt_write_sad_regs(struct drm_encoder *encoder)
	kfree(sads);
}

static int dce6_audio_chipset_supported(struct radeon_device *rdev)
{
	return !ASIC_IS_NODCE(rdev);
}

void dce6_audio_enable(struct radeon_device *rdev,
		       struct r600_audio_pin *pin,
		       u8 enable_mask)
@@ -293,55 +288,6 @@ void dce6_audio_enable(struct radeon_device *rdev,
			enable_mask ? AUDIO_ENABLED : 0);
}

static const u32 pin_offsets[7] =
{
	(0x5e00 - 0x5e00),
	(0x5e18 - 0x5e00),
	(0x5e30 - 0x5e00),
	(0x5e48 - 0x5e00),
	(0x5e60 - 0x5e00),
	(0x5e78 - 0x5e00),
	(0x5e90 - 0x5e00),
};

int dce6_audio_init(struct radeon_device *rdev)
{
	int i;

	if (!radeon_audio || !dce6_audio_chipset_supported(rdev))
		return 0;

	rdev->audio.enabled = true;

	if (ASIC_IS_DCE81(rdev)) /* KV: 4 streams, 7 endpoints */
		rdev->audio.num_pins = 7;
	else if (ASIC_IS_DCE83(rdev)) /* KB: 2 streams, 3 endpoints */
		rdev->audio.num_pins = 3;
	else if (ASIC_IS_DCE8(rdev)) /* BN/HW: 6 streams, 7 endpoints */
		rdev->audio.num_pins = 7;
	else if (ASIC_IS_DCE61(rdev)) /* TN: 4 streams, 6 endpoints */
		rdev->audio.num_pins = 6;
	else if (ASIC_IS_DCE64(rdev)) /* OL: 2 streams, 2 endpoints */
		rdev->audio.num_pins = 2;
	else /* SI: 6 streams, 6 endpoints */
		rdev->audio.num_pins = 6;

	for (i = 0; i < rdev->audio.num_pins; i++) {
		rdev->audio.pin[i].channels = -1;
		rdev->audio.pin[i].rate = -1;
		rdev->audio.pin[i].bits_per_sample = -1;
		rdev->audio.pin[i].status_bits = 0;
		rdev->audio.pin[i].category_code = 0;
		rdev->audio.pin[i].connected = false;
		rdev->audio.pin[i].offset = pin_offsets[i];
		rdev->audio.pin[i].id = i;
		/* disable audio.  it will be set up later */
		dce6_audio_enable(rdev, &rdev->audio.pin[i], false);
	}

	return 0;
}

void dce6_audio_fini(struct radeon_device *rdev)
{
	int i;
+2 −1
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include <drm/drmP.h>
#include "radeon.h"
#include "radeon_asic.h"
#include "radeon_audio.h"
#include <drm/radeon_drm.h>
#include "evergreend.h"
#include "atom.h"
@@ -5286,7 +5287,7 @@ static int evergreen_startup(struct radeon_device *rdev)
		return r;
	}

	r = r600_audio_init(rdev);
	r = radeon_audio_init(rdev);
	if (r) {
		DRM_ERROR("radeon: audio init failed\n");
		return r;
+4 −9
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include <drm/drmP.h>
#include "radeon.h"
#include "radeon_asic.h"
#include "radeon_audio.h"
#include <drm/radeon_drm.h>
#include "nid.h"
#include "atom.h"
@@ -2097,15 +2098,9 @@ static int cayman_startup(struct radeon_device *rdev)
		return r;
	}

	if (ASIC_IS_DCE6(rdev)) {
		r = dce6_audio_init(rdev);
	r = radeon_audio_init(rdev);
	if (r)
		return r;
	} else {
		r = r600_audio_init(rdev);
		if (r)
			return r;
	}

	return 0;
}
Loading