diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-04-22 17:59:07 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-04-22 17:59:07 -0400 |
commit | 8d082f8f3fb89e8a1fcb5120ad98cd9860c8a3e8 (patch) | |
tree | 5b3865764bee4511d76248b9eaf5cf166557691d | |
parent | 258ba6a5a9194ea043850f77d1219053c810e043 (diff) | |
parent | 6a9a6f233baad76b67a448b39bb55fc064755ba4 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
ALSA: hda - Fix unused warnings when !SND_HDA_NEEDS_RESUME
ALSA: hda - Add a fix-up for Acer dmic with ALC271x codec
ASoC: add a module alias to the FSI driver
ALSA: emu10k1 - Fix "Music" controls to "Synth" controls in documents
ARM: s3c2440: gta02; Register dfbmcs320 device for BT audio interface
ASoC: codecs: JZ4740: Fix OOPS
ASoC: Fix output PGA enabling in wm_hubs CODECs
ASoC: sn95031: decorate function with __devexit_p()
ASoC: SAMSUNG: Fix the inverted clocks handling for pcm driver
ASoC: sst_platform: Fix lock acquring
ASoC: fsi: driver safely remove for against irq
ASoC: fsi: modify vague PM control on probe
ASoC: fsi: take care in failing case of dai register
MAINTAINERS: Update Samsung ASoC maintainer's id
ASoC: WM8903: HP and Line out PGA/mixer DAPM fixes
ASoC: Set left channel volume update bits for WM8994
ASoC: fix config error path
ASoC: check channel mismatch between cpu_dai and codec_dai
ASoC: Tegra: Suspend/resume support
-rw-r--r-- | Documentation/sound/alsa/SB-Live-mixer.txt | 6 | ||||
-rw-r--r-- | MAINTAINERS | 2 | ||||
-rw-r--r-- | arch/arm/mach-s3c2440/mach-gta02.c | 5 | ||||
-rw-r--r-- | sound/pci/hda/hda_codec.c | 4 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 25 | ||||
-rw-r--r-- | sound/soc/codecs/jz4740.c | 2 | ||||
-rw-r--r-- | sound/soc/codecs/sn95031.c | 2 | ||||
-rw-r--r-- | sound/soc/codecs/wm8903.c | 38 | ||||
-rw-r--r-- | sound/soc/codecs/wm8994.c | 16 | ||||
-rw-r--r-- | sound/soc/codecs/wm_hubs.c | 8 | ||||
-rw-r--r-- | sound/soc/mid-x86/sst_platform.c | 10 | ||||
-rw-r--r-- | sound/soc/samsung/pcm.c | 4 | ||||
-rw-r--r-- | sound/soc/sh/fsi.c | 22 | ||||
-rw-r--r-- | sound/soc/soc-core.c | 5 | ||||
-rw-r--r-- | sound/soc/tegra/harmony.c | 1 |
15 files changed, 110 insertions, 40 deletions
diff --git a/Documentation/sound/alsa/SB-Live-mixer.txt b/Documentation/sound/alsa/SB-Live-mixer.txt index f5639d40521d..f4b5988f450c 100644 --- a/Documentation/sound/alsa/SB-Live-mixer.txt +++ b/Documentation/sound/alsa/SB-Live-mixer.txt | |||
@@ -87,14 +87,14 @@ accumulator. ALSA uses accumulators 0 and 1 for left and right PCM. | |||
87 | The result is forwarded to the ADC capture FIFO (thus to the standard capture | 87 | The result is forwarded to the ADC capture FIFO (thus to the standard capture |
88 | PCM device). | 88 | PCM device). |
89 | 89 | ||
90 | name='Music Playback Volume',index=0 | 90 | name='Synth Playback Volume',index=0 |
91 | 91 | ||
92 | This control is used to attenuate samples for left and right MIDI FX-bus | 92 | This control is used to attenuate samples for left and right MIDI FX-bus |
93 | accumulators. ALSA uses accumulators 4 and 5 for left and right MIDI samples. | 93 | accumulators. ALSA uses accumulators 4 and 5 for left and right MIDI samples. |
94 | The result samples are forwarded to the front DAC PCM slots of the AC97 codec. | 94 | The result samples are forwarded to the front DAC PCM slots of the AC97 codec. |
95 | 95 | ||
96 | name='Music Capture Volume',index=0 | 96 | name='Synth Capture Volume',index=0 |
97 | name='Music Capture Switch',index=0 | 97 | name='Synth Capture Switch',index=0 |
98 | 98 | ||
99 | These controls are used to attenuate samples for left and right MIDI FX-bus | 99 | These controls are used to attenuate samples for left and right MIDI FX-bus |
100 | accumulator. ALSA uses accumulators 4 and 5 for left and right PCM. | 100 | accumulator. ALSA uses accumulators 4 and 5 for left and right PCM. |
diff --git a/MAINTAINERS b/MAINTAINERS index 1e2724e55cf0..13803127b68f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -5396,7 +5396,7 @@ F: drivers/media/video/*7146* | |||
5396 | F: include/media/*7146* | 5396 | F: include/media/*7146* |
5397 | 5397 | ||
5398 | SAMSUNG AUDIO (ASoC) DRIVERS | 5398 | SAMSUNG AUDIO (ASoC) DRIVERS |
5399 | M: Jassi Brar <jassi.brar@samsung.com> | 5399 | M: Jassi Brar <jassisinghbrar@gmail.com> |
5400 | L: alsa-devel@alsa-project.org (moderated for non-subscribers) | 5400 | L: alsa-devel@alsa-project.org (moderated for non-subscribers) |
5401 | S: Supported | 5401 | S: Supported |
5402 | F: sound/soc/samsung | 5402 | F: sound/soc/samsung |
diff --git a/arch/arm/mach-s3c2440/mach-gta02.c b/arch/arm/mach-s3c2440/mach-gta02.c index 0db2411ef4bb..716662008ce2 100644 --- a/arch/arm/mach-s3c2440/mach-gta02.c +++ b/arch/arm/mach-s3c2440/mach-gta02.c | |||
@@ -409,6 +409,10 @@ struct platform_device s3c24xx_pwm_device = { | |||
409 | .num_resources = 0, | 409 | .num_resources = 0, |
410 | }; | 410 | }; |
411 | 411 | ||
412 | static struct platform_device gta02_dfbmcs320_device = { | ||
413 | .name = "dfbmcs320", | ||
414 | }; | ||
415 | |||
412 | static struct i2c_board_info gta02_i2c_devs[] __initdata = { | 416 | static struct i2c_board_info gta02_i2c_devs[] __initdata = { |
413 | { | 417 | { |
414 | I2C_BOARD_INFO("pcf50633", 0x73), | 418 | I2C_BOARD_INFO("pcf50633", 0x73), |
@@ -523,6 +527,7 @@ static struct platform_device *gta02_devices[] __initdata = { | |||
523 | &s3c_device_iis, | 527 | &s3c_device_iis, |
524 | &samsung_asoc_dma, | 528 | &samsung_asoc_dma, |
525 | &s3c_device_i2c0, | 529 | &s3c_device_i2c0, |
530 | >a02_dfbmcs320_device, | ||
526 | >a02_buttons_device, | 531 | >a02_buttons_device, |
527 | &s3c_device_adc, | 532 | &s3c_device_adc, |
528 | &s3c_device_ts, | 533 | &s3c_device_ts, |
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index 430f41db6044..759ade12e758 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c | |||
@@ -937,6 +937,7 @@ void snd_hda_shutup_pins(struct hda_codec *codec) | |||
937 | } | 937 | } |
938 | EXPORT_SYMBOL_HDA(snd_hda_shutup_pins); | 938 | EXPORT_SYMBOL_HDA(snd_hda_shutup_pins); |
939 | 939 | ||
940 | #ifdef SND_HDA_NEEDS_RESUME | ||
940 | /* Restore the pin controls cleared previously via snd_hda_shutup_pins() */ | 941 | /* Restore the pin controls cleared previously via snd_hda_shutup_pins() */ |
941 | static void restore_shutup_pins(struct hda_codec *codec) | 942 | static void restore_shutup_pins(struct hda_codec *codec) |
942 | { | 943 | { |
@@ -953,6 +954,7 @@ static void restore_shutup_pins(struct hda_codec *codec) | |||
953 | } | 954 | } |
954 | codec->pins_shutup = 0; | 955 | codec->pins_shutup = 0; |
955 | } | 956 | } |
957 | #endif | ||
956 | 958 | ||
957 | static void init_hda_cache(struct hda_cache_rec *cache, | 959 | static void init_hda_cache(struct hda_cache_rec *cache, |
958 | unsigned int record_size); | 960 | unsigned int record_size); |
@@ -1329,6 +1331,7 @@ static void purify_inactive_streams(struct hda_codec *codec) | |||
1329 | } | 1331 | } |
1330 | } | 1332 | } |
1331 | 1333 | ||
1334 | #ifdef SND_HDA_NEEDS_RESUME | ||
1332 | /* clean up all streams; called from suspend */ | 1335 | /* clean up all streams; called from suspend */ |
1333 | static void hda_cleanup_all_streams(struct hda_codec *codec) | 1336 | static void hda_cleanup_all_streams(struct hda_codec *codec) |
1334 | { | 1337 | { |
@@ -1340,6 +1343,7 @@ static void hda_cleanup_all_streams(struct hda_codec *codec) | |||
1340 | really_cleanup_stream(codec, p); | 1343 | really_cleanup_stream(codec, p); |
1341 | } | 1344 | } |
1342 | } | 1345 | } |
1346 | #endif | ||
1343 | 1347 | ||
1344 | /* | 1348 | /* |
1345 | * amp access functions | 1349 | * amp access functions |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 52928d9a72da..d3bd2c10180f 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -14868,6 +14868,23 @@ static void alc269_fixup_hweq(struct hda_codec *codec, | |||
14868 | alc_write_coef_idx(codec, 0x1e, coef | 0x80); | 14868 | alc_write_coef_idx(codec, 0x1e, coef | 0x80); |
14869 | } | 14869 | } |
14870 | 14870 | ||
14871 | static void alc271_fixup_dmic(struct hda_codec *codec, | ||
14872 | const struct alc_fixup *fix, int action) | ||
14873 | { | ||
14874 | static struct hda_verb verbs[] = { | ||
14875 | {0x20, AC_VERB_SET_COEF_INDEX, 0x0d}, | ||
14876 | {0x20, AC_VERB_SET_PROC_COEF, 0x4000}, | ||
14877 | {} | ||
14878 | }; | ||
14879 | unsigned int cfg; | ||
14880 | |||
14881 | if (strcmp(codec->chip_name, "ALC271X")) | ||
14882 | return; | ||
14883 | cfg = snd_hda_codec_get_pincfg(codec, 0x12); | ||
14884 | if (get_defcfg_connect(cfg) == AC_JACK_PORT_FIXED) | ||
14885 | snd_hda_sequence_write(codec, verbs); | ||
14886 | } | ||
14887 | |||
14871 | enum { | 14888 | enum { |
14872 | ALC269_FIXUP_SONY_VAIO, | 14889 | ALC269_FIXUP_SONY_VAIO, |
14873 | ALC275_FIXUP_SONY_VAIO_GPIO2, | 14890 | ALC275_FIXUP_SONY_VAIO_GPIO2, |
@@ -14876,6 +14893,7 @@ enum { | |||
14876 | ALC269_FIXUP_ASUS_G73JW, | 14893 | ALC269_FIXUP_ASUS_G73JW, |
14877 | ALC269_FIXUP_LENOVO_EAPD, | 14894 | ALC269_FIXUP_LENOVO_EAPD, |
14878 | ALC275_FIXUP_SONY_HWEQ, | 14895 | ALC275_FIXUP_SONY_HWEQ, |
14896 | ALC271_FIXUP_DMIC, | ||
14879 | }; | 14897 | }; |
14880 | 14898 | ||
14881 | static const struct alc_fixup alc269_fixups[] = { | 14899 | static const struct alc_fixup alc269_fixups[] = { |
@@ -14929,7 +14947,11 @@ static const struct alc_fixup alc269_fixups[] = { | |||
14929 | .v.func = alc269_fixup_hweq, | 14947 | .v.func = alc269_fixup_hweq, |
14930 | .chained = true, | 14948 | .chained = true, |
14931 | .chain_id = ALC275_FIXUP_SONY_VAIO_GPIO2 | 14949 | .chain_id = ALC275_FIXUP_SONY_VAIO_GPIO2 |
14932 | } | 14950 | }, |
14951 | [ALC271_FIXUP_DMIC] = { | ||
14952 | .type = ALC_FIXUP_FUNC, | ||
14953 | .v.func = alc271_fixup_dmic, | ||
14954 | }, | ||
14933 | }; | 14955 | }; |
14934 | 14956 | ||
14935 | static struct snd_pci_quirk alc269_fixup_tbl[] = { | 14957 | static struct snd_pci_quirk alc269_fixup_tbl[] = { |
@@ -14938,6 +14960,7 @@ static struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
14938 | SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), | 14960 | SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), |
14939 | SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO), | 14961 | SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO), |
14940 | SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z), | 14962 | SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z), |
14963 | SND_PCI_QUIRK_VENDOR(0x1025, "Acer Aspire", ALC271_FIXUP_DMIC), | ||
14941 | SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE), | 14964 | SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE), |
14942 | SND_PCI_QUIRK(0x17aa, 0x215e, "Thinkpad L512", ALC269_FIXUP_SKU_IGNORE), | 14965 | SND_PCI_QUIRK(0x17aa, 0x215e, "Thinkpad L512", ALC269_FIXUP_SKU_IGNORE), |
14943 | SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE), | 14966 | SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE), |
diff --git a/sound/soc/codecs/jz4740.c b/sound/soc/codecs/jz4740.c index f7cd346fd727..f5ccdbf7ebc6 100644 --- a/sound/soc/codecs/jz4740.c +++ b/sound/soc/codecs/jz4740.c | |||
@@ -308,8 +308,6 @@ static int jz4740_codec_dev_probe(struct snd_soc_codec *codec) | |||
308 | snd_soc_dapm_add_routes(dapm, jz4740_codec_dapm_routes, | 308 | snd_soc_dapm_add_routes(dapm, jz4740_codec_dapm_routes, |
309 | ARRAY_SIZE(jz4740_codec_dapm_routes)); | 309 | ARRAY_SIZE(jz4740_codec_dapm_routes)); |
310 | 310 | ||
311 | snd_soc_dapm_new_widgets(codec); | ||
312 | |||
313 | jz4740_codec_set_bias_level(codec, SND_SOC_BIAS_STANDBY); | 311 | jz4740_codec_set_bias_level(codec, SND_SOC_BIAS_STANDBY); |
314 | 312 | ||
315 | return 0; | 313 | return 0; |
diff --git a/sound/soc/codecs/sn95031.c b/sound/soc/codecs/sn95031.c index a54d2a5b28f6..4d9fb279e146 100644 --- a/sound/soc/codecs/sn95031.c +++ b/sound/soc/codecs/sn95031.c | |||
@@ -927,7 +927,7 @@ static struct platform_driver sn95031_codec_driver = { | |||
927 | .owner = THIS_MODULE, | 927 | .owner = THIS_MODULE, |
928 | }, | 928 | }, |
929 | .probe = sn95031_device_probe, | 929 | .probe = sn95031_device_probe, |
930 | .remove = sn95031_device_remove, | 930 | .remove = __devexit_p(sn95031_device_remove), |
931 | }; | 931 | }; |
932 | 932 | ||
933 | static int __init sn95031_init(void) | 933 | static int __init sn95031_init(void) |
diff --git a/sound/soc/codecs/wm8903.c b/sound/soc/codecs/wm8903.c index ae1cadfae84c..f52b623bb692 100644 --- a/sound/soc/codecs/wm8903.c +++ b/sound/soc/codecs/wm8903.c | |||
@@ -247,8 +247,6 @@ static int wm8903_volatile_register(struct snd_soc_codec *codec, unsigned int re | |||
247 | case WM8903_REVISION_NUMBER: | 247 | case WM8903_REVISION_NUMBER: |
248 | case WM8903_INTERRUPT_STATUS_1: | 248 | case WM8903_INTERRUPT_STATUS_1: |
249 | case WM8903_WRITE_SEQUENCER_4: | 249 | case WM8903_WRITE_SEQUENCER_4: |
250 | case WM8903_POWER_MANAGEMENT_3: | ||
251 | case WM8903_POWER_MANAGEMENT_2: | ||
252 | case WM8903_DC_SERVO_READBACK_1: | 250 | case WM8903_DC_SERVO_READBACK_1: |
253 | case WM8903_DC_SERVO_READBACK_2: | 251 | case WM8903_DC_SERVO_READBACK_2: |
254 | case WM8903_DC_SERVO_READBACK_3: | 252 | case WM8903_DC_SERVO_READBACK_3: |
@@ -875,34 +873,40 @@ SND_SOC_DAPM_MIXER("Left Speaker Mixer", WM8903_POWER_MANAGEMENT_4, 1, 0, | |||
875 | SND_SOC_DAPM_MIXER("Right Speaker Mixer", WM8903_POWER_MANAGEMENT_4, 0, 0, | 873 | SND_SOC_DAPM_MIXER("Right Speaker Mixer", WM8903_POWER_MANAGEMENT_4, 0, 0, |
876 | right_speaker_mixer, ARRAY_SIZE(right_speaker_mixer)), | 874 | right_speaker_mixer, ARRAY_SIZE(right_speaker_mixer)), |
877 | 875 | ||
878 | SND_SOC_DAPM_PGA_S("Left Headphone Output PGA", 0, WM8903_ANALOGUE_HP_0, | 876 | SND_SOC_DAPM_PGA_S("Left Headphone Output PGA", 0, WM8903_POWER_MANAGEMENT_2, |
879 | 4, 0, NULL, 0), | 877 | 1, 0, NULL, 0), |
880 | SND_SOC_DAPM_PGA_S("Right Headphone Output PGA", 0, WM8903_ANALOGUE_HP_0, | 878 | SND_SOC_DAPM_PGA_S("Right Headphone Output PGA", 0, WM8903_POWER_MANAGEMENT_2, |
881 | 0, 0, NULL, 0), | 879 | 0, 0, NULL, 0), |
882 | 880 | ||
883 | SND_SOC_DAPM_PGA_S("Left Line Output PGA", 0, WM8903_ANALOGUE_LINEOUT_0, 4, 0, | 881 | SND_SOC_DAPM_PGA_S("Left Line Output PGA", 0, WM8903_POWER_MANAGEMENT_3, 1, 0, |
884 | NULL, 0), | 882 | NULL, 0), |
885 | SND_SOC_DAPM_PGA_S("Right Line Output PGA", 0, WM8903_ANALOGUE_LINEOUT_0, 0, 0, | 883 | SND_SOC_DAPM_PGA_S("Right Line Output PGA", 0, WM8903_POWER_MANAGEMENT_3, 0, 0, |
886 | NULL, 0), | 884 | NULL, 0), |
887 | 885 | ||
888 | SND_SOC_DAPM_PGA_S("HPL_RMV_SHORT", 4, WM8903_ANALOGUE_HP_0, 7, 0, NULL, 0), | 886 | SND_SOC_DAPM_PGA_S("HPL_RMV_SHORT", 4, WM8903_ANALOGUE_HP_0, 7, 0, NULL, 0), |
889 | SND_SOC_DAPM_PGA_S("HPL_ENA_OUTP", 3, WM8903_ANALOGUE_HP_0, 6, 0, NULL, 0), | 887 | SND_SOC_DAPM_PGA_S("HPL_ENA_OUTP", 3, WM8903_ANALOGUE_HP_0, 6, 0, NULL, 0), |
890 | SND_SOC_DAPM_PGA_S("HPL_ENA_DLY", 1, WM8903_ANALOGUE_HP_0, 5, 0, NULL, 0), | 888 | SND_SOC_DAPM_PGA_S("HPL_ENA_DLY", 2, WM8903_ANALOGUE_HP_0, 5, 0, NULL, 0), |
889 | SND_SOC_DAPM_PGA_S("HPL_ENA", 1, WM8903_ANALOGUE_HP_0, 4, 0, NULL, 0), | ||
891 | SND_SOC_DAPM_PGA_S("HPR_RMV_SHORT", 4, WM8903_ANALOGUE_HP_0, 3, 0, NULL, 0), | 890 | SND_SOC_DAPM_PGA_S("HPR_RMV_SHORT", 4, WM8903_ANALOGUE_HP_0, 3, 0, NULL, 0), |
892 | SND_SOC_DAPM_PGA_S("HPR_ENA_OUTP", 3, WM8903_ANALOGUE_HP_0, 2, 0, NULL, 0), | 891 | SND_SOC_DAPM_PGA_S("HPR_ENA_OUTP", 3, WM8903_ANALOGUE_HP_0, 2, 0, NULL, 0), |
893 | SND_SOC_DAPM_PGA_S("HPR_ENA_DLY", 1, WM8903_ANALOGUE_HP_0, 1, 0, NULL, 0), | 892 | SND_SOC_DAPM_PGA_S("HPR_ENA_DLY", 2, WM8903_ANALOGUE_HP_0, 1, 0, NULL, 0), |
893 | SND_SOC_DAPM_PGA_S("HPR_ENA", 1, WM8903_ANALOGUE_HP_0, 0, 0, NULL, 0), | ||
894 | 894 | ||
895 | SND_SOC_DAPM_PGA_S("LINEOUTL_RMV_SHORT", 4, WM8903_ANALOGUE_LINEOUT_0, 7, 0, | 895 | SND_SOC_DAPM_PGA_S("LINEOUTL_RMV_SHORT", 4, WM8903_ANALOGUE_LINEOUT_0, 7, 0, |
896 | NULL, 0), | 896 | NULL, 0), |
897 | SND_SOC_DAPM_PGA_S("LINEOUTL_ENA_OUTP", 3, WM8903_ANALOGUE_LINEOUT_0, 6, 0, | 897 | SND_SOC_DAPM_PGA_S("LINEOUTL_ENA_OUTP", 3, WM8903_ANALOGUE_LINEOUT_0, 6, 0, |
898 | NULL, 0), | 898 | NULL, 0), |
899 | SND_SOC_DAPM_PGA_S("LINEOUTL_ENA_DLY", 1, WM8903_ANALOGUE_LINEOUT_0, 5, 0, | 899 | SND_SOC_DAPM_PGA_S("LINEOUTL_ENA_DLY", 2, WM8903_ANALOGUE_LINEOUT_0, 5, 0, |
900 | NULL, 0), | ||
901 | SND_SOC_DAPM_PGA_S("LINEOUTL_ENA", 1, WM8903_ANALOGUE_LINEOUT_0, 4, 0, | ||
900 | NULL, 0), | 902 | NULL, 0), |
901 | SND_SOC_DAPM_PGA_S("LINEOUTR_RMV_SHORT", 4, WM8903_ANALOGUE_LINEOUT_0, 3, 0, | 903 | SND_SOC_DAPM_PGA_S("LINEOUTR_RMV_SHORT", 4, WM8903_ANALOGUE_LINEOUT_0, 3, 0, |
902 | NULL, 0), | 904 | NULL, 0), |
903 | SND_SOC_DAPM_PGA_S("LINEOUTR_ENA_OUTP", 3, WM8903_ANALOGUE_LINEOUT_0, 2, 0, | 905 | SND_SOC_DAPM_PGA_S("LINEOUTR_ENA_OUTP", 3, WM8903_ANALOGUE_LINEOUT_0, 2, 0, |
904 | NULL, 0), | 906 | NULL, 0), |
905 | SND_SOC_DAPM_PGA_S("LINEOUTR_ENA_DLY", 1, WM8903_ANALOGUE_LINEOUT_0, 1, 0, | 907 | SND_SOC_DAPM_PGA_S("LINEOUTR_ENA_DLY", 2, WM8903_ANALOGUE_LINEOUT_0, 1, 0, |
908 | NULL, 0), | ||
909 | SND_SOC_DAPM_PGA_S("LINEOUTR_ENA", 1, WM8903_ANALOGUE_LINEOUT_0, 0, 0, | ||
906 | NULL, 0), | 910 | NULL, 0), |
907 | 911 | ||
908 | SND_SOC_DAPM_SUPPLY("DCS Master", WM8903_DC_SERVO_0, 4, 0, NULL, 0), | 912 | SND_SOC_DAPM_SUPPLY("DCS Master", WM8903_DC_SERVO_0, 4, 0, NULL, 0), |
@@ -1037,10 +1041,14 @@ static const struct snd_soc_dapm_route intercon[] = { | |||
1037 | { "Left Speaker PGA", NULL, "Left Speaker Mixer" }, | 1041 | { "Left Speaker PGA", NULL, "Left Speaker Mixer" }, |
1038 | { "Right Speaker PGA", NULL, "Right Speaker Mixer" }, | 1042 | { "Right Speaker PGA", NULL, "Right Speaker Mixer" }, |
1039 | 1043 | ||
1040 | { "HPL_ENA_DLY", NULL, "Left Headphone Output PGA" }, | 1044 | { "HPL_ENA", NULL, "Left Headphone Output PGA" }, |
1041 | { "HPR_ENA_DLY", NULL, "Right Headphone Output PGA" }, | 1045 | { "HPR_ENA", NULL, "Right Headphone Output PGA" }, |
1042 | { "LINEOUTL_ENA_DLY", NULL, "Left Line Output PGA" }, | 1046 | { "HPL_ENA_DLY", NULL, "HPL_ENA" }, |
1043 | { "LINEOUTR_ENA_DLY", NULL, "Right Line Output PGA" }, | 1047 | { "HPR_ENA_DLY", NULL, "HPR_ENA" }, |
1048 | { "LINEOUTL_ENA", NULL, "Left Line Output PGA" }, | ||
1049 | { "LINEOUTR_ENA", NULL, "Right Line Output PGA" }, | ||
1050 | { "LINEOUTL_ENA_DLY", NULL, "LINEOUTL_ENA" }, | ||
1051 | { "LINEOUTR_ENA_DLY", NULL, "LINEOUTR_ENA" }, | ||
1044 | 1052 | ||
1045 | { "HPL_DCS", NULL, "DCS Master" }, | 1053 | { "HPL_DCS", NULL, "DCS Master" }, |
1046 | { "HPR_DCS", NULL, "DCS Master" }, | 1054 | { "HPR_DCS", NULL, "DCS Master" }, |
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index 3290333b2bb9..84e1bd1d2822 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c | |||
@@ -3261,20 +3261,36 @@ static int wm8994_codec_probe(struct snd_soc_codec *codec) | |||
3261 | wm8994_set_bias_level(codec, SND_SOC_BIAS_STANDBY); | 3261 | wm8994_set_bias_level(codec, SND_SOC_BIAS_STANDBY); |
3262 | 3262 | ||
3263 | /* Latch volume updates (right only; we always do left then right). */ | 3263 | /* Latch volume updates (right only; we always do left then right). */ |
3264 | snd_soc_update_bits(codec, WM8994_AIF1_DAC1_LEFT_VOLUME, | ||
3265 | WM8994_AIF1DAC1_VU, WM8994_AIF1DAC1_VU); | ||
3264 | snd_soc_update_bits(codec, WM8994_AIF1_DAC1_RIGHT_VOLUME, | 3266 | snd_soc_update_bits(codec, WM8994_AIF1_DAC1_RIGHT_VOLUME, |
3265 | WM8994_AIF1DAC1_VU, WM8994_AIF1DAC1_VU); | 3267 | WM8994_AIF1DAC1_VU, WM8994_AIF1DAC1_VU); |
3268 | snd_soc_update_bits(codec, WM8994_AIF1_DAC2_LEFT_VOLUME, | ||
3269 | WM8994_AIF1DAC2_VU, WM8994_AIF1DAC2_VU); | ||
3266 | snd_soc_update_bits(codec, WM8994_AIF1_DAC2_RIGHT_VOLUME, | 3270 | snd_soc_update_bits(codec, WM8994_AIF1_DAC2_RIGHT_VOLUME, |
3267 | WM8994_AIF1DAC2_VU, WM8994_AIF1DAC2_VU); | 3271 | WM8994_AIF1DAC2_VU, WM8994_AIF1DAC2_VU); |
3272 | snd_soc_update_bits(codec, WM8994_AIF2_DAC_LEFT_VOLUME, | ||
3273 | WM8994_AIF2DAC_VU, WM8994_AIF2DAC_VU); | ||
3268 | snd_soc_update_bits(codec, WM8994_AIF2_DAC_RIGHT_VOLUME, | 3274 | snd_soc_update_bits(codec, WM8994_AIF2_DAC_RIGHT_VOLUME, |
3269 | WM8994_AIF2DAC_VU, WM8994_AIF2DAC_VU); | 3275 | WM8994_AIF2DAC_VU, WM8994_AIF2DAC_VU); |
3276 | snd_soc_update_bits(codec, WM8994_AIF1_ADC1_LEFT_VOLUME, | ||
3277 | WM8994_AIF1ADC1_VU, WM8994_AIF1ADC1_VU); | ||
3270 | snd_soc_update_bits(codec, WM8994_AIF1_ADC1_RIGHT_VOLUME, | 3278 | snd_soc_update_bits(codec, WM8994_AIF1_ADC1_RIGHT_VOLUME, |
3271 | WM8994_AIF1ADC1_VU, WM8994_AIF1ADC1_VU); | 3279 | WM8994_AIF1ADC1_VU, WM8994_AIF1ADC1_VU); |
3280 | snd_soc_update_bits(codec, WM8994_AIF1_ADC2_LEFT_VOLUME, | ||
3281 | WM8994_AIF1ADC2_VU, WM8994_AIF1ADC2_VU); | ||
3272 | snd_soc_update_bits(codec, WM8994_AIF1_ADC2_RIGHT_VOLUME, | 3282 | snd_soc_update_bits(codec, WM8994_AIF1_ADC2_RIGHT_VOLUME, |
3273 | WM8994_AIF1ADC2_VU, WM8994_AIF1ADC2_VU); | 3283 | WM8994_AIF1ADC2_VU, WM8994_AIF1ADC2_VU); |
3284 | snd_soc_update_bits(codec, WM8994_AIF2_ADC_LEFT_VOLUME, | ||
3285 | WM8994_AIF2ADC_VU, WM8994_AIF1ADC2_VU); | ||
3274 | snd_soc_update_bits(codec, WM8994_AIF2_ADC_RIGHT_VOLUME, | 3286 | snd_soc_update_bits(codec, WM8994_AIF2_ADC_RIGHT_VOLUME, |
3275 | WM8994_AIF2ADC_VU, WM8994_AIF1ADC2_VU); | 3287 | WM8994_AIF2ADC_VU, WM8994_AIF1ADC2_VU); |
3288 | snd_soc_update_bits(codec, WM8994_DAC1_LEFT_VOLUME, | ||
3289 | WM8994_DAC1_VU, WM8994_DAC1_VU); | ||
3276 | snd_soc_update_bits(codec, WM8994_DAC1_RIGHT_VOLUME, | 3290 | snd_soc_update_bits(codec, WM8994_DAC1_RIGHT_VOLUME, |
3277 | WM8994_DAC1_VU, WM8994_DAC1_VU); | 3291 | WM8994_DAC1_VU, WM8994_DAC1_VU); |
3292 | snd_soc_update_bits(codec, WM8994_DAC2_LEFT_VOLUME, | ||
3293 | WM8994_DAC2_VU, WM8994_DAC2_VU); | ||
3278 | snd_soc_update_bits(codec, WM8994_DAC2_RIGHT_VOLUME, | 3294 | snd_soc_update_bits(codec, WM8994_DAC2_RIGHT_VOLUME, |
3279 | WM8994_DAC2_VU, WM8994_DAC2_VU); | 3295 | WM8994_DAC2_VU, WM8994_DAC2_VU); |
3280 | 3296 | ||
diff --git a/sound/soc/codecs/wm_hubs.c b/sound/soc/codecs/wm_hubs.c index 7b6b3c18e299..4005e9af5d61 100644 --- a/sound/soc/codecs/wm_hubs.c +++ b/sound/soc/codecs/wm_hubs.c | |||
@@ -740,12 +740,12 @@ static const struct snd_soc_dapm_route analogue_routes[] = { | |||
740 | 740 | ||
741 | { "SPKL", "Input Switch", "MIXINL" }, | 741 | { "SPKL", "Input Switch", "MIXINL" }, |
742 | { "SPKL", "IN1LP Switch", "IN1LP" }, | 742 | { "SPKL", "IN1LP Switch", "IN1LP" }, |
743 | { "SPKL", "Output Switch", "Left Output Mixer" }, | 743 | { "SPKL", "Output Switch", "Left Output PGA" }, |
744 | { "SPKL", NULL, "TOCLK" }, | 744 | { "SPKL", NULL, "TOCLK" }, |
745 | 745 | ||
746 | { "SPKR", "Input Switch", "MIXINR" }, | 746 | { "SPKR", "Input Switch", "MIXINR" }, |
747 | { "SPKR", "IN1RP Switch", "IN1RP" }, | 747 | { "SPKR", "IN1RP Switch", "IN1RP" }, |
748 | { "SPKR", "Output Switch", "Right Output Mixer" }, | 748 | { "SPKR", "Output Switch", "Right Output PGA" }, |
749 | { "SPKR", NULL, "TOCLK" }, | 749 | { "SPKR", NULL, "TOCLK" }, |
750 | 750 | ||
751 | { "SPKL Boost", "Direct Voice Switch", "Direct Voice" }, | 751 | { "SPKL Boost", "Direct Voice Switch", "Direct Voice" }, |
@@ -767,8 +767,8 @@ static const struct snd_soc_dapm_route analogue_routes[] = { | |||
767 | { "SPKOUTRP", NULL, "SPKR Driver" }, | 767 | { "SPKOUTRP", NULL, "SPKR Driver" }, |
768 | { "SPKOUTRN", NULL, "SPKR Driver" }, | 768 | { "SPKOUTRN", NULL, "SPKR Driver" }, |
769 | 769 | ||
770 | { "Left Headphone Mux", "Mixer", "Left Output Mixer" }, | 770 | { "Left Headphone Mux", "Mixer", "Left Output PGA" }, |
771 | { "Right Headphone Mux", "Mixer", "Right Output Mixer" }, | 771 | { "Right Headphone Mux", "Mixer", "Right Output PGA" }, |
772 | 772 | ||
773 | { "Headphone PGA", NULL, "Left Headphone Mux" }, | 773 | { "Headphone PGA", NULL, "Left Headphone Mux" }, |
774 | { "Headphone PGA", NULL, "Right Headphone Mux" }, | 774 | { "Headphone PGA", NULL, "Right Headphone Mux" }, |
diff --git a/sound/soc/mid-x86/sst_platform.c b/sound/soc/mid-x86/sst_platform.c index b2e9198a983a..d567c322a2fb 100644 --- a/sound/soc/mid-x86/sst_platform.c +++ b/sound/soc/mid-x86/sst_platform.c | |||
@@ -116,18 +116,20 @@ struct snd_soc_dai_driver sst_platform_dai[] = { | |||
116 | static inline void sst_set_stream_status(struct sst_runtime_stream *stream, | 116 | static inline void sst_set_stream_status(struct sst_runtime_stream *stream, |
117 | int state) | 117 | int state) |
118 | { | 118 | { |
119 | spin_lock(&stream->status_lock); | 119 | unsigned long flags; |
120 | spin_lock_irqsave(&stream->status_lock, flags); | ||
120 | stream->stream_status = state; | 121 | stream->stream_status = state; |
121 | spin_unlock(&stream->status_lock); | 122 | spin_unlock_irqrestore(&stream->status_lock, flags); |
122 | } | 123 | } |
123 | 124 | ||
124 | static inline int sst_get_stream_status(struct sst_runtime_stream *stream) | 125 | static inline int sst_get_stream_status(struct sst_runtime_stream *stream) |
125 | { | 126 | { |
126 | int state; | 127 | int state; |
128 | unsigned long flags; | ||
127 | 129 | ||
128 | spin_lock(&stream->status_lock); | 130 | spin_lock_irqsave(&stream->status_lock, flags); |
129 | state = stream->stream_status; | 131 | state = stream->stream_status; |
130 | spin_unlock(&stream->status_lock); | 132 | spin_unlock_irqrestore(&stream->status_lock, flags); |
131 | return state; | 133 | return state; |
132 | } | 134 | } |
133 | 135 | ||
diff --git a/sound/soc/samsung/pcm.c b/sound/soc/samsung/pcm.c index 38aac7d57a59..9c7e8b48aed6 100644 --- a/sound/soc/samsung/pcm.c +++ b/sound/soc/samsung/pcm.c | |||
@@ -350,8 +350,8 @@ static int s3c_pcm_set_fmt(struct snd_soc_dai *cpu_dai, | |||
350 | ctl = readl(regs + S3C_PCM_CTL); | 350 | ctl = readl(regs + S3C_PCM_CTL); |
351 | 351 | ||
352 | switch (fmt & SND_SOC_DAIFMT_INV_MASK) { | 352 | switch (fmt & SND_SOC_DAIFMT_INV_MASK) { |
353 | case SND_SOC_DAIFMT_NB_NF: | 353 | case SND_SOC_DAIFMT_IB_NF: |
354 | /* Nothing to do, NB_NF by default */ | 354 | /* Nothing to do, IB_NF by default */ |
355 | break; | 355 | break; |
356 | default: | 356 | default: |
357 | dev_err(pcm->dev, "Unsupported clock inversion!\n"); | 357 | dev_err(pcm->dev, "Unsupported clock inversion!\n"); |
diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c index 0c9997e2d8c0..23c0e83d4c19 100644 --- a/sound/soc/sh/fsi.c +++ b/sound/soc/sh/fsi.c | |||
@@ -1200,10 +1200,11 @@ static int fsi_probe(struct platform_device *pdev) | |||
1200 | master->fsib.master = master; | 1200 | master->fsib.master = master; |
1201 | 1201 | ||
1202 | pm_runtime_enable(&pdev->dev); | 1202 | pm_runtime_enable(&pdev->dev); |
1203 | pm_runtime_resume(&pdev->dev); | ||
1204 | dev_set_drvdata(&pdev->dev, master); | 1203 | dev_set_drvdata(&pdev->dev, master); |
1205 | 1204 | ||
1205 | pm_runtime_get_sync(&pdev->dev); | ||
1206 | fsi_soft_all_reset(master); | 1206 | fsi_soft_all_reset(master); |
1207 | pm_runtime_put_sync(&pdev->dev); | ||
1207 | 1208 | ||
1208 | ret = request_irq(irq, &fsi_interrupt, IRQF_DISABLED, | 1209 | ret = request_irq(irq, &fsi_interrupt, IRQF_DISABLED, |
1209 | id_entry->name, master); | 1210 | id_entry->name, master); |
@@ -1218,8 +1219,17 @@ static int fsi_probe(struct platform_device *pdev) | |||
1218 | goto exit_free_irq; | 1219 | goto exit_free_irq; |
1219 | } | 1220 | } |
1220 | 1221 | ||
1221 | return snd_soc_register_dais(&pdev->dev, fsi_soc_dai, ARRAY_SIZE(fsi_soc_dai)); | 1222 | ret = snd_soc_register_dais(&pdev->dev, fsi_soc_dai, |
1223 | ARRAY_SIZE(fsi_soc_dai)); | ||
1224 | if (ret < 0) { | ||
1225 | dev_err(&pdev->dev, "cannot snd dai register\n"); | ||
1226 | goto exit_snd_soc; | ||
1227 | } | ||
1228 | |||
1229 | return ret; | ||
1222 | 1230 | ||
1231 | exit_snd_soc: | ||
1232 | snd_soc_unregister_platform(&pdev->dev); | ||
1223 | exit_free_irq: | 1233 | exit_free_irq: |
1224 | free_irq(irq, master); | 1234 | free_irq(irq, master); |
1225 | exit_iounmap: | 1235 | exit_iounmap: |
@@ -1238,12 +1248,11 @@ static int fsi_remove(struct platform_device *pdev) | |||
1238 | 1248 | ||
1239 | master = dev_get_drvdata(&pdev->dev); | 1249 | master = dev_get_drvdata(&pdev->dev); |
1240 | 1250 | ||
1241 | snd_soc_unregister_dais(&pdev->dev, ARRAY_SIZE(fsi_soc_dai)); | 1251 | free_irq(master->irq, master); |
1242 | snd_soc_unregister_platform(&pdev->dev); | ||
1243 | |||
1244 | pm_runtime_disable(&pdev->dev); | 1252 | pm_runtime_disable(&pdev->dev); |
1245 | 1253 | ||
1246 | free_irq(master->irq, master); | 1254 | snd_soc_unregister_dais(&pdev->dev, ARRAY_SIZE(fsi_soc_dai)); |
1255 | snd_soc_unregister_platform(&pdev->dev); | ||
1247 | 1256 | ||
1248 | iounmap(master->base); | 1257 | iounmap(master->base); |
1249 | kfree(master); | 1258 | kfree(master); |
@@ -1321,3 +1330,4 @@ module_exit(fsi_mobile_exit); | |||
1321 | MODULE_LICENSE("GPL"); | 1330 | MODULE_LICENSE("GPL"); |
1322 | MODULE_DESCRIPTION("SuperH onchip FSI audio driver"); | 1331 | MODULE_DESCRIPTION("SuperH onchip FSI audio driver"); |
1323 | MODULE_AUTHOR("Kuninori Morimoto <morimoto.kuninori@renesas.com>"); | 1332 | MODULE_AUTHOR("Kuninori Morimoto <morimoto.kuninori@renesas.com>"); |
1333 | MODULE_ALIAS("platform:fsi-pcm-audio"); | ||
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index b76b74db0968..d8562ce4de7a 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c | |||
@@ -629,6 +629,7 @@ static int soc_pcm_open(struct snd_pcm_substream *substream) | |||
629 | runtime->hw.rates |= codec_dai_drv->capture.rates; | 629 | runtime->hw.rates |= codec_dai_drv->capture.rates; |
630 | } | 630 | } |
631 | 631 | ||
632 | ret = -EINVAL; | ||
632 | snd_pcm_limit_hw_rates(runtime); | 633 | snd_pcm_limit_hw_rates(runtime); |
633 | if (!runtime->hw.rates) { | 634 | if (!runtime->hw.rates) { |
634 | printk(KERN_ERR "asoc: %s <-> %s No matching rates\n", | 635 | printk(KERN_ERR "asoc: %s <-> %s No matching rates\n", |
@@ -640,7 +641,8 @@ static int soc_pcm_open(struct snd_pcm_substream *substream) | |||
640 | codec_dai->name, cpu_dai->name); | 641 | codec_dai->name, cpu_dai->name); |
641 | goto config_err; | 642 | goto config_err; |
642 | } | 643 | } |
643 | if (!runtime->hw.channels_min || !runtime->hw.channels_max) { | 644 | if (!runtime->hw.channels_min || !runtime->hw.channels_max || |
645 | runtime->hw.channels_min > runtime->hw.channels_max) { | ||
644 | printk(KERN_ERR "asoc: %s <-> %s No matching channels\n", | 646 | printk(KERN_ERR "asoc: %s <-> %s No matching channels\n", |
645 | codec_dai->name, cpu_dai->name); | 647 | codec_dai->name, cpu_dai->name); |
646 | goto config_err; | 648 | goto config_err; |
@@ -2060,6 +2062,7 @@ const struct dev_pm_ops snd_soc_pm_ops = { | |||
2060 | .resume = snd_soc_resume, | 2062 | .resume = snd_soc_resume, |
2061 | .poweroff = snd_soc_poweroff, | 2063 | .poweroff = snd_soc_poweroff, |
2062 | }; | 2064 | }; |
2065 | EXPORT_SYMBOL_GPL(snd_soc_pm_ops); | ||
2063 | 2066 | ||
2064 | /* ASoC platform driver */ | 2067 | /* ASoC platform driver */ |
2065 | static struct platform_driver soc_driver = { | 2068 | static struct platform_driver soc_driver = { |
diff --git a/sound/soc/tegra/harmony.c b/sound/soc/tegra/harmony.c index 8585957477eb..556a57133925 100644 --- a/sound/soc/tegra/harmony.c +++ b/sound/soc/tegra/harmony.c | |||
@@ -370,6 +370,7 @@ static struct platform_driver tegra_snd_harmony_driver = { | |||
370 | .driver = { | 370 | .driver = { |
371 | .name = DRV_NAME, | 371 | .name = DRV_NAME, |
372 | .owner = THIS_MODULE, | 372 | .owner = THIS_MODULE, |
373 | .pm = &snd_soc_pm_ops, | ||
373 | }, | 374 | }, |
374 | .probe = tegra_snd_harmony_probe, | 375 | .probe = tegra_snd_harmony_probe, |
375 | .remove = __devexit_p(tegra_snd_harmony_remove), | 376 | .remove = __devexit_p(tegra_snd_harmony_remove), |