mirror of
https://github.com/torvalds/linux
synced 2024-10-20 02:09:15 +00:00
ASoC: qdsp6: q6asm-dai: only enable dais from device tree
Existing code enables all the playback and capture dais even if there is no device tree entry. This can lead to un-necessary dais in the system which will never be used. So honour whats specfied in device tree. Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Link: https://lore.kernel.org/r/20200311180422.28363-2-srinivas.kandagatla@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
7693cadac8
commit
9b60441692
|
@ -69,6 +69,8 @@ struct q6asm_dai_rtd {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct q6asm_dai_data {
|
struct q6asm_dai_data {
|
||||||
|
struct snd_soc_dai_driver *dais;
|
||||||
|
int num_dais;
|
||||||
long long int sid;
|
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,
|
.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(1),
|
||||||
Q6ASM_FEDAI_DRIVER(2),
|
Q6ASM_FEDAI_DRIVER(2),
|
||||||
Q6ASM_FEDAI_DRIVER(3),
|
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,
|
static int of_q6asm_parse_dai_data(struct device *dev,
|
||||||
struct q6asm_dai_data *pdata)
|
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 snd_soc_pcm_stream empty_stream;
|
||||||
struct device_node *node;
|
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));
|
memset(&empty_stream, 0, sizeof(empty_stream));
|
||||||
|
|
||||||
|
@ -917,7 +931,8 @@ static int of_q6asm_parse_dai_data(struct device *dev,
|
||||||
continue;
|
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);
|
ret = of_property_read_u32(node, "direction", &dir);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -955,11 +970,12 @@ static int q6asm_dai_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
dev_set_drvdata(dev, pdata);
|
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,
|
return devm_snd_soc_register_component(dev, &q6asm_fe_dai_component,
|
||||||
q6asm_fe_dais,
|
pdata->dais, pdata->num_dais);
|
||||||
ARRAY_SIZE(q6asm_fe_dais));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct of_device_id q6asm_dai_device_id[] = {
|
static const struct of_device_id q6asm_dai_device_id[] = {
|
||||||
|
|
Loading…
Reference in a new issue