143 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) 2024 Advanced Micro Devices, Inc.7//8// Authors: Vijendar Mukunda <Vijendar.Mukunda@amd.com>9 10/*11 * Hardware interface for Audio DSP on ACP7.0 version based platform12 */13 14#include <linux/platform_device.h>15#include <linux/module.h>16 17#include "../ops.h"18#include "../sof-audio.h"19#include "acp.h"20#include "acp-dsp-offset.h"21 22#define I2S_HS_INSTANCE 023#define I2S_BT_INSTANCE 124#define I2S_SP_INSTANCE 225#define PDM_DMIC_INSTANCE 326#define I2S_HS_VIRTUAL_INSTANCE 427 28static struct snd_soc_dai_driver acp70_sof_dai[] = {29 [I2S_HS_INSTANCE] = {30 .id = I2S_HS_INSTANCE,31 .name = "acp-sof-hs",32 .playback = {33 .rates = SNDRV_PCM_RATE_8000_96000,34 .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S8 |35 SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S32_LE,36 .channels_min = 2,37 .channels_max = 8,38 .rate_min = 8000,39 .rate_max = 96000,40 },41 .capture = {42 .rates = SNDRV_PCM_RATE_8000_48000,43 .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S8 |44 SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S32_LE,45 /* Supporting only stereo for I2S HS controller capture */46 .channels_min = 2,47 .channels_max = 2,48 .rate_min = 8000,49 .rate_max = 48000,50 },51 },52 53 [I2S_BT_INSTANCE] = {54 .id = I2S_BT_INSTANCE,55 .name = "acp-sof-bt",56 .playback = {57 .rates = SNDRV_PCM_RATE_8000_96000,58 .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S8 |59 SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S32_LE,60 .channels_min = 2,61 .channels_max = 8,62 .rate_min = 8000,63 .rate_max = 96000,64 },65 .capture = {66 .rates = SNDRV_PCM_RATE_8000_48000,67 .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S8 |68 SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S32_LE,69 /* Supporting only stereo for I2S BT controller capture */70 .channels_min = 2,71 .channels_max = 2,72 .rate_min = 8000,73 .rate_max = 48000,74 },75 },76 77 [I2S_SP_INSTANCE] = {78 .id = I2S_SP_INSTANCE,79 .name = "acp-sof-sp",80 .playback = {81 .rates = SNDRV_PCM_RATE_8000_96000,82 .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S8 |83 SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S32_LE,84 .channels_min = 2,85 .channels_max = 8,86 .rate_min = 8000,87 .rate_max = 96000,88 },89 .capture = {90 .rates = SNDRV_PCM_RATE_8000_48000,91 .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S8 |92 SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S32_LE,93 /* Supporting only stereo for I2S SP controller capture */94 .channels_min = 2,95 .channels_max = 2,96 .rate_min = 8000,97 .rate_max = 48000,98 },99 },100 101 [PDM_DMIC_INSTANCE] = {102 .id = PDM_DMIC_INSTANCE,103 .name = "acp-sof-dmic",104 .capture = {105 .rates = SNDRV_PCM_RATE_8000_48000,106 .formats = SNDRV_PCM_FMTBIT_S32_LE,107 .channels_min = 2,108 .channels_max = 4,109 .rate_min = 8000,110 .rate_max = 48000,111 },112 },113 114 [I2S_HS_VIRTUAL_INSTANCE] = {115 .id = I2S_HS_VIRTUAL_INSTANCE,116 .name = "acp-sof-hs-virtual",117 .playback = {118 .rates = SNDRV_PCM_RATE_8000_96000,119 .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S8 |120 SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S32_LE,121 .channels_min = 2,122 .channels_max = 8,123 .rate_min = 8000,124 .rate_max = 96000,125 },126 },127};128 129/* Phoenix ops */130struct snd_sof_dsp_ops sof_acp70_ops;131EXPORT_SYMBOL_NS(sof_acp70_ops, SND_SOC_SOF_AMD_COMMON);132 133int sof_acp70_ops_init(struct snd_sof_dev *sdev)134{135 /* common defaults */136 memcpy(&sof_acp70_ops, &sof_acp_common_ops, sizeof(struct snd_sof_dsp_ops));137 138 sof_acp70_ops.drv = acp70_sof_dai;139 sof_acp70_ops.num_drv = ARRAY_SIZE(acp70_sof_dai);140 141 return 0;142}143