diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2017-04-14 07:30:04 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-04-14 07:30:04 -0700 |
commit | 21f62e1d1e73bd33b50b4e4ec444ed978482ccba (patch) | |
tree | 5fc8b7396fd65013dbb6d2285aa887e6a9a058e4 /sound | |
parent | ff13dc2a6cd3c7456d92d5f210f9d520d2c2ca8b (diff) | |
parent | 7b35d8ac229221bb6e26741575439eff0f2d8b59 (diff) |
Merge "Revert "ASoC: msm: decrement slim channel ref to set the property""
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/msm/qdsp6v2/msm-dai-slim.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/sound/soc/msm/qdsp6v2/msm-dai-slim.c b/sound/soc/msm/qdsp6v2/msm-dai-slim.c index 43a27eb35a44..64ecd7e031f0 100644 --- a/sound/soc/msm/qdsp6v2/msm-dai-slim.c +++ b/sound/soc/msm/qdsp6v2/msm-dai-slim.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2016, The Linux Foundation. All rights reserved. + * Copyright (c) 2014-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -314,7 +314,7 @@ static int msm_dai_slim_prepare(struct snd_pcm_substream *substream, struct msm_slim_dai_data *dai_data = NULL; struct slim_ch prop; int rc; - u8 i; + u8 i, j; dai_data = msm_slim_get_dai_data(drv_data, dai); if (!dai_data) { @@ -351,10 +351,6 @@ static int msm_dai_slim_prepare(struct snd_pcm_substream *substream, } } - /* To decrement the channel ref count*/ - for (i = 0; i < dai_data->ch_cnt; i++) - slim_dealloc_ch(drv_data->sdev, dai_data->chan_h[i]); - prop.prot = SLIM_AUTO_ISO; prop.baser = SLIM_RATE_4000HZ; prop.dataf = SLIM_CH_DATAF_NOT_DEFINED; @@ -378,6 +374,8 @@ static int msm_dai_slim_prepare(struct snd_pcm_substream *substream, error_define_chan: error_chan_query: + for (j = 0; j < i; j++) + slim_dealloc_ch(drv_data->sdev, dai_data->chan_h[j]); return rc; } @@ -387,6 +385,7 @@ static void msm_dai_slim_shutdown(struct snd_pcm_substream *stream, struct msm_dai_slim_drv_data *drv_data = dev_get_drvdata(dai->dev); struct msm_slim_dma_data *dma_data = NULL; struct msm_slim_dai_data *dai_data; + int i, rc = 0; dai_data = msm_slim_get_dai_data(drv_data, dai); dma_data = snd_soc_dai_get_dma_data(dai, stream); @@ -405,6 +404,15 @@ static void msm_dai_slim_shutdown(struct snd_pcm_substream *stream, return; } + for (i = 0; i < dai_data->ch_cnt; i++) { + rc = slim_dealloc_ch(drv_data->sdev, dai_data->chan_h[i]); + if (rc) { + dev_err(dai->dev, + "%s: dealloc_ch failed, err = %d\n", + __func__, rc); + } + } + snd_soc_dai_set_dma_data(dai, stream, NULL); /* clear prepared state for the dai */ CLR_DAI_STATE(dai_data->status, DAI_STATE_PREPARED); |