summaryrefslogtreecommitdiffstats
path: root/sys/dev/sound
diff options
context:
space:
mode:
authorariff <ariff@FreeBSD.org>2007-01-13 00:24:44 +0000
committerariff <ariff@FreeBSD.org>2007-01-13 00:24:44 +0000
commit8b23d99eaa0aba20b95c8da1cd51d9efbadd94e8 (patch)
tree89ae29579757e1254819eb6230ac3a712399c349 /sys/dev/sound
parentaa6513e87bae36fff388d090b4fa9d84b089de4e (diff)
downloadFreeBSD-src-8b23d99eaa0aba20b95c8da1cd51d9efbadd94e8.zip
FreeBSD-src-8b23d99eaa0aba20b95c8da1cd51d9efbadd94e8.tar.gz
Fix headphone/speaker automute for [1] Acer Aspire 5050 and [2] MSI MS-1034
laptops. Tested by: [1] Lion G. <liontanker@hotmail.com> [2] Pietro Cerutti <pietro.cerutti@gmail.com> Specialized mixer initialization for STAC9221, much like STAC9220. Tested by: Devon H. O'Dell
Diffstat (limited to 'sys/dev/sound')
-rw-r--r--sys/dev/sound/pci/hda/hdac.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/sys/dev/sound/pci/hda/hdac.c b/sys/dev/sound/pci/hda/hdac.c
index 363d6d2..0d67fb7 100644
--- a/sys/dev/sound/pci/hda/hdac.c
+++ b/sys/dev/sound/pci/hda/hdac.c
@@ -189,6 +189,7 @@ SND_DECLARE_FILE("$FreeBSD$");
/* Acer */
#define ACER_VENDORID 0x1025
+#define ACER_A5050_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x010f)
#define ACER_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0xffff)
/* Asus */
@@ -242,6 +243,11 @@ SND_DECLARE_FILE("$FreeBSD$");
#define TOSHIBA_U200_SUBVENDOR HDA_MODEL_CONSTRUCT(TOSHIBA, 0x0001)
#define TOSHIBA_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(TOSHIBA, 0xffff)
+/* Micro-Star International (MSI) */
+#define MSI_VENDORID 0x1462
+#define MSI_MS1034_SUBVENDOR HDA_MODEL_CONSTRUCT(MSI, 0x0349)
+#define MSI_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(MSI, 0xffff)
+
/* Misc constants.. */
#define HDA_AMP_MUTE_DEFAULT (0xffffffff)
#define HDA_AMP_MUTE_NONE (0)
@@ -505,6 +511,10 @@ static const struct {
26, { 27, -1 }, -1 },
{ LG_LW20_SUBVENDOR, HDA_CODEC_ALC880, HDAC_HP_SWITCH_CTL, 0,
27, { 20, -1 }, -1 },
+ { ACER_A5050_SUBVENDOR, HDA_CODEC_ALC883, HDAC_HP_SWITCH_CTL, 0,
+ 20, { 21, -1 }, -1 },
+ { MSI_MS1034_SUBVENDOR, HDA_CODEC_ALC883, HDAC_HP_SWITCH_CTL, 0,
+ 20, { 27, -1 }, -1 },
/*
* All models that at least come from the same vendor with
* simmilar codec.
@@ -519,6 +529,8 @@ static const struct {
13, { 14, -1 }, -1 },
{ LENOVO_ALL_SUBVENDOR, HDA_CODEC_AD1986A, HDAC_HP_SWITCH_CTL, 1,
26, { 27, -1 }, -1 },
+ { ACER_ALL_SUBVENDOR, HDA_CODEC_ALC883, HDAC_HP_SWITCH_CTL, 0,
+ 20, { 21, -1 }, -1 },
};
#define HDAC_HP_SWITCH_LEN \
(sizeof(hdac_hp_switch) / sizeof(hdac_hp_switch[0]))
@@ -2912,6 +2924,21 @@ hdac_audio_ctl_ossmixer_init(struct snd_mixer *m)
} else
ctl->ossmask &= ~SOUND_MASK_VOLUME;
}
+ } else if (id == HDA_CODEC_STAC9221) {
+ mask |= SOUND_MASK_VOLUME;
+ while ((ctl = hdac_audio_ctl_each(devinfo, &i)) !=
+ NULL) {
+ if (ctl->widget == NULL)
+ continue;
+ if (ctl->widget->nid == 2 && ctl->index == 0) {
+ ctl->enable = 1;
+ ctl->ossmask = SOUND_MASK_VOLUME;
+ ctl->ossval = 100 | (100 << 8);
+ } else if (ctl->enable == 0)
+ continue;
+ else
+ ctl->ossmask &= ~SOUND_MASK_VOLUME;
+ }
} else {
mix_setparentchild(m, SOUND_MIXER_VOLUME,
SOUND_MASK_PCM);
OpenPOWER on IntegriCloud