xref: /openbmc/linux/sound/soc/sof/amd/acp-common.c (revision aae7e412)
14da6b033SAjit Kumar Pandey // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
24da6b033SAjit Kumar Pandey //
34da6b033SAjit Kumar Pandey // This file is provided under a dual BSD/GPLv2 license. When using or
44da6b033SAjit Kumar Pandey // redistributing this file, you may do so under either license.
54da6b033SAjit Kumar Pandey //
64da6b033SAjit Kumar Pandey // Copyright(c) 2022 Advanced Micro Devices, Inc.
74da6b033SAjit Kumar Pandey //
84da6b033SAjit Kumar Pandey // Authors: Ajit Kumar Pandey <AjitKumar.Pandey@amd.com>
94da6b033SAjit Kumar Pandey //	    V sujith kumar Reddy <Vsujithkumar.Reddy@amd.com>
104da6b033SAjit Kumar Pandey 
114da6b033SAjit Kumar Pandey /* ACP-specific Common code */
124da6b033SAjit Kumar Pandey 
134da6b033SAjit Kumar Pandey #include "../sof-priv.h"
144da6b033SAjit Kumar Pandey #include "../sof-audio.h"
154da6b033SAjit Kumar Pandey #include "../ops.h"
164da6b033SAjit Kumar Pandey #include "../sof-audio.h"
174da6b033SAjit Kumar Pandey #include "acp.h"
184da6b033SAjit Kumar Pandey #include "acp-dsp-offset.h"
194da6b033SAjit Kumar Pandey 
204da6b033SAjit Kumar Pandey int acp_dai_probe(struct snd_soc_dai *dai)
214da6b033SAjit Kumar Pandey {
224da6b033SAjit Kumar Pandey 	struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(dai->component);
234da6b033SAjit Kumar Pandey 	const struct sof_amd_acp_desc *desc = get_chip_info(sdev->pdata);
244da6b033SAjit Kumar Pandey 	unsigned int val;
254da6b033SAjit Kumar Pandey 
264da6b033SAjit Kumar Pandey 	val = snd_sof_dsp_read(sdev, ACP_DSP_BAR, desc->i2s_pin_config_offset);
274da6b033SAjit Kumar Pandey 	if (val != desc->i2s_mode) {
284da6b033SAjit Kumar Pandey 		dev_err(sdev->dev, "I2S Mode is not supported (I2S_PIN_CONFIG: %#x)\n", val);
294da6b033SAjit Kumar Pandey 		return -EINVAL;
304da6b033SAjit Kumar Pandey 	}
314da6b033SAjit Kumar Pandey 
324da6b033SAjit Kumar Pandey 	return 0;
334da6b033SAjit Kumar Pandey }
344da6b033SAjit Kumar Pandey EXPORT_SYMBOL_NS(acp_dai_probe, SND_SOC_SOF_AMD_COMMON);
354da6b033SAjit Kumar Pandey 
364da6b033SAjit Kumar Pandey struct snd_soc_acpi_mach *amd_sof_machine_select(struct snd_sof_dev *sdev)
374da6b033SAjit Kumar Pandey {
384da6b033SAjit Kumar Pandey 	struct snd_sof_pdata *sof_pdata = sdev->pdata;
394da6b033SAjit Kumar Pandey 	const struct sof_dev_desc *desc = sof_pdata->desc;
404da6b033SAjit Kumar Pandey 	struct snd_soc_acpi_mach *mach;
414da6b033SAjit Kumar Pandey 
424da6b033SAjit Kumar Pandey 	mach = snd_soc_acpi_find_machine(desc->machines);
434da6b033SAjit Kumar Pandey 	if (!mach) {
444da6b033SAjit Kumar Pandey 		dev_warn(sdev->dev, "No matching ASoC machine driver found\n");
454da6b033SAjit Kumar Pandey 		return NULL;
464da6b033SAjit Kumar Pandey 	}
474da6b033SAjit Kumar Pandey 
484da6b033SAjit Kumar Pandey 	sof_pdata->tplg_filename = mach->sof_tplg_filename;
494da6b033SAjit Kumar Pandey 	sof_pdata->fw_filename = mach->fw_filename;
504da6b033SAjit Kumar Pandey 
514da6b033SAjit Kumar Pandey 	return mach;
524da6b033SAjit Kumar Pandey }
534da6b033SAjit Kumar Pandey 
544da6b033SAjit Kumar Pandey /* AMD Common DSP ops */
554da6b033SAjit Kumar Pandey struct snd_sof_dsp_ops sof_acp_common_ops = {
564da6b033SAjit Kumar Pandey 	/* probe and remove */
574da6b033SAjit Kumar Pandey 	.probe			= amd_sof_acp_probe,
584da6b033SAjit Kumar Pandey 	.remove			= amd_sof_acp_remove,
594da6b033SAjit Kumar Pandey 
604da6b033SAjit Kumar Pandey 	/* Register IO */
614da6b033SAjit Kumar Pandey 	.write			= sof_io_write,
624da6b033SAjit Kumar Pandey 	.read			= sof_io_read,
634da6b033SAjit Kumar Pandey 
644da6b033SAjit Kumar Pandey 	/* Block IO */
654da6b033SAjit Kumar Pandey 	.block_read		= acp_dsp_block_read,
664da6b033SAjit Kumar Pandey 	.block_write		= acp_dsp_block_write,
674da6b033SAjit Kumar Pandey 
684da6b033SAjit Kumar Pandey 	/*Firmware loading */
694da6b033SAjit Kumar Pandey 	.load_firmware		= snd_sof_load_firmware_memcpy,
704da6b033SAjit Kumar Pandey 	.pre_fw_run		= acp_dsp_pre_fw_run,
714da6b033SAjit Kumar Pandey 	.get_bar_index		= acp_get_bar_index,
724da6b033SAjit Kumar Pandey 
734da6b033SAjit Kumar Pandey 	/* DSP core boot */
744da6b033SAjit Kumar Pandey 	.run			= acp_sof_dsp_run,
754da6b033SAjit Kumar Pandey 
764da6b033SAjit Kumar Pandey 	/*IPC */
774da6b033SAjit Kumar Pandey 	.send_msg		= acp_sof_ipc_send_msg,
784da6b033SAjit Kumar Pandey 	.ipc_msg_data		= acp_sof_ipc_msg_data,
79*aae7e412SV sujith kumar Reddy 	.set_stream_data_offset = acp_set_stream_data_offset,
804da6b033SAjit Kumar Pandey 	.get_mailbox_offset	= acp_sof_ipc_get_mailbox_offset,
8140d3c041SV sujith kumar Reddy 	.get_window_offset      = acp_sof_ipc_get_window_offset,
824da6b033SAjit Kumar Pandey 	.irq_thread		= acp_sof_ipc_irq_thread,
834da6b033SAjit Kumar Pandey 
844da6b033SAjit Kumar Pandey 	/* stream callbacks */
854da6b033SAjit Kumar Pandey 	.pcm_open		= acp_pcm_open,
864da6b033SAjit Kumar Pandey 	.pcm_close		= acp_pcm_close,
874da6b033SAjit Kumar Pandey 	.pcm_hw_params		= acp_pcm_hw_params,
884da6b033SAjit Kumar Pandey 
894da6b033SAjit Kumar Pandey 	.hw_info		= SNDRV_PCM_INFO_MMAP |
904da6b033SAjit Kumar Pandey 				  SNDRV_PCM_INFO_MMAP_VALID |
914da6b033SAjit Kumar Pandey 				  SNDRV_PCM_INFO_INTERLEAVED |
924da6b033SAjit Kumar Pandey 				  SNDRV_PCM_INFO_PAUSE |
934da6b033SAjit Kumar Pandey 				  SNDRV_PCM_INFO_NO_PERIOD_WAKEUP,
944da6b033SAjit Kumar Pandey 
954da6b033SAjit Kumar Pandey 	/* Machine driver callbacks */
964da6b033SAjit Kumar Pandey 	.machine_select		= amd_sof_machine_select,
974da6b033SAjit Kumar Pandey 	.machine_register	= sof_machine_register,
984da6b033SAjit Kumar Pandey 	.machine_unregister	= sof_machine_unregister,
994da6b033SAjit Kumar Pandey 
1004da6b033SAjit Kumar Pandey 	/* Trace Logger */
1014da6b033SAjit Kumar Pandey 	.trace_init		= acp_sof_trace_init,
1024da6b033SAjit Kumar Pandey 	.trace_release		= acp_sof_trace_release,
1034da6b033SAjit Kumar Pandey 
1044da6b033SAjit Kumar Pandey 	/* PM */
1054da6b033SAjit Kumar Pandey 	.suspend                = amd_sof_acp_suspend,
1064da6b033SAjit Kumar Pandey 	.resume                 = amd_sof_acp_resume,
1074da6b033SAjit Kumar Pandey };
1084da6b033SAjit Kumar Pandey EXPORT_SYMBOL_NS(sof_acp_common_ops, SND_SOC_SOF_AMD_COMMON);
1094da6b033SAjit Kumar Pandey 
1104da6b033SAjit Kumar Pandey MODULE_IMPORT_NS(SND_SOC_SOF_AMD_COMMON);
1114da6b033SAjit Kumar Pandey MODULE_DESCRIPTION("ACP SOF COMMON Driver");
1124da6b033SAjit Kumar Pandey MODULE_LICENSE("Dual BSD/GPL");
113