ASoC: core: Add platform DAI widget mapping
Add platform driver support for CPU DAI DAPM widgets. Signed-off-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
Родитель
4edbb34577
Коммит
be09ad90e1
|
@ -241,6 +241,7 @@ struct snd_soc_dai {
|
|||
|
||||
struct snd_soc_dapm_widget *playback_widget;
|
||||
struct snd_soc_dapm_widget *capture_widget;
|
||||
struct snd_soc_dapm_context dapm;
|
||||
|
||||
/* DAI DMA data */
|
||||
void *playback_dma_data;
|
||||
|
|
|
@ -1074,6 +1074,7 @@ static int soc_probe_platform(struct snd_soc_card *card,
|
|||
{
|
||||
int ret = 0;
|
||||
const struct snd_soc_platform_driver *driver = platform->driver;
|
||||
struct snd_soc_dai *dai;
|
||||
|
||||
platform->card = card;
|
||||
platform->dapm.card = card;
|
||||
|
@ -1087,6 +1088,14 @@ static int soc_probe_platform(struct snd_soc_card *card,
|
|||
snd_soc_dapm_new_controls(&platform->dapm,
|
||||
driver->dapm_widgets, driver->num_dapm_widgets);
|
||||
|
||||
/* Create DAPM widgets for each DAI stream */
|
||||
list_for_each_entry(dai, &dai_list, list) {
|
||||
if (dai->dev != platform->dev)
|
||||
continue;
|
||||
|
||||
snd_soc_dapm_new_dai_widgets(&platform->dapm, dai);
|
||||
}
|
||||
|
||||
if (driver->probe) {
|
||||
ret = driver->probe(platform);
|
||||
if (ret < 0) {
|
||||
|
@ -1222,9 +1231,12 @@ static int soc_probe_dai_link(struct snd_soc_card *card, int num, int order)
|
|||
/* probe the cpu_dai */
|
||||
if (!cpu_dai->probed &&
|
||||
cpu_dai->driver->probe_order == order) {
|
||||
cpu_dai->dapm.card = card;
|
||||
if (!try_module_get(cpu_dai->dev->driver->owner))
|
||||
return -ENODEV;
|
||||
|
||||
snd_soc_dapm_new_dai_widgets(&cpu_dai->dapm, cpu_dai);
|
||||
|
||||
if (cpu_dai->driver->probe) {
|
||||
ret = cpu_dai->driver->probe(cpu_dai);
|
||||
if (ret < 0) {
|
||||
|
@ -3242,6 +3254,7 @@ int snd_soc_register_dai(struct device *dev,
|
|||
|
||||
dai->dev = dev;
|
||||
dai->driver = dai_drv;
|
||||
dai->dapm.dev = dev;
|
||||
if (!dai->driver->ops)
|
||||
dai->driver->ops = &null_dai_ops;
|
||||
|
||||
|
@ -3318,6 +3331,7 @@ int snd_soc_register_dais(struct device *dev,
|
|||
dai->id = dai->driver->id;
|
||||
else
|
||||
dai->id = i;
|
||||
dai->dapm.dev = dev;
|
||||
if (!dai->driver->ops)
|
||||
dai->driver->ops = &null_dai_ops;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче