| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- // 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) 2022 Advanced Micro Devices, Inc.
- //
- // Authors: Ajit Kumar Pandey <AjitKumar.Pandey@amd.com>
- /*
- * Hardware interface for Audio DSP on Rembrandt 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_HS_INSTANCE 0
- #define I2S_BT_INSTANCE 1
- #define I2S_SP_INSTANCE 2
- #define PDM_DMIC_INSTANCE 3
- #define I2S_HS_VIRTUAL_INSTANCE 4
- static struct snd_soc_dai_driver rembrandt_sof_dai[] = {
- [I2S_HS_INSTANCE] = {
- .id = I2S_HS_INSTANCE,
- .name = "acp-sof-hs",
- .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 HS controller capture */
- .channels_min = 2,
- .channels_max = 2,
- .rate_min = 8000,
- .rate_max = 48000,
- },
- },
- [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,
- },
- },
- [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,
- },
- },
- [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,
- },
- },
- [I2S_HS_VIRTUAL_INSTANCE] = {
- .id = I2S_HS_VIRTUAL_INSTANCE,
- .name = "acp-sof-hs-virtual",
- .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,
- },
- },
- };
- /* Rembrandt ops */
- struct snd_sof_dsp_ops sof_rembrandt_ops;
- EXPORT_SYMBOL_NS(sof_rembrandt_ops, "SND_SOC_SOF_AMD_COMMON");
- int sof_rembrandt_ops_init(struct snd_sof_dev *sdev)
- {
- /* common defaults */
- memcpy(&sof_rembrandt_ops, &sof_acp_common_ops, sizeof(struct snd_sof_dsp_ops));
- sof_rembrandt_ops.drv = rembrandt_sof_dai;
- sof_rembrandt_ops.num_drv = ARRAY_SIZE(rembrandt_sof_dai);
- return 0;
- }
|