asoc: common: Modify the logic for interface index check

Check if the interface index is either of TDM/MI2S/AUXPCM
to implement the common ops as the current index is valid
for other interfaces like CDC DMA as well.

Change-Id: I345a2b47185d6d56198061a17921fdfc2f5e3290
This commit is contained in:
Aditya Bavanari
2021-09-03 11:23:13 +05:30
committed by Rohit kumar
parent c315833fa3
commit c46348987c

View File

@@ -236,8 +236,14 @@ static void check_userspace_service_state(struct snd_soc_pcm_runtime *rtd,
}
}
static int get_intf_index(const char *stream_name)
static int get_mi2s_tdm_auxpcm_intf_index(const char *stream_name)
{
if (!strnstr(stream_name, "TDM", strlen(stream_name)) ||
!strnstr(stream_name, "MI2S", strlen(stream_name)) ||
!strnstr(stream_name, "AUXPCM", strlen(stream_name)))
return -EINVAL;
if (strnstr(stream_name, "LPAIF_RXTX", strlen(stream_name)))
return QUAT_MI2S_TDM_AUXPCM;
else if (strnstr(stream_name, "LPAIF_WSA", strlen(stream_name)))
@@ -376,7 +382,7 @@ int msm_common_snd_hw_params(struct snd_pcm_substream *substream,
const char *stream_name = rtd->dai_link->stream_name;
struct snd_soc_card *card = rtd->card;
struct msm_common_pdata *pdata = msm_common_get_pdata(card);
int index = get_intf_index(stream_name);
int index = get_mi2s_tdm_auxpcm_intf_index(stream_name);
struct clk_cfg intf_clk_cfg;
dev_dbg(rtd->card->dev,
@@ -420,7 +426,7 @@ int msm_common_snd_hw_params(struct snd_pcm_substream *substream,
intf_clk_cfg.clk_id, intf_clk_cfg.clk_freq_in_hz);
ret = audio_prm_set_lpass_clk_cfg(&intf_clk_cfg, 1);
if (ret < 0) {
pr_err("%s: prm lpass clk cfg set failed ret %d\n",
pr_err("%s: prm lpass tdm clk cfg set failed ret %d\n",
__func__, ret);
goto done;
}
@@ -470,8 +476,9 @@ int msm_common_snd_hw_params(struct snd_pcm_substream *substream,
goto done;
}
} else {
pr_err("%s: invalid stream name: %s\n", __func__,
stream_name);
pr_err("%s: unsupported stream name: %s\n",
__func__, stream_name);
goto done;
}
}
atomic_inc(&pdata->lpass_intf_clk_ref_cnt[index]);
@@ -488,7 +495,7 @@ int msm_common_snd_startup(struct snd_pcm_substream *substream)
struct snd_soc_card *card = rtd->card;
struct msm_common_pdata *pdata = msm_common_get_pdata(card);
const char *stream_name = rtd->dai_link->stream_name;
int index = get_intf_index(stream_name);
int index = get_mi2s_tdm_auxpcm_intf_index(stream_name);
dev_dbg(rtd->card->dev,
"%s: substream = %s stream = %d\n",
@@ -527,7 +534,7 @@ void msm_common_snd_shutdown(struct snd_pcm_substream *substream)
struct msm_common_pdata *pdata = msm_common_get_pdata(card);
struct snd_pcm_runtime *runtime = substream->runtime;
const char *stream_name = rtd->dai_link->stream_name;
int index = get_intf_index(stream_name);
int index = get_mi2s_tdm_auxpcm_intf_index(stream_name);
struct clk_cfg intf_clk_cfg;
unsigned int rate = runtime->rate;
@@ -548,20 +555,22 @@ void msm_common_snd_shutdown(struct snd_pcm_substream *substream)
if (atomic_read(&pdata->lpass_intf_clk_ref_cnt[index]) == 0) {
if ((strnstr(stream_name, "TDM", strlen(stream_name)))) {
intf_clk_cfg.clk_id = get_tdm_clk_id(index);
pr_debug("%s: Disable clock ID: %d\n", __func__, intf_clk_cfg.clk_id);
pr_debug("%s: Disable tdm clock ID: %d\n",
__func__, intf_clk_cfg.clk_id);
ret = audio_prm_set_lpass_clk_cfg(&intf_clk_cfg, 0);
if (ret < 0)
pr_err("%s: prm clk cfg set failed ret %d\n",
pr_err("%s: prm tdm clk cfg set failed ret %d\n",
__func__, ret);
} else if((strnstr(stream_name, "MI2S", strlen(stream_name)))) {
intf_clk_cfg.clk_id = get_mi2s_clk_id(index);
pr_debug("%s: Disable clock ID: %d\n", __func__, intf_clk_cfg.clk_id);
pr_debug("%s: Disable mi2s clock ID: %d\n",
__func__, intf_clk_cfg.clk_id);
ret = audio_prm_set_lpass_clk_cfg(&intf_clk_cfg, 0);
if (ret < 0)
pr_err("%s: prm mi2s clk cfg disable failed ret %d\n",
__func__, ret);
} else {
pr_err("%s: invalid stream name: %s\n",
pr_err("%s: unsupported stream name: %s\n",
__func__, stream_name);
}