brintos

brintos / linux-shallow public Read only

0
0
Text · 4.1 KiB · f367501 Raw
177 lines · c
1// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)2//3// This file is provided under a dual BSD/GPLv2 license. When using or4// redistributing this file, you may do so under either license.5//6// Copyright(c) 2021, 2023 Advanced Micro Devices, Inc.7//8// Authors: Ajit Kumar Pandey <AjitKumar.Pandey@amd.com>9//10 11/*12 * SOF Machine Driver Support for ACP HW block13 */14 15#include <sound/core.h>16#include <sound/pcm_params.h>17#include <sound/soc-acpi.h>18#include <sound/soc-dapm.h>19#include <linux/dmi.h>20#include <linux/module.h>21 22#include "acp-mach.h"23 24static struct acp_card_drvdata sof_rt5682_rt1019_data = {25	.hs_cpu_id = I2S_SP,26	.amp_cpu_id = I2S_SP,27	.dmic_cpu_id = DMIC,28	.hs_codec_id = RT5682,29	.amp_codec_id = RT1019,30	.dmic_codec_id = DMIC,31};32 33static struct acp_card_drvdata sof_rt5682_max_data = {34	.hs_cpu_id = I2S_SP,35	.amp_cpu_id = I2S_SP,36	.dmic_cpu_id = DMIC,37	.hs_codec_id = RT5682,38	.amp_codec_id = MAX98360A,39	.dmic_codec_id = DMIC,40};41 42static struct acp_card_drvdata sof_rt5682s_rt1019_data = {43	.hs_cpu_id = I2S_SP,44	.amp_cpu_id = I2S_SP,45	.dmic_cpu_id = DMIC,46	.hs_codec_id = RT5682S,47	.amp_codec_id = RT1019,48	.dmic_codec_id = DMIC,49	.platform = RENOIR,50};51 52static struct acp_card_drvdata sof_rt5682s_max_data = {53	.hs_cpu_id = I2S_SP,54	.amp_cpu_id = I2S_SP,55	.dmic_cpu_id = DMIC,56	.hs_codec_id = RT5682S,57	.amp_codec_id = MAX98360A,58	.dmic_codec_id = DMIC,59	.platform = RENOIR,60};61 62static struct acp_card_drvdata sof_nau8825_data = {63	.hs_cpu_id = I2S_HS,64	.amp_cpu_id = I2S_HS,65	.dmic_cpu_id = DMIC,66	.hs_codec_id = NAU8825,67	.amp_codec_id = MAX98360A,68	.dmic_codec_id = DMIC,69	.platform = REMBRANDT,70	.soc_mclk = true,71};72 73static struct acp_card_drvdata sof_rt5682s_hs_rt1019_data = {74	.hs_cpu_id = I2S_HS,75	.amp_cpu_id = I2S_HS,76	.dmic_cpu_id = DMIC,77	.hs_codec_id = RT5682S,78	.amp_codec_id = RT1019,79	.dmic_codec_id = DMIC,80	.platform = REMBRANDT,81	.soc_mclk = true,82};83 84static struct acp_card_drvdata sof_nau8821_max98388_data = {85	.hs_cpu_id = I2S_SP,86	.amp_cpu_id = I2S_HS,87	.bt_cpu_id = I2S_BT,88	.hs_codec_id = NAU8821,89	.amp_codec_id = MAX98388,90	.soc_mclk = true,91};92 93static int acp_sof_probe(struct platform_device *pdev)94{95	struct snd_soc_card *card = NULL;96	struct device *dev = &pdev->dev;97	const struct dmi_system_id *dmi_id;98	struct acp_card_drvdata *acp_card_drvdata;99	int ret;100 101	if (!pdev->id_entry)102		return -EINVAL;103 104	card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);105	if (!card)106		return -ENOMEM;107 108	card->dev = dev;109	card->owner = THIS_MODULE;110	card->name = pdev->id_entry->name;111	card->drvdata = (struct acp_card_drvdata *)pdev->id_entry->driver_data;112	/* Widgets and controls added per-codec in acp-mach-common.c */113 114	acp_card_drvdata = card->drvdata;115	dmi_id = dmi_first_match(acp_quirk_table);116	if (dmi_id && dmi_id->driver_data)117		acp_card_drvdata->tdm_mode = dmi_id->driver_data;118 119	ret = acp_sofdsp_dai_links_create(card);120	if (ret)121		return dev_err_probe(&pdev->dev, ret, "Failed to create DAI links\n");122 123	ret = devm_snd_soc_register_card(&pdev->dev, card);124	if (ret)125		return dev_err_probe(&pdev->dev, ret,126				     "Failed to register card(%s)\n", card->name);127	return 0;128}129 130static const struct platform_device_id board_ids[] = {131	{132		.name = "rt5682-rt1019",133		.driver_data = (kernel_ulong_t)&sof_rt5682_rt1019_data134	},135	{136		.name = "rt5682-max",137		.driver_data = (kernel_ulong_t)&sof_rt5682_max_data138	},139	{140		.name = "rt5682s-max",141		.driver_data = (kernel_ulong_t)&sof_rt5682s_max_data142	},143	{144		.name = "rt5682s-rt1019",145		.driver_data = (kernel_ulong_t)&sof_rt5682s_rt1019_data146	},147	{148		.name = "nau8825-max",149		.driver_data = (kernel_ulong_t)&sof_nau8825_data150	},151	{152		.name = "rt5682s-hs-rt1019",153		.driver_data = (kernel_ulong_t)&sof_rt5682s_hs_rt1019_data154	},155	{156		.name = "nau8821-max",157		.driver_data = (kernel_ulong_t)&sof_nau8821_max98388_data158	},159	{ }160};161MODULE_DEVICE_TABLE(platform, board_ids);162 163static struct platform_driver acp_asoc_audio = {164	.driver = {165		.name = "sof_mach",166		.pm = &snd_soc_pm_ops,167	},168	.probe = acp_sof_probe,169	.id_table = board_ids,170};171 172module_platform_driver(acp_asoc_audio);173 174MODULE_IMPORT_NS(SND_SOC_AMD_MACH);175MODULE_DESCRIPTION("ACP SOF Machine Driver");176MODULE_LICENSE("GPL v2");177