|
@@ -652,7 +652,7 @@ static const struct snd_soc_dai_ops skl_link_dai_ops = {
|
|
|
.trigger = skl_link_pcm_trigger,
|
|
|
};
|
|
|
|
|
|
-static struct snd_soc_dai_driver skl_platform_dai[] = {
|
|
|
+static struct snd_soc_dai_driver skl_fe_dai[] = {
|
|
|
{
|
|
|
.name = "System Pin",
|
|
|
.ops = &skl_pcm_dai_ops,
|
|
@@ -796,8 +796,10 @@ static struct snd_soc_dai_driver skl_platform_dai[] = {
|
|
|
.sig_bits = 32,
|
|
|
},
|
|
|
},
|
|
|
+};
|
|
|
|
|
|
/* BE CPU Dais */
|
|
|
+static struct snd_soc_dai_driver skl_platform_dai[] = {
|
|
|
{
|
|
|
.name = "SSP0 Pin",
|
|
|
.ops = &skl_be_ssp_dai_ops,
|
|
@@ -1362,6 +1364,8 @@ int skl_platform_register(struct device *dev)
|
|
|
int ret;
|
|
|
struct hdac_ext_bus *ebus = dev_get_drvdata(dev);
|
|
|
struct skl *skl = ebus_to_skl(ebus);
|
|
|
+ struct snd_soc_dai_driver *dais;
|
|
|
+ int num_dais = ARRAY_SIZE(skl_platform_dai);
|
|
|
|
|
|
INIT_LIST_HEAD(&skl->ppl_list);
|
|
|
INIT_LIST_HEAD(&skl->bind_list);
|
|
@@ -1371,14 +1375,38 @@ int skl_platform_register(struct device *dev)
|
|
|
dev_err(dev, "soc platform registration failed %d\n", ret);
|
|
|
return ret;
|
|
|
}
|
|
|
+
|
|
|
+ skl->dais = kmemdup(skl_platform_dai, sizeof(skl_platform_dai),
|
|
|
+ GFP_KERNEL);
|
|
|
+ if (!skl->dais) {
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto err;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!skl->use_tplg_pcm) {
|
|
|
+ dais = krealloc(skl->dais, sizeof(skl_fe_dai) +
|
|
|
+ sizeof(skl_platform_dai), GFP_KERNEL);
|
|
|
+ if (!dais) {
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto err;
|
|
|
+ }
|
|
|
+
|
|
|
+ skl->dais = dais;
|
|
|
+ memcpy(&skl->dais[ARRAY_SIZE(skl_platform_dai)], skl_fe_dai,
|
|
|
+ sizeof(skl_fe_dai));
|
|
|
+ num_dais += ARRAY_SIZE(skl_fe_dai);
|
|
|
+ }
|
|
|
+
|
|
|
ret = snd_soc_register_component(dev, &skl_component,
|
|
|
- skl_platform_dai,
|
|
|
- ARRAY_SIZE(skl_platform_dai));
|
|
|
+ skl->dais, num_dais);
|
|
|
if (ret) {
|
|
|
dev_err(dev, "soc component registration failed %d\n", ret);
|
|
|
- snd_soc_unregister_platform(dev);
|
|
|
+ goto err;
|
|
|
}
|
|
|
|
|
|
+ return 0;
|
|
|
+err:
|
|
|
+ snd_soc_unregister_platform(dev);
|
|
|
return ret;
|
|
|
|
|
|
}
|
|
@@ -1398,5 +1426,7 @@ int skl_platform_unregister(struct device *dev)
|
|
|
|
|
|
snd_soc_unregister_component(dev);
|
|
|
snd_soc_unregister_platform(dev);
|
|
|
+ kfree(skl->dais);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|