aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2014-10-02 11:53:35 -0400
committerMark Brown <broonie@kernel.org>2014-10-02 11:53:35 -0400
commit04a0b8ef6b27c2b6280dcbfcdd418b7d851f8491 (patch)
tree062e082e19ab94a4ca7bc60286df970debdd2d6f /sound/soc
parent9810f5370b6e60c4b564f294feb51761f0e741f6 (diff)
parent2ce7598c9a453e0acd0e07be7be3f5eb39608ebd (diff)
Merge tag 'v3.17-rc4' into asoc-simple
Linux 3.17-rc4
Diffstat (limited to 'sound/soc')
-rw-r--r--sound/soc/codecs/arizona.c6
-rw-r--r--sound/soc/codecs/cs4265.c12
-rw-r--r--sound/soc/codecs/da732x.h2
-rw-r--r--sound/soc/codecs/pcm512x.c4
-rw-r--r--sound/soc/codecs/rt5640.c1
-rw-r--r--sound/soc/codecs/rt5677.c8
-rw-r--r--sound/soc/davinci/davinci-mcasp.c14
-rw-r--r--sound/soc/fsl/Kconfig1
-rw-r--r--sound/soc/fsl/fsl_esai.c2
-rw-r--r--sound/soc/generic/simple-card.c8
-rw-r--r--sound/soc/intel/sst-acpi.c4
-rw-r--r--sound/soc/intel/sst-baytrail-ipc.c10
-rw-r--r--sound/soc/intel/sst-baytrail-ipc.h1
-rw-r--r--sound/soc/intel/sst-baytrail-pcm.c43
-rw-r--r--sound/soc/omap/omap-twl4030.c2
-rw-r--r--sound/soc/pxa/pxa-ssp.c4
-rw-r--r--sound/soc/sh/rcar/gen.c2
-rw-r--r--sound/soc/soc-core.c2
-rw-r--r--sound/soc/soc-dapm.c12
-rw-r--r--sound/soc/tegra/tegra_asoc_utils.h2
20 files changed, 67 insertions, 73 deletions
diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c
index bd41ee4da078..2c71f16bd661 100644
--- a/sound/soc/codecs/arizona.c
+++ b/sound/soc/codecs/arizona.c
@@ -1278,6 +1278,8 @@ static int arizona_hw_params(struct snd_pcm_substream *substream,
1278 else 1278 else
1279 rates = &arizona_48k_bclk_rates[0]; 1279 rates = &arizona_48k_bclk_rates[0];
1280 1280
1281 wl = snd_pcm_format_width(params_format(params));
1282
1281 if (tdm_slots) { 1283 if (tdm_slots) {
1282 arizona_aif_dbg(dai, "Configuring for %d %d bit TDM slots\n", 1284 arizona_aif_dbg(dai, "Configuring for %d %d bit TDM slots\n",
1283 tdm_slots, tdm_width); 1285 tdm_slots, tdm_width);
@@ -1285,6 +1287,7 @@ static int arizona_hw_params(struct snd_pcm_substream *substream,
1285 channels = tdm_slots; 1287 channels = tdm_slots;
1286 } else { 1288 } else {
1287 bclk_target = snd_soc_params_to_bclk(params); 1289 bclk_target = snd_soc_params_to_bclk(params);
1290 tdm_width = wl;
1288 } 1291 }
1289 1292
1290 if (chan_limit && chan_limit < channels) { 1293 if (chan_limit && chan_limit < channels) {
@@ -1319,8 +1322,7 @@ static int arizona_hw_params(struct snd_pcm_substream *substream,
1319 arizona_aif_dbg(dai, "BCLK %dHz LRCLK %dHz\n", 1322 arizona_aif_dbg(dai, "BCLK %dHz LRCLK %dHz\n",
1320 rates[bclk], rates[bclk] / lrclk); 1323 rates[bclk], rates[bclk] / lrclk);
1321 1324
1322 wl = snd_pcm_format_width(params_format(params)); 1325 frame = wl << ARIZONA_AIF1TX_WL_SHIFT | tdm_width;
1323 frame = wl << ARIZONA_AIF1TX_WL_SHIFT | wl;
1324 1326
1325 reconfig = arizona_aif_cfg_changed(codec, base, bclk, lrclk, frame); 1327 reconfig = arizona_aif_cfg_changed(codec, base, bclk, lrclk, frame);
1326 1328
diff --git a/sound/soc/codecs/cs4265.c b/sound/soc/codecs/cs4265.c
index a20b30ca52c0..98523209f739 100644
--- a/sound/soc/codecs/cs4265.c
+++ b/sound/soc/codecs/cs4265.c
@@ -282,10 +282,10 @@ static const struct cs4265_clk_para clk_map_table[] = {
282 282
283 /*64k*/ 283 /*64k*/
284 {8192000, 64000, 1, 0}, 284 {8192000, 64000, 1, 0},
285 {1228800, 64000, 1, 1}, 285 {12288000, 64000, 1, 1},
286 {1693440, 64000, 1, 2}, 286 {16934400, 64000, 1, 2},
287 {2457600, 64000, 1, 3}, 287 {24576000, 64000, 1, 3},
288 {3276800, 64000, 1, 4}, 288 {32768000, 64000, 1, 4},
289 289
290 /* 88.2k */ 290 /* 88.2k */
291 {11289600, 88200, 1, 0}, 291 {11289600, 88200, 1, 0},
@@ -435,10 +435,10 @@ static int cs4265_pcm_hw_params(struct snd_pcm_substream *substream,
435 index = cs4265_get_clk_index(cs4265->sysclk, params_rate(params)); 435 index = cs4265_get_clk_index(cs4265->sysclk, params_rate(params));
436 if (index >= 0) { 436 if (index >= 0) {
437 snd_soc_update_bits(codec, CS4265_ADC_CTL, 437 snd_soc_update_bits(codec, CS4265_ADC_CTL,
438 CS4265_ADC_FM, clk_map_table[index].fm_mode); 438 CS4265_ADC_FM, clk_map_table[index].fm_mode << 6);
439 snd_soc_update_bits(codec, CS4265_MCLK_FREQ, 439 snd_soc_update_bits(codec, CS4265_MCLK_FREQ,
440 CS4265_MCLK_FREQ_MASK, 440 CS4265_MCLK_FREQ_MASK,
441 clk_map_table[index].mclkdiv); 441 clk_map_table[index].mclkdiv << 4);
442 442
443 } else { 443 } else {
444 dev_err(codec->dev, "can't get correct mclk\n"); 444 dev_err(codec->dev, "can't get correct mclk\n");
diff --git a/sound/soc/codecs/da732x.h b/sound/soc/codecs/da732x.h
index 1dceafeec415..f586cbd30b77 100644
--- a/sound/soc/codecs/da732x.h
+++ b/sound/soc/codecs/da732x.h
@@ -11,7 +11,7 @@
11 */ 11 */
12 12
13#ifndef __DA732X_H_ 13#ifndef __DA732X_H_
14#define __DA732X_H 14#define __DA732X_H_
15 15
16#include <sound/soc.h> 16#include <sound/soc.h>
17 17
diff --git a/sound/soc/codecs/pcm512x.c b/sound/soc/codecs/pcm512x.c
index 163ec3855fd4..0c8aefab404c 100644
--- a/sound/soc/codecs/pcm512x.c
+++ b/sound/soc/codecs/pcm512x.c
@@ -259,13 +259,13 @@ static const struct soc_enum pcm512x_veds =
259 pcm512x_ramp_step_text); 259 pcm512x_ramp_step_text);
260 260
261static const struct snd_kcontrol_new pcm512x_controls[] = { 261static const struct snd_kcontrol_new pcm512x_controls[] = {
262SOC_DOUBLE_R_TLV("Playback Digital Volume", PCM512x_DIGITAL_VOLUME_2, 262SOC_DOUBLE_R_TLV("Digital Playback Volume", PCM512x_DIGITAL_VOLUME_2,
263 PCM512x_DIGITAL_VOLUME_3, 0, 255, 1, digital_tlv), 263 PCM512x_DIGITAL_VOLUME_3, 0, 255, 1, digital_tlv),
264SOC_DOUBLE_TLV("Playback Volume", PCM512x_ANALOG_GAIN_CTRL, 264SOC_DOUBLE_TLV("Playback Volume", PCM512x_ANALOG_GAIN_CTRL,
265 PCM512x_LAGN_SHIFT, PCM512x_RAGN_SHIFT, 1, 1, analog_tlv), 265 PCM512x_LAGN_SHIFT, PCM512x_RAGN_SHIFT, 1, 1, analog_tlv),
266SOC_DOUBLE_TLV("Playback Boost Volume", PCM512x_ANALOG_GAIN_BOOST, 266SOC_DOUBLE_TLV("Playback Boost Volume", PCM512x_ANALOG_GAIN_BOOST,
267 PCM512x_AGBL_SHIFT, PCM512x_AGBR_SHIFT, 1, 0, boost_tlv), 267 PCM512x_AGBL_SHIFT, PCM512x_AGBR_SHIFT, 1, 0, boost_tlv),
268SOC_DOUBLE("Playback Digital Switch", PCM512x_MUTE, PCM512x_RQML_SHIFT, 268SOC_DOUBLE("Digital Playback Switch", PCM512x_MUTE, PCM512x_RQML_SHIFT,
269 PCM512x_RQMR_SHIFT, 1, 1), 269 PCM512x_RQMR_SHIFT, 1, 1),
270 270
271SOC_SINGLE("Deemphasis Switch", PCM512x_DSP, PCM512x_DEMP_SHIFT, 1, 1), 271SOC_SINGLE("Deemphasis Switch", PCM512x_DSP, PCM512x_DEMP_SHIFT, 1, 1),
diff --git a/sound/soc/codecs/rt5640.c b/sound/soc/codecs/rt5640.c
index 6bc6efdec550..f1ec6e6bd08a 100644
--- a/sound/soc/codecs/rt5640.c
+++ b/sound/soc/codecs/rt5640.c
@@ -2059,6 +2059,7 @@ static struct snd_soc_codec_driver soc_codec_dev_rt5640 = {
2059static const struct regmap_config rt5640_regmap = { 2059static const struct regmap_config rt5640_regmap = {
2060 .reg_bits = 8, 2060 .reg_bits = 8,
2061 .val_bits = 16, 2061 .val_bits = 16,
2062 .use_single_rw = true,
2062 2063
2063 .max_register = RT5640_VENDOR_ID2 + 1 + (ARRAY_SIZE(rt5640_ranges) * 2064 .max_register = RT5640_VENDOR_ID2 + 1 + (ARRAY_SIZE(rt5640_ranges) *
2064 RT5640_PR_SPACING), 2065 RT5640_PR_SPACING),
diff --git a/sound/soc/codecs/rt5677.c b/sound/soc/codecs/rt5677.c
index 67f14556462f..5337c448b5e3 100644
--- a/sound/soc/codecs/rt5677.c
+++ b/sound/soc/codecs/rt5677.c
@@ -2135,10 +2135,10 @@ static const struct snd_soc_dapm_route rt5677_dapm_routes[] = {
2135 { "BST2", NULL, "IN2P" }, 2135 { "BST2", NULL, "IN2P" },
2136 { "BST2", NULL, "IN2N" }, 2136 { "BST2", NULL, "IN2N" },
2137 2137
2138 { "IN1P", NULL, "micbias1" }, 2138 { "IN1P", NULL, "MICBIAS1" },
2139 { "IN1N", NULL, "micbias1" }, 2139 { "IN1N", NULL, "MICBIAS1" },
2140 { "IN2P", NULL, "micbias1" }, 2140 { "IN2P", NULL, "MICBIAS1" },
2141 { "IN2N", NULL, "micbias1" }, 2141 { "IN2N", NULL, "MICBIAS1" },
2142 2142
2143 { "ADC 1", NULL, "BST1" }, 2143 { "ADC 1", NULL, "BST1" },
2144 { "ADC 1", NULL, "ADC 1 power" }, 2144 { "ADC 1", NULL, "ADC 1 power" },
diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c
index c28508da34cf..6a6b2ff7d7d7 100644
--- a/sound/soc/davinci/davinci-mcasp.c
+++ b/sound/soc/davinci/davinci-mcasp.c
@@ -403,7 +403,8 @@ out:
403 return ret; 403 return ret;
404} 404}
405 405
406static int davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id, int div) 406static int __davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id,
407 int div, bool explicit)
407{ 408{
408 struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai); 409 struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
409 410
@@ -420,7 +421,8 @@ static int davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id, int div
420 ACLKXDIV(div - 1), ACLKXDIV_MASK); 421 ACLKXDIV(div - 1), ACLKXDIV_MASK);
421 mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, 422 mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG,
422 ACLKRDIV(div - 1), ACLKRDIV_MASK); 423 ACLKRDIV(div - 1), ACLKRDIV_MASK);
423 mcasp->bclk_div = div; 424 if (explicit)
425 mcasp->bclk_div = div;
424 break; 426 break;
425 427
426 case 2: /* BCLK/LRCLK ratio */ 428 case 2: /* BCLK/LRCLK ratio */
@@ -434,6 +436,12 @@ static int davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id, int div
434 return 0; 436 return 0;
435} 437}
436 438
439static int davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id,
440 int div)
441{
442 return __davinci_mcasp_set_clkdiv(dai, div_id, div, 1);
443}
444
437static int davinci_mcasp_set_sysclk(struct snd_soc_dai *dai, int clk_id, 445static int davinci_mcasp_set_sysclk(struct snd_soc_dai *dai, int clk_id,
438 unsigned int freq, int dir) 446 unsigned int freq, int dir)
439{ 447{
@@ -738,7 +746,7 @@ static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream,
738 "Inaccurate BCLK: %u Hz / %u != %u Hz\n", 746 "Inaccurate BCLK: %u Hz / %u != %u Hz\n",
739 mcasp->sysclk_freq, div, bclk_freq); 747 mcasp->sysclk_freq, div, bclk_freq);
740 } 748 }
741 davinci_mcasp_set_clkdiv(cpu_dai, 1, div); 749 __davinci_mcasp_set_clkdiv(cpu_dai, 1, div, 0);
742 } 750 }
743 751
744 ret = mcasp_common_hw_param(mcasp, substream->stream, 752 ret = mcasp_common_hw_param(mcasp, substream->stream,
diff --git a/sound/soc/fsl/Kconfig b/sound/soc/fsl/Kconfig
index f54a8fc99291..f3012b645b51 100644
--- a/sound/soc/fsl/Kconfig
+++ b/sound/soc/fsl/Kconfig
@@ -49,7 +49,6 @@ config SND_SOC_FSL_ESAI
49 tristate "Enhanced Serial Audio Interface (ESAI) module support" 49 tristate "Enhanced Serial Audio Interface (ESAI) module support"
50 select REGMAP_MMIO 50 select REGMAP_MMIO
51 select SND_SOC_IMX_PCM_DMA if SND_IMX_SOC != n 51 select SND_SOC_IMX_PCM_DMA if SND_IMX_SOC != n
52 select SND_SOC_FSL_UTILS
53 help 52 help
54 Say Y if you want to add Enhanced Synchronous Audio Interface 53 Say Y if you want to add Enhanced Synchronous Audio Interface
55 (ESAI) support for the Freescale CPUs. 54 (ESAI) support for the Freescale CPUs.
diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c
index 72d154e7dd03..a3b29ed84963 100644
--- a/sound/soc/fsl/fsl_esai.c
+++ b/sound/soc/fsl/fsl_esai.c
@@ -18,7 +18,6 @@
18 18
19#include "fsl_esai.h" 19#include "fsl_esai.h"
20#include "imx-pcm.h" 20#include "imx-pcm.h"
21#include "fsl_utils.h"
22 21
23#define FSL_ESAI_RATES SNDRV_PCM_RATE_8000_192000 22#define FSL_ESAI_RATES SNDRV_PCM_RATE_8000_192000
24#define FSL_ESAI_FORMATS (SNDRV_PCM_FMTBIT_S8 | \ 23#define FSL_ESAI_FORMATS (SNDRV_PCM_FMTBIT_S8 | \
@@ -607,7 +606,6 @@ static struct snd_soc_dai_ops fsl_esai_dai_ops = {
607 .hw_params = fsl_esai_hw_params, 606 .hw_params = fsl_esai_hw_params,
608 .set_sysclk = fsl_esai_set_dai_sysclk, 607 .set_sysclk = fsl_esai_set_dai_sysclk,
609 .set_fmt = fsl_esai_set_dai_fmt, 608 .set_fmt = fsl_esai_set_dai_fmt,
610 .xlate_tdm_slot_mask = fsl_asoc_xlate_tdm_slot_mask,
611 .set_tdm_slot = fsl_esai_set_dai_tdm_slot, 609 .set_tdm_slot = fsl_esai_set_dai_tdm_slot,
612}; 610};
613 611
diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
index a8877076bdfd..709ce67849c8 100644
--- a/sound/soc/generic/simple-card.c
+++ b/sound/soc/generic/simple-card.c
@@ -492,12 +492,19 @@ static int asoc_simple_card_probe(struct platform_device *pdev)
492 snd_soc_card_set_drvdata(&priv->snd_card, priv); 492 snd_soc_card_set_drvdata(&priv->snd_card, priv);
493 493
494 ret = devm_snd_soc_register_card(&pdev->dev, &priv->snd_card); 494 ret = devm_snd_soc_register_card(&pdev->dev, &priv->snd_card);
495 if (ret >= 0)
496 return ret;
495 497
496err: 498err:
497 asoc_simple_card_unref(pdev); 499 asoc_simple_card_unref(pdev);
498 return ret; 500 return ret;
499} 501}
500 502
503static int asoc_simple_card_remove(struct platform_device *pdev)
504{
505 return asoc_simple_card_unref(pdev);
506}
507
501static const struct of_device_id asoc_simple_of_match[] = { 508static const struct of_device_id asoc_simple_of_match[] = {
502 { .compatible = "simple-audio-card", }, 509 { .compatible = "simple-audio-card", },
503 {}, 510 {},
@@ -511,6 +518,7 @@ static struct platform_driver asoc_simple_card = {
511 .of_match_table = asoc_simple_of_match, 518 .of_match_table = asoc_simple_of_match,
512 }, 519 },
513 .probe = asoc_simple_card_probe, 520 .probe = asoc_simple_card_probe,
521 .remove = asoc_simple_card_remove,
514}; 522};
515 523
516module_platform_driver(asoc_simple_card); 524module_platform_driver(asoc_simple_card);
diff --git a/sound/soc/intel/sst-acpi.c b/sound/soc/intel/sst-acpi.c
index 42edc6f4fc4a..03d0a166b635 100644
--- a/sound/soc/intel/sst-acpi.c
+++ b/sound/soc/intel/sst-acpi.c
@@ -246,8 +246,8 @@ static struct sst_acpi_desc sst_acpi_broadwell_desc = {
246}; 246};
247 247
248static struct sst_acpi_mach baytrail_machines[] = { 248static struct sst_acpi_mach baytrail_machines[] = {
249 { "10EC5640", "byt-rt5640", "intel/fw_sst_0f28.bin-i2s_master" }, 249 { "10EC5640", "byt-rt5640", "intel/fw_sst_0f28.bin-48kHz_i2s_master" },
250 { "193C9890", "byt-max98090", "intel/fw_sst_0f28.bin-i2s_master" }, 250 { "193C9890", "byt-max98090", "intel/fw_sst_0f28.bin-48kHz_i2s_master" },
251 {} 251 {}
252}; 252};
253 253
diff --git a/sound/soc/intel/sst-baytrail-ipc.c b/sound/soc/intel/sst-baytrail-ipc.c
index 67673a2c0f41..b4ad98c43e5c 100644
--- a/sound/soc/intel/sst-baytrail-ipc.c
+++ b/sound/soc/intel/sst-baytrail-ipc.c
@@ -817,7 +817,7 @@ static struct sst_dsp_device byt_dev = {
817 .ops = &sst_byt_ops, 817 .ops = &sst_byt_ops,
818}; 818};
819 819
820int sst_byt_dsp_suspend_noirq(struct device *dev, struct sst_pdata *pdata) 820int sst_byt_dsp_suspend_late(struct device *dev, struct sst_pdata *pdata)
821{ 821{
822 struct sst_byt *byt = pdata->dsp; 822 struct sst_byt *byt = pdata->dsp;
823 823
@@ -826,14 +826,6 @@ int sst_byt_dsp_suspend_noirq(struct device *dev, struct sst_pdata *pdata)
826 sst_byt_drop_all(byt); 826 sst_byt_drop_all(byt);
827 dev_dbg(byt->dev, "dsp in reset\n"); 827 dev_dbg(byt->dev, "dsp in reset\n");
828 828
829 return 0;
830}
831EXPORT_SYMBOL_GPL(sst_byt_dsp_suspend_noirq);
832
833int sst_byt_dsp_suspend_late(struct device *dev, struct sst_pdata *pdata)
834{
835 struct sst_byt *byt = pdata->dsp;
836
837 dev_dbg(byt->dev, "free all blocks and unload fw\n"); 829 dev_dbg(byt->dev, "free all blocks and unload fw\n");
838 sst_fw_unload(byt->fw); 830 sst_fw_unload(byt->fw);
839 831
diff --git a/sound/soc/intel/sst-baytrail-ipc.h b/sound/soc/intel/sst-baytrail-ipc.h
index 06a4d202689b..8faff6dcf25d 100644
--- a/sound/soc/intel/sst-baytrail-ipc.h
+++ b/sound/soc/intel/sst-baytrail-ipc.h
@@ -66,7 +66,6 @@ int sst_byt_get_dsp_position(struct sst_byt *byt,
66int sst_byt_dsp_init(struct device *dev, struct sst_pdata *pdata); 66int sst_byt_dsp_init(struct device *dev, struct sst_pdata *pdata);
67void sst_byt_dsp_free(struct device *dev, struct sst_pdata *pdata); 67void sst_byt_dsp_free(struct device *dev, struct sst_pdata *pdata);
68struct sst_dsp *sst_byt_get_dsp(struct sst_byt *byt); 68struct sst_dsp *sst_byt_get_dsp(struct sst_byt *byt);
69int sst_byt_dsp_suspend_noirq(struct device *dev, struct sst_pdata *pdata);
70int sst_byt_dsp_suspend_late(struct device *dev, struct sst_pdata *pdata); 69int sst_byt_dsp_suspend_late(struct device *dev, struct sst_pdata *pdata);
71int sst_byt_dsp_boot(struct device *dev, struct sst_pdata *pdata); 70int sst_byt_dsp_boot(struct device *dev, struct sst_pdata *pdata);
72int sst_byt_dsp_wait_for_ready(struct device *dev, struct sst_pdata *pdata); 71int sst_byt_dsp_wait_for_ready(struct device *dev, struct sst_pdata *pdata);
diff --git a/sound/soc/intel/sst-baytrail-pcm.c b/sound/soc/intel/sst-baytrail-pcm.c
index 599401c0c655..eab1c7d85187 100644
--- a/sound/soc/intel/sst-baytrail-pcm.c
+++ b/sound/soc/intel/sst-baytrail-pcm.c
@@ -59,6 +59,9 @@ struct sst_byt_priv_data {
59 59
60 /* DAI data */ 60 /* DAI data */
61 struct sst_byt_pcm_data pcm[BYT_PCM_COUNT]; 61 struct sst_byt_pcm_data pcm[BYT_PCM_COUNT];
62
63 /* flag indicating is stream context restore needed after suspend */
64 bool restore_stream;
62}; 65};
63 66
64/* this may get called several times by oss emulation */ 67/* this may get called several times by oss emulation */
@@ -184,7 +187,10 @@ static int sst_byt_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
184 sst_byt_stream_start(byt, pcm_data->stream, 0); 187 sst_byt_stream_start(byt, pcm_data->stream, 0);
185 break; 188 break;
186 case SNDRV_PCM_TRIGGER_RESUME: 189 case SNDRV_PCM_TRIGGER_RESUME:
187 schedule_work(&pcm_data->work); 190 if (pdata->restore_stream == true)
191 schedule_work(&pcm_data->work);
192 else
193 sst_byt_stream_resume(byt, pcm_data->stream);
188 break; 194 break;
189 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: 195 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
190 sst_byt_stream_resume(byt, pcm_data->stream); 196 sst_byt_stream_resume(byt, pcm_data->stream);
@@ -193,6 +199,7 @@ static int sst_byt_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
193 sst_byt_stream_stop(byt, pcm_data->stream); 199 sst_byt_stream_stop(byt, pcm_data->stream);
194 break; 200 break;
195 case SNDRV_PCM_TRIGGER_SUSPEND: 201 case SNDRV_PCM_TRIGGER_SUSPEND:
202 pdata->restore_stream = false;
196 case SNDRV_PCM_TRIGGER_PAUSE_PUSH: 203 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
197 sst_byt_stream_pause(byt, pcm_data->stream); 204 sst_byt_stream_pause(byt, pcm_data->stream);
198 break; 205 break;
@@ -404,26 +411,10 @@ static const struct snd_soc_component_driver byt_dai_component = {
404}; 411};
405 412
406#ifdef CONFIG_PM 413#ifdef CONFIG_PM
407static int sst_byt_pcm_dev_suspend_noirq(struct device *dev)
408{
409 struct sst_pdata *sst_pdata = dev_get_platdata(dev);
410 int ret;
411
412 dev_dbg(dev, "suspending noirq\n");
413
414 /* at this point all streams will be stopped and context saved */
415 ret = sst_byt_dsp_suspend_noirq(dev, sst_pdata);
416 if (ret < 0) {
417 dev_err(dev, "failed to suspend %d\n", ret);
418 return ret;
419 }
420
421 return ret;
422}
423
424static int sst_byt_pcm_dev_suspend_late(struct device *dev) 414static int sst_byt_pcm_dev_suspend_late(struct device *dev)
425{ 415{
426 struct sst_pdata *sst_pdata = dev_get_platdata(dev); 416 struct sst_pdata *sst_pdata = dev_get_platdata(dev);
417 struct sst_byt_priv_data *priv_data = dev_get_drvdata(dev);
427 int ret; 418 int ret;
428 419
429 dev_dbg(dev, "suspending late\n"); 420 dev_dbg(dev, "suspending late\n");
@@ -434,34 +425,30 @@ static int sst_byt_pcm_dev_suspend_late(struct device *dev)
434 return ret; 425 return ret;
435 } 426 }
436 427
428 priv_data->restore_stream = true;
429
437 return ret; 430 return ret;
438} 431}
439 432
440static int sst_byt_pcm_dev_resume_early(struct device *dev) 433static int sst_byt_pcm_dev_resume_early(struct device *dev)
441{ 434{
442 struct sst_pdata *sst_pdata = dev_get_platdata(dev); 435 struct sst_pdata *sst_pdata = dev_get_platdata(dev);
436 int ret;
443 437
444 dev_dbg(dev, "resume early\n"); 438 dev_dbg(dev, "resume early\n");
445 439
446 /* load fw and boot DSP */ 440 /* load fw and boot DSP */
447 return sst_byt_dsp_boot(dev, sst_pdata); 441 ret = sst_byt_dsp_boot(dev, sst_pdata);
448} 442 if (ret)
449 443 return ret;
450static int sst_byt_pcm_dev_resume(struct device *dev)
451{
452 struct sst_pdata *sst_pdata = dev_get_platdata(dev);
453
454 dev_dbg(dev, "resume\n");
455 444
456 /* wait for FW to finish booting */ 445 /* wait for FW to finish booting */
457 return sst_byt_dsp_wait_for_ready(dev, sst_pdata); 446 return sst_byt_dsp_wait_for_ready(dev, sst_pdata);
458} 447}
459 448
460static const struct dev_pm_ops sst_byt_pm_ops = { 449static const struct dev_pm_ops sst_byt_pm_ops = {
461 .suspend_noirq = sst_byt_pcm_dev_suspend_noirq,
462 .suspend_late = sst_byt_pcm_dev_suspend_late, 450 .suspend_late = sst_byt_pcm_dev_suspend_late,
463 .resume_early = sst_byt_pcm_dev_resume_early, 451 .resume_early = sst_byt_pcm_dev_resume_early,
464 .resume = sst_byt_pcm_dev_resume,
465}; 452};
466 453
467#define SST_BYT_PM_OPS (&sst_byt_pm_ops) 454#define SST_BYT_PM_OPS (&sst_byt_pm_ops)
diff --git a/sound/soc/omap/omap-twl4030.c b/sound/soc/omap/omap-twl4030.c
index f8a6adc2d81c..4336d1831485 100644
--- a/sound/soc/omap/omap-twl4030.c
+++ b/sound/soc/omap/omap-twl4030.c
@@ -260,7 +260,7 @@ static struct snd_soc_dai_link omap_twl4030_dai_links[] = {
260 .stream_name = "TWL4030 Voice", 260 .stream_name = "TWL4030 Voice",
261 .cpu_dai_name = "omap-mcbsp.3", 261 .cpu_dai_name = "omap-mcbsp.3",
262 .codec_dai_name = "twl4030-voice", 262 .codec_dai_name = "twl4030-voice",
263 .platform_name = "omap-mcbsp.2", 263 .platform_name = "omap-mcbsp.3",
264 .codec_name = "twl4030-codec", 264 .codec_name = "twl4030-codec",
265 .dai_fmt = SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_IB_NF | 265 .dai_fmt = SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_IB_NF |
266 SND_SOC_DAIFMT_CBM_CFM, 266 SND_SOC_DAIFMT_CBM_CFM,
diff --git a/sound/soc/pxa/pxa-ssp.c b/sound/soc/pxa/pxa-ssp.c
index 0109f6c2334e..a8e097433074 100644
--- a/sound/soc/pxa/pxa-ssp.c
+++ b/sound/soc/pxa/pxa-ssp.c
@@ -765,9 +765,7 @@ static int pxa_ssp_remove(struct snd_soc_dai *dai)
765 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_64000 | \ 765 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_64000 | \
766 SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000) 766 SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
767 767
768#define PXA_SSP_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\ 768#define PXA_SSP_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE)
769 SNDRV_PCM_FMTBIT_S24_LE | \
770 SNDRV_PCM_FMTBIT_S32_LE)
771 769
772static const struct snd_soc_dai_ops pxa_ssp_dai_ops = { 770static const struct snd_soc_dai_ops pxa_ssp_dai_ops = {
773 .startup = pxa_ssp_startup, 771 .startup = pxa_ssp_startup,
diff --git a/sound/soc/sh/rcar/gen.c b/sound/soc/sh/rcar/gen.c
index 3fdf3be7b99a..f95e7ab135e8 100644
--- a/sound/soc/sh/rcar/gen.c
+++ b/sound/soc/sh/rcar/gen.c
@@ -247,7 +247,7 @@ rsnd_gen2_dma_addr(struct rsnd_priv *priv,
247 }; 247 };
248 248
249 /* it shouldn't happen */ 249 /* it shouldn't happen */
250 if (use_dvc & !use_src) 250 if (use_dvc && !use_src)
251 dev_err(dev, "DVC is selected without SRC\n"); 251 dev_err(dev, "DVC is selected without SRC\n");
252 252
253 /* use SSIU or SSI ? */ 253 /* use SSIU or SSI ? */
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index d4bfd4a9076f..889f4e3d35dc 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -1325,7 +1325,7 @@ static int soc_post_component_init(struct snd_soc_pcm_runtime *rtd,
1325 device_initialize(rtd->dev); 1325 device_initialize(rtd->dev);
1326 rtd->dev->parent = rtd->card->dev; 1326 rtd->dev->parent = rtd->card->dev;
1327 rtd->dev->release = rtd_release; 1327 rtd->dev->release = rtd_release;
1328 rtd->dev->init_name = name; 1328 dev_set_name(rtd->dev, "%s", name);
1329 dev_set_drvdata(rtd->dev, rtd); 1329 dev_set_drvdata(rtd->dev, rtd);
1330 mutex_init(&rtd->pcm_mutex); 1330 mutex_init(&rtd->pcm_mutex);
1331 INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_PLAYBACK].be_clients); 1331 INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_PLAYBACK].be_clients);
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index 8348352dc2c6..177bd8639ef9 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -2860,12 +2860,14 @@ int snd_soc_dapm_get_enum_double(struct snd_kcontrol *kcontrol,
2860 struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kcontrol); 2860 struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kcontrol);
2861 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 2861 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
2862 unsigned int reg_val, val; 2862 unsigned int reg_val, val;
2863 int ret = 0;
2864 2863
2865 if (e->reg != SND_SOC_NOPM) 2864 if (e->reg != SND_SOC_NOPM) {
2866 ret = soc_dapm_read(dapm, e->reg, &reg_val); 2865 int ret = soc_dapm_read(dapm, e->reg, &reg_val);
2867 else 2866 if (ret)
2867 return ret;
2868 } else {
2868 reg_val = dapm_kcontrol_get_value(kcontrol); 2869 reg_val = dapm_kcontrol_get_value(kcontrol);
2870 }
2869 2871
2870 val = (reg_val >> e->shift_l) & e->mask; 2872 val = (reg_val >> e->shift_l) & e->mask;
2871 ucontrol->value.enumerated.item[0] = snd_soc_enum_val_to_item(e, val); 2873 ucontrol->value.enumerated.item[0] = snd_soc_enum_val_to_item(e, val);
@@ -2875,7 +2877,7 @@ int snd_soc_dapm_get_enum_double(struct snd_kcontrol *kcontrol,
2875 ucontrol->value.enumerated.item[1] = val; 2877 ucontrol->value.enumerated.item[1] = val;
2876 } 2878 }
2877 2879
2878 return ret; 2880 return 0;
2879} 2881}
2880EXPORT_SYMBOL_GPL(snd_soc_dapm_get_enum_double); 2882EXPORT_SYMBOL_GPL(snd_soc_dapm_get_enum_double);
2881 2883
diff --git a/sound/soc/tegra/tegra_asoc_utils.h b/sound/soc/tegra/tegra_asoc_utils.h
index 9577121ce971..ca8037634100 100644
--- a/sound/soc/tegra/tegra_asoc_utils.h
+++ b/sound/soc/tegra/tegra_asoc_utils.h
@@ -21,7 +21,7 @@
21 */ 21 */
22 22
23#ifndef __TEGRA_ASOC_UTILS_H__ 23#ifndef __TEGRA_ASOC_UTILS_H__
24#define __TEGRA_ASOC_UTILS_H_ 24#define __TEGRA_ASOC_UTILS_H__
25 25
26struct clk; 26struct clk;
27struct device; 27struct device;