brintos

brintos / linux-shallow public Read only

0
0
Text · 2.4 KiB · a31aa47 Raw
101 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2//3// Copyright(c) 2021-2022 Intel Corporation4//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 14SND_SOC_DAILINK_DEF(dmic_pin, DAILINK_COMP_ARRAY(COMP_CPU("DMIC Pin")));15SND_SOC_DAILINK_DEF(dmic_wov_pin, DAILINK_COMP_ARRAY(COMP_CPU("DMIC WoV Pin")));16SND_SOC_DAILINK_DEF(dmic_codec, DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi")));17/* Name overridden on probe */18SND_SOC_DAILINK_DEF(platform, DAILINK_COMP_ARRAY(COMP_PLATFORM("")));19 20static struct snd_soc_dai_link card_dai_links[] = {21	/* Back ends */22	{23		.name = "DMIC",24		.id = 0,25		.dpcm_capture = 1,26		.nonatomic = 1,27		.no_pcm = 1,28		SND_SOC_DAILINK_REG(dmic_pin, dmic_codec, platform),29	},30	{31		.name = "DMIC WoV",32		.id = 1,33		.dpcm_capture = 1,34		.nonatomic = 1,35		.no_pcm = 1,36		.ignore_suspend = 1,37		SND_SOC_DAILINK_REG(dmic_wov_pin, dmic_codec, platform),38	},39};40 41static const struct snd_soc_dapm_widget card_widgets[] = {42	SND_SOC_DAPM_MIC("SoC DMIC", NULL),43};44 45static const struct snd_soc_dapm_route card_routes[] = {46	{"DMic", NULL, "SoC DMIC"},47};48 49static int avs_dmic_probe(struct platform_device *pdev)50{51	struct snd_soc_acpi_mach *mach;52	struct snd_soc_card *card;53	struct device *dev = &pdev->dev;54	int ret;55 56	mach = dev_get_platdata(dev);57 58	card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);59	if (!card)60		return -ENOMEM;61 62	card->name = "avs_dmic";63	card->dev = dev;64	card->owner = THIS_MODULE;65	card->dai_link = card_dai_links;66	card->num_links = ARRAY_SIZE(card_dai_links);67	card->dapm_widgets = card_widgets;68	card->num_dapm_widgets = ARRAY_SIZE(card_widgets);69	card->dapm_routes = card_routes;70	card->num_dapm_routes = ARRAY_SIZE(card_routes);71	card->fully_routed = true;72 73	ret = snd_soc_fixup_dai_links_platform_name(card, mach->mach_params.platform);74	if (ret)75		return ret;76 77	return devm_snd_soc_register_card(dev, card);78}79 80static const struct platform_device_id avs_dmic_driver_ids[] = {81	{82		.name = "avs_dmic",83	},84	{},85};86MODULE_DEVICE_TABLE(platform, avs_dmic_driver_ids);87 88static struct platform_driver avs_dmic_driver = {89	.probe = avs_dmic_probe,90	.driver = {91		.name = "avs_dmic",92		.pm = &snd_soc_pm_ops,93	},94	.id_table = avs_dmic_driver_ids,95};96 97module_platform_driver(avs_dmic_driver);98 99MODULE_DESCRIPTION("Intel DMIC machine driver");100MODULE_LICENSE("GPL");101