109 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
 | |
| //
 | |
| // This file is provided under a dual BSD/GPLv2 license. When using or
 | |
| // redistributing this file, you may do so under either license.
 | |
| //
 | |
| // Copyright(c) 2021 Advanced Micro Devices, Inc.
 | |
| //
 | |
| // Authors: Ajit Kumar Pandey <AjitKumar.Pandey@amd.com>
 | |
| 
 | |
| /*
 | |
|  * Hardware interface for Audio DSP on Renoir platform
 | |
|  */
 | |
| 
 | |
| #include <linux/platform_device.h>
 | |
| #include <linux/module.h>
 | |
| 
 | |
| #include "../ops.h"
 | |
| #include "../sof-audio.h"
 | |
| #include "acp.h"
 | |
| #include "acp-dsp-offset.h"
 | |
| 
 | |
| #define I2S_BT_INSTANCE		0
 | |
| #define I2S_SP_INSTANCE		1
 | |
| #define PDM_DMIC_INSTANCE	2
 | |
| 
 | |
| static struct snd_soc_dai_driver renoir_sof_dai[] = {
 | |
| 	[I2S_BT_INSTANCE] = {
 | |
| 		.id = I2S_BT_INSTANCE,
 | |
| 		.name = "acp-sof-bt",
 | |
| 		.playback = {
 | |
| 			.rates = SNDRV_PCM_RATE_8000_96000,
 | |
| 			.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S8 |
 | |
| 				   SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S32_LE,
 | |
| 			.channels_min = 2,
 | |
| 			.channels_max = 8,
 | |
| 			.rate_min = 8000,
 | |
| 			.rate_max = 96000,
 | |
| 		},
 | |
| 		.capture = {
 | |
| 			.rates = SNDRV_PCM_RATE_8000_48000,
 | |
| 			.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S8 |
 | |
| 				   SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S32_LE,
 | |
| 			/* Supporting only stereo for I2S BT controller capture */
 | |
| 			.channels_min = 2,
 | |
| 			.channels_max = 2,
 | |
| 			.rate_min = 8000,
 | |
| 			.rate_max = 48000,
 | |
| 		},
 | |
| 		.probe = &acp_dai_probe,
 | |
| 	},
 | |
| 
 | |
| 	[I2S_SP_INSTANCE] = {
 | |
| 		.id = I2S_SP_INSTANCE,
 | |
| 		.name = "acp-sof-sp",
 | |
| 		.playback = {
 | |
| 			.rates = SNDRV_PCM_RATE_8000_96000,
 | |
| 			.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S8 |
 | |
| 				   SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S32_LE,
 | |
| 			.channels_min = 2,
 | |
| 			.channels_max = 8,
 | |
| 			.rate_min = 8000,
 | |
| 			.rate_max = 96000,
 | |
| 		},
 | |
| 		.capture = {
 | |
| 			.rates = SNDRV_PCM_RATE_8000_48000,
 | |
| 			.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S8 |
 | |
| 				   SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S32_LE,
 | |
| 			/* Supporting only stereo for I2S SP controller capture */
 | |
| 			.channels_min = 2,
 | |
| 			.channels_max = 2,
 | |
| 			.rate_min = 8000,
 | |
| 			.rate_max = 48000,
 | |
| 		},
 | |
| 		.probe = &acp_dai_probe,
 | |
| 	},
 | |
| 
 | |
| 	[PDM_DMIC_INSTANCE] = {
 | |
| 		.id = PDM_DMIC_INSTANCE,
 | |
| 		.name = "acp-sof-dmic",
 | |
| 		.capture = {
 | |
| 			.rates = SNDRV_PCM_RATE_8000_48000,
 | |
| 			.formats = SNDRV_PCM_FMTBIT_S32_LE,
 | |
| 			.channels_min = 2,
 | |
| 			.channels_max = 4,
 | |
| 			.rate_min = 8000,
 | |
| 			.rate_max = 48000,
 | |
| 		},
 | |
| 	},
 | |
| };
 | |
| 
 | |
| /* Renoir ops */
 | |
| struct snd_sof_dsp_ops sof_renoir_ops;
 | |
| EXPORT_SYMBOL_NS(sof_renoir_ops, SND_SOC_SOF_AMD_COMMON);
 | |
| 
 | |
| int sof_renoir_ops_init(struct snd_sof_dev *sdev)
 | |
| {
 | |
| 	/* common defaults */
 | |
| 	memcpy(&sof_renoir_ops, &sof_acp_common_ops, sizeof(struct snd_sof_dsp_ops));
 | |
| 
 | |
| 	sof_renoir_ops.drv = renoir_sof_dai;
 | |
| 	sof_renoir_ops.num_drv = ARRAY_SIZE(renoir_sof_dai);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| MODULE_IMPORT_NS(SND_SOC_SOF_AMD_COMMON);
 | |
| MODULE_DESCRIPTION("RENOIR SOF Driver");
 | |
| MODULE_LICENSE("Dual BSD/GPL");
 |