diff options
Diffstat (limited to 'sound/pci/hda/patch_cirrus.c')
-rw-r--r-- | sound/pci/hda/patch_cirrus.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c index bd8d46cca2b3..cccaf9c7a7bb 100644 --- a/sound/pci/hda/patch_cirrus.c +++ b/sound/pci/hda/patch_cirrus.c | |||
@@ -58,6 +58,7 @@ enum { | |||
58 | CS420X_GPIO_23, | 58 | CS420X_GPIO_23, |
59 | CS420X_MBP101, | 59 | CS420X_MBP101, |
60 | CS420X_MBP81, | 60 | CS420X_MBP81, |
61 | CS420X_MBA42, | ||
61 | CS420X_AUTO, | 62 | CS420X_AUTO, |
62 | /* aliases */ | 63 | /* aliases */ |
63 | CS420X_IMAC27_122 = CS420X_GPIO_23, | 64 | CS420X_IMAC27_122 = CS420X_GPIO_23, |
@@ -346,6 +347,7 @@ static const struct hda_model_fixup cs420x_models[] = { | |||
346 | { .id = CS420X_APPLE, .name = "apple" }, | 347 | { .id = CS420X_APPLE, .name = "apple" }, |
347 | { .id = CS420X_MBP101, .name = "mbp101" }, | 348 | { .id = CS420X_MBP101, .name = "mbp101" }, |
348 | { .id = CS420X_MBP81, .name = "mbp81" }, | 349 | { .id = CS420X_MBP81, .name = "mbp81" }, |
350 | { .id = CS420X_MBA42, .name = "mba42" }, | ||
349 | {} | 351 | {} |
350 | }; | 352 | }; |
351 | 353 | ||
@@ -361,6 +363,7 @@ static const struct snd_pci_quirk cs420x_fixup_tbl[] = { | |||
361 | SND_PCI_QUIRK(0x106b, 0x1c00, "MacBookPro 8,1", CS420X_MBP81), | 363 | SND_PCI_QUIRK(0x106b, 0x1c00, "MacBookPro 8,1", CS420X_MBP81), |
362 | SND_PCI_QUIRK(0x106b, 0x2000, "iMac 12,2", CS420X_IMAC27_122), | 364 | SND_PCI_QUIRK(0x106b, 0x2000, "iMac 12,2", CS420X_IMAC27_122), |
363 | SND_PCI_QUIRK(0x106b, 0x2800, "MacBookPro 10,1", CS420X_MBP101), | 365 | SND_PCI_QUIRK(0x106b, 0x2800, "MacBookPro 10,1", CS420X_MBP101), |
366 | SND_PCI_QUIRK(0x106b, 0x5b00, "MacBookAir 4,2", CS420X_MBA42), | ||
364 | SND_PCI_QUIRK_VENDOR(0x106b, "Apple", CS420X_APPLE), | 367 | SND_PCI_QUIRK_VENDOR(0x106b, "Apple", CS420X_APPLE), |
365 | {} /* terminator */ | 368 | {} /* terminator */ |
366 | }; | 369 | }; |
@@ -414,6 +417,20 @@ static const struct hda_pintbl mbp101_pincfgs[] = { | |||
414 | {} /* terminator */ | 417 | {} /* terminator */ |
415 | }; | 418 | }; |
416 | 419 | ||
420 | static const struct hda_pintbl mba42_pincfgs[] = { | ||
421 | { 0x09, 0x012b4030 }, /* HP */ | ||
422 | { 0x0a, 0x400000f0 }, | ||
423 | { 0x0b, 0x90100120 }, /* speaker */ | ||
424 | { 0x0c, 0x400000f0 }, | ||
425 | { 0x0d, 0x90a00110 }, /* mic */ | ||
426 | { 0x0e, 0x400000f0 }, | ||
427 | { 0x0f, 0x400000f0 }, | ||
428 | { 0x10, 0x400000f0 }, | ||
429 | { 0x12, 0x400000f0 }, | ||
430 | { 0x15, 0x400000f0 }, | ||
431 | {} /* terminator */ | ||
432 | }; | ||
433 | |||
417 | static void cs420x_fixup_gpio_13(struct hda_codec *codec, | 434 | static void cs420x_fixup_gpio_13(struct hda_codec *codec, |
418 | const struct hda_fixup *fix, int action) | 435 | const struct hda_fixup *fix, int action) |
419 | { | 436 | { |
@@ -482,6 +499,12 @@ static const struct hda_fixup cs420x_fixups[] = { | |||
482 | .chained = true, | 499 | .chained = true, |
483 | .chain_id = CS420X_GPIO_13, | 500 | .chain_id = CS420X_GPIO_13, |
484 | }, | 501 | }, |
502 | [CS420X_MBA42] = { | ||
503 | .type = HDA_FIXUP_PINS, | ||
504 | .v.pins = mba42_pincfgs, | ||
505 | .chained = true, | ||
506 | .chain_id = CS420X_GPIO_13, | ||
507 | }, | ||
485 | }; | 508 | }; |
486 | 509 | ||
487 | static struct cs_spec *cs_alloc_spec(struct hda_codec *codec, int vendor_nid) | 510 | static struct cs_spec *cs_alloc_spec(struct hda_codec *codec, int vendor_nid) |