Commit 6187509b authored by Mark Brown's avatar Mark Brown

Merge series "ASoC: qdsp6: fix default FE dais and routings." from Srinivas...

Merge series "ASoC: qdsp6: fix default FE dais and routings." from Srinivas Kandagatla <srinivas.kandagatla@linaro.org>:

QDSP6 Frontend dais can be configured to work in rx or tx or both rx/tx mode,
however the default routing do not honour this DT configuration making sound
card fail to probe. FE dais are also not fully honouring device tree configuration.
Fix both of them.

Originally  issue was reported by Vinod Koul

Srinivas Kandagatla (2):
  ASoC: qdsp6: q6asm-dai: only enable dais from device tree
  ASoC: qdsp6: q6routing: remove default routing

 sound/soc/qcom/qdsp6/q6asm-dai.c | 30 +++++++++++++++++++++++-------
 sound/soc/qcom/qdsp6/q6routing.c | 19 -------------------
 2 files changed, 23 insertions(+), 26 deletions(-)

--
2.21.0
parents 16dcefc2 f864edff
......@@ -69,6 +69,8 @@ struct q6asm_dai_rtd {
};
struct q6asm_dai_data {
struct snd_soc_dai_driver *dais;
int num_dais;
long long int sid;
};
......@@ -889,7 +891,7 @@ static const struct snd_soc_component_driver q6asm_fe_dai_component = {
.compr_ops = &q6asm_dai_compr_ops,
};
static struct snd_soc_dai_driver q6asm_fe_dais[] = {
static struct snd_soc_dai_driver q6asm_fe_dais_template[] = {
Q6ASM_FEDAI_DRIVER(1),
Q6ASM_FEDAI_DRIVER(2),
Q6ASM_FEDAI_DRIVER(3),
......@@ -903,10 +905,22 @@ static struct snd_soc_dai_driver q6asm_fe_dais[] = {
static int of_q6asm_parse_dai_data(struct device *dev,
struct q6asm_dai_data *pdata)
{
static struct snd_soc_dai_driver *dai_drv;
struct snd_soc_dai_driver *dai_drv;
struct snd_soc_pcm_stream empty_stream;
struct device_node *node;
int ret, id, dir;
int ret, id, dir, idx = 0;
pdata->num_dais = of_get_child_count(dev->of_node);
if (!pdata->num_dais) {
dev_err(dev, "No dais found in DT\n");
return -EINVAL;
}
pdata->dais = devm_kcalloc(dev, pdata->num_dais, sizeof(*dai_drv),
GFP_KERNEL);
if (!pdata->dais)
return -ENOMEM;
memset(&empty_stream, 0, sizeof(empty_stream));
......@@ -917,7 +931,8 @@ static int of_q6asm_parse_dai_data(struct device *dev,
continue;
}
dai_drv = &q6asm_fe_dais[id];
dai_drv = &pdata->dais[idx++];
*dai_drv = q6asm_fe_dais_template[id];
ret = of_property_read_u32(node, "direction", &dir);
if (ret)
......@@ -955,11 +970,12 @@ static int q6asm_dai_probe(struct platform_device *pdev)
dev_set_drvdata(dev, pdata);
of_q6asm_parse_dai_data(dev, pdata);
rc = of_q6asm_parse_dai_data(dev, pdata);
if (rc)
return rc;
return devm_snd_soc_register_component(dev, &q6asm_fe_dai_component,
q6asm_fe_dais,
ARRAY_SIZE(q6asm_fe_dais));
pdata->dais, pdata->num_dais);
}
static const struct of_device_id q6asm_dai_device_id[] = {
......
......@@ -918,25 +918,6 @@ static const struct snd_soc_dapm_route intercon[] = {
{"MM_UL6", NULL, "MultiMedia6 Mixer"},
{"MM_UL7", NULL, "MultiMedia7 Mixer"},
{"MM_UL8", NULL, "MultiMedia8 Mixer"},
{"MM_DL1", NULL, "MultiMedia1 Playback" },
{"MM_DL2", NULL, "MultiMedia2 Playback" },
{"MM_DL3", NULL, "MultiMedia3 Playback" },
{"MM_DL4", NULL, "MultiMedia4 Playback" },
{"MM_DL5", NULL, "MultiMedia5 Playback" },
{"MM_DL6", NULL, "MultiMedia6 Playback" },
{"MM_DL7", NULL, "MultiMedia7 Playback" },
{"MM_DL8", NULL, "MultiMedia8 Playback" },
{"MultiMedia1 Capture", NULL, "MM_UL1"},
{"MultiMedia2 Capture", NULL, "MM_UL2"},
{"MultiMedia3 Capture", NULL, "MM_UL3"},
{"MultiMedia4 Capture", NULL, "MM_UL4"},
{"MultiMedia5 Capture", NULL, "MM_UL5"},
{"MultiMedia6 Capture", NULL, "MM_UL6"},
{"MultiMedia7 Capture", NULL, "MM_UL7"},
{"MultiMedia8 Capture", NULL, "MM_UL8"},
};
static int routing_hw_params(struct snd_soc_component *component,
......
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