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

Commit 6ba9256c authored by Andreas Mohr's avatar Andreas Mohr Committed by Takashi Iwai
Browse files

ALSA: azt3328: hook up new emulated AC97 on AC97 patch side



Make newly created AC97 emulation of azt3328 known to the AC97 layer
side.
- relocate common functions to the top (due to definition after use)
- rename control names
- adjust 3D settings to the card's custom layout of this register

Signed-off-by: default avatarAndreas Mohr <andi@lisas.de>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent b5dc20cd
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -71,6 +71,12 @@ static const struct ac97_codec_id snd_ac97_codec_id_vendors[] = {
{ 0x414b4d00, 0xffffff00, "Asahi Kasei",	NULL,	NULL },
{ 0x414c4300, 0xffffff00, "Realtek",		NULL,	NULL },
{ 0x414c4700, 0xffffff00, "Realtek",		NULL,	NULL },
/*
 * This is an _inofficial_ Aztech Labs entry
 * (value might differ from unknown official Aztech ID),
 * currently used by the AC97 emulation of the almost-AC97 PCI168 card.
 */
{ 0x415a5400, 0xffffff00, "Aztech Labs (emulated)",	NULL,	NULL },
{ 0x434d4900, 0xffffff00, "C-Media Electronics", NULL,	NULL },
{ 0x43525900, 0xffffff00, "Cirrus Logic",	NULL,	NULL },
{ 0x43585400, 0xffffff00, "Conexant",           NULL,	NULL },
@@ -127,6 +133,7 @@ static const struct ac97_codec_id snd_ac97_codec_ids[] = {
{ 0x414c4781, 0xffffffff, "ALC658D",		NULL,	NULL }, /* already patched */
{ 0x414c4780, 0xfffffff0, "ALC658",		patch_alc655,	NULL },
{ 0x414c4790, 0xfffffff0, "ALC850",		patch_alc850,	NULL },
{ 0x415a5401, 0xffffffff, "AZF3328",		patch_aztech_azf3328,	NULL },
{ 0x434d4941, 0xffffffff, "CMI9738",		patch_cm9738,	NULL },
{ 0x434d4961, 0xffffffff, "CMI9739",		patch_cm9739,	NULL },
{ 0x434d4969, 0xffffffff, "CMI9780",		patch_cm9780,	NULL },
+52 −0
Original line number Diff line number Diff line
@@ -26,6 +26,15 @@
#include "ac97_local.h"
#include "ac97_patch.h"

/*
 *  Forward declarations
 */

static struct snd_kcontrol *snd_ac97_find_mixer_ctl(struct snd_ac97 *ac97,
						    const char *name);
static int snd_ac97_add_vmaster(struct snd_ac97 *ac97, char *name,
				const unsigned int *tlv, const char **slaves);

/*
 *  Chip specific initialization
 */
@@ -2940,6 +2949,49 @@ static int patch_alc850(struct snd_ac97 *ac97)
	return 0;
}

static int patch_aztech_azf3328_specific(struct snd_ac97 *ac97)
{
	struct snd_kcontrol *kctl_3d_center =
		snd_ac97_find_mixer_ctl(ac97, "3D Control - Center");
	struct snd_kcontrol *kctl_3d_depth =
		snd_ac97_find_mixer_ctl(ac97, "3D Control - Depth");

	/*
	 * 3D register is different from AC97 standard layout
	 * (also do some renaming, to resemble Windows driver naming)
	 */
	if (kctl_3d_center) {
		kctl_3d_center->private_value =
			AC97_SINGLE_VALUE(AC97_3D_CONTROL, 1, 0x07, 0);
		snd_ac97_rename_vol_ctl(ac97,
			"3D Control - Center", "3D Control - Width"
		);
	}
	if (kctl_3d_depth)
		kctl_3d_depth->private_value =
			AC97_SINGLE_VALUE(AC97_3D_CONTROL, 8, 0x03, 0);

	/* Aztech Windows driver calls the
	   equivalent control "Modem Playback", thus rename it: */
	snd_ac97_rename_vol_ctl(ac97,
		"Master Mono Playback", "Modem Playback"
	);
	snd_ac97_rename_vol_ctl(ac97,
		"Headphone Playback", "FM Synth Playback"
	);

	return 0;
}

static const struct snd_ac97_build_ops patch_aztech_azf3328_ops = {
	.build_specific	= patch_aztech_azf3328_specific
};

static int patch_aztech_azf3328(struct snd_ac97 *ac97)
{
	ac97->build_ops = &patch_aztech_azf3328_ops;
	return 0;
}

/*
 * C-Media CM97xx codecs