diff options
author | Jaroslav Kysela <perex@suse.cz> | 2004-11-29 11:03:52 +0100 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2004-11-29 11:03:52 +0100 |
commit | ccf02194eac9bb51aff8e56a0c1a22beebab764a (patch) | |
tree | 573619a7cf61d1d809ef620a9bf22d9bf6841f73 /sound | |
parent | 0ef071dbd49590b39c01a6161387dbba03e4f790 (diff) | |
download | history-ccf02194eac9bb51aff8e56a0c1a22beebab764a.tar.gz |
[ALSA] add Line/Headphone jack detection for AD1981A/B
AC97 Codec Core
Line/Headphone Jack Sense mixer switches are added to
AD1981A/B.
HP sense is activated as default.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/ac97/ac97_patch.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c index a03291b4bcf872..3b0b8d683d4e93 100644 --- a/sound/pci/ac97/ac97_patch.c +++ b/sound/pci/ac97/ac97_patch.c @@ -1013,8 +1013,20 @@ static int patch_ad198x_post_spdif(ac97_t * ac97) return patch_build_controls(ac97, &snd_ac97_ad198x_spdif_source, 1); } +static const snd_kcontrol_new_t snd_ac97_ad1981x_jack_sense[] = { + AC97_SINGLE("Headphone Jack Sense", AC97_AD_JACK_SPDIF, 11, 1, 0), + AC97_SINGLE("Line Jack Sense", AC97_AD_JACK_SPDIF, 12, 1, 0), +}; + +static int patch_ad1981a_specific(ac97_t * ac97) +{ + return patch_build_controls(ac97, snd_ac97_ad1981x_jack_sense, + ARRAY_SIZE(snd_ac97_ad1981x_jack_sense)); +} + static struct snd_ac97_build_ops patch_ad1981a_build_ops = { - .build_post_spdif = patch_ad198x_post_spdif + .build_post_spdif = patch_ad198x_post_spdif, + .build_specific = patch_ad1981a_specific }; int patch_ad1981a(ac97_t *ac97) @@ -1023,6 +1035,7 @@ int patch_ad1981a(ac97_t *ac97) ac97->build_ops = &patch_ad1981a_build_ops; snd_ac97_update_bits(ac97, AC97_AD_MISC, AC97_AD198X_MSPLT, AC97_AD198X_MSPLT); ac97->flags |= AC97_STEREO_MUTES; + snd_ac97_update_bits(ac97, AC97_AD_JACK_SPDIF, 1<<11, 1<<11); /* HP jack sense */ return 0; } @@ -1031,7 +1044,12 @@ AC97_SINGLE("Stereo Mic", AC97_AD_MISC, 6, 1, 0); static int patch_ad1981b_specific(ac97_t *ac97) { - return patch_build_controls(ac97, &snd_ac97_ad198x_2cmic, 1); + int err; + + if ((err = patch_build_controls(ac97, &snd_ac97_ad198x_2cmic, 1)) < 0) + return err; + return patch_build_controls(ac97, snd_ac97_ad1981x_jack_sense, + ARRAY_SIZE(snd_ac97_ad1981x_jack_sense)); } static struct snd_ac97_build_ops patch_ad1981b_build_ops = { @@ -1045,6 +1063,7 @@ int patch_ad1981b(ac97_t *ac97) ac97->build_ops = &patch_ad1981b_build_ops; snd_ac97_update_bits(ac97, AC97_AD_MISC, AC97_AD198X_MSPLT, AC97_AD198X_MSPLT); ac97->flags |= AC97_STEREO_MUTES; + snd_ac97_update_bits(ac97, AC97_AD_JACK_SPDIF, 1<<11, 1<<11); /* HP jack sense */ return 0; } |