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: Andreas Mohr <andi@lisas.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
b5dc20cd21
commit
6ba9256c09
|
@ -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 },
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue