aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci')
-rw-r--r--sound/pci/hda/hda_intel.c12
-rw-r--r--sound/pci/hda/patch_conexant.c15
-rw-r--r--sound/pci/hda/patch_nvhdmi.c2
-rw-r--r--sound/pci/hda/patch_realtek.c16
-rw-r--r--sound/pci/hda/patch_sigmatel.c2
5 files changed, 33 insertions, 14 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 0d3e0c9ea812..e73e395e7601 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -722,9 +722,10 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,
722 chip->last_cmd[addr]); 722 chip->last_cmd[addr]);
723 chip->single_cmd = 1; 723 chip->single_cmd = 1;
724 bus->response_reset = 0; 724 bus->response_reset = 0;
725 /* re-initialize CORB/RIRB */ 725 /* release CORB/RIRB */
726 azx_free_cmd_io(chip); 726 azx_free_cmd_io(chip);
727 azx_init_cmd_io(chip); 727 /* disable unsolicited responses */
728 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_UNSOL);
728 return -1; 729 return -1;
729} 730}
730 731
@@ -865,7 +866,9 @@ static int azx_reset(struct azx *chip)
865 } 866 }
866 867
867 /* Accept unsolicited responses */ 868 /* Accept unsolicited responses */
868 azx_writel(chip, GCTL, azx_readl(chip, GCTL) | ICH6_GCTL_UNSOL); 869 if (!chip->single_cmd)
870 azx_writel(chip, GCTL, azx_readl(chip, GCTL) |
871 ICH6_GCTL_UNSOL);
869 872
870 /* detect codecs */ 873 /* detect codecs */
871 if (!chip->codec_mask) { 874 if (!chip->codec_mask) {
@@ -980,7 +983,8 @@ static void azx_init_chip(struct azx *chip)
980 azx_int_enable(chip); 983 azx_int_enable(chip);
981 984
982 /* initialize the codec command I/O */ 985 /* initialize the codec command I/O */
983 azx_init_cmd_io(chip); 986 if (!chip->single_cmd)
987 azx_init_cmd_io(chip);
984 988
985 /* program the position buffer */ 989 /* program the position buffer */
986 azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr); 990 azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr);
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
index 6479e65858d3..905859d4f4df 100644
--- a/sound/pci/hda/patch_conexant.c
+++ b/sound/pci/hda/patch_conexant.c
@@ -110,6 +110,7 @@ struct conexant_spec {
110 110
111 unsigned int dell_automute; 111 unsigned int dell_automute;
112 unsigned int port_d_mode; 112 unsigned int port_d_mode;
113 unsigned char ext_mic_bias;
113}; 114};
114 115
115static int conexant_playback_pcm_open(struct hda_pcm_stream *hinfo, 116static int conexant_playback_pcm_open(struct hda_pcm_stream *hinfo,
@@ -1927,6 +1928,11 @@ static hda_nid_t cxt5066_adc_nids[3] = { 0x14, 0x15, 0x16 };
1927static hda_nid_t cxt5066_capsrc_nids[1] = { 0x17 }; 1928static hda_nid_t cxt5066_capsrc_nids[1] = { 0x17 };
1928#define CXT5066_SPDIF_OUT 0x21 1929#define CXT5066_SPDIF_OUT 0x21
1929 1930
1931/* OLPC's microphone port is DC coupled for use with external sensors,
1932 * therefore we use a 50% mic bias in order to center the input signal with
1933 * the DC input range of the codec. */
1934#define CXT5066_OLPC_EXT_MIC_BIAS PIN_VREF50
1935
1930static struct hda_channel_mode cxt5066_modes[1] = { 1936static struct hda_channel_mode cxt5066_modes[1] = {
1931 { 2, NULL }, 1937 { 2, NULL },
1932}; 1938};
@@ -1980,9 +1986,10 @@ static int cxt5066_hp_master_sw_put(struct snd_kcontrol *kcontrol,
1980/* toggle input of built-in and mic jack appropriately */ 1986/* toggle input of built-in and mic jack appropriately */
1981static void cxt5066_automic(struct hda_codec *codec) 1987static void cxt5066_automic(struct hda_codec *codec)
1982{ 1988{
1983 static struct hda_verb ext_mic_present[] = { 1989 struct conexant_spec *spec = codec->spec;
1990 struct hda_verb ext_mic_present[] = {
1984 /* enable external mic, port B */ 1991 /* enable external mic, port B */
1985 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, 1992 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, spec->ext_mic_bias},
1986 1993
1987 /* switch to external mic input */ 1994 /* switch to external mic input */
1988 {0x17, AC_VERB_SET_CONNECT_SEL, 0}, 1995 {0x17, AC_VERB_SET_CONNECT_SEL, 0},
@@ -2235,7 +2242,7 @@ static struct hda_verb cxt5066_init_verbs_olpc[] = {
2235 {0x19, AC_VERB_SET_CONNECT_SEL, 0x00}, /* DAC1 */ 2242 {0x19, AC_VERB_SET_CONNECT_SEL, 0x00}, /* DAC1 */
2236 2243
2237 /* Port B: external microphone */ 2244 /* Port B: external microphone */
2238 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, 2245 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, CXT5066_OLPC_EXT_MIC_BIAS},
2239 2246
2240 /* Port C: internal microphone */ 2247 /* Port C: internal microphone */
2241 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, 2248 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80},
@@ -2353,6 +2360,7 @@ static int patch_cxt5066(struct hda_codec *codec)
2353 spec->input_mux = &cxt5066_capture_source; 2360 spec->input_mux = &cxt5066_capture_source;
2354 2361
2355 spec->port_d_mode = PIN_HP; 2362 spec->port_d_mode = PIN_HP;
2363 spec->ext_mic_bias = PIN_VREF80;
2356 2364
2357 spec->num_init_verbs = 1; 2365 spec->num_init_verbs = 1;
2358 spec->init_verbs[0] = cxt5066_init_verbs; 2366 spec->init_verbs[0] = cxt5066_init_verbs;
@@ -2384,6 +2392,7 @@ static int patch_cxt5066(struct hda_codec *codec)
2384 spec->mixers[spec->num_mixers++] = cxt5066_mixer_master_olpc; 2392 spec->mixers[spec->num_mixers++] = cxt5066_mixer_master_olpc;
2385 spec->mixers[spec->num_mixers++] = cxt5066_mixers; 2393 spec->mixers[spec->num_mixers++] = cxt5066_mixers;
2386 spec->port_d_mode = 0; 2394 spec->port_d_mode = 0;
2395 spec->ext_mic_bias = CXT5066_OLPC_EXT_MIC_BIAS;
2387 2396
2388 /* no S/PDIF out */ 2397 /* no S/PDIF out */
2389 spec->multiout.dig_out_nid = 0; 2398 spec->multiout.dig_out_nid = 0;
diff --git a/sound/pci/hda/patch_nvhdmi.c b/sound/pci/hda/patch_nvhdmi.c
index 9fb60276f5c9..6afdab09bab7 100644
--- a/sound/pci/hda/patch_nvhdmi.c
+++ b/sound/pci/hda/patch_nvhdmi.c
@@ -397,6 +397,7 @@ static int patch_nvhdmi_2ch(struct hda_codec *codec)
397static struct hda_codec_preset snd_hda_preset_nvhdmi[] = { 397static struct hda_codec_preset snd_hda_preset_nvhdmi[] = {
398 { .id = 0x10de0002, .name = "MCP78 HDMI", .patch = patch_nvhdmi_8ch }, 398 { .id = 0x10de0002, .name = "MCP78 HDMI", .patch = patch_nvhdmi_8ch },
399 { .id = 0x10de0003, .name = "MCP78 HDMI", .patch = patch_nvhdmi_8ch }, 399 { .id = 0x10de0003, .name = "MCP78 HDMI", .patch = patch_nvhdmi_8ch },
400 { .id = 0x10de0005, .name = "MCP78 HDMI", .patch = patch_nvhdmi_8ch },
400 { .id = 0x10de0006, .name = "MCP78 HDMI", .patch = patch_nvhdmi_8ch }, 401 { .id = 0x10de0006, .name = "MCP78 HDMI", .patch = patch_nvhdmi_8ch },
401 { .id = 0x10de0007, .name = "MCP7A HDMI", .patch = patch_nvhdmi_8ch }, 402 { .id = 0x10de0007, .name = "MCP7A HDMI", .patch = patch_nvhdmi_8ch },
402 { .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi_2ch }, 403 { .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi_2ch },
@@ -406,6 +407,7 @@ static struct hda_codec_preset snd_hda_preset_nvhdmi[] = {
406 407
407MODULE_ALIAS("snd-hda-codec-id:10de0002"); 408MODULE_ALIAS("snd-hda-codec-id:10de0002");
408MODULE_ALIAS("snd-hda-codec-id:10de0003"); 409MODULE_ALIAS("snd-hda-codec-id:10de0003");
410MODULE_ALIAS("snd-hda-codec-id:10de0005");
409MODULE_ALIAS("snd-hda-codec-id:10de0006"); 411MODULE_ALIAS("snd-hda-codec-id:10de0006");
410MODULE_ALIAS("snd-hda-codec-id:10de0007"); 412MODULE_ALIAS("snd-hda-codec-id:10de0007");
411MODULE_ALIAS("snd-hda-codec-id:10de0067"); 413MODULE_ALIAS("snd-hda-codec-id:10de0067");
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index b592419b2083..5d7b882bd68c 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -4688,9 +4688,9 @@ static int alc880_parse_auto_config(struct hda_codec *codec)
4688 spec->multiout.dig_out_nid = dig_nid; 4688 spec->multiout.dig_out_nid = dig_nid;
4689 else { 4689 else {
4690 spec->multiout.slave_dig_outs = spec->slave_dig_outs; 4690 spec->multiout.slave_dig_outs = spec->slave_dig_outs;
4691 spec->slave_dig_outs[i - 1] = dig_nid; 4691 if (i >= ARRAY_SIZE(spec->slave_dig_outs) - 1)
4692 if (i == ARRAY_SIZE(spec->slave_dig_outs) - 1)
4693 break; 4692 break;
4693 spec->slave_dig_outs[i - 1] = dig_nid;
4694 } 4694 }
4695 } 4695 }
4696 if (spec->autocfg.dig_in_pin) 4696 if (spec->autocfg.dig_in_pin)
@@ -6250,7 +6250,7 @@ static struct snd_pci_quirk alc260_cfg_tbl[] = {
6250 SND_PCI_QUIRK(0x1025, 0x008f, "Acer", ALC260_ACER), 6250 SND_PCI_QUIRK(0x1025, 0x008f, "Acer", ALC260_ACER),
6251 SND_PCI_QUIRK(0x1509, 0x4540, "Favorit 100XS", ALC260_FAVORIT100), 6251 SND_PCI_QUIRK(0x1509, 0x4540, "Favorit 100XS", ALC260_FAVORIT100),
6252 SND_PCI_QUIRK(0x103c, 0x2808, "HP d5700", ALC260_HP_3013), 6252 SND_PCI_QUIRK(0x103c, 0x2808, "HP d5700", ALC260_HP_3013),
6253 SND_PCI_QUIRK(0x103c, 0x280a, "HP d5750", ALC260_HP_3013), 6253 SND_PCI_QUIRK(0x103c, 0x280a, "HP d5750", ALC260_AUTO), /* no quirk */
6254 SND_PCI_QUIRK(0x103c, 0x3010, "HP", ALC260_HP_3013), 6254 SND_PCI_QUIRK(0x103c, 0x3010, "HP", ALC260_HP_3013),
6255 SND_PCI_QUIRK(0x103c, 0x3011, "HP", ALC260_HP_3013), 6255 SND_PCI_QUIRK(0x103c, 0x3011, "HP", ALC260_HP_3013),
6256 SND_PCI_QUIRK(0x103c, 0x3012, "HP", ALC260_HP_DC7600), 6256 SND_PCI_QUIRK(0x103c, 0x3012, "HP", ALC260_HP_DC7600),
@@ -8912,10 +8912,11 @@ static struct snd_pci_quirk alc882_ssid_cfg_tbl[] = {
8912 SND_PCI_QUIRK(0x106b, 0x3800, "MacbookPro 4,1", ALC885_MBP3), 8912 SND_PCI_QUIRK(0x106b, 0x3800, "MacbookPro 4,1", ALC885_MBP3),
8913 SND_PCI_QUIRK(0x106b, 0x3e00, "iMac 24 Aluminum", ALC885_IMAC24), 8913 SND_PCI_QUIRK(0x106b, 0x3e00, "iMac 24 Aluminum", ALC885_IMAC24),
8914 SND_PCI_QUIRK(0x106b, 0x3f00, "Macbook 5,1", ALC885_MB5), 8914 SND_PCI_QUIRK(0x106b, 0x3f00, "Macbook 5,1", ALC885_MB5),
8915 /* FIXME: HP jack sense seems not working for MBP 5,1, so apparently 8915 /* FIXME: HP jack sense seems not working for MBP 5,1 or 5,2,
8916 * no perfect solution yet 8916 * so apparently no perfect solution yet
8917 */ 8917 */
8918 SND_PCI_QUIRK(0x106b, 0x4000, "MacbookPro 5,1", ALC885_MB5), 8918 SND_PCI_QUIRK(0x106b, 0x4000, "MacbookPro 5,1", ALC885_MB5),
8919 SND_PCI_QUIRK(0x106b, 0x4600, "MacbookPro 5,2", ALC885_MB5),
8919 {} /* terminator */ 8920 {} /* terminator */
8920}; 8921};
8921 8922
@@ -9814,9 +9815,9 @@ static int alc882_parse_auto_config(struct hda_codec *codec)
9814 spec->multiout.dig_out_nid = dig_nid; 9815 spec->multiout.dig_out_nid = dig_nid;
9815 else { 9816 else {
9816 spec->multiout.slave_dig_outs = spec->slave_dig_outs; 9817 spec->multiout.slave_dig_outs = spec->slave_dig_outs;
9817 spec->slave_dig_outs[i - 1] = dig_nid; 9818 if (i >= ARRAY_SIZE(spec->slave_dig_outs) - 1)
9818 if (i == ARRAY_SIZE(spec->slave_dig_outs) - 1)
9819 break; 9819 break;
9820 spec->slave_dig_outs[i - 1] = dig_nid;
9820 } 9821 }
9821 } 9822 }
9822 if (spec->autocfg.dig_in_pin) 9823 if (spec->autocfg.dig_in_pin)
@@ -11457,6 +11458,7 @@ static struct snd_pci_quirk alc262_cfg_tbl[] = {
11457 SND_PCI_QUIRK(0x104d, 0x820f, "Sony ASSAMD", ALC262_SONY_ASSAMD), 11458 SND_PCI_QUIRK(0x104d, 0x820f, "Sony ASSAMD", ALC262_SONY_ASSAMD),
11458 SND_PCI_QUIRK(0x104d, 0x9016, "Sony VAIO", ALC262_AUTO), /* dig-only */ 11459 SND_PCI_QUIRK(0x104d, 0x9016, "Sony VAIO", ALC262_AUTO), /* dig-only */
11459 SND_PCI_QUIRK(0x104d, 0x9025, "Sony VAIO Z21MN", ALC262_TOSHIBA_S06), 11460 SND_PCI_QUIRK(0x104d, 0x9025, "Sony VAIO Z21MN", ALC262_TOSHIBA_S06),
11461 SND_PCI_QUIRK(0x104d, 0x9035, "Sony VAIO VGN-FW170J", ALC262_AUTO),
11460 SND_PCI_QUIRK_MASK(0x104d, 0xff00, 0x9000, "Sony VAIO", 11462 SND_PCI_QUIRK_MASK(0x104d, 0xff00, 0x9000, "Sony VAIO",
11461 ALC262_SONY_ASSAMD), 11463 ALC262_SONY_ASSAMD),
11462 SND_PCI_QUIRK(0x1179, 0x0001, "Toshiba dynabook SS RX1", 11464 SND_PCI_QUIRK(0x1179, 0x0001, "Toshiba dynabook SS RX1",
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index 9c33700b21a8..2d3e2e415eb0 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -1590,6 +1590,8 @@ static struct snd_pci_quirk stac92hd73xx_cfg_tbl[] = {
1590 "Dell Studio 17", STAC_DELL_M6_DMIC), 1590 "Dell Studio 17", STAC_DELL_M6_DMIC),
1591 SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02be, 1591 SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02be,
1592 "Dell Studio 1555", STAC_DELL_M6_DMIC), 1592 "Dell Studio 1555", STAC_DELL_M6_DMIC),
1593 SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02bd,
1594 "Dell Studio 1557", STAC_DELL_M6_DMIC),
1593 {} /* terminator */ 1595 {} /* terminator */
1594}; 1596};
1595 1597