xref: /openbmc/linux/sound/soc/soc-topology-test.c (revision d52bbf747cfa8a2988289009241214a84982cc7d)
1*d52bbf74SAmadeusz Sławiński // SPDX-License-Identifier: GPL-2.0-only
2*d52bbf74SAmadeusz Sławiński /*
3*d52bbf74SAmadeusz Sławiński  * soc-topology-test.c  --  ALSA SoC Topology Kernel Unit Tests
4*d52bbf74SAmadeusz Sławiński  *
5*d52bbf74SAmadeusz Sławiński  * Copyright(c) 2021 Intel Corporation. All rights reserved.
6*d52bbf74SAmadeusz Sławiński  */
7*d52bbf74SAmadeusz Sławiński 
8*d52bbf74SAmadeusz Sławiński #include <linux/firmware.h>
9*d52bbf74SAmadeusz Sławiński #include <linux/random.h>
10*d52bbf74SAmadeusz Sławiński #include <sound/core.h>
11*d52bbf74SAmadeusz Sławiński #include <sound/soc.h>
12*d52bbf74SAmadeusz Sławiński #include <sound/soc-topology.h>
13*d52bbf74SAmadeusz Sławiński #include <kunit/test.h>
14*d52bbf74SAmadeusz Sławiński 
15*d52bbf74SAmadeusz Sławiński /* ===== HELPER FUNCTIONS =================================================== */
16*d52bbf74SAmadeusz Sławiński 
17*d52bbf74SAmadeusz Sławiński /*
18*d52bbf74SAmadeusz Sławiński  * snd_soc_component needs device to operate on (primarily for prints), create
19*d52bbf74SAmadeusz Sławiński  * fake one, as we don't register with PCI or anything else
20*d52bbf74SAmadeusz Sławiński  * device_driver name is used in some of the prints (fmt_single_name) so
21*d52bbf74SAmadeusz Sławiński  * we also mock up minimal one
22*d52bbf74SAmadeusz Sławiński  */
23*d52bbf74SAmadeusz Sławiński static struct device *test_dev;
24*d52bbf74SAmadeusz Sławiński 
25*d52bbf74SAmadeusz Sławiński static struct device_driver test_drv = {
26*d52bbf74SAmadeusz Sławiński 	.name = "sound-soc-topology-test-driver",
27*d52bbf74SAmadeusz Sławiński };
28*d52bbf74SAmadeusz Sławiński 
29*d52bbf74SAmadeusz Sławiński static int snd_soc_tplg_test_init(struct kunit *test)
30*d52bbf74SAmadeusz Sławiński {
31*d52bbf74SAmadeusz Sławiński 	test_dev = root_device_register("sound-soc-topology-test");
32*d52bbf74SAmadeusz Sławiński 	test_dev = get_device(test_dev);
33*d52bbf74SAmadeusz Sławiński 	if (!test_dev)
34*d52bbf74SAmadeusz Sławiński 		return -ENODEV;
35*d52bbf74SAmadeusz Sławiński 
36*d52bbf74SAmadeusz Sławiński 	test_dev->driver = &test_drv;
37*d52bbf74SAmadeusz Sławiński 
38*d52bbf74SAmadeusz Sławiński 	return 0;
39*d52bbf74SAmadeusz Sławiński }
40*d52bbf74SAmadeusz Sławiński 
41*d52bbf74SAmadeusz Sławiński static void snd_soc_tplg_test_exit(struct kunit *test)
42*d52bbf74SAmadeusz Sławiński {
43*d52bbf74SAmadeusz Sławiński 	put_device(test_dev);
44*d52bbf74SAmadeusz Sławiński 	root_device_unregister(test_dev);
45*d52bbf74SAmadeusz Sławiński }
46*d52bbf74SAmadeusz Sławiński 
47*d52bbf74SAmadeusz Sławiński /*
48*d52bbf74SAmadeusz Sławiński  * helper struct we use when registering component, as we load topology during
49*d52bbf74SAmadeusz Sławiński  * component probe, we need to pass struct kunit somehow to probe function, so
50*d52bbf74SAmadeusz Sławiński  * we can report test result
51*d52bbf74SAmadeusz Sławiński  */
52*d52bbf74SAmadeusz Sławiński struct kunit_soc_component {
53*d52bbf74SAmadeusz Sławiński 	struct kunit *kunit;
54*d52bbf74SAmadeusz Sławiński 	int expect; /* what result we expect when loading topology */
55*d52bbf74SAmadeusz Sławiński 	struct snd_soc_component comp;
56*d52bbf74SAmadeusz Sławiński 	struct snd_soc_card card;
57*d52bbf74SAmadeusz Sławiński 	struct firmware fw;
58*d52bbf74SAmadeusz Sławiński };
59*d52bbf74SAmadeusz Sławiński 
60*d52bbf74SAmadeusz Sławiński static int d_probe(struct snd_soc_component *component)
61*d52bbf74SAmadeusz Sławiński {
62*d52bbf74SAmadeusz Sławiński 	struct kunit_soc_component *kunit_comp =
63*d52bbf74SAmadeusz Sławiński 			container_of(component, struct kunit_soc_component, comp);
64*d52bbf74SAmadeusz Sławiński 	int ret;
65*d52bbf74SAmadeusz Sławiński 
66*d52bbf74SAmadeusz Sławiński 	ret = snd_soc_tplg_component_load(component, NULL, &kunit_comp->fw);
67*d52bbf74SAmadeusz Sławiński 	KUNIT_EXPECT_EQ_MSG(kunit_comp->kunit, kunit_comp->expect, ret,
68*d52bbf74SAmadeusz Sławiński 			    "Failed topology load");
69*d52bbf74SAmadeusz Sławiński 
70*d52bbf74SAmadeusz Sławiński 	return 0;
71*d52bbf74SAmadeusz Sławiński }
72*d52bbf74SAmadeusz Sławiński 
73*d52bbf74SAmadeusz Sławiński static void d_remove(struct snd_soc_component *component)
74*d52bbf74SAmadeusz Sławiński {
75*d52bbf74SAmadeusz Sławiński 	struct kunit_soc_component *kunit_comp =
76*d52bbf74SAmadeusz Sławiński 			container_of(component, struct kunit_soc_component, comp);
77*d52bbf74SAmadeusz Sławiński 	int ret;
78*d52bbf74SAmadeusz Sławiński 
79*d52bbf74SAmadeusz Sławiński 	ret = snd_soc_tplg_component_remove(component);
80*d52bbf74SAmadeusz Sławiński 	KUNIT_EXPECT_EQ(kunit_comp->kunit, 0, ret);
81*d52bbf74SAmadeusz Sławiński }
82*d52bbf74SAmadeusz Sławiński 
83*d52bbf74SAmadeusz Sławiński /*
84*d52bbf74SAmadeusz Sławiński  * ASoC minimal boiler plate
85*d52bbf74SAmadeusz Sławiński  */
86*d52bbf74SAmadeusz Sławiński SND_SOC_DAILINK_DEF(dummy, DAILINK_COMP_ARRAY(COMP_DUMMY()));
87*d52bbf74SAmadeusz Sławiński 
88*d52bbf74SAmadeusz Sławiński SND_SOC_DAILINK_DEF(platform, DAILINK_COMP_ARRAY(COMP_PLATFORM("sound-soc-topology-test")));
89*d52bbf74SAmadeusz Sławiński 
90*d52bbf74SAmadeusz Sławiński static struct snd_soc_dai_link kunit_dai_links[] = {
91*d52bbf74SAmadeusz Sławiński 	{
92*d52bbf74SAmadeusz Sławiński 		.name = "KUNIT Audio Port",
93*d52bbf74SAmadeusz Sławiński 		.id = 0,
94*d52bbf74SAmadeusz Sławiński 		.stream_name = "Audio Playback/Capture",
95*d52bbf74SAmadeusz Sławiński 		.nonatomic = 1,
96*d52bbf74SAmadeusz Sławiński 		.dynamic = 1,
97*d52bbf74SAmadeusz Sławiński 		.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
98*d52bbf74SAmadeusz Sławiński 		.dpcm_playback = 1,
99*d52bbf74SAmadeusz Sławiński 		.dpcm_capture = 1,
100*d52bbf74SAmadeusz Sławiński 		SND_SOC_DAILINK_REG(dummy, dummy, platform),
101*d52bbf74SAmadeusz Sławiński 	},
102*d52bbf74SAmadeusz Sławiński };
103*d52bbf74SAmadeusz Sławiński 
104*d52bbf74SAmadeusz Sławiński static const struct snd_soc_component_driver test_component = {
105*d52bbf74SAmadeusz Sławiński 	.name = "sound-soc-topology-test",
106*d52bbf74SAmadeusz Sławiński 	.probe = d_probe,
107*d52bbf74SAmadeusz Sławiński 	.remove = d_remove,
108*d52bbf74SAmadeusz Sławiński 	.non_legacy_dai_naming = 1,
109*d52bbf74SAmadeusz Sławiński };
110*d52bbf74SAmadeusz Sławiński 
111*d52bbf74SAmadeusz Sławiński /* ===== TEST CASES ========================================================= */
112*d52bbf74SAmadeusz Sławiński 
113*d52bbf74SAmadeusz Sławiński // TEST CASE
114*d52bbf74SAmadeusz Sławiński // Test passing NULL component as parameter to snd_soc_tplg_component_load
115*d52bbf74SAmadeusz Sławiński 
116*d52bbf74SAmadeusz Sławiński /*
117*d52bbf74SAmadeusz Sławiński  * need to override generic probe function with one using NULL when calling
118*d52bbf74SAmadeusz Sławiński  * topology load during component initialization, we don't need .remove
119*d52bbf74SAmadeusz Sławiński  * handler as load should fail
120*d52bbf74SAmadeusz Sławiński  */
121*d52bbf74SAmadeusz Sławiński static int d_probe_null_comp(struct snd_soc_component *component)
122*d52bbf74SAmadeusz Sławiński {
123*d52bbf74SAmadeusz Sławiński 	struct kunit_soc_component *kunit_comp =
124*d52bbf74SAmadeusz Sławiński 			container_of(component, struct kunit_soc_component, comp);
125*d52bbf74SAmadeusz Sławiński 	int ret;
126*d52bbf74SAmadeusz Sławiński 
127*d52bbf74SAmadeusz Sławiński 	/* instead of passing component pointer as first argument, pass NULL here */
128*d52bbf74SAmadeusz Sławiński 	ret = snd_soc_tplg_component_load(NULL, NULL, &kunit_comp->fw);
129*d52bbf74SAmadeusz Sławiński 	KUNIT_EXPECT_EQ_MSG(kunit_comp->kunit, kunit_comp->expect, ret,
130*d52bbf74SAmadeusz Sławiński 			    "Failed topology load");
131*d52bbf74SAmadeusz Sławiński 
132*d52bbf74SAmadeusz Sławiński 	return 0;
133*d52bbf74SAmadeusz Sławiński }
134*d52bbf74SAmadeusz Sławiński 
135*d52bbf74SAmadeusz Sławiński static const struct snd_soc_component_driver test_component_null_comp = {
136*d52bbf74SAmadeusz Sławiński 	.name = "sound-soc-topology-test",
137*d52bbf74SAmadeusz Sławiński 	.probe = d_probe_null_comp,
138*d52bbf74SAmadeusz Sławiński 	.non_legacy_dai_naming = 1,
139*d52bbf74SAmadeusz Sławiński };
140*d52bbf74SAmadeusz Sławiński 
141*d52bbf74SAmadeusz Sławiński static void snd_soc_tplg_test_load_with_null_comp(struct kunit *test)
142*d52bbf74SAmadeusz Sławiński {
143*d52bbf74SAmadeusz Sławiński 	struct kunit_soc_component *kunit_comp;
144*d52bbf74SAmadeusz Sławiński 	int ret;
145*d52bbf74SAmadeusz Sławiński 
146*d52bbf74SAmadeusz Sławiński 	/* prepare */
147*d52bbf74SAmadeusz Sławiński 	kunit_comp = kunit_kzalloc(test, sizeof(*kunit_comp), GFP_KERNEL);
148*d52bbf74SAmadeusz Sławiński 	KUNIT_EXPECT_NOT_ERR_OR_NULL(test, kunit_comp);
149*d52bbf74SAmadeusz Sławiński 	kunit_comp->kunit = test;
150*d52bbf74SAmadeusz Sławiński 	kunit_comp->expect = -EINVAL; /* expect failure */
151*d52bbf74SAmadeusz Sławiński 
152*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.dev = test_dev,
153*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.name = "kunit-card",
154*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.owner = THIS_MODULE,
155*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.dai_link = kunit_dai_links,
156*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.num_links = ARRAY_SIZE(kunit_dai_links),
157*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.fully_routed = true,
158*d52bbf74SAmadeusz Sławiński 
159*d52bbf74SAmadeusz Sławiński 	/* run test */
160*d52bbf74SAmadeusz Sławiński 	ret = snd_soc_register_card(&kunit_comp->card);
161*d52bbf74SAmadeusz Sławiński 	if (ret != 0 && ret != -EPROBE_DEFER)
162*d52bbf74SAmadeusz Sławiński 		KUNIT_FAIL(test, "Failed to register card");
163*d52bbf74SAmadeusz Sławiński 
164*d52bbf74SAmadeusz Sławiński 	ret = snd_soc_component_initialize(&kunit_comp->comp, &test_component_null_comp, test_dev);
165*d52bbf74SAmadeusz Sławiński 	KUNIT_EXPECT_EQ(test, 0, ret);
166*d52bbf74SAmadeusz Sławiński 
167*d52bbf74SAmadeusz Sławiński 	ret = snd_soc_add_component(&kunit_comp->comp, NULL, 0);
168*d52bbf74SAmadeusz Sławiński 	KUNIT_EXPECT_EQ(test, 0, ret);
169*d52bbf74SAmadeusz Sławiński 
170*d52bbf74SAmadeusz Sławiński 	/* cleanup */
171*d52bbf74SAmadeusz Sławiński 	ret = snd_soc_unregister_card(&kunit_comp->card);
172*d52bbf74SAmadeusz Sławiński 	KUNIT_EXPECT_EQ(test, 0, ret);
173*d52bbf74SAmadeusz Sławiński 
174*d52bbf74SAmadeusz Sławiński 	snd_soc_unregister_component(test_dev);
175*d52bbf74SAmadeusz Sławiński }
176*d52bbf74SAmadeusz Sławiński 
177*d52bbf74SAmadeusz Sławiński // TEST CASE
178*d52bbf74SAmadeusz Sławiński // Test passing NULL ops as parameter to snd_soc_tplg_component_load
179*d52bbf74SAmadeusz Sławiński 
180*d52bbf74SAmadeusz Sławiński /*
181*d52bbf74SAmadeusz Sławiński  * NULL ops is default case, we pass empty topology (fw), so we don't have
182*d52bbf74SAmadeusz Sławiński  * anything to parse and just do nothing, which results in return 0; from
183*d52bbf74SAmadeusz Sławiński  * calling soc_tplg_dapm_complete in soc_tplg_process_headers
184*d52bbf74SAmadeusz Sławiński  */
185*d52bbf74SAmadeusz Sławiński static void snd_soc_tplg_test_load_with_null_ops(struct kunit *test)
186*d52bbf74SAmadeusz Sławiński {
187*d52bbf74SAmadeusz Sławiński 	struct kunit_soc_component *kunit_comp;
188*d52bbf74SAmadeusz Sławiński 	int ret;
189*d52bbf74SAmadeusz Sławiński 
190*d52bbf74SAmadeusz Sławiński 	/* prepare */
191*d52bbf74SAmadeusz Sławiński 	kunit_comp = kunit_kzalloc(test, sizeof(*kunit_comp), GFP_KERNEL);
192*d52bbf74SAmadeusz Sławiński 	KUNIT_EXPECT_NOT_ERR_OR_NULL(test, kunit_comp);
193*d52bbf74SAmadeusz Sławiński 	kunit_comp->kunit = test;
194*d52bbf74SAmadeusz Sławiński 	kunit_comp->expect = 0; /* expect success */
195*d52bbf74SAmadeusz Sławiński 
196*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.dev = test_dev,
197*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.name = "kunit-card",
198*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.owner = THIS_MODULE,
199*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.dai_link = kunit_dai_links,
200*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.num_links = ARRAY_SIZE(kunit_dai_links),
201*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.fully_routed = true,
202*d52bbf74SAmadeusz Sławiński 
203*d52bbf74SAmadeusz Sławiński 	/* run test */
204*d52bbf74SAmadeusz Sławiński 	ret = snd_soc_register_card(&kunit_comp->card);
205*d52bbf74SAmadeusz Sławiński 	if (ret != 0 && ret != -EPROBE_DEFER)
206*d52bbf74SAmadeusz Sławiński 		KUNIT_FAIL(test, "Failed to register card");
207*d52bbf74SAmadeusz Sławiński 
208*d52bbf74SAmadeusz Sławiński 	ret = snd_soc_component_initialize(&kunit_comp->comp, &test_component, test_dev);
209*d52bbf74SAmadeusz Sławiński 	KUNIT_EXPECT_EQ(test, 0, ret);
210*d52bbf74SAmadeusz Sławiński 
211*d52bbf74SAmadeusz Sławiński 	ret = snd_soc_add_component(&kunit_comp->comp, NULL, 0);
212*d52bbf74SAmadeusz Sławiński 	KUNIT_EXPECT_EQ(test, 0, ret);
213*d52bbf74SAmadeusz Sławiński 
214*d52bbf74SAmadeusz Sławiński 	/* cleanup */
215*d52bbf74SAmadeusz Sławiński 	ret = snd_soc_unregister_card(&kunit_comp->card);
216*d52bbf74SAmadeusz Sławiński 	KUNIT_EXPECT_EQ(test, 0, ret);
217*d52bbf74SAmadeusz Sławiński 
218*d52bbf74SAmadeusz Sławiński 	snd_soc_unregister_component(test_dev);
219*d52bbf74SAmadeusz Sławiński }
220*d52bbf74SAmadeusz Sławiński 
221*d52bbf74SAmadeusz Sławiński // TEST CASE
222*d52bbf74SAmadeusz Sławiński // Test passing NULL fw as parameter to snd_soc_tplg_component_load
223*d52bbf74SAmadeusz Sławiński 
224*d52bbf74SAmadeusz Sławiński /*
225*d52bbf74SAmadeusz Sławiński  * need to override generic probe function with one using NULL pointer to fw
226*d52bbf74SAmadeusz Sławiński  * when calling topology load during component initialization, we don't need
227*d52bbf74SAmadeusz Sławiński  * .remove handler as load should fail
228*d52bbf74SAmadeusz Sławiński  */
229*d52bbf74SAmadeusz Sławiński static int d_probe_null_fw(struct snd_soc_component *component)
230*d52bbf74SAmadeusz Sławiński {
231*d52bbf74SAmadeusz Sławiński 	struct kunit_soc_component *kunit_comp =
232*d52bbf74SAmadeusz Sławiński 			container_of(component, struct kunit_soc_component, comp);
233*d52bbf74SAmadeusz Sławiński 	int ret;
234*d52bbf74SAmadeusz Sławiński 
235*d52bbf74SAmadeusz Sławiński 	/* instead of passing fw pointer as third argument, pass NULL here */
236*d52bbf74SAmadeusz Sławiński 	ret = snd_soc_tplg_component_load(component, NULL, NULL);
237*d52bbf74SAmadeusz Sławiński 	KUNIT_EXPECT_EQ_MSG(kunit_comp->kunit, kunit_comp->expect, ret,
238*d52bbf74SAmadeusz Sławiński 			    "Failed topology load");
239*d52bbf74SAmadeusz Sławiński 
240*d52bbf74SAmadeusz Sławiński 	return 0;
241*d52bbf74SAmadeusz Sławiński }
242*d52bbf74SAmadeusz Sławiński 
243*d52bbf74SAmadeusz Sławiński static const struct snd_soc_component_driver test_component_null_fw = {
244*d52bbf74SAmadeusz Sławiński 	.name = "sound-soc-topology-test",
245*d52bbf74SAmadeusz Sławiński 	.probe = d_probe_null_fw,
246*d52bbf74SAmadeusz Sławiński 	.non_legacy_dai_naming = 1,
247*d52bbf74SAmadeusz Sławiński };
248*d52bbf74SAmadeusz Sławiński 
249*d52bbf74SAmadeusz Sławiński static void snd_soc_tplg_test_load_with_null_fw(struct kunit *test)
250*d52bbf74SAmadeusz Sławiński {
251*d52bbf74SAmadeusz Sławiński 	struct kunit_soc_component *kunit_comp;
252*d52bbf74SAmadeusz Sławiński 	int ret;
253*d52bbf74SAmadeusz Sławiński 
254*d52bbf74SAmadeusz Sławiński 	/* prepare */
255*d52bbf74SAmadeusz Sławiński 	kunit_comp = kunit_kzalloc(test, sizeof(*kunit_comp), GFP_KERNEL);
256*d52bbf74SAmadeusz Sławiński 	KUNIT_EXPECT_NOT_ERR_OR_NULL(test, kunit_comp);
257*d52bbf74SAmadeusz Sławiński 	kunit_comp->kunit = test;
258*d52bbf74SAmadeusz Sławiński 	kunit_comp->expect = -EINVAL; /* expect failure */
259*d52bbf74SAmadeusz Sławiński 
260*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.dev = test_dev,
261*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.name = "kunit-card",
262*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.owner = THIS_MODULE,
263*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.dai_link = kunit_dai_links,
264*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.num_links = ARRAY_SIZE(kunit_dai_links),
265*d52bbf74SAmadeusz Sławiński 	kunit_comp->card.fully_routed = true,
266*d52bbf74SAmadeusz Sławiński 
267*d52bbf74SAmadeusz Sławiński 	/* run test */
268*d52bbf74SAmadeusz Sławiński 	ret = snd_soc_register_card(&kunit_comp->card);
269*d52bbf74SAmadeusz Sławiński 	if (ret != 0 && ret != -EPROBE_DEFER)
270*d52bbf74SAmadeusz Sławiński 		KUNIT_FAIL(test, "Failed to register card");
271*d52bbf74SAmadeusz Sławiński 
272*d52bbf74SAmadeusz Sławiński 	ret = snd_soc_component_initialize(&kunit_comp->comp, &test_component_null_fw, test_dev);
273*d52bbf74SAmadeusz Sławiński 	KUNIT_EXPECT_EQ(test, 0, ret);
274*d52bbf74SAmadeusz Sławiński 
275*d52bbf74SAmadeusz Sławiński 	ret = snd_soc_add_component(&kunit_comp->comp, NULL, 0);
276*d52bbf74SAmadeusz Sławiński 	KUNIT_EXPECT_EQ(test, 0, ret);
277*d52bbf74SAmadeusz Sławiński 
278*d52bbf74SAmadeusz Sławiński 	/* cleanup */
279*d52bbf74SAmadeusz Sławiński 	ret = snd_soc_unregister_card(&kunit_comp->card);
280*d52bbf74SAmadeusz Sławiński 	KUNIT_EXPECT_EQ(test, 0, ret);
281*d52bbf74SAmadeusz Sławiński 
282*d52bbf74SAmadeusz Sławiński 	snd_soc_unregister_component(test_dev);
283*d52bbf74SAmadeusz Sławiński }
284*d52bbf74SAmadeusz Sławiński 
285*d52bbf74SAmadeusz Sławiński /* ===== KUNIT MODULE DEFINITIONS =========================================== */
286*d52bbf74SAmadeusz Sławiński 
287*d52bbf74SAmadeusz Sławiński static struct kunit_case snd_soc_tplg_test_cases[] = {
288*d52bbf74SAmadeusz Sławiński 	KUNIT_CASE(snd_soc_tplg_test_load_with_null_comp),
289*d52bbf74SAmadeusz Sławiński 	KUNIT_CASE(snd_soc_tplg_test_load_with_null_ops),
290*d52bbf74SAmadeusz Sławiński 	KUNIT_CASE(snd_soc_tplg_test_load_with_null_fw),
291*d52bbf74SAmadeusz Sławiński 	{}
292*d52bbf74SAmadeusz Sławiński };
293*d52bbf74SAmadeusz Sławiński 
294*d52bbf74SAmadeusz Sławiński static struct kunit_suite snd_soc_tplg_test_suite = {
295*d52bbf74SAmadeusz Sławiński 	.name = "snd_soc_tplg_test",
296*d52bbf74SAmadeusz Sławiński 	.init = snd_soc_tplg_test_init,
297*d52bbf74SAmadeusz Sławiński 	.exit = snd_soc_tplg_test_exit,
298*d52bbf74SAmadeusz Sławiński 	.test_cases = snd_soc_tplg_test_cases,
299*d52bbf74SAmadeusz Sławiński };
300*d52bbf74SAmadeusz Sławiński 
301*d52bbf74SAmadeusz Sławiński kunit_test_suites(&snd_soc_tplg_test_suite);
302*d52bbf74SAmadeusz Sławiński 
303*d52bbf74SAmadeusz Sławiński MODULE_LICENSE("GPL");
304