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