1 // SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
3 // This file is provided under a dual BSD/GPLv2 license. When using or
4 // redistributing this file, you may do so under either license.
6 // Copyright(c) 2018 Intel Corporation. All rights reserved.
8 // Author: Liam Girdwood <liam.r.girdwood@linux.intel.com>
11 #include <linux/module.h>
12 #include <sound/sof.h>
15 static struct snd_soc_card sof_nocodec_card
= {
16 .name
= "nocodec", /* the sof- prefix is added by the core */
19 static int sof_nocodec_bes_setup(struct device
*dev
,
20 const struct snd_sof_dsp_ops
*ops
,
21 struct snd_soc_dai_link
*links
,
22 int link_num
, struct snd_soc_card
*card
)
24 struct snd_soc_dai_link_component
*dlc
;
27 if (!ops
|| !links
|| !card
)
30 /* set up BE dai_links */
31 for (i
= 0; i
< link_num
; i
++) {
32 dlc
= devm_kzalloc(dev
, 3 * sizeof(*dlc
), GFP_KERNEL
);
36 links
[i
].name
= devm_kasprintf(dev
, GFP_KERNEL
,
41 links
[i
].cpus
= &dlc
[0];
42 links
[i
].codecs
= &dlc
[1];
43 links
[i
].platforms
= &dlc
[2];
45 links
[i
].num_cpus
= 1;
46 links
[i
].num_codecs
= 1;
47 links
[i
].num_platforms
= 1;
51 links
[i
].cpus
->dai_name
= ops
->drv
[i
].name
;
52 links
[i
].platforms
->name
= dev_name(dev
);
53 links
[i
].codecs
->dai_name
= "snd-soc-dummy-dai";
54 links
[i
].codecs
->name
= "snd-soc-dummy";
55 links
[i
].dpcm_playback
= 1;
56 links
[i
].dpcm_capture
= 1;
59 card
->dai_link
= links
;
60 card
->num_links
= link_num
;
65 int sof_nocodec_setup(struct device
*dev
,
66 struct snd_sof_pdata
*sof_pdata
,
67 struct snd_soc_acpi_mach
*mach
,
68 const struct sof_dev_desc
*desc
,
69 const struct snd_sof_dsp_ops
*ops
)
71 struct snd_soc_dai_link
*links
;
77 sof_pdata
->drv_name
= "sof-nocodec";
79 mach
->drv_name
= "sof-nocodec";
80 sof_pdata
->fw_filename
= desc
->nocodec_fw_filename
;
81 sof_pdata
->tplg_filename
= desc
->nocodec_tplg_filename
;
83 /* create dummy BE dai_links */
84 links
= devm_kzalloc(dev
, sizeof(struct snd_soc_dai_link
) *
85 ops
->num_drv
, GFP_KERNEL
);
89 ret
= sof_nocodec_bes_setup(dev
, ops
, links
, ops
->num_drv
,
93 EXPORT_SYMBOL(sof_nocodec_setup
);
95 static int sof_nocodec_probe(struct platform_device
*pdev
)
97 struct snd_soc_card
*card
= &sof_nocodec_card
;
99 card
->dev
= &pdev
->dev
;
101 return devm_snd_soc_register_card(&pdev
->dev
, card
);
104 static int sof_nocodec_remove(struct platform_device
*pdev
)
109 static struct platform_driver sof_nocodec_audio
= {
110 .probe
= sof_nocodec_probe
,
111 .remove
= sof_nocodec_remove
,
113 .name
= "sof-nocodec",
114 .pm
= &snd_soc_pm_ops
,
117 module_platform_driver(sof_nocodec_audio
)
119 MODULE_DESCRIPTION("ASoC sof nocodec");
120 MODULE_AUTHOR("Liam Girdwood");
121 MODULE_LICENSE("Dual BSD/GPL");
122 MODULE_ALIAS("platform:sof-nocodec");