diff options
author | Takashi Iwai <tiwai@suse.de> | 2010-09-08 02:42:26 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2010-09-08 02:42:26 -0400 |
commit | 83c0de892d5018e45c5c0cd12affdee3c8add8a9 (patch) | |
tree | 1907896e3d3194c4c4cf1c31b6f6222670ca4c5e /sound | |
parent | 9737731d64bfa64ab4fc04b46ae5b650f6432222 (diff) | |
parent | 080dc7bc2562615a5be0a705a9d1a8c24eb198d4 (diff) |
Merge branch 'fix/hda' into topic/hda
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/hda/patch_cirrus.c | 50 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 1 |
2 files changed, 51 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c index ee1aea7296eb..6adfc5625281 100644 --- a/sound/pci/hda/patch_cirrus.c +++ b/sound/pci/hda/patch_cirrus.c | |||
@@ -968,6 +968,53 @@ static struct hda_verb cs_coef_init_verbs[] = { | |||
968 | {} /* terminator */ | 968 | {} /* terminator */ |
969 | }; | 969 | }; |
970 | 970 | ||
971 | /* Errata: CS4207 rev C0/C1/C2 Silicon | ||
972 | * | ||
973 | * http://www.cirrus.com/en/pubs/errata/ER880C3.pdf | ||
974 | * | ||
975 | * 6. At high temperature (TA > +85°C), the digital supply current (IVD) | ||
976 | * may be excessive (up to an additional 200 μA), which is most easily | ||
977 | * observed while the part is being held in reset (RESET# active low). | ||
978 | * | ||
979 | * Root Cause: At initial powerup of the device, the logic that drives | ||
980 | * the clock and write enable to the S/PDIF SRC RAMs is not properly | ||
981 | * initialized. | ||
982 | * Certain random patterns will cause a steady leakage current in those | ||
983 | * RAM cells. The issue will resolve once the SRCs are used (turned on). | ||
984 | * | ||
985 | * Workaround: The following verb sequence briefly turns on the S/PDIF SRC | ||
986 | * blocks, which will alleviate the issue. | ||
987 | */ | ||
988 | |||
989 | static struct hda_verb cs_errata_init_verbs[] = { | ||
990 | {0x01, AC_VERB_SET_POWER_STATE, 0x00}, /* AFG: D0 */ | ||
991 | {0x11, AC_VERB_SET_PROC_STATE, 0x01}, /* VPW: processing on */ | ||
992 | |||
993 | {0x11, AC_VERB_SET_COEF_INDEX, 0x0008}, | ||
994 | {0x11, AC_VERB_SET_PROC_COEF, 0x9999}, | ||
995 | {0x11, AC_VERB_SET_COEF_INDEX, 0x0017}, | ||
996 | {0x11, AC_VERB_SET_PROC_COEF, 0xa412}, | ||
997 | {0x11, AC_VERB_SET_COEF_INDEX, 0x0001}, | ||
998 | {0x11, AC_VERB_SET_PROC_COEF, 0x0009}, | ||
999 | |||
1000 | {0x07, AC_VERB_SET_POWER_STATE, 0x00}, /* S/PDIF Rx: D0 */ | ||
1001 | {0x08, AC_VERB_SET_POWER_STATE, 0x00}, /* S/PDIF Tx: D0 */ | ||
1002 | |||
1003 | {0x11, AC_VERB_SET_COEF_INDEX, 0x0017}, | ||
1004 | {0x11, AC_VERB_SET_PROC_COEF, 0x2412}, | ||
1005 | {0x11, AC_VERB_SET_COEF_INDEX, 0x0008}, | ||
1006 | {0x11, AC_VERB_SET_PROC_COEF, 0x0000}, | ||
1007 | {0x11, AC_VERB_SET_COEF_INDEX, 0x0001}, | ||
1008 | {0x11, AC_VERB_SET_PROC_COEF, 0x0008}, | ||
1009 | {0x11, AC_VERB_SET_PROC_STATE, 0x00}, | ||
1010 | |||
1011 | {0x07, AC_VERB_SET_POWER_STATE, 0x03}, /* S/PDIF Rx: D3 */ | ||
1012 | {0x08, AC_VERB_SET_POWER_STATE, 0x03}, /* S/PDIF Tx: D3 */ | ||
1013 | /*{0x01, AC_VERB_SET_POWER_STATE, 0x03},*/ /* AFG: D3 This is already handled */ | ||
1014 | |||
1015 | {} /* terminator */ | ||
1016 | }; | ||
1017 | |||
971 | /* SPDIF setup */ | 1018 | /* SPDIF setup */ |
972 | static void init_digital(struct hda_codec *codec) | 1019 | static void init_digital(struct hda_codec *codec) |
973 | { | 1020 | { |
@@ -987,6 +1034,9 @@ static int cs_init(struct hda_codec *codec) | |||
987 | { | 1034 | { |
988 | struct cs_spec *spec = codec->spec; | 1035 | struct cs_spec *spec = codec->spec; |
989 | 1036 | ||
1037 | /* init_verb sequence for C0/C1/C2 errata*/ | ||
1038 | snd_hda_sequence_write(codec, cs_errata_init_verbs); | ||
1039 | |||
990 | snd_hda_sequence_write(codec, cs_coef_init_verbs); | 1040 | snd_hda_sequence_write(codec, cs_coef_init_verbs); |
991 | 1041 | ||
992 | if (spec->gpio_mask) { | 1042 | if (spec->gpio_mask) { |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 3e0f4816aed7..81e4b1d957c5 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -5336,6 +5336,7 @@ static void fillup_priv_adc_nids(struct hda_codec *codec, hda_nid_t *nids, | |||
5336 | 5336 | ||
5337 | static struct snd_pci_quirk beep_white_list[] = { | 5337 | static struct snd_pci_quirk beep_white_list[] = { |
5338 | SND_PCI_QUIRK(0x1043, 0x829f, "ASUS", 1), | 5338 | SND_PCI_QUIRK(0x1043, 0x829f, "ASUS", 1), |
5339 | SND_PCI_QUIRK(0x1043, 0x83ce, "EeePC", 1), | ||
5339 | SND_PCI_QUIRK(0x8086, 0xd613, "Intel", 1), | 5340 | SND_PCI_QUIRK(0x8086, 0xd613, "Intel", 1), |
5340 | {} | 5341 | {} |
5341 | }; | 5342 | }; |