1 // SPDX-License-Identifier: GPL-2.0-only 2 // 3 // Copyright(c) 2021-2022 Intel Corporation 4 // 5 // Authors: Cezary Rojewski <cezary.rojewski@intel.com> 6 // Amadeusz Slawinski <amadeuszx.slawinski@linux.intel.com> 7 // 8 9 #include <linux/device.h> 10 #include <linux/module.h> 11 #include <sound/soc.h> 12 #include <sound/soc-acpi.h> 13 14 SND_SOC_DAILINK_DEF(dummy, DAILINK_COMP_ARRAY(COMP_DUMMY())); 15 SND_SOC_DAILINK_DEF(probe_cp, DAILINK_COMP_ARRAY(COMP_CPU("Probe Extraction CPU DAI"))); 16 SND_SOC_DAILINK_DEF(platform, DAILINK_COMP_ARRAY(COMP_PLATFORM("probe-platform"))); 17 18 static struct snd_soc_dai_link probe_mb_dai_links[] = { 19 { 20 .name = "Compress Probe Capture", 21 .nonatomic = 1, 22 SND_SOC_DAILINK_REG(probe_cp, dummy, platform), 23 }, 24 }; 25 26 static int avs_probe_mb_probe(struct platform_device *pdev) 27 { 28 struct device *dev = &pdev->dev; 29 struct snd_soc_acpi_mach *mach; 30 struct snd_soc_card *card; 31 int ret; 32 33 mach = dev_get_platdata(dev); 34 35 card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL); 36 if (!card) 37 return -ENOMEM; 38 39 card->name = "avs_probe_mb"; 40 card->dev = dev; 41 card->owner = THIS_MODULE; 42 card->dai_link = probe_mb_dai_links; 43 card->num_links = ARRAY_SIZE(probe_mb_dai_links); 44 card->fully_routed = true; 45 46 ret = snd_soc_fixup_dai_links_platform_name(card, mach->mach_params.platform); 47 if (ret) 48 return ret; 49 50 return devm_snd_soc_register_card(dev, card); 51 } 52 53 static const struct platform_device_id avs_probe_mb_driver_ids[] = { 54 { 55 .name = "avs_probe_mb", 56 }, 57 {}, 58 }; 59 MODULE_DEVICE_TABLE(platform, avs_probe_mb_driver_ids); 60 61 static struct platform_driver avs_probe_mb_driver = { 62 .probe = avs_probe_mb_probe, 63 .driver = { 64 .name = "avs_probe_mb", 65 .pm = &snd_soc_pm_ops, 66 }, 67 .id_table = avs_probe_mb_driver_ids, 68 }; 69 70 module_platform_driver(avs_probe_mb_driver); 71 72 MODULE_DESCRIPTION("Intel probe machine driver"); 73 MODULE_LICENSE("GPL"); 74