Commit 9070ce7e authored by Mark Brown's avatar Mark Brown

Merge tag 'asoc-v3.14-rc6' into asoc-linus

ASoC: Fixes for v3.14

A few things here:
 - Avoid memory leaks in error cases with DPCM, this code has never been
   that well tested in mainline due to the lack of mainline drivers but
   we now have one queued for the merge window!
 - Fix the N810 audio driver to load when booted with DT since the
   platform was converted to DT during the merge window.
 - Fixes for initialisation of some MFD drivers that are probably unused
   in mainline

# gpg: Signature made Mon 10 Mar 2014 18:21:32 GMT using RSA key ID 7EA229BD
# gpg: Good signature from "Mark Brown <broonie@sirena.org.uk>"
# gpg:                 aka "Mark Brown <broonie@debian.org>"
# gpg:                 aka "Mark Brown <broonie@kernel.org>"
# gpg:                 aka "Mark Brown <broonie@tardis.ed.ac.uk>"
# gpg:                 aka "Mark Brown <broonie@linaro.org>"
# gpg:                 aka "Mark Brown <Mark.Brown@linaro.org>"
parents fa389e22 7f35afd4
...@@ -1328,6 +1328,9 @@ static int pm860x_probe(struct snd_soc_codec *codec) ...@@ -1328,6 +1328,9 @@ static int pm860x_probe(struct snd_soc_codec *codec)
pm860x->codec = codec; pm860x->codec = codec;
codec->control_data = pm860x->regmap; codec->control_data = pm860x->regmap;
ret = snd_soc_codec_set_cache_io(codec, 0, 0, SND_SOC_REGMAP);
if (ret)
return ret;
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
ret = request_threaded_irq(pm860x->irq[i], NULL, ret = request_threaded_irq(pm860x->irq[i], NULL,
......
...@@ -210,7 +210,7 @@ static int si476x_codec_hw_params(struct snd_pcm_substream *substream, ...@@ -210,7 +210,7 @@ static int si476x_codec_hw_params(struct snd_pcm_substream *substream,
static int si476x_codec_probe(struct snd_soc_codec *codec) static int si476x_codec_probe(struct snd_soc_codec *codec)
{ {
codec->control_data = dev_get_regmap(codec->dev->parent, NULL); codec->control_data = dev_get_regmap(codec->dev->parent, NULL);
return 0; return snd_soc_codec_set_cache_io(codec, 0, 0, SND_SOC_REGMAP);
} }
static struct snd_soc_dai_ops si476x_dai_ops = { static struct snd_soc_dai_ops si476x_dai_ops = {
......
...@@ -305,7 +305,9 @@ static int __init n810_soc_init(void) ...@@ -305,7 +305,9 @@ static int __init n810_soc_init(void)
int err; int err;
struct device *dev; struct device *dev;
if (!(machine_is_nokia_n810() || machine_is_nokia_n810_wimax())) if (!of_have_populated_dt() ||
(!of_machine_is_compatible("nokia,n810") &&
!of_machine_is_compatible("nokia,n810-wimax")))
return -ENODEV; return -ENODEV;
n810_snd_device = platform_device_alloc("soc-audio", -1); n810_snd_device = platform_device_alloc("soc-audio", -1);
......
...@@ -1989,6 +1989,7 @@ int soc_dpcm_runtime_update(struct snd_soc_card *card) ...@@ -1989,6 +1989,7 @@ int soc_dpcm_runtime_update(struct snd_soc_card *card)
paths = dpcm_path_get(fe, SNDRV_PCM_STREAM_PLAYBACK, &list); paths = dpcm_path_get(fe, SNDRV_PCM_STREAM_PLAYBACK, &list);
if (paths < 0) { if (paths < 0) {
dpcm_path_put(&list);
dev_warn(fe->dev, "ASoC: %s no valid %s path\n", dev_warn(fe->dev, "ASoC: %s no valid %s path\n",
fe->dai_link->name, "playback"); fe->dai_link->name, "playback");
mutex_unlock(&card->mutex); mutex_unlock(&card->mutex);
...@@ -2018,6 +2019,7 @@ int soc_dpcm_runtime_update(struct snd_soc_card *card) ...@@ -2018,6 +2019,7 @@ int soc_dpcm_runtime_update(struct snd_soc_card *card)
paths = dpcm_path_get(fe, SNDRV_PCM_STREAM_CAPTURE, &list); paths = dpcm_path_get(fe, SNDRV_PCM_STREAM_CAPTURE, &list);
if (paths < 0) { if (paths < 0) {
dpcm_path_put(&list);
dev_warn(fe->dev, "ASoC: %s no valid %s path\n", dev_warn(fe->dev, "ASoC: %s no valid %s path\n",
fe->dai_link->name, "capture"); fe->dai_link->name, "capture");
mutex_unlock(&card->mutex); mutex_unlock(&card->mutex);
...@@ -2082,6 +2084,7 @@ static int dpcm_fe_dai_open(struct snd_pcm_substream *fe_substream) ...@@ -2082,6 +2084,7 @@ static int dpcm_fe_dai_open(struct snd_pcm_substream *fe_substream)
fe->dpcm[stream].runtime = fe_substream->runtime; fe->dpcm[stream].runtime = fe_substream->runtime;
if (dpcm_path_get(fe, stream, &list) <= 0) { if (dpcm_path_get(fe, stream, &list) <= 0) {
dpcm_path_put(&list);
dev_dbg(fe->dev, "ASoC: %s no valid %s route\n", dev_dbg(fe->dev, "ASoC: %s no valid %s route\n",
fe->dai_link->name, stream ? "capture" : "playback"); fe->dai_link->name, stream ? "capture" : "playback");
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment