diff options
author | Takashi Iwai <tiwai@suse.de> | 2012-04-19 11:17:59 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2012-04-19 11:20:13 -0400 |
commit | d39801105722c9aef9eae180656190c399c576a9 (patch) | |
tree | c999d56c418920a9fda656259afb3f13dfd7616e | |
parent | 83b0c6ba999643ee8ad6329f26e1cdc870e1a920 (diff) | |
parent | c817eebec5971febab86d397582954bd52f403a8 (diff) |
Merge branch 'fix/hda' into topic/hda
Conflicts:
sound/pci/hda/patch_conexant.c
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | Documentation/sound/alsa/HD-Audio-Models.txt | 4 | ||||
-rw-r--r-- | MAINTAINERS | 4 | ||||
-rw-r--r-- | include/sound/core.h | 10 | ||||
-rw-r--r-- | sound/core/vmaster.c | 1 | ||||
-rw-r--r-- | sound/isa/sscape.c | 6 | ||||
-rw-r--r-- | sound/last.c | 2 | ||||
-rw-r--r-- | sound/oss/msnd_pinnacle.c | 8 | ||||
-rw-r--r-- | sound/pci/hda/hda_eld.c | 6 | ||||
-rw-r--r-- | sound/pci/hda/patch_conexant.c | 35 | ||||
-rw-r--r-- | sound/pci/hda/patch_hdmi.c | 9 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 85 | ||||
-rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 5 | ||||
-rw-r--r-- | sound/soc/codecs/ak4642.c | 2 | ||||
-rw-r--r-- | sound/soc/codecs/sgtl5000.c | 25 | ||||
-rw-r--r-- | sound/soc/imx/imx-audmux.c | 5 | ||||
-rw-r--r-- | sound/soc/pxa/pxa2xx-i2s.c | 1 | ||||
-rw-r--r-- | sound/soc/soc-core.c | 2 | ||||
-rw-r--r-- | sound/soc/tegra/tegra_i2s.c | 6 | ||||
-rw-r--r-- | sound/soc/tegra/tegra_spdif.c | 4 |
19 files changed, 167 insertions, 53 deletions
diff --git a/Documentation/sound/alsa/HD-Audio-Models.txt b/Documentation/sound/alsa/HD-Audio-Models.txt index d97d992ced14..03f7897c6414 100644 --- a/Documentation/sound/alsa/HD-Audio-Models.txt +++ b/Documentation/sound/alsa/HD-Audio-Models.txt | |||
@@ -43,7 +43,9 @@ ALC680 | |||
43 | 43 | ||
44 | ALC882/883/885/888/889 | 44 | ALC882/883/885/888/889 |
45 | ====================== | 45 | ====================== |
46 | N/A | 46 | acer-aspire-4930g Acer Aspire 4930G/5930G/6530G/6930G/7730G |
47 | acer-aspire-8930g Acer Aspire 8330G/6935G | ||
48 | acer-aspire Acer Aspire others | ||
47 | 49 | ||
48 | ALC861/660 | 50 | ALC861/660 |
49 | ========== | 51 | ========== |
diff --git a/MAINTAINERS b/MAINTAINERS index eecf3441ac21..5190cf25fd8d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -4807,6 +4807,7 @@ F: arch/arm/mach-omap2/clockdomain2xxx_3xxx.c | |||
4807 | F: arch/arm/mach-omap2/clockdomain44xx.c | 4807 | F: arch/arm/mach-omap2/clockdomain44xx.c |
4808 | 4808 | ||
4809 | OMAP AUDIO SUPPORT | 4809 | OMAP AUDIO SUPPORT |
4810 | M: Peter Ujfalusi <peter.ujfalusi@ti.com> | ||
4810 | M: Jarkko Nikula <jarkko.nikula@bitmer.com> | 4811 | M: Jarkko Nikula <jarkko.nikula@bitmer.com> |
4811 | L: alsa-devel@alsa-project.org (subscribers-only) | 4812 | L: alsa-devel@alsa-project.org (subscribers-only) |
4812 | L: linux-omap@vger.kernel.org | 4813 | L: linux-omap@vger.kernel.org |
@@ -7462,8 +7463,7 @@ F: include/linux/wm97xx.h | |||
7462 | 7463 | ||
7463 | WOLFSON MICROELECTRONICS DRIVERS | 7464 | WOLFSON MICROELECTRONICS DRIVERS |
7464 | M: Mark Brown <broonie@opensource.wolfsonmicro.com> | 7465 | M: Mark Brown <broonie@opensource.wolfsonmicro.com> |
7465 | M: Ian Lartey <ian@opensource.wolfsonmicro.com> | 7466 | L: patches@opensource.wolfsonmicro.com |
7466 | M: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> | ||
7467 | T: git git://opensource.wolfsonmicro.com/linux-2.6-asoc | 7467 | T: git git://opensource.wolfsonmicro.com/linux-2.6-asoc |
7468 | T: git git://opensource.wolfsonmicro.com/linux-2.6-audioplus | 7468 | T: git git://opensource.wolfsonmicro.com/linux-2.6-audioplus |
7469 | W: http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices | 7469 | W: http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices |
diff --git a/include/sound/core.h b/include/sound/core.h index b6e0f57d451d..bc056687f647 100644 --- a/include/sound/core.h +++ b/include/sound/core.h | |||
@@ -325,6 +325,13 @@ void release_and_free_resource(struct resource *res); | |||
325 | 325 | ||
326 | /* --- */ | 326 | /* --- */ |
327 | 327 | ||
328 | /* sound printk debug levels */ | ||
329 | enum { | ||
330 | SND_PR_ALWAYS, | ||
331 | SND_PR_DEBUG, | ||
332 | SND_PR_VERBOSE, | ||
333 | }; | ||
334 | |||
328 | #if defined(CONFIG_SND_DEBUG) || defined(CONFIG_SND_VERBOSE_PRINTK) | 335 | #if defined(CONFIG_SND_DEBUG) || defined(CONFIG_SND_VERBOSE_PRINTK) |
329 | __printf(4, 5) | 336 | __printf(4, 5) |
330 | void __snd_printk(unsigned int level, const char *file, int line, | 337 | void __snd_printk(unsigned int level, const char *file, int line, |
@@ -354,6 +361,8 @@ void __snd_printk(unsigned int level, const char *file, int line, | |||
354 | */ | 361 | */ |
355 | #define snd_printd(fmt, args...) \ | 362 | #define snd_printd(fmt, args...) \ |
356 | __snd_printk(1, __FILE__, __LINE__, fmt, ##args) | 363 | __snd_printk(1, __FILE__, __LINE__, fmt, ##args) |
364 | #define _snd_printd(level, fmt, args...) \ | ||
365 | __snd_printk(level, __FILE__, __LINE__, fmt, ##args) | ||
357 | 366 | ||
358 | /** | 367 | /** |
359 | * snd_BUG - give a BUG warning message and stack trace | 368 | * snd_BUG - give a BUG warning message and stack trace |
@@ -383,6 +392,7 @@ void __snd_printk(unsigned int level, const char *file, int line, | |||
383 | #else /* !CONFIG_SND_DEBUG */ | 392 | #else /* !CONFIG_SND_DEBUG */ |
384 | 393 | ||
385 | #define snd_printd(fmt, args...) do { } while (0) | 394 | #define snd_printd(fmt, args...) do { } while (0) |
395 | #define _snd_printd(level, fmt, args...) do { } while (0) | ||
386 | #define snd_BUG() do { } while (0) | 396 | #define snd_BUG() do { } while (0) |
387 | static inline int __snd_bug_on(int cond) | 397 | static inline int __snd_bug_on(int cond) |
388 | { | 398 | { |
diff --git a/sound/core/vmaster.c b/sound/core/vmaster.c index 14a286a7bf2b..857586135d18 100644 --- a/sound/core/vmaster.c +++ b/sound/core/vmaster.c | |||
@@ -419,6 +419,7 @@ EXPORT_SYMBOL(snd_ctl_make_virtual_master); | |||
419 | * snd_ctl_add_vmaster_hook - Add a hook to a vmaster control | 419 | * snd_ctl_add_vmaster_hook - Add a hook to a vmaster control |
420 | * @kcontrol: vmaster kctl element | 420 | * @kcontrol: vmaster kctl element |
421 | * @hook: the hook function | 421 | * @hook: the hook function |
422 | * @private_data: the private_data pointer to be saved | ||
422 | * | 423 | * |
423 | * Adds the given hook to the vmaster control element so that it's called | 424 | * Adds the given hook to the vmaster control element so that it's called |
424 | * at each time when the value is changed. | 425 | * at each time when the value is changed. |
diff --git a/sound/isa/sscape.c b/sound/isa/sscape.c index b4a6aa960f4b..8490f59709bb 100644 --- a/sound/isa/sscape.c +++ b/sound/isa/sscape.c | |||
@@ -1019,13 +1019,15 @@ static int __devinit create_sscape(int dev, struct snd_card *card) | |||
1019 | irq_cfg = get_irq_config(sscape->type, irq[dev]); | 1019 | irq_cfg = get_irq_config(sscape->type, irq[dev]); |
1020 | if (irq_cfg == INVALID_IRQ) { | 1020 | if (irq_cfg == INVALID_IRQ) { |
1021 | snd_printk(KERN_ERR "sscape: Invalid IRQ %d\n", irq[dev]); | 1021 | snd_printk(KERN_ERR "sscape: Invalid IRQ %d\n", irq[dev]); |
1022 | return -ENXIO; | 1022 | err = -ENXIO; |
1023 | goto _release_dma; | ||
1023 | } | 1024 | } |
1024 | 1025 | ||
1025 | mpu_irq_cfg = get_irq_config(sscape->type, mpu_irq[dev]); | 1026 | mpu_irq_cfg = get_irq_config(sscape->type, mpu_irq[dev]); |
1026 | if (mpu_irq_cfg == INVALID_IRQ) { | 1027 | if (mpu_irq_cfg == INVALID_IRQ) { |
1027 | snd_printk(KERN_ERR "sscape: Invalid IRQ %d\n", mpu_irq[dev]); | 1028 | snd_printk(KERN_ERR "sscape: Invalid IRQ %d\n", mpu_irq[dev]); |
1028 | return -ENXIO; | 1029 | err = -ENXIO; |
1030 | goto _release_dma; | ||
1029 | } | 1031 | } |
1030 | 1032 | ||
1031 | /* | 1033 | /* |
diff --git a/sound/last.c b/sound/last.c index bdd0857b8871..7ffc182e0844 100644 --- a/sound/last.c +++ b/sound/last.c | |||
@@ -38,4 +38,4 @@ static int __init alsa_sound_last_init(void) | |||
38 | return 0; | 38 | return 0; |
39 | } | 39 | } |
40 | 40 | ||
41 | __initcall(alsa_sound_last_init); | 41 | late_initcall_sync(alsa_sound_last_init); |
diff --git a/sound/oss/msnd_pinnacle.c b/sound/oss/msnd_pinnacle.c index 2c79d60a725f..536c4c0514d3 100644 --- a/sound/oss/msnd_pinnacle.c +++ b/sound/oss/msnd_pinnacle.c | |||
@@ -1294,6 +1294,8 @@ static int __init calibrate_adc(WORD srate) | |||
1294 | 1294 | ||
1295 | static int upload_dsp_code(void) | 1295 | static int upload_dsp_code(void) |
1296 | { | 1296 | { |
1297 | int ret = 0; | ||
1298 | |||
1297 | msnd_outb(HPBLKSEL_0, dev.io + HP_BLKS); | 1299 | msnd_outb(HPBLKSEL_0, dev.io + HP_BLKS); |
1298 | #ifndef HAVE_DSPCODEH | 1300 | #ifndef HAVE_DSPCODEH |
1299 | INITCODESIZE = mod_firmware_load(INITCODEFILE, &INITCODE); | 1301 | INITCODESIZE = mod_firmware_load(INITCODEFILE, &INITCODE); |
@@ -1312,7 +1314,8 @@ static int upload_dsp_code(void) | |||
1312 | memcpy_toio(dev.base, PERMCODE, PERMCODESIZE); | 1314 | memcpy_toio(dev.base, PERMCODE, PERMCODESIZE); |
1313 | if (msnd_upload_host(&dev, INITCODE, INITCODESIZE) < 0) { | 1315 | if (msnd_upload_host(&dev, INITCODE, INITCODESIZE) < 0) { |
1314 | printk(KERN_WARNING LOGNAME ": Error uploading to DSP\n"); | 1316 | printk(KERN_WARNING LOGNAME ": Error uploading to DSP\n"); |
1315 | return -ENODEV; | 1317 | ret = -ENODEV; |
1318 | goto out; | ||
1316 | } | 1319 | } |
1317 | #ifdef HAVE_DSPCODEH | 1320 | #ifdef HAVE_DSPCODEH |
1318 | printk(KERN_INFO LOGNAME ": DSP firmware uploaded (resident)\n"); | 1321 | printk(KERN_INFO LOGNAME ": DSP firmware uploaded (resident)\n"); |
@@ -1320,12 +1323,13 @@ static int upload_dsp_code(void) | |||
1320 | printk(KERN_INFO LOGNAME ": DSP firmware uploaded\n"); | 1323 | printk(KERN_INFO LOGNAME ": DSP firmware uploaded\n"); |
1321 | #endif | 1324 | #endif |
1322 | 1325 | ||
1326 | out: | ||
1323 | #ifndef HAVE_DSPCODEH | 1327 | #ifndef HAVE_DSPCODEH |
1324 | vfree(INITCODE); | 1328 | vfree(INITCODE); |
1325 | vfree(PERMCODE); | 1329 | vfree(PERMCODE); |
1326 | #endif | 1330 | #endif |
1327 | 1331 | ||
1328 | return 0; | 1332 | return ret; |
1329 | } | 1333 | } |
1330 | 1334 | ||
1331 | #ifdef MSND_CLASSIC | 1335 | #ifdef MSND_CLASSIC |
diff --git a/sound/pci/hda/hda_eld.c b/sound/pci/hda/hda_eld.c index b58b4b1687fa..4c054f4486b9 100644 --- a/sound/pci/hda/hda_eld.c +++ b/sound/pci/hda/hda_eld.c | |||
@@ -418,7 +418,7 @@ static void hdmi_show_short_audio_desc(struct cea_sad *a) | |||
418 | else | 418 | else |
419 | buf2[0] = '\0'; | 419 | buf2[0] = '\0'; |
420 | 420 | ||
421 | printk(KERN_INFO "HDMI: supports coding type %s:" | 421 | _snd_printd(SND_PR_VERBOSE, "HDMI: supports coding type %s:" |
422 | " channels = %d, rates =%s%s\n", | 422 | " channels = %d, rates =%s%s\n", |
423 | cea_audio_coding_type_names[a->format], | 423 | cea_audio_coding_type_names[a->format], |
424 | a->channels, | 424 | a->channels, |
@@ -442,14 +442,14 @@ void snd_hdmi_show_eld(struct hdmi_eld *e) | |||
442 | { | 442 | { |
443 | int i; | 443 | int i; |
444 | 444 | ||
445 | printk(KERN_INFO "HDMI: detected monitor %s at connection type %s\n", | 445 | _snd_printd(SND_PR_VERBOSE, "HDMI: detected monitor %s at connection type %s\n", |
446 | e->monitor_name, | 446 | e->monitor_name, |
447 | eld_connection_type_names[e->conn_type]); | 447 | eld_connection_type_names[e->conn_type]); |
448 | 448 | ||
449 | if (e->spk_alloc) { | 449 | if (e->spk_alloc) { |
450 | char buf[SND_PRINT_CHANNEL_ALLOCATION_ADVISED_BUFSIZE]; | 450 | char buf[SND_PRINT_CHANNEL_ALLOCATION_ADVISED_BUFSIZE]; |
451 | snd_print_channel_allocation(e->spk_alloc, buf, sizeof(buf)); | 451 | snd_print_channel_allocation(e->spk_alloc, buf, sizeof(buf)); |
452 | printk(KERN_INFO "HDMI: available speakers:%s\n", buf); | 452 | _snd_printd(SND_PR_VERBOSE, "HDMI: available speakers:%s\n", buf); |
453 | } | 453 | } |
454 | 454 | ||
455 | for (i = 0; i < e->sad_count; i++) | 455 | for (i = 0; i < e->sad_count; i++) |
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c index abb59f472d48..6e04c2bf06de 100644 --- a/sound/pci/hda/patch_conexant.c +++ b/sound/pci/hda/patch_conexant.c | |||
@@ -3972,9 +3972,14 @@ static void cx_auto_init_output(struct hda_codec *codec) | |||
3972 | int i; | 3972 | int i; |
3973 | 3973 | ||
3974 | mute_outputs(codec, spec->multiout.num_dacs, spec->multiout.dac_nids); | 3974 | mute_outputs(codec, spec->multiout.num_dacs, spec->multiout.dac_nids); |
3975 | for (i = 0; i < cfg->hp_outs; i++) | 3975 | for (i = 0; i < cfg->hp_outs; i++) { |
3976 | unsigned int val = PIN_OUT; | ||
3977 | if (snd_hda_query_pin_caps(codec, cfg->hp_pins[i]) & | ||
3978 | AC_PINCAP_HP_DRV) | ||
3979 | val |= AC_PINCTL_HP_EN; | ||
3976 | snd_hda_codec_write(codec, cfg->hp_pins[i], 0, | 3980 | snd_hda_codec_write(codec, cfg->hp_pins[i], 0, |
3977 | AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP); | 3981 | AC_VERB_SET_PIN_WIDGET_CONTROL, val); |
3982 | } | ||
3978 | mute_outputs(codec, cfg->hp_outs, cfg->hp_pins); | 3983 | mute_outputs(codec, cfg->hp_outs, cfg->hp_pins); |
3979 | mute_outputs(codec, cfg->line_outs, cfg->line_out_pins); | 3984 | mute_outputs(codec, cfg->line_outs, cfg->line_out_pins); |
3980 | mute_outputs(codec, cfg->speaker_outs, cfg->speaker_pins); | 3985 | mute_outputs(codec, cfg->speaker_outs, cfg->speaker_pins); |
@@ -4431,6 +4436,7 @@ static void apply_pincfg(struct hda_codec *codec, const struct cxt_pincfg *cfg) | |||
4431 | 4436 | ||
4432 | enum { | 4437 | enum { |
4433 | CXT_PINCFG_LENOVO_X200, | 4438 | CXT_PINCFG_LENOVO_X200, |
4439 | CXT_PINCFG_LENOVO_TP410, | ||
4434 | CXT_FIXUP_STEREO_DMIC, | 4440 | CXT_FIXUP_STEREO_DMIC, |
4435 | }; | 4441 | }; |
4436 | 4442 | ||
@@ -4455,6 +4461,7 @@ static void apply_fixup(struct hda_codec *codec, | |||
4455 | } | 4461 | } |
4456 | } | 4462 | } |
4457 | 4463 | ||
4464 | /* ThinkPad X200 & co with cxt5051 */ | ||
4458 | static const struct cxt_pincfg cxt_pincfg_lenovo_x200[] = { | 4465 | static const struct cxt_pincfg cxt_pincfg_lenovo_x200[] = { |
4459 | { 0x16, 0x042140ff }, /* HP (seq# overridden) */ | 4466 | { 0x16, 0x042140ff }, /* HP (seq# overridden) */ |
4460 | { 0x17, 0x21a11000 }, /* dock-mic */ | 4467 | { 0x17, 0x21a11000 }, /* dock-mic */ |
@@ -4463,13 +4470,31 @@ static const struct cxt_pincfg cxt_pincfg_lenovo_x200[] = { | |||
4463 | {} | 4470 | {} |
4464 | }; | 4471 | }; |
4465 | 4472 | ||
4473 | /* ThinkPad 410/420/510/520, X201 & co with cxt5066 */ | ||
4474 | static const struct cxt_pincfg cxt_pincfg_lenovo_tp410[] = { | ||
4475 | { 0x19, 0x042110ff }, /* HP (seq# overridden) */ | ||
4476 | { 0x1a, 0x21a190f0 }, /* dock-mic */ | ||
4477 | { 0x1c, 0x212140ff }, /* dock-HP */ | ||
4478 | {} | ||
4479 | }; | ||
4480 | |||
4466 | static const struct cxt_pincfg *cxt_pincfg_tbl[] = { | 4481 | static const struct cxt_pincfg *cxt_pincfg_tbl[] = { |
4467 | [CXT_PINCFG_LENOVO_X200] = cxt_pincfg_lenovo_x200, | 4482 | [CXT_PINCFG_LENOVO_X200] = cxt_pincfg_lenovo_x200, |
4483 | [CXT_PINCFG_LENOVO_TP410] = cxt_pincfg_lenovo_tp410, | ||
4468 | [CXT_FIXUP_STEREO_DMIC] = NULL, | 4484 | [CXT_FIXUP_STEREO_DMIC] = NULL, |
4469 | }; | 4485 | }; |
4470 | 4486 | ||
4471 | static const struct snd_pci_quirk cxt_fixups[] = { | 4487 | static const struct snd_pci_quirk cxt5051_fixups[] = { |
4472 | SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo X200", CXT_PINCFG_LENOVO_X200), | 4488 | SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo X200", CXT_PINCFG_LENOVO_X200), |
4489 | {} | ||
4490 | }; | ||
4491 | |||
4492 | static const struct snd_pci_quirk cxt5066_fixups[] = { | ||
4493 | SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400", CXT_PINCFG_LENOVO_TP410), | ||
4494 | SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo T410", CXT_PINCFG_LENOVO_TP410), | ||
4495 | SND_PCI_QUIRK(0x17aa, 0x215f, "Lenovo T510", CXT_PINCFG_LENOVO_TP410), | ||
4496 | SND_PCI_QUIRK(0x17aa, 0x21ce, "Lenovo T420", CXT_PINCFG_LENOVO_TP410), | ||
4497 | SND_PCI_QUIRK(0x17aa, 0x21cf, "Lenovo T520", CXT_PINCFG_LENOVO_TP410), | ||
4473 | SND_PCI_QUIRK(0x17aa, 0x3975, "Lenovo U300s", CXT_FIXUP_STEREO_DMIC), | 4498 | SND_PCI_QUIRK(0x17aa, 0x3975, "Lenovo U300s", CXT_FIXUP_STEREO_DMIC), |
4474 | {} | 4499 | {} |
4475 | }; | 4500 | }; |
@@ -4510,13 +4535,13 @@ static int patch_conexant_auto(struct hda_codec *codec) | |||
4510 | case 0x14f15051: | 4535 | case 0x14f15051: |
4511 | add_cx5051_fake_mutes(codec); | 4536 | add_cx5051_fake_mutes(codec); |
4512 | codec->pin_amp_workaround = 1; | 4537 | codec->pin_amp_workaround = 1; |
4538 | apply_fixup(codec, cxt5051_fixups, cxt_pincfg_tbl); | ||
4513 | break; | 4539 | break; |
4514 | default: | 4540 | default: |
4515 | codec->pin_amp_workaround = 1; | 4541 | codec->pin_amp_workaround = 1; |
4542 | apply_fixup(codec, cxt5066_fixups, cxt_pincfg_tbl); | ||
4516 | } | 4543 | } |
4517 | 4544 | ||
4518 | apply_fixup(codec, cxt_fixups, cxt_pincfg_tbl); | ||
4519 | |||
4520 | /* Show mute-led control only on HP laptops | 4545 | /* Show mute-led control only on HP laptops |
4521 | * This is a sort of white-list: on HP laptops, EAPD corresponds | 4546 | * This is a sort of white-list: on HP laptops, EAPD corresponds |
4522 | * only to the mute-LED without actualy amp function. Meanwhile, | 4547 | * only to the mute-LED without actualy amp function. Meanwhile, |
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index 540cd13f7f15..83f345f3c961 100644 --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c | |||
@@ -757,8 +757,6 @@ static void hdmi_intrinsic_event(struct hda_codec *codec, unsigned int res) | |||
757 | struct hdmi_spec *spec = codec->spec; | 757 | struct hdmi_spec *spec = codec->spec; |
758 | int tag = res >> AC_UNSOL_RES_TAG_SHIFT; | 758 | int tag = res >> AC_UNSOL_RES_TAG_SHIFT; |
759 | int pin_nid; | 759 | int pin_nid; |
760 | int pd = !!(res & AC_UNSOL_RES_PD); | ||
761 | int eldv = !!(res & AC_UNSOL_RES_ELDV); | ||
762 | int pin_idx; | 760 | int pin_idx; |
763 | struct hda_jack_tbl *jack; | 761 | struct hda_jack_tbl *jack; |
764 | 762 | ||
@@ -768,9 +766,10 @@ static void hdmi_intrinsic_event(struct hda_codec *codec, unsigned int res) | |||
768 | pin_nid = jack->nid; | 766 | pin_nid = jack->nid; |
769 | jack->jack_dirty = 1; | 767 | jack->jack_dirty = 1; |
770 | 768 | ||
771 | printk(KERN_INFO | 769 | _snd_printd(SND_PR_VERBOSE, |
772 | "HDMI hot plug event: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n", | 770 | "HDMI hot plug event: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n", |
773 | codec->addr, pin_nid, pd, eldv); | 771 | codec->addr, pin_nid, |
772 | !!(res & AC_UNSOL_RES_PD), !!(res & AC_UNSOL_RES_ELDV)); | ||
774 | 773 | ||
775 | pin_idx = pin_nid_to_pin_index(spec, pin_nid); | 774 | pin_idx = pin_nid_to_pin_index(spec, pin_nid); |
776 | if (pin_idx < 0) | 775 | if (pin_idx < 0) |
@@ -992,7 +991,7 @@ static void hdmi_present_sense(struct hdmi_spec_per_pin *per_pin, int repoll) | |||
992 | if (eld->monitor_present) | 991 | if (eld->monitor_present) |
993 | eld_valid = !!(present & AC_PINSENSE_ELDV); | 992 | eld_valid = !!(present & AC_PINSENSE_ELDV); |
994 | 993 | ||
995 | printk(KERN_INFO | 994 | _snd_printd(SND_PR_VERBOSE, |
996 | "HDMI status: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n", | 995 | "HDMI status: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n", |
997 | codec->addr, pin_nid, eld->monitor_present, eld_valid); | 996 | codec->addr, pin_nid, eld->monitor_present, eld_valid); |
998 | 997 | ||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 9917e55d6f11..e65e35433055 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -1445,6 +1445,13 @@ enum { | |||
1445 | ALC_FIXUP_ACT_BUILD, | 1445 | ALC_FIXUP_ACT_BUILD, |
1446 | }; | 1446 | }; |
1447 | 1447 | ||
1448 | static void alc_apply_pincfgs(struct hda_codec *codec, | ||
1449 | const struct alc_pincfg *cfg) | ||
1450 | { | ||
1451 | for (; cfg->nid; cfg++) | ||
1452 | snd_hda_codec_set_pincfg(codec, cfg->nid, cfg->val); | ||
1453 | } | ||
1454 | |||
1448 | static void alc_apply_fixup(struct hda_codec *codec, int action) | 1455 | static void alc_apply_fixup(struct hda_codec *codec, int action) |
1449 | { | 1456 | { |
1450 | struct alc_spec *spec = codec->spec; | 1457 | struct alc_spec *spec = codec->spec; |
@@ -1478,9 +1485,7 @@ static void alc_apply_fixup(struct hda_codec *codec, int action) | |||
1478 | snd_printdd(KERN_INFO "hda_codec: %s: " | 1485 | snd_printdd(KERN_INFO "hda_codec: %s: " |
1479 | "Apply pincfg for %s\n", | 1486 | "Apply pincfg for %s\n", |
1480 | codec->chip_name, modelname); | 1487 | codec->chip_name, modelname); |
1481 | for (; cfg->nid; cfg++) | 1488 | alc_apply_pincfgs(codec, cfg); |
1482 | snd_hda_codec_set_pincfg(codec, cfg->nid, | ||
1483 | cfg->val); | ||
1484 | break; | 1489 | break; |
1485 | case ALC_FIXUP_VERBS: | 1490 | case ALC_FIXUP_VERBS: |
1486 | if (action != ALC_FIXUP_ACT_PROBE || !fix->v.verbs) | 1491 | if (action != ALC_FIXUP_ACT_PROBE || !fix->v.verbs) |
@@ -3398,8 +3403,10 @@ static int alc_auto_fill_dac_nids(struct hda_codec *codec) | |||
3398 | for (;;) { | 3403 | for (;;) { |
3399 | badness = fill_and_eval_dacs(codec, fill_hardwired, | 3404 | badness = fill_and_eval_dacs(codec, fill_hardwired, |
3400 | fill_mio_first); | 3405 | fill_mio_first); |
3401 | if (badness < 0) | 3406 | if (badness < 0) { |
3407 | kfree(best_cfg); | ||
3402 | return badness; | 3408 | return badness; |
3409 | } | ||
3403 | debug_badness("==> lo_type=%d, wired=%d, mio=%d, badness=0x%x\n", | 3410 | debug_badness("==> lo_type=%d, wired=%d, mio=%d, badness=0x%x\n", |
3404 | cfg->line_out_type, fill_hardwired, fill_mio_first, | 3411 | cfg->line_out_type, fill_hardwired, fill_mio_first, |
3405 | badness); | 3412 | badness); |
@@ -3434,7 +3441,7 @@ static int alc_auto_fill_dac_nids(struct hda_codec *codec) | |||
3434 | cfg->line_out_type = AUTO_PIN_SPEAKER_OUT; | 3441 | cfg->line_out_type = AUTO_PIN_SPEAKER_OUT; |
3435 | fill_hardwired = true; | 3442 | fill_hardwired = true; |
3436 | continue; | 3443 | continue; |
3437 | } | 3444 | } |
3438 | if (cfg->hp_outs > 0 && | 3445 | if (cfg->hp_outs > 0 && |
3439 | cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) { | 3446 | cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) { |
3440 | cfg->speaker_outs = cfg->line_outs; | 3447 | cfg->speaker_outs = cfg->line_outs; |
@@ -3448,7 +3455,7 @@ static int alc_auto_fill_dac_nids(struct hda_codec *codec) | |||
3448 | cfg->line_out_type = AUTO_PIN_HP_OUT; | 3455 | cfg->line_out_type = AUTO_PIN_HP_OUT; |
3449 | fill_hardwired = true; | 3456 | fill_hardwired = true; |
3450 | continue; | 3457 | continue; |
3451 | } | 3458 | } |
3452 | break; | 3459 | break; |
3453 | } | 3460 | } |
3454 | 3461 | ||
@@ -4423,7 +4430,7 @@ static int alc_parse_auto_config(struct hda_codec *codec, | |||
4423 | static int alc880_parse_auto_config(struct hda_codec *codec) | 4430 | static int alc880_parse_auto_config(struct hda_codec *codec) |
4424 | { | 4431 | { |
4425 | static const hda_nid_t alc880_ignore[] = { 0x1d, 0 }; | 4432 | static const hda_nid_t alc880_ignore[] = { 0x1d, 0 }; |
4426 | static const hda_nid_t alc880_ssids[] = { 0x15, 0x1b, 0x14, 0 }; | 4433 | static const hda_nid_t alc880_ssids[] = { 0x15, 0x1b, 0x14, 0 }; |
4427 | return alc_parse_auto_config(codec, alc880_ignore, alc880_ssids); | 4434 | return alc_parse_auto_config(codec, alc880_ignore, alc880_ssids); |
4428 | } | 4435 | } |
4429 | 4436 | ||
@@ -4859,6 +4866,7 @@ enum { | |||
4859 | ALC260_FIXUP_GPIO1_TOGGLE, | 4866 | ALC260_FIXUP_GPIO1_TOGGLE, |
4860 | ALC260_FIXUP_REPLACER, | 4867 | ALC260_FIXUP_REPLACER, |
4861 | ALC260_FIXUP_HP_B1900, | 4868 | ALC260_FIXUP_HP_B1900, |
4869 | ALC260_FIXUP_KN1, | ||
4862 | }; | 4870 | }; |
4863 | 4871 | ||
4864 | static void alc260_gpio1_automute(struct hda_codec *codec) | 4872 | static void alc260_gpio1_automute(struct hda_codec *codec) |
@@ -4886,6 +4894,36 @@ static void alc260_fixup_gpio1_toggle(struct hda_codec *codec, | |||
4886 | } | 4894 | } |
4887 | } | 4895 | } |
4888 | 4896 | ||
4897 | static void alc260_fixup_kn1(struct hda_codec *codec, | ||
4898 | const struct alc_fixup *fix, int action) | ||
4899 | { | ||
4900 | struct alc_spec *spec = codec->spec; | ||
4901 | static const struct alc_pincfg pincfgs[] = { | ||
4902 | { 0x0f, 0x02214000 }, /* HP/speaker */ | ||
4903 | { 0x12, 0x90a60160 }, /* int mic */ | ||
4904 | { 0x13, 0x02a19000 }, /* ext mic */ | ||
4905 | { 0x18, 0x01446000 }, /* SPDIF out */ | ||
4906 | /* disable bogus I/O pins */ | ||
4907 | { 0x10, 0x411111f0 }, | ||
4908 | { 0x11, 0x411111f0 }, | ||
4909 | { 0x14, 0x411111f0 }, | ||
4910 | { 0x15, 0x411111f0 }, | ||
4911 | { 0x16, 0x411111f0 }, | ||
4912 | { 0x17, 0x411111f0 }, | ||
4913 | { 0x19, 0x411111f0 }, | ||
4914 | { } | ||
4915 | }; | ||
4916 | |||
4917 | switch (action) { | ||
4918 | case ALC_FIXUP_ACT_PRE_PROBE: | ||
4919 | alc_apply_pincfgs(codec, pincfgs); | ||
4920 | break; | ||
4921 | case ALC_FIXUP_ACT_PROBE: | ||
4922 | spec->init_amp = ALC_INIT_NONE; | ||
4923 | break; | ||
4924 | } | ||
4925 | } | ||
4926 | |||
4889 | static const struct alc_fixup alc260_fixups[] = { | 4927 | static const struct alc_fixup alc260_fixups[] = { |
4890 | [ALC260_FIXUP_HP_DC5750] = { | 4928 | [ALC260_FIXUP_HP_DC5750] = { |
4891 | .type = ALC_FIXUP_PINS, | 4929 | .type = ALC_FIXUP_PINS, |
@@ -4936,7 +4974,11 @@ static const struct alc_fixup alc260_fixups[] = { | |||
4936 | .v.func = alc260_fixup_gpio1_toggle, | 4974 | .v.func = alc260_fixup_gpio1_toggle, |
4937 | .chained = true, | 4975 | .chained = true, |
4938 | .chain_id = ALC260_FIXUP_COEF, | 4976 | .chain_id = ALC260_FIXUP_COEF, |
4939 | } | 4977 | }, |
4978 | [ALC260_FIXUP_KN1] = { | ||
4979 | .type = ALC_FIXUP_FUNC, | ||
4980 | .v.func = alc260_fixup_kn1, | ||
4981 | }, | ||
4940 | }; | 4982 | }; |
4941 | 4983 | ||
4942 | static const struct snd_pci_quirk alc260_fixup_tbl[] = { | 4984 | static const struct snd_pci_quirk alc260_fixup_tbl[] = { |
@@ -4946,6 +4988,7 @@ static const struct snd_pci_quirk alc260_fixup_tbl[] = { | |||
4946 | SND_PCI_QUIRK(0x103c, 0x280a, "HP dc5750", ALC260_FIXUP_HP_DC5750), | 4988 | SND_PCI_QUIRK(0x103c, 0x280a, "HP dc5750", ALC260_FIXUP_HP_DC5750), |
4947 | SND_PCI_QUIRK(0x103c, 0x30ba, "HP Presario B1900", ALC260_FIXUP_HP_B1900), | 4989 | SND_PCI_QUIRK(0x103c, 0x30ba, "HP Presario B1900", ALC260_FIXUP_HP_B1900), |
4948 | SND_PCI_QUIRK(0x1509, 0x4540, "Favorit 100XS", ALC260_FIXUP_GPIO1), | 4990 | SND_PCI_QUIRK(0x1509, 0x4540, "Favorit 100XS", ALC260_FIXUP_GPIO1), |
4991 | SND_PCI_QUIRK(0x152d, 0x0729, "Quanta KN1", ALC260_FIXUP_KN1), | ||
4949 | SND_PCI_QUIRK(0x161f, 0x2057, "Replacer 672V", ALC260_FIXUP_REPLACER), | 4992 | SND_PCI_QUIRK(0x161f, 0x2057, "Replacer 672V", ALC260_FIXUP_REPLACER), |
4950 | SND_PCI_QUIRK(0x1631, 0xc017, "PB V7900", ALC260_FIXUP_COEF), | 4993 | SND_PCI_QUIRK(0x1631, 0xc017, "PB V7900", ALC260_FIXUP_COEF), |
4951 | {} | 4994 | {} |
@@ -5269,7 +5312,9 @@ static const struct alc_fixup alc882_fixups[] = { | |||
5269 | { 0x16, 0x99130111 }, /* CLFE speaker */ | 5312 | { 0x16, 0x99130111 }, /* CLFE speaker */ |
5270 | { 0x17, 0x99130112 }, /* surround speaker */ | 5313 | { 0x17, 0x99130112 }, /* surround speaker */ |
5271 | { } | 5314 | { } |
5272 | } | 5315 | }, |
5316 | .chained = true, | ||
5317 | .chain_id = ALC882_FIXUP_GPIO1, | ||
5273 | }, | 5318 | }, |
5274 | [ALC882_FIXUP_ACER_ASPIRE_8930G] = { | 5319 | [ALC882_FIXUP_ACER_ASPIRE_8930G] = { |
5275 | .type = ALC_FIXUP_PINS, | 5320 | .type = ALC_FIXUP_PINS, |
@@ -5312,7 +5357,9 @@ static const struct alc_fixup alc882_fixups[] = { | |||
5312 | { 0x20, AC_VERB_SET_COEF_INDEX, 0x07 }, | 5357 | { 0x20, AC_VERB_SET_COEF_INDEX, 0x07 }, |
5313 | { 0x20, AC_VERB_SET_PROC_COEF, 0x3050 }, | 5358 | { 0x20, AC_VERB_SET_PROC_COEF, 0x3050 }, |
5314 | { } | 5359 | { } |
5315 | } | 5360 | }, |
5361 | .chained = true, | ||
5362 | .chain_id = ALC882_FIXUP_GPIO1, | ||
5316 | }, | 5363 | }, |
5317 | [ALC885_FIXUP_MACPRO_GPIO] = { | 5364 | [ALC885_FIXUP_MACPRO_GPIO] = { |
5318 | .type = ALC_FIXUP_FUNC, | 5365 | .type = ALC_FIXUP_FUNC, |
@@ -5359,6 +5406,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = { | |||
5359 | ALC882_FIXUP_ACER_ASPIRE_4930G), | 5406 | ALC882_FIXUP_ACER_ASPIRE_4930G), |
5360 | SND_PCI_QUIRK(0x1025, 0x0155, "Packard-Bell M5120", ALC882_FIXUP_PB_M5210), | 5407 | SND_PCI_QUIRK(0x1025, 0x0155, "Packard-Bell M5120", ALC882_FIXUP_PB_M5210), |
5361 | SND_PCI_QUIRK(0x1025, 0x0259, "Acer Aspire 5935", ALC889_FIXUP_DAC_ROUTE), | 5408 | SND_PCI_QUIRK(0x1025, 0x0259, "Acer Aspire 5935", ALC889_FIXUP_DAC_ROUTE), |
5409 | SND_PCI_QUIRK(0x1025, 0x026b, "Acer Aspire 8940G", ALC882_FIXUP_ACER_ASPIRE_8930G), | ||
5362 | SND_PCI_QUIRK(0x1025, 0x0296, "Acer Aspire 7736z", ALC882_FIXUP_ACER_ASPIRE_7736), | 5410 | SND_PCI_QUIRK(0x1025, 0x0296, "Acer Aspire 7736z", ALC882_FIXUP_ACER_ASPIRE_7736), |
5363 | SND_PCI_QUIRK(0x1043, 0x13c2, "Asus A7M", ALC882_FIXUP_EAPD), | 5411 | SND_PCI_QUIRK(0x1043, 0x13c2, "Asus A7M", ALC882_FIXUP_EAPD), |
5364 | SND_PCI_QUIRK(0x1043, 0x1873, "ASUS W90V", ALC882_FIXUP_ASUS_W90V), | 5412 | SND_PCI_QUIRK(0x1043, 0x1873, "ASUS W90V", ALC882_FIXUP_ASUS_W90V), |
@@ -5384,6 +5432,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = { | |||
5384 | SND_PCI_QUIRK(0x106b, 0x3f00, "Macbook 5,1", ALC889_FIXUP_IMAC91_VREF), | 5432 | SND_PCI_QUIRK(0x106b, 0x3f00, "Macbook 5,1", ALC889_FIXUP_IMAC91_VREF), |
5385 | SND_PCI_QUIRK(0x106b, 0x4000, "MacbookPro 5,1", ALC889_FIXUP_IMAC91_VREF), | 5433 | SND_PCI_QUIRK(0x106b, 0x4000, "MacbookPro 5,1", ALC889_FIXUP_IMAC91_VREF), |
5386 | SND_PCI_QUIRK(0x106b, 0x4100, "Macmini 3,1", ALC889_FIXUP_IMAC91_VREF), | 5434 | SND_PCI_QUIRK(0x106b, 0x4100, "Macmini 3,1", ALC889_FIXUP_IMAC91_VREF), |
5435 | SND_PCI_QUIRK(0x106b, 0x4200, "Mac Pro 5,1", ALC885_FIXUP_MACPRO_GPIO), | ||
5387 | SND_PCI_QUIRK(0x106b, 0x4600, "MacbookPro 5,2", ALC889_FIXUP_IMAC91_VREF), | 5436 | SND_PCI_QUIRK(0x106b, 0x4600, "MacbookPro 5,2", ALC889_FIXUP_IMAC91_VREF), |
5388 | SND_PCI_QUIRK(0x106b, 0x4900, "iMac 9,1 Aluminum", ALC889_FIXUP_IMAC91_VREF), | 5437 | SND_PCI_QUIRK(0x106b, 0x4900, "iMac 9,1 Aluminum", ALC889_FIXUP_IMAC91_VREF), |
5389 | SND_PCI_QUIRK(0x106b, 0x4a00, "Macbook 5,2", ALC889_FIXUP_IMAC91_VREF), | 5438 | SND_PCI_QUIRK(0x106b, 0x4a00, "Macbook 5,2", ALC889_FIXUP_IMAC91_VREF), |
@@ -5399,6 +5448,13 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = { | |||
5399 | {} | 5448 | {} |
5400 | }; | 5449 | }; |
5401 | 5450 | ||
5451 | static const struct alc_model_fixup alc882_fixup_models[] = { | ||
5452 | {.id = ALC882_FIXUP_ACER_ASPIRE_4930G, .name = "acer-aspire-4930g"}, | ||
5453 | {.id = ALC882_FIXUP_ACER_ASPIRE_8930G, .name = "acer-aspire-8930g"}, | ||
5454 | {.id = ALC883_FIXUP_ACER_EAPD, .name = "acer-aspire"}, | ||
5455 | {} | ||
5456 | }; | ||
5457 | |||
5402 | /* | 5458 | /* |
5403 | * BIOS auto configuration | 5459 | * BIOS auto configuration |
5404 | */ | 5460 | */ |
@@ -5439,7 +5495,8 @@ static int patch_alc882(struct hda_codec *codec) | |||
5439 | if (err < 0) | 5495 | if (err < 0) |
5440 | goto error; | 5496 | goto error; |
5441 | 5497 | ||
5442 | alc_pick_fixup(codec, NULL, alc882_fixup_tbl, alc882_fixups); | 5498 | alc_pick_fixup(codec, alc882_fixup_models, alc882_fixup_tbl, |
5499 | alc882_fixups); | ||
5443 | alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE); | 5500 | alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE); |
5444 | 5501 | ||
5445 | alc_auto_parse_customize_define(codec); | 5502 | alc_auto_parse_customize_define(codec); |
@@ -6079,7 +6136,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
6079 | * Basically the device should work as is without the fixup table. | 6136 | * Basically the device should work as is without the fixup table. |
6080 | * If BIOS doesn't give a proper info, enable the corresponding | 6137 | * If BIOS doesn't give a proper info, enable the corresponding |
6081 | * fixup entry. | 6138 | * fixup entry. |
6082 | */ | 6139 | */ |
6083 | SND_PCI_QUIRK(0x1043, 0x8330, "ASUS Eeepc P703 P900A", | 6140 | SND_PCI_QUIRK(0x1043, 0x8330, "ASUS Eeepc P703 P900A", |
6084 | ALC269_FIXUP_AMIC), | 6141 | ALC269_FIXUP_AMIC), |
6085 | SND_PCI_QUIRK(0x1043, 0x1013, "ASUS N61Da", ALC269_FIXUP_AMIC), | 6142 | SND_PCI_QUIRK(0x1043, 0x1013, "ASUS N61Da", ALC269_FIXUP_AMIC), |
@@ -6296,7 +6353,7 @@ static void alc_fixup_no_jack_detect(struct hda_codec *codec, | |||
6296 | { | 6353 | { |
6297 | if (action == ALC_FIXUP_ACT_PRE_PROBE) | 6354 | if (action == ALC_FIXUP_ACT_PRE_PROBE) |
6298 | codec->no_jack_detect = 1; | 6355 | codec->no_jack_detect = 1; |
6299 | } | 6356 | } |
6300 | 6357 | ||
6301 | static const struct alc_fixup alc861_fixups[] = { | 6358 | static const struct alc_fixup alc861_fixups[] = { |
6302 | [ALC861_FIXUP_FSC_AMILO_PI1505] = { | 6359 | [ALC861_FIXUP_FSC_AMILO_PI1505] = { |
@@ -6714,7 +6771,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = { | |||
6714 | * Basically the device should work as is without the fixup table. | 6771 | * Basically the device should work as is without the fixup table. |
6715 | * If BIOS doesn't give a proper info, enable the corresponding | 6772 | * If BIOS doesn't give a proper info, enable the corresponding |
6716 | * fixup entry. | 6773 | * fixup entry. |
6717 | */ | 6774 | */ |
6718 | SND_PCI_QUIRK(0x1043, 0x1000, "ASUS N50Vm", ALC662_FIXUP_ASUS_MODE1), | 6775 | SND_PCI_QUIRK(0x1043, 0x1000, "ASUS N50Vm", ALC662_FIXUP_ASUS_MODE1), |
6719 | SND_PCI_QUIRK(0x1043, 0x1092, "ASUS NB", ALC662_FIXUP_ASUS_MODE3), | 6776 | SND_PCI_QUIRK(0x1043, 0x1092, "ASUS NB", ALC662_FIXUP_ASUS_MODE3), |
6720 | SND_PCI_QUIRK(0x1043, 0x1173, "ASUS K73Jn", ALC662_FIXUP_ASUS_MODE1), | 6777 | SND_PCI_QUIRK(0x1043, 0x1173, "ASUS K73Jn", ALC662_FIXUP_ASUS_MODE1), |
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 33a9946b492c..4742cac26aa9 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
@@ -5063,12 +5063,11 @@ static void stac92xx_update_led_status(struct hda_codec *codec, int enabled) | |||
5063 | if (spec->gpio_led_polarity) | 5063 | if (spec->gpio_led_polarity) |
5064 | muted = !muted; | 5064 | muted = !muted; |
5065 | 5065 | ||
5066 | /*polarity defines *not* muted state level*/ | ||
5067 | if (!spec->vref_mute_led_nid) { | 5066 | if (!spec->vref_mute_led_nid) { |
5068 | if (muted) | 5067 | if (muted) |
5069 | spec->gpio_data &= ~spec->gpio_led; /* orange */ | 5068 | spec->gpio_data |= spec->gpio_led; |
5070 | else | 5069 | else |
5071 | spec->gpio_data |= spec->gpio_led; /* white */ | 5070 | spec->gpio_data &= ~spec->gpio_led; |
5072 | stac_gpio_set(codec, spec->gpio_mask, | 5071 | stac_gpio_set(codec, spec->gpio_mask, |
5073 | spec->gpio_dir, spec->gpio_data); | 5072 | spec->gpio_dir, spec->gpio_data); |
5074 | } else { | 5073 | } else { |
diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c index f8e10ced244a..b3e24f289421 100644 --- a/sound/soc/codecs/ak4642.c +++ b/sound/soc/codecs/ak4642.c | |||
@@ -140,7 +140,7 @@ | |||
140 | * min : 0xFE : -115.0 dB | 140 | * min : 0xFE : -115.0 dB |
141 | * mute: 0xFF | 141 | * mute: 0xFF |
142 | */ | 142 | */ |
143 | static const DECLARE_TLV_DB_SCALE(out_tlv, -11500, 50, 1); | 143 | static const DECLARE_TLV_DB_SCALE(out_tlv, -11550, 50, 1); |
144 | 144 | ||
145 | static const struct snd_kcontrol_new ak4642_snd_controls[] = { | 145 | static const struct snd_kcontrol_new ak4642_snd_controls[] = { |
146 | 146 | ||
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c index d1926266fe00..8e92fb88ed09 100644 --- a/sound/soc/codecs/sgtl5000.c +++ b/sound/soc/codecs/sgtl5000.c | |||
@@ -143,11 +143,11 @@ static int mic_bias_event(struct snd_soc_dapm_widget *w, | |||
143 | } | 143 | } |
144 | 144 | ||
145 | /* | 145 | /* |
146 | * using codec assist to small pop, hp_powerup or lineout_powerup | 146 | * As manual described, ADC/DAC only works when VAG powerup, |
147 | * should stay setting until vag_powerup is fully ramped down, | 147 | * So enabled VAG before ADC/DAC up. |
148 | * vag fully ramped down require 400ms. | 148 | * In power down case, we need wait 400ms when vag fully ramped down. |
149 | */ | 149 | */ |
150 | static int small_pop_event(struct snd_soc_dapm_widget *w, | 150 | static int power_vag_event(struct snd_soc_dapm_widget *w, |
151 | struct snd_kcontrol *kcontrol, int event) | 151 | struct snd_kcontrol *kcontrol, int event) |
152 | { | 152 | { |
153 | switch (event) { | 153 | switch (event) { |
@@ -156,7 +156,7 @@ static int small_pop_event(struct snd_soc_dapm_widget *w, | |||
156 | SGTL5000_VAG_POWERUP, SGTL5000_VAG_POWERUP); | 156 | SGTL5000_VAG_POWERUP, SGTL5000_VAG_POWERUP); |
157 | break; | 157 | break; |
158 | 158 | ||
159 | case SND_SOC_DAPM_PRE_PMD: | 159 | case SND_SOC_DAPM_POST_PMD: |
160 | snd_soc_update_bits(w->codec, SGTL5000_CHIP_ANA_POWER, | 160 | snd_soc_update_bits(w->codec, SGTL5000_CHIP_ANA_POWER, |
161 | SGTL5000_VAG_POWERUP, 0); | 161 | SGTL5000_VAG_POWERUP, 0); |
162 | msleep(400); | 162 | msleep(400); |
@@ -201,12 +201,8 @@ static const struct snd_soc_dapm_widget sgtl5000_dapm_widgets[] = { | |||
201 | mic_bias_event, | 201 | mic_bias_event, |
202 | SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD), | 202 | SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD), |
203 | 203 | ||
204 | SND_SOC_DAPM_PGA_E("HP", SGTL5000_CHIP_ANA_POWER, 4, 0, NULL, 0, | 204 | SND_SOC_DAPM_PGA("HP", SGTL5000_CHIP_ANA_POWER, 4, 0, NULL, 0), |
205 | small_pop_event, | 205 | SND_SOC_DAPM_PGA("LO", SGTL5000_CHIP_ANA_POWER, 0, 0, NULL, 0), |
206 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD), | ||
207 | SND_SOC_DAPM_PGA_E("LO", SGTL5000_CHIP_ANA_POWER, 0, 0, NULL, 0, | ||
208 | small_pop_event, | ||
209 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD), | ||
210 | 206 | ||
211 | SND_SOC_DAPM_MUX("Capture Mux", SND_SOC_NOPM, 0, 0, &adc_mux), | 207 | SND_SOC_DAPM_MUX("Capture Mux", SND_SOC_NOPM, 0, 0, &adc_mux), |
212 | SND_SOC_DAPM_MUX("Headphone Mux", SND_SOC_NOPM, 0, 0, &dac_mux), | 208 | SND_SOC_DAPM_MUX("Headphone Mux", SND_SOC_NOPM, 0, 0, &dac_mux), |
@@ -221,8 +217,11 @@ static const struct snd_soc_dapm_widget sgtl5000_dapm_widgets[] = { | |||
221 | 0, SGTL5000_CHIP_DIG_POWER, | 217 | 0, SGTL5000_CHIP_DIG_POWER, |
222 | 1, 0), | 218 | 1, 0), |
223 | 219 | ||
224 | SND_SOC_DAPM_ADC("ADC", "Capture", SGTL5000_CHIP_ANA_POWER, 1, 0), | 220 | SND_SOC_DAPM_SUPPLY("VAG_POWER", SGTL5000_CHIP_ANA_POWER, 7, 0, |
221 | power_vag_event, | ||
222 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), | ||
225 | 223 | ||
224 | SND_SOC_DAPM_ADC("ADC", "Capture", SGTL5000_CHIP_ANA_POWER, 1, 0), | ||
226 | SND_SOC_DAPM_DAC("DAC", "Playback", SGTL5000_CHIP_ANA_POWER, 3, 0), | 225 | SND_SOC_DAPM_DAC("DAC", "Playback", SGTL5000_CHIP_ANA_POWER, 3, 0), |
227 | }; | 226 | }; |
228 | 227 | ||
@@ -231,9 +230,11 @@ static const struct snd_soc_dapm_route sgtl5000_dapm_routes[] = { | |||
231 | {"Capture Mux", "LINE_IN", "LINE_IN"}, /* line_in --> adc_mux */ | 230 | {"Capture Mux", "LINE_IN", "LINE_IN"}, /* line_in --> adc_mux */ |
232 | {"Capture Mux", "MIC_IN", "MIC_IN"}, /* mic_in --> adc_mux */ | 231 | {"Capture Mux", "MIC_IN", "MIC_IN"}, /* mic_in --> adc_mux */ |
233 | 232 | ||
233 | {"ADC", NULL, "VAG_POWER"}, | ||
234 | {"ADC", NULL, "Capture Mux"}, /* adc_mux --> adc */ | 234 | {"ADC", NULL, "Capture Mux"}, /* adc_mux --> adc */ |
235 | {"AIFOUT", NULL, "ADC"}, /* adc --> i2s_out */ | 235 | {"AIFOUT", NULL, "ADC"}, /* adc --> i2s_out */ |
236 | 236 | ||
237 | {"DAC", NULL, "VAG_POWER"}, | ||
237 | {"DAC", NULL, "AIFIN"}, /* i2s-->dac,skip audio mux */ | 238 | {"DAC", NULL, "AIFIN"}, /* i2s-->dac,skip audio mux */ |
238 | {"Headphone Mux", "DAC", "DAC"}, /* dac --> hp_mux */ | 239 | {"Headphone Mux", "DAC", "DAC"}, /* dac --> hp_mux */ |
239 | {"LO", NULL, "DAC"}, /* dac --> line_out */ | 240 | {"LO", NULL, "DAC"}, /* dac --> line_out */ |
diff --git a/sound/soc/imx/imx-audmux.c b/sound/soc/imx/imx-audmux.c index 601df809a26a..0fe66c3dde12 100644 --- a/sound/soc/imx/imx-audmux.c +++ b/sound/soc/imx/imx-audmux.c | |||
@@ -79,6 +79,9 @@ static ssize_t audmux_read_file(struct file *file, char __user *user_buf, | |||
79 | if (!buf) | 79 | if (!buf) |
80 | return -ENOMEM; | 80 | return -ENOMEM; |
81 | 81 | ||
82 | if (!audmux_base) | ||
83 | return -ENOSYS; | ||
84 | |||
82 | if (audmux_clk) | 85 | if (audmux_clk) |
83 | clk_prepare_enable(audmux_clk); | 86 | clk_prepare_enable(audmux_clk); |
84 | 87 | ||
@@ -158,7 +161,7 @@ static void __init audmux_debugfs_init(void) | |||
158 | return; | 161 | return; |
159 | } | 162 | } |
160 | 163 | ||
161 | for (i = 1; i < 8; i++) { | 164 | for (i = 0; i < MX31_AUDMUX_PORT6_SSI_PINS_6 + 1; i++) { |
162 | snprintf(buf, sizeof(buf), "ssi%d", i); | 165 | snprintf(buf, sizeof(buf), "ssi%d", i); |
163 | if (!debugfs_create_file(buf, 0444, audmux_debugfs_root, | 166 | if (!debugfs_create_file(buf, 0444, audmux_debugfs_root, |
164 | (void *)i, &audmux_debugfs_fops)) | 167 | (void *)i, &audmux_debugfs_fops)) |
diff --git a/sound/soc/pxa/pxa2xx-i2s.c b/sound/soc/pxa/pxa2xx-i2s.c index 609abd51e55f..d08583790d23 100644 --- a/sound/soc/pxa/pxa2xx-i2s.c +++ b/sound/soc/pxa/pxa2xx-i2s.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/delay.h> | 17 | #include <linux/delay.h> |
18 | #include <linux/clk.h> | 18 | #include <linux/clk.h> |
19 | #include <linux/platform_device.h> | 19 | #include <linux/platform_device.h> |
20 | #include <linux/io.h> | ||
20 | #include <sound/core.h> | 21 | #include <sound/core.h> |
21 | #include <sound/pcm.h> | 22 | #include <sound/pcm.h> |
22 | #include <sound/initval.h> | 23 | #include <sound/initval.h> |
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index a4deebc0801a..8d2ebf502df4 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c | |||
@@ -1087,6 +1087,8 @@ static int soc_probe_platform(struct snd_soc_card *card, | |||
1087 | snd_soc_dapm_new_controls(&platform->dapm, | 1087 | snd_soc_dapm_new_controls(&platform->dapm, |
1088 | driver->dapm_widgets, driver->num_dapm_widgets); | 1088 | driver->dapm_widgets, driver->num_dapm_widgets); |
1089 | 1089 | ||
1090 | platform->dapm.idle_bias_off = 1; | ||
1091 | |||
1090 | if (driver->probe) { | 1092 | if (driver->probe) { |
1091 | ret = driver->probe(platform); | 1093 | ret = driver->probe(platform); |
1092 | if (ret < 0) { | 1094 | if (ret < 0) { |
diff --git a/sound/soc/tegra/tegra_i2s.c b/sound/soc/tegra/tegra_i2s.c index 33509de52540..e53349912b2e 100644 --- a/sound/soc/tegra/tegra_i2s.c +++ b/sound/soc/tegra/tegra_i2s.c | |||
@@ -79,11 +79,15 @@ static int tegra_i2s_show(struct seq_file *s, void *unused) | |||
79 | struct tegra_i2s *i2s = s->private; | 79 | struct tegra_i2s *i2s = s->private; |
80 | int i; | 80 | int i; |
81 | 81 | ||
82 | clk_enable(i2s->clk_i2s); | ||
83 | |||
82 | for (i = 0; i < ARRAY_SIZE(regs); i++) { | 84 | for (i = 0; i < ARRAY_SIZE(regs); i++) { |
83 | u32 val = tegra_i2s_read(i2s, regs[i].offset); | 85 | u32 val = tegra_i2s_read(i2s, regs[i].offset); |
84 | seq_printf(s, "%s = %08x\n", regs[i].name, val); | 86 | seq_printf(s, "%s = %08x\n", regs[i].name, val); |
85 | } | 87 | } |
86 | 88 | ||
89 | clk_disable(i2s->clk_i2s); | ||
90 | |||
87 | return 0; | 91 | return 0; |
88 | } | 92 | } |
89 | 93 | ||
@@ -112,7 +116,7 @@ static void tegra_i2s_debug_remove(struct tegra_i2s *i2s) | |||
112 | debugfs_remove(i2s->debug); | 116 | debugfs_remove(i2s->debug); |
113 | } | 117 | } |
114 | #else | 118 | #else |
115 | static inline void tegra_i2s_debug_add(struct tegra_i2s *i2s, int id) | 119 | static inline void tegra_i2s_debug_add(struct tegra_i2s *i2s) |
116 | { | 120 | { |
117 | } | 121 | } |
118 | 122 | ||
diff --git a/sound/soc/tegra/tegra_spdif.c b/sound/soc/tegra/tegra_spdif.c index 475428cf270e..9ff2c601445f 100644 --- a/sound/soc/tegra/tegra_spdif.c +++ b/sound/soc/tegra/tegra_spdif.c | |||
@@ -79,11 +79,15 @@ static int tegra_spdif_show(struct seq_file *s, void *unused) | |||
79 | struct tegra_spdif *spdif = s->private; | 79 | struct tegra_spdif *spdif = s->private; |
80 | int i; | 80 | int i; |
81 | 81 | ||
82 | clk_enable(spdif->clk_spdif_out); | ||
83 | |||
82 | for (i = 0; i < ARRAY_SIZE(regs); i++) { | 84 | for (i = 0; i < ARRAY_SIZE(regs); i++) { |
83 | u32 val = tegra_spdif_read(spdif, regs[i].offset); | 85 | u32 val = tegra_spdif_read(spdif, regs[i].offset); |
84 | seq_printf(s, "%s = %08x\n", regs[i].name, val); | 86 | seq_printf(s, "%s = %08x\n", regs[i].name, val); |
85 | } | 87 | } |
86 | 88 | ||
89 | clk_disable(spdif->clk_spdif_out); | ||
90 | |||
87 | return 0; | 91 | return 0; |
88 | } | 92 | } |
89 | 93 | ||