Commit 9278e634 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'fix/asoc' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

* 'fix/asoc' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ASoC: Wait for WM8993 FLL to stabilise
  ASoC: core - Free platform DAPM context at platform removal.
  ASoC: dapm - Fix check for codec context in dapm_power_widgets().
  ASoC: sgtl5000: update author email address
  ASoC: Fix DMA channel leak in imx-pcm-dma-mx2 driver.
parents d71f5be2 986b2f2c
...@@ -1457,5 +1457,5 @@ static void __exit sgtl5000_exit(void) ...@@ -1457,5 +1457,5 @@ static void __exit sgtl5000_exit(void)
module_exit(sgtl5000_exit); module_exit(sgtl5000_exit);
MODULE_DESCRIPTION("Freescale SGTL5000 ALSA SoC Codec Driver"); MODULE_DESCRIPTION("Freescale SGTL5000 ALSA SoC Codec Driver");
MODULE_AUTHOR("Zeng Zhaoming <zhaoming.zeng@freescale.com>"); MODULE_AUTHOR("Zeng Zhaoming <zengzm.kernel@gmail.com>");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
...@@ -444,6 +444,12 @@ static int _wm8993_set_fll(struct snd_soc_codec *codec, int fll_id, int source, ...@@ -444,6 +444,12 @@ static int _wm8993_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
/* Enable the FLL */ /* Enable the FLL */
snd_soc_write(codec, WM8993_FLL_CONTROL_1, reg1 | WM8993_FLL_ENA); snd_soc_write(codec, WM8993_FLL_CONTROL_1, reg1 | WM8993_FLL_ENA);
/* Both overestimates */
if (Fref < 1000000)
msleep(3);
else
msleep(1);
dev_dbg(codec->dev, "FLL enabled at %dHz->%dHz\n", Fref, Fout); dev_dbg(codec->dev, "FLL enabled at %dHz->%dHz\n", Fref, Fout);
wm8993->fll_fref = Fref; wm8993->fll_fref = Fref;
......
...@@ -88,11 +88,13 @@ static int imx_ssi_dma_alloc(struct snd_pcm_substream *substream, ...@@ -88,11 +88,13 @@ static int imx_ssi_dma_alloc(struct snd_pcm_substream *substream,
iprtd->dma_data.dma_request = dma_params->dma; iprtd->dma_data.dma_request = dma_params->dma;
/* Try to grab a DMA channel */ /* Try to grab a DMA channel */
dma_cap_zero(mask); if (!iprtd->dma_chan) {
dma_cap_set(DMA_SLAVE, mask); dma_cap_zero(mask);
iprtd->dma_chan = dma_request_channel(mask, filter, iprtd); dma_cap_set(DMA_SLAVE, mask);
if (!iprtd->dma_chan) iprtd->dma_chan = dma_request_channel(mask, filter, iprtd);
return -EINVAL; if (!iprtd->dma_chan)
return -EINVAL;
}
switch (params_format(params)) { switch (params_format(params)) {
case SNDRV_PCM_FORMAT_S16_LE: case SNDRV_PCM_FORMAT_S16_LE:
......
...@@ -907,6 +907,10 @@ static void soc_remove_dai_link(struct snd_soc_card *card, int num, int order) ...@@ -907,6 +907,10 @@ static void soc_remove_dai_link(struct snd_soc_card *card, int num, int order)
if (err < 0) if (err < 0)
printk(KERN_ERR "asoc: failed to remove %s\n", platform->name); printk(KERN_ERR "asoc: failed to remove %s\n", platform->name);
} }
/* Make sure all DAPM widgets are freed */
snd_soc_dapm_free(&platform->dapm);
platform->probed = 0; platform->probed = 0;
list_del(&platform->card_list); list_del(&platform->card_list);
module_put(platform->dev->driver->owner); module_put(platform->dev->driver->owner);
......
...@@ -1426,7 +1426,7 @@ static int dapm_power_widgets(struct snd_soc_dapm_context *dapm, int event) ...@@ -1426,7 +1426,7 @@ static int dapm_power_widgets(struct snd_soc_dapm_context *dapm, int event)
dapm->target_bias_level = SND_SOC_BIAS_ON; dapm->target_bias_level = SND_SOC_BIAS_ON;
break; break;
case SND_SOC_DAPM_STREAM_STOP: case SND_SOC_DAPM_STREAM_STOP:
if (dapm->codec->active) if (dapm->codec && dapm->codec->active)
dapm->target_bias_level = SND_SOC_BIAS_ON; dapm->target_bias_level = SND_SOC_BIAS_ON;
else else
dapm->target_bias_level = SND_SOC_BIAS_STANDBY; dapm->target_bias_level = SND_SOC_BIAS_STANDBY;
......
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