Skip to content

Commit

Permalink
ASoC: soc-dai: add snd_soc_pcm_dai_remove()
Browse files Browse the repository at this point in the history
We have 2 type of component functions
snd_soc_dai_xxx()     is focusing to dai itself,
snd_soc_pcm_dai_xxx() is focusing to rtd related dai.

Now we can update snd_soc_dai_remove() to
snd_soc_pcm_dai_remove(). This patch do it.

Signed-off-by: Kuninori Morimoto <[email protected]>
Reviewed-By: Ranjani Sridharan <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Mark Brown <[email protected]>
  • Loading branch information
morimoto authored and broonie committed Apr 29, 2020
1 parent 51801ae commit 7eaa313
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 33 deletions.
2 changes: 1 addition & 1 deletion include/sound/soc-dai.h
Original file line number Diff line number Diff line change
Expand Up @@ -158,12 +158,12 @@ snd_pcm_sframes_t snd_soc_dai_delay(struct snd_soc_dai *dai,
struct snd_pcm_substream *substream);
void snd_soc_dai_suspend(struct snd_soc_dai *dai);
void snd_soc_dai_resume(struct snd_soc_dai *dai);
int snd_soc_dai_remove(struct snd_soc_dai *dai);
int snd_soc_dai_compress_new(struct snd_soc_dai *dai,
struct snd_soc_pcm_runtime *rtd, int num);
bool snd_soc_dai_stream_valid(struct snd_soc_dai *dai, int stream);

int snd_soc_pcm_dai_probe(struct snd_soc_pcm_runtime *rtd, int order);
int snd_soc_pcm_dai_remove(struct snd_soc_pcm_runtime *rtd, int order);
int snd_soc_pcm_dai_new(struct snd_soc_pcm_runtime *rtd);
int snd_soc_pcm_dai_prepare(struct snd_pcm_substream *substream);
int snd_soc_pcm_dai_trigger(struct snd_pcm_substream *substream, int cmd);
Expand Down
24 changes: 2 additions & 22 deletions sound/soc/soc-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1256,35 +1256,15 @@ static int soc_probe_component(struct snd_soc_card *card,
return ret;
}

static void soc_remove_dai(struct snd_soc_dai *dai, int order)
{
int err;

if (!dai || !dai->probed || !dai->driver ||
dai->driver->remove_order != order)
return;

err = snd_soc_dai_remove(dai);
if (err < 0)
dev_err(dai->dev,
"ASoC: failed to remove %s: %d\n",
dai->name, err);

dai->probed = 0;
}

static void soc_remove_link_dais(struct snd_soc_card *card)
{
int i;
struct snd_soc_dai *dai;
struct snd_soc_pcm_runtime *rtd;
int order;

for_each_comp_order(order) {
for_each_card_rtds(card, rtd) {
/* remove DAIs */
for_each_rtd_dais(rtd, i, dai)
soc_remove_dai(dai, order);
/* remove all rtd connected DAIs in good order */
snd_soc_pcm_dai_remove(rtd, order);
}
}
}
Expand Down
32 changes: 22 additions & 10 deletions sound/soc/soc-dai.c
Original file line number Diff line number Diff line change
Expand Up @@ -366,16 +366,6 @@ snd_pcm_sframes_t snd_soc_dai_delay(struct snd_soc_dai *dai,
return delay;
}

int snd_soc_dai_remove(struct snd_soc_dai *dai)
{
int ret = 0;

if (dai->driver->remove)
ret = dai->driver->remove(dai);

return soc_dai_ret(dai, ret);
}

int snd_soc_dai_compress_new(struct snd_soc_dai *dai,
struct snd_soc_pcm_runtime *rtd, int num)
{
Expand Down Expand Up @@ -420,6 +410,28 @@ int snd_soc_pcm_dai_probe(struct snd_soc_pcm_runtime *rtd, int order)
return 0;
}

int snd_soc_pcm_dai_remove(struct snd_soc_pcm_runtime *rtd, int order)
{
struct snd_soc_dai *dai;
int i, r, ret = 0;

for_each_rtd_dais(rtd, i, dai) {
if (dai->driver->remove_order != order)
continue;

if (dai->probed &&
dai->driver->remove) {
r = dai->driver->remove(dai);
if (r < 0)
ret = r; /* use last error */
}

dai->probed = 0;
}

return ret;
}

int snd_soc_pcm_dai_new(struct snd_soc_pcm_runtime *rtd)
{
struct snd_soc_dai *dai;
Expand Down

0 comments on commit 7eaa313

Please sign in to comment.