|
@@ -1780,6 +1780,7 @@ enum {
|
|
|
ALC889_FIXUP_DAC_ROUTE,
|
|
|
ALC889_FIXUP_MBP_VREF,
|
|
|
ALC889_FIXUP_IMAC91_VREF,
|
|
|
+ ALC889_FIXUP_MBA21_VREF,
|
|
|
ALC882_FIXUP_INV_DMIC,
|
|
|
ALC882_FIXUP_NO_PRIMARY_HP,
|
|
|
ALC887_FIXUP_ASUS_BASS,
|
|
@@ -1884,17 +1885,13 @@ static void alc889_fixup_mbp_vref(struct hda_codec *codec,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/* Set VREF on speaker pins on imac91 */
|
|
|
-static void alc889_fixup_imac91_vref(struct hda_codec *codec,
|
|
|
- const struct hda_fixup *fix, int action)
|
|
|
+static void alc889_fixup_mac_pins(struct hda_codec *codec,
|
|
|
+ const hda_nid_t *nids, int num_nids)
|
|
|
{
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
- static hda_nid_t nids[2] = { 0x18, 0x1a };
|
|
|
int i;
|
|
|
|
|
|
- if (action != HDA_FIXUP_ACT_INIT)
|
|
|
- return;
|
|
|
- for (i = 0; i < ARRAY_SIZE(nids); i++) {
|
|
|
+ for (i = 0; i < num_nids; i++) {
|
|
|
unsigned int val;
|
|
|
val = snd_hda_codec_get_pin_target(codec, nids[i]);
|
|
|
val |= AC_PINCTL_VREF_50;
|
|
@@ -1903,6 +1900,26 @@ static void alc889_fixup_imac91_vref(struct hda_codec *codec,
|
|
|
spec->gen.keep_vref_in_automute = 1;
|
|
|
}
|
|
|
|
|
|
+/* Set VREF on speaker pins on imac91 */
|
|
|
+static void alc889_fixup_imac91_vref(struct hda_codec *codec,
|
|
|
+ const struct hda_fixup *fix, int action)
|
|
|
+{
|
|
|
+ static hda_nid_t nids[2] = { 0x18, 0x1a };
|
|
|
+
|
|
|
+ if (action == HDA_FIXUP_ACT_INIT)
|
|
|
+ alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids));
|
|
|
+}
|
|
|
+
|
|
|
+/* Set VREF on speaker pins on mba21 */
|
|
|
+static void alc889_fixup_mba21_vref(struct hda_codec *codec,
|
|
|
+ const struct hda_fixup *fix, int action)
|
|
|
+{
|
|
|
+ static hda_nid_t nids[2] = { 0x18, 0x19 };
|
|
|
+
|
|
|
+ if (action == HDA_FIXUP_ACT_INIT)
|
|
|
+ alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids));
|
|
|
+}
|
|
|
+
|
|
|
/* Don't take HP output as primary
|
|
|
* Strangely, the speaker output doesn't work on Vaio Z and some Vaio
|
|
|
* all-in-one desktop PCs (for example VGC-LN51JGB) through DAC 0x05
|
|
@@ -2102,6 +2119,12 @@ static const struct hda_fixup alc882_fixups[] = {
|
|
|
.chained = true,
|
|
|
.chain_id = ALC882_FIXUP_GPIO1,
|
|
|
},
|
|
|
+ [ALC889_FIXUP_MBA21_VREF] = {
|
|
|
+ .type = HDA_FIXUP_FUNC,
|
|
|
+ .v.func = alc889_fixup_mba21_vref,
|
|
|
+ .chained = true,
|
|
|
+ .chain_id = ALC889_FIXUP_MBP_VREF,
|
|
|
+ },
|
|
|
[ALC882_FIXUP_INV_DMIC] = {
|
|
|
.type = HDA_FIXUP_FUNC,
|
|
|
.v.func = alc_fixup_inv_dmic_0x12,
|
|
@@ -2172,7 +2195,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
|
|
|
SND_PCI_QUIRK(0x106b, 0x3000, "iMac", ALC889_FIXUP_MBP_VREF),
|
|
|
SND_PCI_QUIRK(0x106b, 0x3200, "iMac 7,1 Aluminum", ALC882_FIXUP_EAPD),
|
|
|
SND_PCI_QUIRK(0x106b, 0x3400, "MacBookAir 1,1", ALC889_FIXUP_MBP_VREF),
|
|
|
- SND_PCI_QUIRK(0x106b, 0x3500, "MacBookAir 2,1", ALC889_FIXUP_MBP_VREF),
|
|
|
+ SND_PCI_QUIRK(0x106b, 0x3500, "MacBookAir 2,1", ALC889_FIXUP_MBA21_VREF),
|
|
|
SND_PCI_QUIRK(0x106b, 0x3600, "Macbook 3,1", ALC889_FIXUP_MBP_VREF),
|
|
|
SND_PCI_QUIRK(0x106b, 0x3800, "MacbookPro 4,1", ALC889_FIXUP_MBP_VREF),
|
|
|
SND_PCI_QUIRK(0x106b, 0x3e00, "iMac 24 Aluminum", ALC885_FIXUP_MACPRO_GPIO),
|